[NXP]/LPC17002011. 11. 5. 21:00

[LPC1756 EVM] UART테스트

[LPC1756 EVM] 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;    


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));
    }
}


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;
}
Posted by nexp

댓글을 달아 주세요