본문 바로가기

[NXP]/LPC800

LPC812 EVM - UART 테스트

LPC812 EVM -  UART 테스트


LPC812 는 3채널의 UART가 있다. 20핀 소형 페키지 임에도 불구하고 3개의 UART가 있어 유용하게 사용될곳이 많을것 같다.

그리고 스위치 메트릭스라는 기능을 이용하여 UART핀을 자유롭게 맵핑할 수 있는것도 상당히 마음에 든다.


아래 그림은 LPC812의 UART 블록도 이다.



LPC812 UART 핀맵핑 


#if 1

  /* connect the UART0 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN0 = regVal | ( 4 << 0 ); /* P0.4 is UART0 TXD, ASSIGN0(7:0) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN0 = regVal | ( 0 << 8 ); /* P0.0 is UART0 RXD. ASSIGN0(15:8) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN0 = regVal | ( 12 << 16 ); /* P0.12 is UART0 RTS, ASSIGN0(23:16) */

regVal = LPC_SWM->PINASSIGN0 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN0 = regVal | ( 13 << 24 ); /* P0.13 is UART0 CTS. ASSIGN0(31:24) */

#endif


#if 0

  /* connect the UART1 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN1 = regVal | ( 4 << 8 ); /* P0.4 is UART1 TXD, ASSIGN1(15:8) */

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN1 = regVal | ( 0 << 16 ); /* P0.0 is UART1 RXD. ASSIGN1(23:16) */

regVal = LPC_SWM->PINASSIGN1 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN1 = regVal | ( 12 << 24 ); /* P0.12 is UART1 RTS. ASSIGN1(31:24) */

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN2 = regVal | ( 13 << 0 ); /* P0.13 is UART1 RTS, ASSIGN2(7:0) */

#endif


#if 0

/* connect the UART2 TXD abd RXD sigals to port pins(P0.4-P0.0)*/

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFF << 16 );

LPC_SWM->PINASSIGN2 = regVal | ( 4 << 16 ); /* P0.4 is UART2 TXD, ASSIGN2(23:16) */

regVal = LPC_SWM->PINASSIGN2 & ~( 0xFFUL << 24 );

LPC_SWM->PINASSIGN2 = regVal | ( 0 << 24 ); /* P0.0 is UART2 RXD. ASSIGN2(31:24) */

regVal = LPC_SWM->PINASSIGN3 & ~( 0xFF << 0 );

LPC_SWM->PINASSIGN3 = regVal | ( 12 << 0 ); /* P0.12 is UART2 RTS. ASSIGN1(7:0) */

regVal = LPC_SWM->PINASSIGN3 & ~( 0xFF << 8 );

LPC_SWM->PINASSIGN3 = regVal | ( 13 << 8 ); /* P0.13 is UART2 RTS, ASSIGN2(15:8) */

#endif



LPC812의 UART는 스위치 메트릭스로 원하는 포트에 할당가능하다. 다만 부트로드의 경우 디폴트로 P0.0, P1.4에 할당되어 있다.부트로더를 이용한다면 하드웨어 설계시주의가 필요하다.





LPC812 UART Status Register

RXDATSTAT의 RXRDY 비트가 1이면 수신버퍼로부터 데이터르 읽어 올 수 있다. 데이터를 읽어오면 자동으로 0이 된다.




LPC812 UART 송수신 함수

void U0_PutByte(unsigned char Data)

{

    while ( !(LPC_USART0->STAT & TXRDY) );

    LPC_USART0->TXDATA = Data;    

}



unsigned char U0_GetByte(void)

{

    while(!(LPC_USART0->STAT & RXRDY));     

    return LPC_USART0->RXDATA;

}



반응형