大家好,我目前在用RT1061芯片,用空闲中断+DMA的方式来接收不定长数据,使用MCUXpressoconfig tool工具来做外设配置(只做了UART和DMA的设置,时钟没操作过)。基本操作就是IO\CLK\MPU\外设\DMA等初始化后,接着开启空闲中断:LPUART_EnableInterrupts(LPUART3,kLPUART_IdleLineInterruptEnable);EnableIRQ(LPUART3_IRQn);然后就是等待接收LPUART_ReceiveEDMA(LPUART3_PERIPHERAL,&LPUART3_LPUART_eDMA_Handle, &receiveXfer);。在中断服务函数LPUART3_IRQHandler中就是先清除空闲中断flag,关闭DMA,接收数据,然后把数据通过串口发送回来。
最开始我是用uart3做接收,uart1做发送,这样的调试是没问题的。但是当我用uart3接收后,再用uart3发送回来就出现了问题,只能成功一次,调试发现,用DMA的发送函数LPUART_SendEDMA(LPUART3_PERIPHERAL,&LPUART3_LPUART_eDMA_Handle, &sendXfer)后,会自动调用回调函数,会进入中断服务函数。看规格书说需要在data寄存器写入要发送的数据才能清除发送完成flag,这个我不知道怎么操作。我也尝试发送之前先disable中断,发完再打开,也不行。
|