在线时间234 小时
UID3301905
注册时间2017-1-8
NXP金币106
TA的每日心情 | 开心 2018-4-20 15:04 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 2947
- 最后登录
- 2023-7-24
|
发表于 2018-11-20 00:20:27
|
显示全部楼层
void LPUART1_IRQHandler()
{
int count;
if((kLPUART_IdleLineInterruptEnable)&LPUART_GetStatusFlags(LPUART1))
{
LPUART_TransferGetReceiveCountEDMA(LPUART1,&g_lpuartEdmaHandle,&count);
printf("%d\n",count);
LPUART_ClearStatusFlags(LPUART1,kLPUART_IdleLineInterruptEnable);
LPUART_TransferAbortReceiveEDMA(LPUART1, &g_lpuartEdmaHandle); //eDMA终止接收数据
LPUART_ReceiveEDMA(LPUART1, &g_lpuartEdmaHandle, &receiveXfer); //使用eDMA接收
}
}
RT1052串口DMA接收里面最关键的这句终止DMA接收我忘记加了,因此之前的代码中,收到的DMA数据长度会一直累加,这样跟空闲中断实现的DMA接收的思想不符,加上这句之后,count的数值每次都会刷新,随着收到数据长度改变而改变,也就是完全符合空闲中断+DMA接收的思想。不过楼主的代码还不算是最好的处理方式,最好的处理方式是在主循环中做出处理,这样会少漏掉一些因中断服务时间片而无法接收的数据,详情看我一会发出的帖子。
|
|