2016-10-27 1 views
0

새로운 SoC에 대한 새로운 데이터 시트에 관한 질문이 있습니다. Let`s은 기본 주소가 여기에 0x2014_0000GPIO 데이터 레지스터 설명 이해

입니다

enter image description here

는 그래서는 0x3fC 및을 0x200 무엇을 의미 하는가 페이지라고?

레지스터 0x2014_0000을 읽으면 관련된 모든 GPIO의 방향 레지스터에 따라 쓰기 또는 읽기 작업을 수행 할 수있는 것보다 0x3fc가됩니다. 그리고 내가 0x0을 읽는다면 나는 데이터에 아무 것도 할 수 없다 (읽기 또는 쓰기 액세스가 없음)? 내가 레지스터에서 데이터를 읽을 수 있었다 때마다

나는 단지 해당 비트를 읽을 수 있었다 그러나 이것은 나를 혼란 @ _ @

어쩌면 누군가가 나에게 그것을 설명 할 수

들으

답변

1

this data sheet을 읽으려면 PADDR이 주소 버스의 하위 집합이며 비트 9:2GPIO_DATA 비트 7:0의 동작을 마스크합니다. 그것은 말한다 :

은 그래서 독립 소프트웨어 드라이버가 하나의 쓰기 작업의 다른 핀에 영향을주지 없이 GPIO 비트를 설정할 수 있습니다, 어드레스 버스 읽기/쓰기 작업에 마스크로 사용된다. 데이터 레지스터 은 주소 공간에서 256 개의 위치를 ​​효과적으로 커버합니다. 사용 된 주소 행 8 개 ( )는 PADDR [9 : 2]입니다.

은 256 개 개의 주소 중에서 GPIO_DATA 쓸 수 있으며, 주소와 일치 만 비트가 기록됩니다, 실제로 당신이 보여 테이블 GPIO_DATA는 오프셋에 매핑되는 것을 말한다 것을 의미 0x000 - 그래서 0x3FC 256 개 위치는 4 단계 (어드레스 버스로부터 유도 된 제어 비트는 포트 비트에 매핑하기 위해 두 번 시프트 됨)이다.

그래서 "0x3fC0x200의 의미는 무엇입니까?" 이는 보여지는 이미지에 설명되어 있습니다. 이러한 주소 오프셋에 데이터를 쓰면 텍스트에 언급 된 포트 비트에 영향을줍니다. 첫 번째 경우에는 두 번째 경우 모두 하나뿐입니다.

Address  0x20140200 

PADDR  9  0 
      10000000xx 

GPIO_DATA 7  0 
      Nxxxxxxx 

따라서 비트 7의 값만 GPIO 출력에 쓰여지고 나머지 GPIO 출력 비트는 유지됩니다.

+0

아하 좋아요. 지금은 이해. 그러나 왜 이런 식으로 만들어지는지는 모르겠다. 이것은 약간 혼란 스럽습니다. 다른 MCU에서 "PORTB = 1 << PIN7;" 여기 다른 주소에 다른 값을 써야합니다. 이점은 무엇입니까? – user3000289

+0

GPIO 포트를 공유하는 독립적 인 프로세스가 각 포트의 사용에 대해 아무런주의를 기울이지 않아도됩니다. 대안은 현재 상태를 읽어야하고, 비트 ("다른 프로세스에 의한 사용을 차단 함)"가 아닌 비트를 마스크 한 다음 쓰는 것이고, 이렇게하면 단일 쓰기로 완료 될 수 있습니다. –

+0

젠장, 네가 빠르다. 감사 – user3000289