为什么DMA进不了中断 | 已解决
STC32G8K48,DMA无法进入中断,DMA配置是官方历程,使用的是插件扩展中断号0-63串口DMA初始化
DMA发送
DMA中断
现象就是LED不闪烁,无法进入DMA串口1发送中断
串口DMA需要收/发满指定个数数据后才会产生中断。
可参考STC32G实验箱例程包:63-DMA-UART串口与存储器数据自动收发 乘风飞扬 发表于 2024-6-21 13:23
串口DMA需要收/发满指定个数数据后才会产生中断。
可参考STC32G实验箱例程包:63-DMA-UART串口与存储器数据 ...
发满了,一共12个字节 问题找到了,ES中断的原因,因为8051内核没有同32一样独立的串口发送中断和串口接收中断,所以当ES打开时,就等于打开了串口所有中断,而串口发送的中断标志位必须软件清零,我就是在串口中断处理函数中没有对发送中断清零的操作,导致CPU直接卡死,系统崩溃,但是有一个问题,当开启了DMA中断发送时,如果此时不打开ES中断,就不会有问题,应该是DMA自动将TI清0了,如果同时打开了DMA和串口中断的,一定要在串口中断服务函数里面将串口发送的中断标志位清零,不然系统直接崩溃 串口都开了dma了咋还开ES呢 还没使用过DMA,但是有前车之鉴,后面我就要注意了 jwd 发表于 2024-6-26 05:58
串口都开了dma了咋还开ES呢
有些串口不支持超时中断分包,,就只能开串口中断用定时器分包,, _奶咖君_ 发表于 2024-6-26 13:31
有些串口不支持超时中断分包,,就只能开串口中断用定时器分包,,
自制超时{:4_245:} jwd 发表于 2024-6-27 08:23
自制超时
{:4_192:}在没有DMA的片子里面这样做还是挺常见的,,有了DMA但是没有超时中断的片子里,,,整个DMA的作用仅仅是代替了CPU搬运数据的过程,, _奶咖君_ 发表于 2024-6-27 08:43
在没有DMA的片子里面这样做还是挺常见的,,有了DMA但是没有超时中断的片子里,,,整个DMA的作用仅仅是 ...
是的,我就是需要串口分包
页:
[1]
2