LPC1857 USART problem

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

LPC1857 USART problem

跳至解决方案
928 次查看
andrewbarningha
Contributor III

Hi,

Is anyone able to help me. I am new to the LPC1857 chip.

I am using the MCB1857 development board and i want to use USART3.

I can send data from the controller by simple doing the below after setting the USART up.

   LPC_USART3->THR = 'A'

But i am unable to get the USART3 interrupt to trigger on a send or receive char, in debug it will NOT jump into the interrupt function at all. See below my code... have i missed anything?

/*prototype*/

__irq void UART3_IRQHandler (void);

/**************** SET UP USART 3 *************************************/
LPC_SCU->SFSP2_3 = 0x02;
LPC_SCU->SFSP2_4 = 0x02;

LPC_USART3->LCR = 0x83; /*line control register.. stop, data bits etc.... 8 data bits, 1stop bit, NO parity*/
LPC_USART3->FDR = 0; /*fractional divide*/
LPC_USART3->DLL = 78; /*divide latch LSB... 9600 baud*/
LPC_USART3->DLM = 0; /*divide latch MSB*/
LPC_USART3->LCR = 0x03; /* disable DLAB*/
LPC_USART3->FCR = 0x07; /*Fifo buffer*/
LPC_USART3->IER = 0x01; /*enable interupt*/

NVIC_SetPriority(USART3_IRQn, 1);
NVIC_EnableIRQ(USART3_IRQn); /*enable USART3 interupt*/

/********************************************************************************/
/* ####### USART interupt function ########################## */
/********************************************************************************/
__irq void UART3_IRQHandler(void)
{
unsigned short ushLocalVar = 0;

   /*recieving a byte*/
   if(LPC_USART3->LSR & 0x01)
   {
   ushLocalVar = LPC_USART3->RBR;
   }

   if((ushLocalVar == 'A') || (ushLocalVar == 'a'))
   {
    /*transmit a byte*/
         if(LPC_USART3->LSR & 0x20)
         {
         LPC_USART3->THR = 'K';
        }
    }
     else
     {
      LPC_USART3->IER = 0x01; /*re-enable interupt*/
     }
}

1 解答
585 次查看
Carlos_Mendoza
NXP Employee
NXP Employee

Hi Andrew,

Have you tried using the periph_uart example that comes with the LPCOpen package? This example shows how to use the UART in polling, interrupt and DMA mode. You can download the LPCOpen package for the Keil MCB1800 (LPC1857) board from this link:

LPCOpen Software for LPC18XX|NXP 

Hope it helps!

Best Regards,
Carlos Mendoza
Technical Support Engineer

在原帖中查看解决方案

0 项奖励
2 回复数
586 次查看
Carlos_Mendoza
NXP Employee
NXP Employee

Hi Andrew,

Have you tried using the periph_uart example that comes with the LPCOpen package? This example shows how to use the UART in polling, interrupt and DMA mode. You can download the LPCOpen package for the Keil MCB1800 (LPC1857) board from this link:

LPCOpen Software for LPC18XX|NXP 

Hope it helps!

Best Regards,
Carlos Mendoza
Technical Support Engineer

0 项奖励
585 次查看
andrewbarningha
Contributor III

Thanks Carlos,

I now have the USART working, i had the pin multiplexing setup wrong, so i changed the settings to below and it now works.

/*set pins up for USART 0 */
 LPC_SCU->SFSP2_0 = 0x09; /* Function 1..U0_TXD, enable pull down. */
 LPC_SCU->SFSP2_1 = 0xC1; /* Function 1..U0_RXD, Enable input buffer, Disable glitch filter*/

I will look at the link you sent me for a deeper understanding of the USART.

Thanks

Andrew