ST意法半导体
直播中

李中宏

7年用户 1313经验值
私信 关注
[问答]

DMA多缓冲区的CT寄存器在转换后并没有改变是怎么回事?

我正在尝试让 ADC 上的多缓冲区 DMA 工作。我修改了“HAL_ADC_Start_DMA”函数以使用“HAL_DMAEx_MultiBufferStart_IT”而不是“HAL_DMA_Start_IT”。
但是由于某些原因,M0 Completion Callback 在切换到 M1 缓冲区之前执行了多次。
  • uint32_t bit = READ_BIT(((DMA_Stream_TypeDef   *)hadc1.DMA_Handle->Instance)->CR, DMA_SxCR_CT);
  •   printf("BIT: %srn", bit ? "1" : "0");
我在 IRQ 处理程序中有这个(在 M0 或 M1 转换完成回调上),由于某种原因,流程如下:
位:1
位:1
位:1
位:0
位:0
位:1
位:1
位:1
位:0
位:0
位:1
位:1
位:0
如您所见,它并没有像它应该的那样切换 CT(M0 M1 M0 M1 M0 等...),但缓冲区在切换之前被多次使用。有什么想法可能会成为问题吗?
谢谢。

回帖(1)

王海燕

2023-1-6 10:26:34
ISR 是不是太长/太慢了,以至于在它完成时会发生几次 CT 位翻转?(printf 在 ISR 中?)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分