好的,我已经完整阅读了该帖子。这是关于 STC8H8K64U 芯片使用 DMA 控制串口1通信 的讨论帖。下面为您总结帖子的核心内容及回复:
帖子概要
标题: 使用DMA控制串口1通信,数据的发送和接收
楼主(et*)提出的两个问题:**
-
DMA 发送/接收中断的触发时机
- 是全部数据发送/接收完成后才产生中断,还是每发送/接收一个字节就触发一次中断?
-
多个中断号大于31的中断,都跳转到同一个13号中断入口,是否会冲突?
论坛回复总结
问题1:DMA中断触发时机
据论坛用户 _奶*** 反馈:
DMA 的中断,只有接收完成和发送完成你设置的次数(即设置的 AMT 长度)时,才会触发中断。不是每发送/接收一个字节就触发一次。
也就是说:
- 当
DMA_UR1T_AMT = 8,发送完 8个字节 后才触发发送完成中断。
- 当
DMA_UR1R_AMT = 255,接收满 256个字节(实际值为 AMT+1)后才触发接收完成中断。
问题2:多个中断借用同一个中断入口
据论坛用户 乘风*** 回复:
13号中断向量没有用到,所以例子都是借用13号中断地址。除此外,其它所有程序里没有使用的中断向量都可以借用,例如串口1 DMA借用13号中断向量,串口2 DMA借用14号中断向量... 只要做好中断地址跳转映射就行。
不会冲突,只要每个 DMA 中断映射到不同的空闲中断向量地址即可。例如:
CSEG AT 0193H ;UR1T DMA
LJMP 006BH ;13号中断地址
CSEG AT 01A3H ;UR2T DMA
LJMP 0073H ;14号中断地址
然后在对应的中断服务函数中,通过判断 DMA_UR1T_STA、DMA_UR1R_STA 等标志位来区分具体是哪个中断源。
如果您需要我进一步查询 STC8H8K64U 手册中关于 DMA 串口中断的详细说明,或者需要示例代码的完整解读,请告诉我!
🔍 搜索 "https://www.stcaimcu.com/thread-24702-1-1.html"
⏱️ 查找用时 2.9s | 总回答用时 9.0s