你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

DMA 不产生传输完成中断

[复制链接]
STMCU小助手 发布时间:2022-8-3 20:20
1. 前言/ ^. B1 ~- S  j% ^/ u  w
某客户发现修改代码后,STM32U59 SPI DMA 发送未产生传输完成中断,但修改的代码跟 SPI 以及 DMA 毫无关联。1 y" a  [! T3 R0 @% [- q  x3 u

. H. Y' j" }2 W6 t  W
  U4 E3 b5 ~7 H: O, f3 \: p& a
2. 调研
. ?9 @* t2 C1 [0 M* [# m+ V0 r回退代码修改后问题消失,可以确认硬件正常。检查 SPI 发送对应的 DMA 句柄的ErrorCode,发现 HAL_DMA_ERROR_DTE(Date Transfer Error)置位。尝试修改软件,发现调整下某个全局变量初值,或屏蔽某些变量,都能解决问题。
3 u( S$ h6 L* h6 y7 c为屏蔽 RTOS 及应用代码可能带来的影响,调整客户 SPI 和 DMA 初始化代码位置到紧跟 MCU 复位后配置时钟,初始化全局变量,并在初始化完成后立即发送一包数据,测试下来问题仍存在,说明问题和后续 RTOS 及应用代码代码无关。
/ K0 _$ i6 l9 P0 c' u+ c1 k为澄清全局变量初始化对 SPI 和 DMA 的影响,在全局变量初始化完成、初始化 SPI和 DMA 前、后,分别检查 RCC、SPI 和 DMA 寄存器,和正常时对比无差异。
* D( G+ ?6 `0 E2 ]% j
5 U: q3 T! f" F& E5 ^3 a9 m5 J
' w. t, k/ ], b, V5 r; ]) y/ z
3. 分析
% p8 @5 b. p! }; ~* b
客户使用的是 GPDMA 的 Linked List 模式,此模式下 DMA 传输相关的 8 个寄存器不通过软件直接设置,而是需要软件把待设定的寄存器参数先放入缓冲区,再将缓冲区地址赋到 DMA 寄存器 CxLBAR(高 16 位)和 CxLLR(低 16 位),使能 DMA 时硬件自动将这些参数加载到 DMA 通道对应的寄存器中。
4 m1 M8 h% N/ a5 |跟踪代码执行,在 DMA 使能前,查看参数缓冲区(地址:0x2001 FFF0)。确认DMA 参数缓冲区中源地址寄存器参数 0x200 e0618、目标地址寄存器参数 0x4001 3020都是正确的;使能 DMA 后,发现 DMA CxDAR 寄存器数据异常 0x1382 932e。
- m% V7 f7 I' R
: X* c' p, p- ?0 Z# L
}(XNOD)APC8T)POC%T)XA~7.png # p  o; F. l1 k9 m: w6 A

1 Z$ L+ e- U0 M( o4 J2 w8 M' N通过 RAM 搜索,在地址 0x2001 0000 处找到出现在 DAR 中的魔术字 0x1382 932e。
+ v& {9 u0 O9 a1 i0 U
/ j) X$ B5 n' o
7)4D9@5@]5B%(%Y5(@3ZE98.png
5 o& Z/ H3 _% N; g1 j3 ^* B
' [! ~- ]' p% l9 Y查阅参考手册,找到其对对缓冲区限制的描述:必须 4 字节对齐,且不能跨 64Kbyte边界;而用户的缓冲区地址 0x2001 FFF0(32 字节)刚好跨了 64Kbyte 边界。链接器分配的地址范围是 0x2001 FFF0 ~ 0x2002 0010,而 GPDMA 实际访问的数据区间是0x2001 FFF0 ~ 0x2001 FFFF 和 0x20010000 ~ 0x2001000F,把 2001 0000 对应的数据加载到了 DAR 中,随即引发了 DTE 错误。
, Z4 `2 c6 Y+ x. T; s: b% G. L6 o: I3 |8 r: l$ i

- X8 t& P2 }9 ] 09CU[0TD}Z~4SMB}R8P2]D9.png
  o! K' P8 K! y, h7 U# f# f& q' Z5 {+ T

! d3 O; O6 L8 a' E( `/ ?1 q4. 处理3 _: F" C% V8 ^  F9 X$ h4 ]3 }
由于增减全局变量、修改变量初值为零或非零,都会影响最终链接结果,故通过设置预编译选项对所有 DMA 链表数据结构变量的地址作出限制,来满足 4 字节对齐且不跨64K Byte 边界这个约束条件,再次编译链接后进行测试,SPI DMA 功能恢复正常。 % r: n1 a) d9 _! T+ z6 V/ Y
! W- b9 e$ p8 t

9 l- L5 z; I) g; y* H" s! K: F% p
5 O7 y3 N, Q8 b8 B) G/ w  k完整版请查看:附件* z: M& ?9 ~9 d/ `9 ]# A7 X# L
- D. _" L2 |# y5 i) g: _  Y1 P+ v
$ W+ y) V0 R! C" p1 ]

LAT1159_DMA不产生传输完成中断_v1.0.pdf

下载

267.4 KB, 下载次数: 0

赞 收藏 评论0 发布时间:2022-8-3 20:20

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版