본문 바로가기
Ghost의 Ghost노트/Ghost의 ARM C LED 설정하기

ARM LED 설정?

by dark ghost 2012. 6. 25.
728x90
반응형

ARM LED 설정하기.

1. 위 그림은 ARM 회로도 중에서 입,출력 장치를 관리하는 부분만 따로 올린 것이다. PIO_PER, PIO_PDR, PIO_PSR은 입력을 담당하는 레지스터이다. PIO_OER, PIO_ODR, PIO_OSR은 출력을 담당하는 레지스터이고, PIO_SO DR, PIO_CODR은 실질적으로 사용 할 수 있도록 셋팅하는 레지스터이다.

 

2. 위 그림은 ARM의 메모리 영역을 보여준다. 그 중에서 장치에 관련된 메모리는 internal Peripherals라는 영역인데 그 영역을 자세히 보면 맨 아래쪽에 SYSC라는 영역이 있다. 이 영역은 SYSTEM CONTLORLLER 으로 장지들을 제어 할 수있는 레지스터 영역이다. 그 중에서도 LED를 끄고 키기 위해서는 SYSC 안에 또 다른 영역인 PIOA라는 영역이 있는데 Parallel Input Output Controller로 병렬 입,출력 제어영역이다. 여기서 LED 포트를 활성화 시키고 하여야 LED를 사용할 수 있다.

 

 

3. 위 그림이 ARM 셋팅 소스이다. 위 그림을 보면 입력 레지트터와 출력 레지스터가 따로 있는 것을 볼 수있는데 ATmega128과 다른 점이다. ATmega128은 하나의 레지스터에서 입출력을 관리하는데 ARM은 각각 레지스터가 따로 있다. ATmega128의 메모리 체계는 1byte 메모리 체계 이고 ARM은 4G byte의 광범위한 메모리 체계를 가지고 있다.  그래서 입출력 레지스터를 따로 쓴다. PIO_PER는 internal Peripherals input, output을  Enable 시키는 레지스터이며, 한마디로 활성화 시키는 레지스터이다. PIO_PDR은 internal Peripherals input, output을 Disable 시키는 레지스터인데, 영어 단어로는 무력화 시킨다는 의미를 가지고 있다.  즉 비활성화 시키는 레지스터이다. 마지막으로 PIO_PSR은 internal Peripherals status 레지스터는 해당 레지스터가 활성화(비활성화)를 지정하는 레지스터이다. PIO_CODR은 Clear Output Data Register로 해당 레지스의 데이터를 지운다. PIO_SODR은 Set Output Data Register는 해당 레지스터를 셋팅 하는 레지스터이다. 그래서 위의 소스를 보면 CODR과 SODR이 같이 있는데 CODR로 전류를 0으로 만들어 LED를 켜고 SODR로 셋팅을 하면서 전류를 흘리므로 꺼지게 만들고 있다. CODR과 SODR의 0x00000001은 해당 장치가 있는 비트를 지정하는 것이다. 

 

4. 위 그림이 해당 레지스터 들의 주소이다. 물론 Offset만으로는 안되고 위에서 메모리의 그림을 참조해야 하는데 참조 하는 방법은 어떤 레지스터를 쓸것이냐를 두고 거기에 해당 하는 베이스 주소를 찾아야 한다. 지금 LED를 셋팅 하는 것이므로 PIO에 베이스 주소를 먼저 찾고 그다음에 뒤에 Offset을 넣어주면 주소가 된다. 예를 들면 PIO_PER은 PIO에 해당 하므로 PIO의 베이스 주소를 먼저 찾고 메모리에는 PIOA라고 되어 있을 것이다.  주소는 0xFFFFF400이고 Offset을 넣어주면되는데 PER의 Offset은 0x0000이므로 다합치면 0xFFFFF400이므로 이주소가 PIO_PER의 주소가 되는 것 이다.

5. 위 그림은 CODR과 SODR을 설정 할 때 0x00000001로 설정한 이유이다. ARM은 메모리가 1G byte로 크기가 크기 때문에 해당 레지스터는 각각 마다 32bit씩 할 당을 해 줄수 있다. 그래서 4bit씩 하나로 묶어 해당 레지스터를 활성화 시키는 것 이다.  

728x90
반응형

댓글