본문 바로가기
Embedded SW/[Infineon] Embedded SW Project

[Infineon] 16. Aurix (TC23x)를 이용한 UART 기능 설계

by 방구석 임베디드 2021. 6. 12.
반응형

갑자기 모터를 돌리다가 TC23x의 UART 기능 설계를 수행하려고 하는 것일까?

이유는 컴퓨터를 통하여 무선으로 개발보드와 통신을 수행하기 위해서 이다.

 

컴퓨터에 USB 단자를 이용하여 UART TTL(Transistor-Transistor Logic) 신호레벨로 변경을 해주고

이 신호를 HC-12와 같은 무선 통신기기로 연결한다.

그리고 MCU단에서 그 신호를 받아서 다양한 Control을 수행해 줄수 있다.

 

그렇다면 지금부터 UART 기능 설계를 수행해 보도록 하자!

Asc0번 모듈에서

Tx 후보군은 아래와 같이 있다. 이중 나는 15.2를 UART Tx Pin

Rx 후보군은 아래와 같다. 이중 15.3을 UART Rx Pin으로 설정할 것이다.

초기화는 아래와 같다.

static void DrvAsc0Init(void)
{
    /* create module config */
    IfxAsclin_Asc_Config ascConfig;
    IfxAsclin_Asc_initModuleConfig(&ascConfig, &MODULE_ASCLIN0);

    /* set the desired baudrate */
    ascConfig.baudrate.prescaler    = 1;
    ascConfig.baudrate.baudrate     = 115200; /* FDR values will be calculated in initModule */
    ascConfig.baudrate.oversampling = IfxAsclin_OversamplingFactor_4;

    /* ISR priorities and interrupt target */
    ascConfig.interrupt.txPriority    = ISR_PRIORITY_ASC_0_TX;
    ascConfig.interrupt.rxPriority    = ISR_PRIORITY_ASC_0_RX;
    ascConfig.interrupt.erPriority    = ISR_PRIORITY_ASC_0_EX;
    ascConfig.interrupt.typeOfService = (IfxSrc_Tos)IfxCpu_getCoreIndex();

    /* FIFO configuration */
    ascConfig.txBuffer     = g_AsclinAsc.ascBuffer.tx;
    ascConfig.txBufferSize = ASC_TX_BUFFER_SIZE;

    ascConfig.rxBuffer     = g_AsclinAsc.ascBuffer.rx;
    ascConfig.rxBufferSize = ASC_RX_BUFFER_SIZE;

    /* pin configuration */	
    const IfxAsclin_Asc_Pins pins = {
        NULL_PTR,                     IfxPort_InputMode_pullUp,        // CTS pin not used
        &IfxAsclin0_RXB_P15_3_IN, IfxPort_InputMode_pullUp,        // Rx pin
        NULL_PTR,                     IfxPort_OutputMode_pushPull,     //RTS pin not used
        &IfxAsclin0_TX_P15_2_OUT, IfxPort_OutputMode_pushPull,     // Tx pin
        IfxPort_PadDriver_cmosAutomotiveSpeed1
    };		
    ascConfig.pins = &pins;

    /* initialize module */
    IfxAsclin_Asc_initModule(&g_AsclinAsc.drivers.asc0, &ascConfig);
}

추후, 자세한 설정은 나중에 더 정리하도록 하자!

우선, 통신속도를 115200 으로 설정하였다.

 

그리고, 아래와 같이 a를 전송하는 api를 만들고 이것을 10ms 마다 발사하도록 하였다.

void DrvAsc_Test1(void)
{
    g_AsclinAsc.count = 1;
    g_AsclinAsc.txData[0] = 'a';    
 
    /* Transmit data */
    IfxAsclin_Asc_write(&g_AsclinAsc.drivers.asc0, g_AsclinAsc.txData, &g_AsclinAsc.count, TIME_INFINITE);
}

 

Logic Analyzer를 이용하여 확인해 보도록 하자!

오케이 a를 전송하는 것을 볼수 있다.

그렇다면 여기서 하나의 비트에 할당되는 시간을 확인해 보도록 하자!'

8.667us라는 것을 볼수 있다.

그렇다면 이것을 

1000000/8.667 = 115380 이 나온다.

대략적으로 비슷하다는 것을 알수 있다.

 

즉, 1초에 115380개의 비트를 내보낼수 있다는 뜻이다.

 

이제 무선 모듈을 연결시켜서, 노트북과 MCU간의 정보를 교환해 보도록 하자!

반응형

댓글