Hi NXP Team,
I am developing an application that is able to receive multiple bytes with variable length randomly through LPUART0. I modified the LPUART sample code as follows. Baud rate is 115200 with interrupt enabled.
void LPUART0_RxTx_IRQHandler (void) {
uint8_t recieve;
/* Clear interrupt flag */
LPUART0->STAT = LPUART0->STAT | 0x40000000;
while((LPUART0->STAT & LPUART_STAT_RDRF_MASK)>>LPUART_STAT_RDRF_SHIFT==0);
/* Wait for received buffer to be full */
recieve= LPUART0->DATA; /* Read received data*/
}
int main(void) {
...
/* Configure PTC2 and PTC3 as LPUART0 RX and TX */
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
INT_SYS_EnableIRQ(LPUART0_RxTx_IRQn);
INT_SYS_SetPriority(LPUART0_RxTx_IRQn, 10U);
PCC->PCCn[PCC_LPUART0_INDEX] &= ~PCC_PCCn_CGC_MASK; /* Ensure clk disabled for config */
PCC->PCCn[PCC_LPUART0_INDEX] |= PCC_PCCn_PCS(0b001) /* Clock Src= 1 (SOSCDIV2_CLK) */
| PCC_PCCn_CGC_MASK; /* Enable clock for LPUART1 regs */
LPUART0->BAUD = 0x16000003;
LPUART0->CTRL=0x02C0000; /* Enable receive interrupt */
for(;;){
/* Wait for the receive interrupt to get triggered */
}
...
}
I found that the interrupt could be triggered but I couldn't receive the right number of bytes with such implementation. For example, if 6 bytes were sent, I could only receive 2 bytes. That means "LPUART0_RxTx_IRQHandler" triggered 2 times continuously.
The API code (LPUART_DRV_ReceiveDataBlocking) was able to receive all the data sent but it requires a fix buffer size as an input parameter. Also, as the timing of receiving the data is random, I could not simply call "LPUART_DRV_ReceiveDataBlocking" function in my program and I have to write another function with interrupt enabled.
Please advice on how to receive multiple bytes (register settings etc.) with LPUART0 interrupt enabled. For example,
void LPUART0_RxTx_IRQHandler (void) {
/* receive 1st byte */
first_byte = LPUART0->DATA;
if (first_byte == 1) {
/* receive the remaining 1 bytes */
} else if (first_byte == 2) {
/* receive the remaining 2 bytes */
}
}
Thank you.
Best regards,
Jing Yin