이번글에서는 AVR에서만 사용가능한 방법이 아닌 일반적인 방법으로 LED를 점멸하는 기능을 구현해 보도록 하겠다. 이번 글은 아직 임베디드 시스템 프로그램에 익숙하지 않은 개발자에게는 다소 난해한 내용이 될 수도 있을것이다. 이미 앞의 글에서도 얘기 했지만, AVR 외부와 연결되는 I/O 핀을 제어하기 위해서는 PORT 레지스터를 이용하면 되고, PORT 레지스터에 접근하기 위하여 CPU에서는 주소를 이용한다고 설명하였다. 또한 C프로그램에서 특정 주소에 값을 쓰거나, 주소에서 값을 읽어 오기 위하여 포인터를 사용하면 된다고 하였다. 그럼, 포인터 기법을 사용하여 LED 제어 1에서 작성한 코드를 수정하도록 하겠다. #define F_CPU 1000000 //#include #include #define..
DDR, PORT, PIN 레지스터를 이용하여 초록색 LED와 빨간색 LED를 교대로 점멸하는 코드를 만들어 보았다. 그리고 실제로 보드에서 동작되는것도 확인해 보았다. 그러나 C언어를 조금이라도 배워본 경험이 있다면, 코드안에 있는 DDRB, PORTB, PINB라는것이 무엇인지, 갑자기 어디서 나왔는지 궁금할 것이다. 이번 글에서는 이 부분에 대한 설명과 어떻게 이들 레지스터에 접근할 수 있는 지 설명하겠다. 위의 그림은 사용하고 있는 AVR의 내부 블럭도이다. 우리가 만든 LED 제어 프로그램은 AVR CPU박스의 왼쪽 위에 연결된 Flash에 저장되어 있다. AVR 칩에 전원이 들어가면 AVR CPU는 Flash에서 수행하여야 할 명령어를 하나씩 읽어 들여 프로그램을 수행한다. 앞에서 설명했던 코..
앞에서 설명한 글에서처럼 빨간색 LED와 초록색LED가 서로 반대의 상태로 불이 켜지거나 꺼지는 것이 확인 되었으면, 최소한 하드웨어 구성이 제대로 되었을뿐 아니라 프로그램으로 코딩한대로 하드웨어가 제대로 동작되고 있다고 판단할 수 있다. 일반 컴퓨터에서 "hello, world" 프로그램을 이용해서 개발환경이 정상적으로 동작하는 것을 확인했다면, 임베디드 시스템에서는 LED 제어를 통해서 개발환경 확인과 더불어 프로그램을 이용해서 하드웨어를 제어하는 방법과 원리를 이해할 수 있게 된다. 따라서, LED 제어 방법을 이해하게 되면 AVR을 이용한 다른 기능들은 그 기능을 제어하는 레지스터의 주소와 그 안에 들어있는 내용만 다를뿐이지 방법은 별로 다르지 않다는 것을 알게 될 것이다. 다시한번 사용하고 있는..