Embedded/TI

[TI][AM263x]GPIO LED BLINK 응용하기 (2)

남산동너구리 2025. 3. 18. 04:48

지난 글에 이어서 진행하도록 하자

2-2.SysConfig로 레지스터 셋팅

먼저, 예제 파일을 copy하여 새로운 프로젝트를 만들어준다.
example.syscfg를 더블클릭하여 아래와 같이 셋팅해준다.

2-2-1.GPIO 레지스터

GPIO 2개를 추가해주고, 이름은 각각 LED1, LED2로 입력.
LED를 켜줄 것이므로, Pin Direction은 OUTPUT으로 설정.
GPIO Peripheral은 지난 글에서 확인했던 R3, A8로 설정.

  • 일일이 스크롤바를 내리기엔 너무 많으니, 해당하는 볼 번호로 검색하는게 편함.

GPIO셋팅1

)

GPIO셋팅2

2-2-2.LED 드라이버

LED 드라이버에 관한 셋팅. 이 명칭이 맞는지는 모르겠다.
이름은 My_LED1, My_LED2로 입력.
GPIO Configuration에 아까 GPIO 레지스터 설정 시 입력했던 LED1, LED2를 설정.

LED Driver셋팅

셋팅이 끝났으면 빌드 해보자.

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가 잘 켜지지 않으면 이 부분 설정 변경이 필요할 것 같다.

ti_drivers_config.h파일

위까지 봤으면 뭐가 잘못된건지 찾아낸거지만, CCS 기능도 확인해볼 겸 추가로 확인해보자.
TI 예제 프로젝트와 새로 만든 프로젝트의 ti_drivers_config.h를 모두 선택해준 다음, 마우스 우클릭
Compare with → Each Other

compare

아래와 같이 두 소스코드 상 차이점이 뭔지 보여준다.

compare 결과

다시, 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개를 사용하겠다고 설정했다.
그러면, 설정 내용을 약간 바꿔주면 어떻게 반영이 될지 테스트 해봤다.

  1. LED1은 이름 변경 (LED1 → LED1_modify)
  2. LED2는 삭제

예상 결과 :

  1. LED1 이름 변경만 반영 & LED2 삭제는 미반영
  2. LED1 이름 변경 & LED2 삭제 모두 반영

LED 드라이버에서 셋팅한 My_LED2를 먼저 삭제해줘야 GPIO에서 셋팅한 LED2가 삭제된다.

삭제 완료 후 ti_drivers_config.h 파일 확인 결과..
예상 결과 2번과 같이 변경된다..!

빌드 결과

간단한 테스트라 그런지 모르겠지만, 누락된 내용 없이 잘 변경 되는 것 확인