单片机/MCU论坛
直播中

没人知道我是谁

3年用户 26经验值
擅长:MEMS/传感技术 测量仪表 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[问答]

dsPIC33CK X-IDE While跑丢了?

又碰到一个问题,请教各位大侠:在使用DMA发送UART的时候,需要等待上一次发送完成后,才能进行下一次发送。但是出了问题了。
这是测试代码:
  UART1_User = DMA0_Use_UART1;//设置UART1为DMA在使用
  SYSUARTAPP = true ;//UART1在使用状态
  SendCCDMA(C_SysInf);//DMA发送数据
  U1TXREG = 0x58;//完成DMA设置(此时没有完成发送),发送一个"X"作为标志
  while (SYSUARTAPP ){}//等待发送完成
U1TXREG = 0x59; //发送完成后再发送一个"Y"作为标志


DMA中断程序:
void __attribute__ ( ( interrupt, no_auto_psv ) ) _DMA0Interrupt ( void )
{
    IFS0bits.DMA0IF = 0;//清除DMA0中断
                if (DMAINT0bits.HALFIF == 1) //半满中断
                {
                        DMAINT0bits.HALFEN = 0;//下次全满中断
            DMAINT0bits.HALFIF = 0;//清除半满中断标志
                }
                else
                {
                        UART1_User = 0 ;//结束DMA使用UART1状态
                        SYSUARTAPP = false ;
                        DMACH0bits.CHEN = 0; //关闭DMA0中断
//                        DMAINT0bits.HALFEN = 1;//下次半满中断
                        U1TXREG =  0x38;
                        U1TXREG =  0x38;
                        U1TXREG = UART1_User;
                        U1TXREG =  0x38;
                }           
}

可以看到,在DMA完成全部发送的时候,将UART1_User 设置为0,代表DMA使用UART1完成了,不再占用,同时设置了SYSUARTAPP为fales,也代表了UART1空了。同时还输出了四个字符作为标志,标志确实完成了DMA。
然后结果是这样的:
1X973312021Echo0020211188*8
可以看到x发送成功了,代表了DMA发送成功,进入到了等待发送完成状态,同时最后也出现了标志DMA完成的四个字符,代表发送完成了,也就是说UART1_User 设置为0,SYSUARTAPP为fales,这两个设置设置都过了。但"Y"没有出现,也就是说这个while (SYSUARTAPP ){}  没有出来?啥情况呢?
这两个标志最后加的,程序其他地方没有也检查过了,不会有其他地方改变它们。我试了很多次了,原来就用UART1_User作为判断标志的,后来不行,没办法再加个布尔型试试,但还是不行。我这编程水平有大问题了么?急急急




回帖(1)

没人知道我是谁

2021-4-8 09:22:19
问题找到了,没想到需要关掉UART发送中断
举报

更多回帖

发帖
×
20
完善资料,
赚取积分