MCU는 NUC029SGE를 사용하였고 관련 데이터 시트는 아래 첨부했습니다.
코드 분석
SYS_ResetModule(UART0_RST);
/* Enable UART module clock */
CLK_EnableModuleClock(UART0_MODULE);
/* Select HXT as the clock source of UART0 */
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1));
/* Set multi-function pins for UART0 RXD and TXD */
SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD1MFP_Msk );
SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD1MFP_UART0_TXD); /*!< GPD_MFPL PD1 setting for UART0_TXD */
SYS->GPD_MFPH &= ~(SYS_GPD_MFPH_PD9MFP_Msk );
SYS->GPD_MFPH |= (SYS_GPD_MFPH_PD9MFP_UART0_RXD); /*!< GPD_MFPH PD9 setting for UART0_RXD */
pUart = UART0;
pUart->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HIRC, ulBps);
pUart->LINE = usPri | usStop | usDLen;
UART_EnableInt(pUart, UART_INTEN_RDAIEN_Msk);
1) SYS_ResetModule(UART0_RST);
UART0_RST 모듈을 Reset 하겠다.
2) CLK_EnableModuleClock(UART0_MODULE);
UART0_MODULE 모듈의 Clock을 활성화시키겠다.
3) CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1));
CLK_SetModuleClock(Module index, Clock source, Divider);
UART0 모듈을 HIRC Clock source로 설정하고, clock divider는 0으로 설정하겠다.
4) 핀 설정
PD1을 UART0_TXD, PD9를 UART0_RXD로 설정하겠다.
5) pUart = UART0;
UART0은 (UART_T*)UART0_BASE로 UART 시작주소가 담긴 구조체 포인터
6) pUart->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HIRC, ulBps);
① UART_BAUD_MODE2
BAUDM1, BAUDM0을 1,1로 각각 설정하여 전송 속도 계산 모드를 Mode2로 설정하겠다.
② UART_BAUD_MODE2_DIVIDER(_HIRC, ulBps)
UART Clock Frequency를 HIRC, BaudRate은 ulBps(ex 9600)로 하겠다.
결론적으로 UART Baud Rate Divider Register는 데이터를 주고 받는 속도, 즉 BaudRate을 설정하는 곳이다.
7) pUart->LINE = usPri | usStop | usDLen;
① parity
오류를 검출하기 위해서 사용하는 비트
② Stop Bits
끝났다는 bit를 몇 bit로 할 것인가
③ Word Length
한번에 보내는 데이터 단위
8) UART_EnableInt(pUart, UART_INTEN_RDAIEN_Msk);
수신 인터럽트 설정
결론
UART0의 모듈을 HIRC Clock source로 설정하고, clock divider는 0으로 설정하겠다.
UART0의 핀 설정 및 Baud rate, Parity, Stop Bits, Word Length을 설정하겠다.
UART0의 수신 인터럽트를 활성화하겠다.
'개발환경 > Keil' 카테고리의 다른 글
ADC 설정 - NUC029SGE (1) | 2023.11.18 |
---|---|
타이머 설정 - NUC029SGE (1) | 2023.11.18 |
Clock 설정 - NUC029SGE (0) | 2023.11.18 |