硬件:CH32V307V-R1-1V0 官方demo板
CH32V307 串口+DMA 发送数据,代码删减只剩串口,仅仅在main循环1S打印“hello world”。
第一次发送DMA可以正常触发完全传输中断也可以清除中断标志位,第二次循环可以正常打印“hello world”,但这时候不会进入DMA中断处理函数。从寄存器看,DMA中断已使能,标志位也已置位,PFIC 中断挂起状态寄存器显示DMA中断挂起,无法进入DMA中断。
这个问题能否帮忙分析一下?附件提供原工程
硬件:CH32V307V-R1-1V0 官方demo板
CH32V307 串口+DMA 发送数据,代码删减只剩串口,仅仅在main循环1S打印“hello world”。
第一次发送DMA可以正常触发完全传输中断也可以清除中断标志位,第二次循环可以正常打印“hello world”,但这时候不会进入DMA中断处理函数。从寄存器看,DMA中断已使能,标志位也已置位,PFIC 中断挂起状态寄存器显示DMA中断挂起,无法进入DMA中断。
这个问题能否帮忙分析一下?附件提供原工程
整个串口框架流程从以前STM32工程移过来的,框架应该没问题,由于第二次的DMA发送完成中断没进入,没法清除串口忙标志,导致第三次发送一直卡在忙标志位判断中,这时候MCU一直在while循环中什么也没干,DMA传输完成标志已置位,中断一直被挂起。这里没弄明白为什么会挂起?为什么不会抢占?
您好,中断函数需要添加中断声明的,如下图,你可以在程序中参照下图添加一下中断声明试一下
解决了,加了声明确实可以了。感谢!
以前用Cortex-M不需要,没留意到这一点。但奇怪,编译器没报错,第一次中断也可以进,没往这点去想....