在线时间3 小时
UID3775631
注册时间2021-9-7
NXP金币0
该用户从未签到
新手上路
- 积分
- 25
- 最后登录
- 2021-9-13
|
大家好,我目前在用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)后,会自动调用回调函数,会进入中断服务函数。因为我加了个判断,如果是发送完成中断的话,就对发送完成flag进行清除。然后问题又出来了,NXP库里面函数清除函数只能清除空闲中断flag(LPUART_ClearStatusFlags()),直接赋值STAT寄存器值我也始过(LPUART3->STAT |= LPUART_STAT_TDRE_MASK),都不能清除发送完成flag,程序会死中断服务函数LPUART3_IRQHandler里面无限循环。
大神们有遇到过这个问题么,应该怎么解决呢?
对了,我也试过在发送之前先disable中断,发完再打开,也不行。
|
|