dhl666 发表于 2024-6-21 11:39:17

为什么DMA进不了中断 | 已解决

STC32G8K48,DMA无法进入中断,DMA配置是官方历程,使用的是插件扩展中断号0-63

串口DMA初始化





DMA发送


DMA中断



现象就是LED不闪烁,无法进入DMA串口1发送中断



乘风飞扬 发表于 2024-6-21 13:23:50

串口DMA需要收/发满指定个数数据后才会产生中断。
可参考STC32G实验箱例程包:63-DMA-UART串口与存储器数据自动收发

dhl666 发表于 2024-6-21 13:43:54

乘风飞扬 发表于 2024-6-21 13:23
串口DMA需要收/发满指定个数数据后才会产生中断。
可参考STC32G实验箱例程包:63-DMA-UART串口与存储器数据 ...

发满了,一共12个字节

dhl666 发表于 2024-6-25 23:56:12

问题找到了,ES中断的原因,因为8051内核没有同32一样独立的串口发送中断和串口接收中断,所以当ES打开时,就等于打开了串口所有中断,而串口发送的中断标志位必须软件清零,我就是在串口中断处理函数中没有对发送中断清零的操作,导致CPU直接卡死,系统崩溃,但是有一个问题,当开启了DMA中断发送时,如果此时不打开ES中断,就不会有问题,应该是DMA自动将TI清0了,如果同时打开了DMA和串口中断的,一定要在串口中断服务函数里面将串口发送的中断标志位清零,不然系统直接崩溃

jwd 发表于 2024-6-26 05:58:46

串口都开了dma了咋还开ES呢

llyymm 发表于 2024-6-26 11:41:01

还没使用过DMA,但是有前车之鉴,后面我就要注意了

_奶咖君_ 发表于 2024-6-26 13:31:57

jwd 发表于 2024-6-26 05:58
串口都开了dma了咋还开ES呢

有些串口不支持超时中断分包,,就只能开串口中断用定时器分包,,

jwd 发表于 2024-6-27 08:23:50

_奶咖君_ 发表于 2024-6-26 13:31
有些串口不支持超时中断分包,,就只能开串口中断用定时器分包,,

自制超时{:4_245:}

_奶咖君_ 发表于 2024-6-27 08:43:17

jwd 发表于 2024-6-27 08:23
自制超时

{:4_192:}在没有DMA的片子里面这样做还是挺常见的,,有了DMA但是没有超时中断的片子里,,,整个DMA的作用仅仅是代替了CPU搬运数据的过程,,

dhl666 发表于 2024-6-27 15:57:26

_奶咖君_ 发表于 2024-6-27 08:43
在没有DMA的片子里面这样做还是挺常见的,,有了DMA但是没有超时中断的片子里,,,整个DMA的作用仅仅是 ...
是的,我就是需要串口分包
页: [1] 2
查看完整版本: 为什么DMA进不了中断 | 已解决