UART Receive Buffer (LPC1768)

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

UART Receive Buffer (LPC1768)

2,006件の閲覧回数
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by expressouser on Tue Jun 24 09:42:29 MST 2014
Hi .

Is the UART interrupt handler expected to clear the RBR register upon exit? I am trying to read out the content of the RBR register outside of the handler,but it seems like the value is already cleared by the handler. Thanks.

Here's some part of my code:

<code>
inside main():

while (1) {
while (rbr == 0);
printf ("%c\n", LPC_UART2->RBR); //this simply prints a \n, not the character from RBR.
rbr = 0;
}


interrupt handler:

void UART2_IRQHandler(void) {
uint32_t status = LPC_UART2->IIR;
if ( (status & IRQ_RDA) == IRQ_RDA) {
while ((LPC_UART2->LSR & 0x20) == 0);
rbr =1;
}
}
</code>

it works well when I am reading RBR inside the handler:

<code>
inside main:

while (1) {
while (rbr == 0);
printf ("%c\n", ch); //this is ok.
rbr = 0;
}

interrupt handler:

void UART2_IRQHandler(void) {
uint32_t status = LPC_UART2->IIR;
if ( (status & IRQ_RDA) == IRQ_RDA) {
while ((LPC_UART2->LSR & 0x20) == 0);
ch = LPC_UART2->RBR;
rbr =1;
}
}

</code>
ラベル(1)
0 件の賞賛
返信
1 返信

1,315件の閲覧回数
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by embd02161991 on Fri Sep 12 17:07:10 MST 2014
Hi ,

The  right approach for fetching the valid pair of received byte and its status bits is first to read the content of the LSR register, and then to read a byte from the RBR. The best way is to store the value in RBR into another variable and handle that in main. Since RBR is volatile and changes , it  may not be reliable to print the register directly in main as by then the value could have changed.


Thanks

NXP Technical Support
0 件の賞賛
返信