打印
[Kinetis]

K60 UART中断接收用DMA方式,如何清串口接收中断标志位

[复制链接]
3516|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
wjh21access|  楼主 | 2017-3-20 10:40 | 只看该作者
问题:现在项目用串口接收通信数据包,用DMA接收方式,想在DMA接收之前,先复位串口接收中断标志位。

//清除中断标志位
    /* Read and save the S1 value */
    /* Check to see if the rx full flag is set */
    while (UART5->S1 & UART_S1_RDRF_MASK)
    {
        /* Read data register to clear the flag */
        iTemp = UART5->D;
    }
可是单步调试时,程序一直在while里面出不来。也就是说:读数据寄存器清除不了标志位吗?

使用特权

评论回复
板凳
wjh21access|  楼主 | 2017-3-20 10:45 | 只看该作者
望大神们指导,@FSL_TICS_Jeremy  @FSL_TICS_A  。。。

使用特权

评论回复
地板
wjh21access|  楼主 | 2017-3-20 11:03 | 只看该作者
调试过程:
通过串口助手发送数据包:11 22 33 44 55 66 77(16进制),DMA循环接收7次,将数据包存到一个数组里面(帖子怎么发?  我是个新手)

}CJ`0G~[`VEVS999YILR7JP.png (14.35 KB )

单步调试查看的接收数组中的值

单步调试查看的接收数组中的值

10$MMT69R~@H~H(C{PSVJOD.png (143.83 KB )

串口助手发送一个数据包

串口助手发送一个数据包

使用特权

评论回复
5
wjh21access|  楼主 | 2017-3-20 11:21 | 只看该作者
调试复位,第一次执行时,启动DMA接收之后,再用串口助手发送数据包,DMA可以接收到完整数据包(见上楼截图)。
想用 清串口中断标志位 来实现过滤垃圾数据,垃圾数据包:88 33 33 44 55 66 77。通过串口助手发送后,程序先用
//清除中断标志位(在论坛上看到的清串口中断标志位方法)
    /* Read and save the S1 value */
    /* Check to see if the rx full flag is set */
    while (UART5->S1 & UART_S1_RDRF_MASK)
    {
        /* Read data register to clear the flag */
        iTemp = UART5->D;
    }
想过滤这些数据后,再重新启动DMA。单步调试时,就死在这,我的感觉是上面清串口中断标志位方法没有起作用啊。
呼唤大神!

KFYY}[X]{T3VJKKG2X8BY$Y.png (163.53 KB )

调试

调试

使用特权

评论回复
6
wjh21access|  楼主 | 2017-3-20 16:08 | 只看该作者
看了数据手册,原来在DMA模式下,判断接收中断标志位,然后读UART->D寄存器,中断标志位不会被清零。

filehelper_1489997250470_12.png (137.4 KB )

UART-DMA 操作

UART-DMA 操作

使用特权

评论回复
7
yiilanying| | 2017-3-20 19:01 | 只看该作者
void TIM2_IRQHandler(void)
{
   
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {
                unsigned int dac;
                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);   
                  // time++;
       
                  dac=re[i++];
                   if(i>=1000)
        {
        i=0;
        }

                  sent_ch1data(dac);

        }                        
}

使用特权

评论回复
8
yiilanying| | 2017-3-20 19:03 | 只看该作者
yiilanying 发表于 2017-3-20 19:01
void TIM2_IRQHandler(void)
{
   

,这是我以前写的程序,希望对你有用

使用特权

评论回复
9
wjh21access|  楼主 | 2017-3-21 17:28 | 只看该作者
想到一个办法暂时解决了,还是谢谢你的回答@yiilanying  

使用特权

评论回复
10
跛脚僧郎| | 2017-6-3 15:09 | 只看该作者
DMA配置好了在,启用呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

1

粉丝