This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于28377D AD采样

Other Parts Discussed in Thread: CONTROLSUITE

TI工程师您好,有个28377D AD采样的问题描述如下,请指教:

双核工程,设计的两个CPU均通过DMA获取AD采样结果,测试结果是仿真模式下CPU1可以正常AD采样,CPU2 DMA中的数据不会变化。

  • 你好,CPU2在仿真模式下也读取不到DMA的值吗?
    可以参考以下帖子:e2echina.ti.com/.../302650
  • 谢谢您的回复,是的,就是仿真模式下读取不到DMA的值,是不是底层配置不正确啊,还有个前提,我的双核工程在单机模式下应该是都可以读取AD的值的,请指点,谢谢!
  • 这个可能性比较多,比如:触发DMA的ADC标志是否更新?DMA确实被触发了吗?DMA序列是否结束并生成ISR?DMA ISR是否在寻找正确的内存?
  • 谢谢您的回复,能不能再具体点,比如:
    1)触发DMA的ADC标志是否更新如何观察?
    2)DMA是否被触发怎么观察?
    3)DMA序列是否结束并生成ISR怎么确定?
    4)DMA ISR是否在寻找正确的内存如何确定?
  • 这里有个例程是实现的从EPWM到两个CPU的DMA集合你可以参考一下:C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Dual\dma_transfer_shared_peripheral
    一种调试方法是在代码的不同点或代码运行时直接检查“expressions window”窗口中的HW寄存器。
    比如,可以观察adcaregs.adcintflg.bit.adcint1寄存器,来查看ADC转换是否在ADCA上完成并将adcint标志置位。然后,你可以检查各个DMA寄存器以确认操作是否在那里动作了(可能是control.perintflg、control.transfersts或prioritystat.activests等等)。
    还可以在运行dma配置代码后设置断点,然后(代码停止后)通过在表达式窗口中写入control.perintfrc手动触发dma传输。
    也可以在ISR中为给定模块设置一个断点,以查看代码是否进入ISR,或者可以在ISR中增加一个全局变量并在表达式窗口中观察它。