[TI][AM263x]GPIO LED BLINK 응용하기 (2)
지난 글에 이어서 진행하도록 하자
2-2.SysConfig로 레지스터 셋팅
먼저, 예제 파일을 copy하여 새로운 프로젝트를 만들어준다.
example.syscfg를 더블클릭하여 아래와 같이 셋팅해준다.
2-2-1.GPIO 레지스터
GPIO 2개를 추가해주고, 이름은 각각 LED1, LED2로 입력.
LED를 켜줄 것이므로, Pin Direction은 OUTPUT으로 설정.
GPIO Peripheral은 지난 글에서 확인했던 R3, A8로 설정.
- 일일이 스크롤바를 내리기엔 너무 많으니, 해당하는 볼 번호로 검색하는게 편함.
)
2-2-2.LED 드라이버
LED 드라이버에 관한 셋팅. 이 명칭이 맞는지는 모르겠다.
이름은 My_LED1, My_LED2로 입력.
GPIO Configuration에 아까 GPIO 레지스터 설정 시 입력했던 LED1, LED2를 설정.
셋팅이 끝났으면 빌드 해보자.
2-3.디버깅
역시나..한번에 되는건 없다.
에러 메시지를 봤을 때, 선언하지 않은 identifier(식별자) 3종을 사용했다고 한다.
소스코드에서 해당하는 식별자를 Ctrl+클릭하면 어느 파일에서 선언되었는지 확인 가능하다.
gpio_led_blink.c 파일에서 아무 식별자나 Ctrl+클릭 해보자.
ti_drivers_config.h파일에 해당하는 식별자가 define되어있다.
2-2-1항 SysConfig의 GPIO 레지스터 셋팅에서 설정해준대로 이름이 붙어있는 것을 확인 가능하다.
추가로, PIN넘버가 1, 22로 각각 작성되어있는데.. 이 부분은 이상하다.
- 이전 글 2-1항 GPIO MAPPING TABLE에는 GPIO1과 20으로 작성되어 있었음.
- LED가 잘 켜지지 않으면 이 부분 설정 변경이 필요할 것 같다.
위까지 봤으면 뭐가 잘못된건지 찾아낸거지만, CCS 기능도 확인해볼 겸 추가로 확인해보자.
TI 예제 프로젝트와 새로 만든 프로젝트의 ti_drivers_config.h를 모두 선택해준 다음, 마우스 우클릭
Compare with → Each Other
아래와 같이 두 소스코드 상 차이점이 뭔지 보여준다.
다시, gpio_led_blink.c파일로 돌아와서 아래와 같이 코드를 수정한다.
void gpio_led_blink_main(void *args)
{
uint32_t loopcnt = 5, delaySec = 1;
uint32_t gpioBaseAddr_1, pinNum_1;
uint32_t gpioBaseAddr_2, pinNum_2;
/* Open drivers to open the UART driver for console */
Drivers_open();
Board_driversOpen();
DebugP_log("GPIO LED Blink Test Started ...\r\n");
DebugP_log("LED will Blink for %d seconds ...\r\n", (loopcnt * delaySec * 2));
/* Get address after translation translate */
gpioBaseAddr_1 = (uint32_t) AddrTranslateP_getLocalAddr(LED1_BASE_ADDR);
pinNum_1 = LED1_PIN;
gpioBaseAddr_2 = (uint32_t) AddrTranslateP_getLocalAddr(LED2_BASE_ADDR);
pinNum_2 = LED2_PIN;
GPIO_setDirMode(gpioBaseAddr_1, pinNum_2, LED1_DIR);
GPIO_setDirMode(gpioBaseAddr_2, pinNum_2, LED2_DIR);
while(loopcnt > 0)
{
GPIO_pinWriteHigh(gpioBaseAddr_1, pinNum_1);
GPIO_pinWriteLow(gpioBaseAddr_2, pinNum_2);
ClockP_sleep(delaySec);
GPIO_pinWriteLow(gpioBaseAddr_1, pinNum_1);
GPIO_pinWriteHigh(gpioBaseAddr_2, pinNum_2);
ClockP_sleep(delaySec);
loopcnt--;
}
DebugP_log("GPIO LED Blink Test Passed!!\r\n");
DebugP_log("All tests have passed!!\r\n");
Board_driversClose();
Drivers_close();
}
다시 빌드해보니, 이상 없이 빌드 된다.
2-4.실행 결과
참고
아래와 같이 매뉴얼과 Sysconfig 상에서 서로 내용이 상이하다.
일단 Sysconfig대로 했을 때, 정상동작하는 걸로 봐서는 매뉴얼이 잘못된 듯 하다.
AM263X-CC User Guide & AM263X-CC Schematic의 GPIO Mapping Table
- LIN2_TXD : GPIO20
SysConfig
- LIN2_TXD : GPIO22
AM2634 데이터시트에는 아래와 같이 GPIO22로 나와있다.
컨트롤카드 매뉴얼이 잘못된 것으로..!
2-5.추가 실험 (내용추가 25.03.26)
본 글 2-2항목에서 SysConfig로 LED 2개를 사용하겠다고 설정했다.
그러면, 설정 내용을 약간 바꿔주면 어떻게 반영이 될지 테스트 해봤다.
- LED1은 이름 변경 (LED1 → LED1_modify)
- LED2는 삭제
예상 결과 :
- LED1 이름 변경만 반영 & LED2 삭제는 미반영
- LED1 이름 변경 & LED2 삭제 모두 반영
LED 드라이버에서 셋팅한 My_LED2를 먼저 삭제해줘야 GPIO에서 셋팅한 LED2가 삭제된다.
삭제 완료 후 ti_drivers_config.h 파일 확인 결과..
예상 결과 2번과 같이 변경된다..!
간단한 테스트라 그런지 모르겠지만, 누락된 내용 없이 잘 변경 되는 것 확인