본문 바로가기

[NXP]/LPC1k

[LPC1K-SM EVM] 시리얼 포트 테스트

[LPC1K-SM EVM] 시리얼 포트 테스트




LPC1K UART의 특징으로 저렴한 MCU임에도 불구하고 16byte의 FIFO가 있어 UART통신에 있어 편리하고 고속으로 처리할 수 있다. 그리고 RS-485/EIA-485 9-bit모드를 지원하고 하드웨어 흐름제어도 지원한다고 한다.



LPC1113 UART초기화 함수
//------------------------------------------------------------------------------
// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned long baud)
{
    NVIC_DisableIRQ(UART_IRQn);
    
    //UART 클럭 초기화
    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);   // UART=1

    // Enable UART peripheral clock
    LPC_SYSCON->UARTCLKDIV = 0x01;      // DIV=1
    
    LPC_IOCON->PIO1_6 &= ~0x07;    /*  UART I/O config */
    LPC_IOCON->PIO1_6 |= 0x01;     /* UART RXD */
    LPC_IOCON->PIO1_7 &= ~0x07; 
    LPC_IOCON->PIO1_7 |= 0x01;     /* UART TXD */
 
 U0_SetBaud(baud);
}


1Byte 전송함수
void U0_PutByte(unsigned char Data)
{
    while ( !(LPC_UART->LSR & LSR_THRE) );
    LPC_UART->THR = Data;   
}

1Byte 수신함수
unsigned char U0_GetByte(void)
{
    while (!(LPC_UART->LSR & LSR_RDR));
    return LPC_UART->RBR;
}


LPC1K UART테스트 예제 코드
int main()
{
    SystemInit();

    U0_Init(BAUD_115200);
    DebugPrint("LPC1K UART Test\r\n");
   
    Led1Init();
    Led1On();
   
   
    Led2Init();
    Led2Off();
   
    while(1)
    {
        switch(U0_GetByte())
        {
        case '0':
            Led1Off();
            DebugPrint("LED OFF\r\n");
            break;
           
        case '1':
            Led1On();
            DebugPrint("LED ON\r\n");
            break;           
        }
    }
    return 0;
}
반응형