[FRDM-KL25Z] Kinetis - UART 테스트
K25의 UART는 일반 UART 2채널과 low power UART module 1채널로 구성되어 있다.
기본 예제코드에 UART를 위한 드라이버 함수가 제공되지만 Kenetis 시리즈의 전체적인 구조를 파악하기 위해서 데이터시트의 레지스터를 보면서 로레벨 함수를 만들어 보는것도 중요한 일이라 정리해 보았다.
//------------------------------------------------------------------------------
// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned char baud)
{
//UART Port 초기화
// Enable the UART_TXD function on PTA1
PORTA_PCR1 = PORT_PCR_MUX(0x2);
// Enable the UART_TXD function on PTA2
PORTA_PCR2 = PORT_PCR_MUX(0x2);
// select the PLLFLLCLK as UART0 clock source
SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);
SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
UART0_C2_REG(UART0_BASE_PTR) &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK );
//Configure the uart for 8-bit mode, no parity
//We need all default settings, so entire register is cleared
UART0_C1_REG(UART0_BASE_PTR) = 0;
//UART Baudrate 설정
U0_SetBaud(baud);
}
MKL25Z UART 송수신 함수
unsigned char U0_GetByte(void)
{
//데이터가 수신되면
while (!(UART_S1_REG(UART0_BASE_PTR) & UART_S1_RDRF_MASK));
//데이터 읽어옴
return UART_D_REG(UART0_BASE_PTR);
}
void U0_PutByte(unsigned char Data)
{
//송신 FIFO가 비어지면
while(!(UART_S1_REG(UART0_BASE_PTR) & UART_S1_TDRE_MASK));
//데이터 전송
UART_D_REG(UART0_BASE_PTR) = Data;
}