完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
又碰到一个问题,请教各位大侠:在使用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个回答
|
|
问题找到了,没想到需要关掉UART发送中断
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
167 浏览 0 评论
164 浏览 0 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享-最小系统原理
435 浏览 0 评论
748 浏览 1 评论
3815 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11923 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 00:10 , Processed in 0.442071 second(s), Total 40, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号