MKE04Z128VLD4 UART Receive Data Register Full Flag

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

MKE04Z128VLD4 UART Receive Data Register Full Flag

跳至解决方案
710 次查看
jun1
Contributor V

Hi.

If the Receiver Overrun Flag is set when receiving the UART, the received data will be lost.
Is it possible that the Receive Data Register Full Flag is not set and only the Receiver Overrun Flag is set?
I have a question because the following code was in the UART sample program of the SDK.
Thank you.


SDK:SDK_2.8.0_MKE04Z128xxx4\boards\frdmke06z\driver_examples\uart\interrupt

void DEMO_UART_IRQHandler(void)
{
      uint8_t data;

     /*  Is it possible that the Receive Data Register Full Flag is not set and only the Receiver Overrun Flag is set? */
     if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) 
     {
              data = UART_ReadByte(DEMO_UART);

              /* If ring buffer is not full, add data to ring buffer. */
              if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex)
              {
                          demoRingBuffer[rxIndex] = data;
                          rxIndex++;
                          rxIndex %= DEMO_RING_BUFFER_SIZE;
              }
    }
     SDK_ISR_EXIT_BARRIER;
}

 

0 项奖励
1 解答
693 次查看
myke_predko
Senior Contributor III

@jun1 

Interesting question and I have no idea why that comment is in the SDK example code.  

Looking at the code, the answer should be "no" as long as interrupts are active.  It's possible that previous, unread data in the ring buffer is overwritten.  I do use the UART interrupt receive SDK (with EDMA transmit) code so I do have experience with it on other Kinetis devices (K2x, K3x and K6x) and would never expect this to happen.  

The only case I can think of where the overrun flag is set at all in the example code is if interrupts were disabled for a long period of time (ie when clearing/programming many sectors of Flash and not enabling interrupts periodically) with UART data still coming in.  I should point out that the Data Register Full Flag should also be active in this case.  

I've just looked at the examle SDK code for the devices I'm working with (not the MKE04Z128VLD4) and the IRQ handler code is identical, but doesn't have that comment.  

Maybe somebody with experience with the UART for this part can comment but to me the answer should be "no".  

myke

在原帖中查看解决方案

0 项奖励
1 回复
694 次查看
myke_predko
Senior Contributor III

@jun1 

Interesting question and I have no idea why that comment is in the SDK example code.  

Looking at the code, the answer should be "no" as long as interrupts are active.  It's possible that previous, unread data in the ring buffer is overwritten.  I do use the UART interrupt receive SDK (with EDMA transmit) code so I do have experience with it on other Kinetis devices (K2x, K3x and K6x) and would never expect this to happen.  

The only case I can think of where the overrun flag is set at all in the example code is if interrupts were disabled for a long period of time (ie when clearing/programming many sectors of Flash and not enabling interrupts periodically) with UART data still coming in.  I should point out that the Data Register Full Flag should also be active in this case.  

I've just looked at the examle SDK code for the devices I'm working with (not the MKE04Z128VLD4) and the IRQ handler code is identical, but doesn't have that comment.  

Maybe somebody with experience with the UART for this part can comment but to me the answer should be "no".  

myke

0 项奖励