[ATMEL]/SAMD212016. 2. 14. 02:15

[SAMD21 EVM] - UART 테스트

[SAMD21 EVM] - UART 테스트





SAM D 시리즈의 특징으로 멀티 SERCOM모듈을 들수 있다. SERCOM 은 I2C, SPI or USART를 쉽게 할당해서 유연하게 사용 할 수 있는 장점이 있다. 특히 IO핀을 다양한 형태로 할당 할 수 있으므로 PCB설계에 있어 자유롭게 제작 가능하다. 





SAMD21 UART 초기화 설정 코드

SAMD21 EVM의 UART는 SERCOM2의 PA13(PAD1)->RXD, PA14(PAD2)->TXD 에 할당이 되어 있으므로 아래와 같이 핀맵 설정할 수 있다.

struct usart_config usart_conf;


usart_get_config_defaults(&usart_conf);

usart_conf.mux_setting = USART_RX_1_TX_2_XCK_3;

usart_conf.pinmux_pad0 = PINMUX_UNUSED;

usart_conf.pinmux_pad1 = PINMUX_PA13C_SERCOM2_PAD1; //RXD

usart_conf.pinmux_pad2 = PINMUX_PA14C_SERCOM2_PAD2; //TXD

usart_conf.pinmux_pad3 = PINMUX_UNUSED;

usart_conf.baudrate    = baudrate;


       stdio_serial_init(&_UART0, SERCOM2, &usart_conf);

usart_enable(&_UART0); 




SAMD21 UART 송수신 함수 코드 

unsigned char U0_GetByte(void)

{

    uint16_t  temp = 0;

    while(STATUS_OK != usart_read_wait(&_UART0, &temp));


    return temp;

}


void U0_PutByte(unsigned char Data)

{

    while(STATUS_OK !=usart_write_wait(&_UART0, Data));

}




SAMD21 UART 테스트 소스코드

int main(void)

{

_SystemInit();


//config_led();

    Led1Init();

    Led2Init();

    Led1On();

    Led2On();

    

    U0_Init(BAUD_115200);

    DebugPrint("SAMD21 UART Test\r\n");


while (true)

    {

        Led1Toggle(); 

        

        U0_PutByte(U0_GetByte());

}

}






SAMD21 UART 하드웨어 설계시 주의 사항


SAMD 시리즈 데이터 시트를 보면 시리얼 포트 설정은 SERCOM_PAD로해서 소프트웨어로 쉽게 할당 가능한것 처럼 되어 있다.




하지만 아래와 같이 실제로 각 포트의 PAD에 할당 가능한 기능이 제한적이다. PAD1의 경우 TXD 할당이 안된다. PAD1의 핀을 사용하려면 주의가 필요하다. 장점만 내세우고 있지만 제약사항이 있어 이런점이 아쉬운 점이다. GPIO 할당에 있어 SWITCH MAXRIX 를 지원하는 LPC800 시리즈와 비교해 보면 상당히 아쉬운점이 있는것 같다.



SAMD21 EVM 보드의 UART는 PA13(PAD1)->TXD, PA14(PAD2)->RXD 로 디자인 했지만 PAD1에 TXD 할당이 되지 않아 두 핀을 바꿔서 사용하고 있다.



참고로 SAMD21 부트로더 기본 시리얼 포트는 아래와 같다. 다음 디자인에는 고려 해봐야 할것 같다.

PA23 (115200, 8, N, 1) SERCOM3 PAD1 (UART RXD)


PA22 (115200, 8, N, 1) SERCOM3 PAD0 (UART TXD)


Posted by nexp

댓글을 달아 주세요