S32K144 interrupt based UART: STATUS_UART_NOISE_ERROR

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

S32K144 interrupt based UART: STATUS_UART_NOISE_ERROR

859 Views
Joao_Roscoe
Contributor III

I have a interrupt driven UART inplementation (SDK version is 2.0.0 and I'm using regular lpuart driver, not pal or flexio) in which I need to look at each received byte, as they arrive. Thus, I use:

/* Get last transfer status */
result = LPUART_DRV_GetReceiveStatus(INST_UART, NULL);
if (STATUS_SUCCESS == result)
{
/* Execute send non-blocking */
LPUART_DRV_ReceiveData(INST_UART, inst_datum, 1U);
}

...where "inst_datum" is a one-byte buffer.

Also, I have a Rx callback installed which retrieves the content o inst_datum and calls the Rx code above for next byte reception.

It works, as far as the bytes arrival rate is not too high. If bytes arrival gets too fast, lpuart triggers a STATUS_UART_NOISE_ERROR interrupt.

Any hints?

Best regards,

Joao

Tags (1)
2 Replies

695 Views
Joao_Roscoe
Contributor III

Sorry for posting off topic, and thank you for your time, your hints are welcome, anyway.

Best regards,

Joao

694 Views
constantinrazva
NXP Employee
NXP Employee

Hello t_62835@cpqd.com.br‌,

On this community we handle questions regarding MATLAB/Simulink and our toolboxes - this question would be more appropriate for S32K community.

My thoughts - check if the clock that you are using is suitable for your baud rate. Check if the clock is stable for said baudrate. Check what OSR (over-sampling ratio) you are using. You can get more details in the Data sampling technique and Baud rate generation chapters (from LPUART Functional Description). You'll get more help on the S32K community (previously linked).

P.S.: it's always recommended that you are using the latest SDK version.

Hope this helps,

Razvan.