[LPC1756 EVM] UART테스트
LPC1756은 3개의 UART가 있고 16Byte의 FOFI를 내장하고 있다.
LPC1756 / LPC1768 UART 초기화 순서
LPC1756 초기화 함수
// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned long baud)
{
//RxD0 and TxD0 PIN Select
PINSEL0 = 0x00000050;
//8 bits, no Parity, 1 Stop bit
U0LCR = 3;
//UART boaud rate
U0_SetBaud(baud);
//Enable and reset TX and RX FIFO
U0FCR = 0x07;
}
LPC1756 UART송수시 함수
LPC1756 UART 테스트 프로그램
LPC1756은 3개의 UART가 있고 16Byte의 FOFI를 내장하고 있다.
LPC1756 / LPC1768 UART 초기화 순서
1) Power
PCON 설정 : PCUART0 비트를 1로 설정해야 UART0 가 Power enable된다.
2)Peripheral clock
PCLKSEL0 레지스터에서 PCLK_UART0비트로 클럭 DIV를 설정할 수가 있다.
PCLKSEL1 레지스터는 PCLK_UART2/3
00 PCLK_peripheral = CCLK/4 00
01 PCLK_peripheral = CCLK
10 PCLK_peripheral = CCLK/2
11 PCLK_peripheral = CCLK/8, except for CAN1, CAN2, and CAN filtering when “11” selects = CCLK/6.
3)Baud rate
LCR레지스터의 DLAB 비트를 1로 설정후 보레이트 레지스터를 설정할 수 있다. 설정후 DLAB비트를 0으로 설정해야 한다.
(이것 때문에 고생했는데.. 메뉴얼을 잘 읽어봐야 하는 부분이다.)
4)UART FIFO
FCR 레지스터에서 FIFO enable 해 주어야 한다.
U0FCR = 0x07
5)Pin
//RxD0 and TxD0 PIN Select
PINSEL0 = 0x00000050;
PCON 설정 : PCUART0 비트를 1로 설정해야 UART0 가 Power enable된다.
2)Peripheral clock
PCLKSEL0 레지스터에서 PCLK_UART0비트로 클럭 DIV를 설정할 수가 있다.
PCLKSEL1 레지스터는 PCLK_UART2/3
00 PCLK_peripheral = CCLK/4 00
01 PCLK_peripheral = CCLK
10 PCLK_peripheral = CCLK/2
11 PCLK_peripheral = CCLK/8, except for CAN1, CAN2, and CAN filtering when “11” selects = CCLK/6.
3)Baud rate
LCR레지스터의 DLAB 비트를 1로 설정후 보레이트 레지스터를 설정할 수 있다. 설정후 DLAB비트를 0으로 설정해야 한다.
(이것 때문에 고생했는데.. 메뉴얼을 잘 읽어봐야 하는 부분이다.)
4)UART FIFO
FCR 레지스터에서 FIFO enable 해 주어야 한다.
U0FCR = 0x07
5)Pin
//RxD0 and TxD0 PIN Select
PINSEL0 = 0x00000050;
LPC1756 초기화 함수
// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned long baud)
{
//RxD0 and TxD0 PIN Select
PINSEL0 = 0x00000050;
//8 bits, no Parity, 1 Stop bit
U0LCR = 3;
//UART boaud rate
U0_SetBaud(baud);
//Enable and reset TX and RX FIFO
U0FCR = 0x07;
}
LPC1756 UART송수시 함수
void U0_PutByte(unsigned char Data)
{
//Wait till U0THR and U0TSR are both empty
while(!(U0LSR & TEMT)){};
U0THR = Data;
}
void U0_PutBuf(unsigned char *str, unsigned char len)
{
unsigned char i =0;
for(i=0;i<len;i++)
{
U0_PutByte(*(str+i));
}
}
{
//Wait till U0THR and U0TSR are both empty
while(!(U0LSR & TEMT)){};
U0THR = Data;
}
void U0_PutBuf(unsigned char *str, unsigned char len)
{
unsigned char i =0;
for(i=0;i<len;i++)
{
U0_PutByte(*(str+i));
}
}
LPC1756 UART 테스트 프로그램
int main()
{
unsigned int cnt = 0;
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
//UART0 초기화
U0_Init(BAUD_115200);
DebugPrint("LPC1700 Serial Test\r\n");
while(1)
{
Led1Toggle();
DebugPrint("cnt=%d\r\n", cnt++);
Delay(500);
}
return 0;
}
{
unsigned int cnt = 0;
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
//UART0 초기화
U0_Init(BAUD_115200);
DebugPrint("LPC1700 Serial Test\r\n");
while(1)
{
Led1Toggle();
DebugPrint("cnt=%d\r\n", cnt++);
Delay(500);
}
return 0;
}
반응형