이번엔 ARM의 외부 IO핀의 입출력 테스트를 한번 해보겠습니다. 그게 뭐 항상 그렇듯이 거창한건 아늬고...^^... 그냥 스위치는 잘 눌러졌는지, 그래서 ARM은 내가 스위치를 눌렀다는 사실을 잘 알고있는지. 또... ARM은 나한테 기본적 신호를 잘 주고있는지. 그래서 난 그걸 잘 알수있는지만 한번 보겠습니다.
일단, 이전에 쭈욱 이야기했던 데로 설치된 WinARM과 이 이전 글에서 만든 보드를 가지고 테스트를 해보도록 하겠습니다. 그 전에 먼저, 이전에 이야기했지만, 아래 화일들은 모두 같이 있어야합니다.
그리고, WinARM.xml 화일을 수정해서 자신에게 맞는 경로를 지정해야만 합니다. 그리고, 아직 저는 아무것도 모르는 거랑 비슷한 상태니까...ㅋㅋ... 저 위의 화일들은 그냥 써야만 하는 구나 하고 생각하죠... 그러나 OK7S256gcc.h라는 화일은 한번 열어봐야겠습니다. 그걸 열어보면 각종 정의들이 나열되어 있는 것을 볼 수 있는데요. 그중 제가 연결하지 않은 buzzer나 beep같은 정의와 코드는 삭제했습니다. 그리고,
(코드1)
와 같이 되어 있는 부분을
(코드2)
로 변경했습니다. 이유는 윤덕용님의 교재는 PA0와 PA1을 LED에 물려서 사용하고 있지만, 저는 LED를 물려놓지 않고 그 많은 외부핀들의 역활을 아직 설정하지 않아서이지요... 그래서 주 코드에서 편하게 Set/Clear를 할 수 있도록 두었습니다. 또한 LCD관련 정의와 함수들은 아직 LCD를 연결하진 않았지만, 곧 연결하고 싶으니까 그것도 그대로 두도록 하죠..
위의 코드를 보면 AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, pin); 라는 부분은 ATMEL에서 준비해준 lib_AT91SAM7S256.h에 있는 함수입니다. 역활은 해당 핀의 성격을 출력으로 결정하는 겁니다. 그리고 AT91F_PIO_ClearOutput, AT91F_PIO_SetOutput는 문자그대로 해당핀의 출력을 Set/Clear시키는 것입니다.
그리고, OK7S256gcc.h라는 화일을 계속 보면, 몇몇 유용한 함수들이 보입니다. delay문들도 보이구요. 그중 키 입력에 관한 함수 Key_in이 또한 준비되어있네요. 이제, PA7/PA8에 연결된 버튼을 누르면 각각 PA0/PA1이 SET되게 아니면 CLEAR되게 해보죠.
(코드3)
일단, 이전에 쭈욱 이야기했던 데로 설치된 WinARM과 이 이전 글에서 만든 보드를 가지고 테스트를 해보도록 하겠습니다. 그 전에 먼저, 이전에 이야기했지만, 아래 화일들은 모두 같이 있어야합니다.
AT91SAM7S256.h |
그리고, WinARM.xml 화일을 수정해서 자신에게 맞는 경로를 지정해야만 합니다. 그리고, 아직 저는 아무것도 모르는 거랑 비슷한 상태니까...ㅋㅋ... 저 위의 화일들은 그냥 써야만 하는 구나 하고 생각하죠... 그러나 OK7S256gcc.h라는 화일은 한번 열어봐야겠습니다. 그걸 열어보면 각종 정의들이 나열되어 있는 것을 볼 수 있는데요. 그중 제가 연결하지 않은 buzzer나 beep같은 정의와 코드는 삭제했습니다. 그리고,
(코드1)
void LED_on(unsigned int led) /* LED on */ { AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED2|LED1); // PA1-PA0 = output AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, led); } void LED_off(unsigned int led) /* LED off */ { AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED2|LED1); // PA1-PA0 = output AT91F_PIO_SetOutput(AT91C_BASE_PIOA, led); }
와 같이 되어 있는 부분을
(코드2)
void Pin_Clear(unsigned int pin) { AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, pin); AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, pin); } void Pin_Set(unsigned int pin) { AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, pin); AT91F_PIO_SetOutput(AT91C_BASE_PIOA, pin); }
로 변경했습니다. 이유는 윤덕용님의 교재는 PA0와 PA1을 LED에 물려서 사용하고 있지만, 저는 LED를 물려놓지 않고 그 많은 외부핀들의 역활을 아직 설정하지 않아서이지요... 그래서 주 코드에서 편하게 Set/Clear를 할 수 있도록 두었습니다. 또한 LCD관련 정의와 함수들은 아직 LCD를 연결하진 않았지만, 곧 연결하고 싶으니까 그것도 그대로 두도록 하죠..
위의 코드를 보면 AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, pin); 라는 부분은 ATMEL에서 준비해준 lib_AT91SAM7S256.h에 있는 함수입니다. 역활은 해당 핀의 성격을 출력으로 결정하는 겁니다. 그리고 AT91F_PIO_ClearOutput, AT91F_PIO_SetOutput는 문자그대로 해당핀의 출력을 Set/Clear시키는 것입니다.
그리고, OK7S256gcc.h라는 화일을 계속 보면, 몇몇 유용한 함수들이 보입니다. delay문들도 보이구요. 그중 키 입력에 관한 함수 Key_in이 또한 준비되어있네요. 이제, PA7/PA8에 연결된 버튼을 누르면 각각 PA0/PA1이 SET되게 아니면 CLEAR되게 해보죠.
(코드3)
#include "AT91SAM7S256.h" #include "lib_AT91SAM7S256.h" #include "OK7S256gcc.h" int main(void) { unsigned int key; MCU_initialize(); // initialize AT91SAM7S256 while(1) { key = Key_in(); if(key == 1) { Pin_Set(PA0); Delay_ms(100); } else if(key == 2) { Pin_Set(PA1); Delay_ms(1000); } else { Pin_Clear(PA0|PA1); } } }
..예.. 압니다.. 너무 쉽자나요....^^ 뭐 그래도 일단 내맘대로 코딩된것이 처음이니까.. 그 나름대로 가치가 있다고 해두죠....^^ 1번키인지 2번키인지 검출합니다. 이제 큰 어려움없이 보드도 가지게 되었고, 외부핀 테스트를 한번 수행해 보았네요... 뭐 그닥 아름다워보이진 않지만, 나머지 모르는건 차차 공부하죠 뭐... 어차피 취미생활로 시작한 ARM인데요...ㅋㅋ 마지막으로 필요한 화일을 압축해서 올립니다.
반응형
'Hardware > MCU' 카테고리의 다른 글
Cortex M3 LM8962 왕초보 설치기.... 헉헉 (10) | 2009.05.29 |
---|---|
WinARM에서 작업폴더 바꾸기 (0) | 2009.05.01 |
ARM7과 텍스트형 LCD (0) | 2009.04.15 |
ARM7 테스트보드를 위한 회로구성 (0) | 2009.04.15 |
WinARM 시작하기 - 프로젝트 생성하기 (2) | 2009.04.15 |
WinARM 설치하기 (2) | 2009.04.15 |
SAM-BA 설치하기 (8) | 2009.04.15 |