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.

TMS320F280039C: 实现ADC触发DMA时,触发了DMA中断,但数据并没有转移,这是为什么

Part Number: TMS320F280039C
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

使用的软件时CCS20.0,通过sysconfig配置外设。DMA和ADC的配置如图。

在debug过程中,发现DMA中断会被触发,但是数据并没有发生转移,查看寄存器地址发现DST_ADDR_ACTIVE和SRC_ADDR_ACTIVE的地址与赋予的地址一致,但读取地址存储的数据发现DST_ADDR_ACTIVE的数据始终为0,而SRC_ADDR_ACTIVE会随采样数据变化而变化,这是为什么

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您好

    如何检查 DMA 中断是否被触发? ISR 中的断点? 如果中断被触发、但您没有看到传输的数据、这将表明 DMA 和 ADC 模块之间存在同步问题。 我建议在 C2000ware 中的 adc_ex6_soc_continuous_dma 示例中进行设置后对您的代码进行建模(如果您尚未进行该设置) 路径:[C2000ware 路径]/driverlib/f28003x/examples/adc/adc_ex6_soc_continuous_dma.

  • 已经解决了,但是我觉得我还是没有太理解burst和transfer应当如何配合。

    我是这样解决的:使用一个长度为10个元素的数组,将该数组地址作为传输终点地址,然后配置如下:

    我有几个疑问:

    1.首先是如果我设置burst size为1,transfer size为10,终点地址的burst step设置为1,transfer step设置为-10的话,这样只会有数组第一个元素会被赋值。

    这是什么原因,我这样做的目的是想实现10次burst后传输一次。

    2.另外就是如果我是直接使用变量,设置burst size为1,transfer size为1,终点地址的burst step设置为1,transfer step设置为-1的话,变量会直接没有数据存入。(图中Vol_adcdata = 0)

    这又是什么原因。

    对于以上两个问题我很困惑,希望可以得到解答,谢谢!

  • 您好

    以下是两种情况下的设置的一些说明:

    1.首先是如果我设置burst size为1,transfer size为10,终点地址的burst step设置为1,transfer step设置为-10的话,这样只会有数组第一个元素会被赋值。

    屏幕截图中的配置包括:

    BURST SIZE = 10.

    TRANSFER SIZE = 1

    那么、每次触发 DMA 时、它都会尝试移动超过10个字。 由于您启用了连续模式、因此 DMA 通道在传输之间将保持启用状态。 SRC 突发阶跃和 SRC 传输阶跃为0、因此移动的数据将始终来自同一地址。 对于 dest 配置(dest burst step 1和 dest transfer step 为-10)、写入数据的地址将在每次突发之间下移1在传输之间上移10。 

    2.另外就是如果我是直接使用变量,设置burst size为1,transfer size为1,终点地址的burst step设置为1,transfer step设置为-1的话,变量会直接没有数据存入。(图中Vol_adcdata = 0)

    屏幕截图中的配置包括:

    BURST SIZE = 1

    TRANSFER SIZE = 1

    所以、每次触发 DMA 时、它都会尝试移动1个字。 由于您启用了连续模式、因此 DMA 通道在传输之间将保持启用状态。 SRC 突发阶跃和 SRC 传输阶跃为0、因此移动的数据将始终来自同一地址。 对于 dest 配置(dest burst step 1和 dest transfer step 为-1)、写入数据的地址将在每次突发之间下移1、在传输之间上移1、这将是每隔一个字。

    SRC 和 DEST 地址基本上是2个指针、该指针将在每次突发(突发步长)和每次传输(传输步长)之间向上/向下移动。

    您能展示在 srcAddr 和 destAddr 中存储的内容(传输后)吗? 您是否在通道结束 ISR 断点处停止程序(和 DMA)? 您能否展示您期望看到的内容与您实际看到的内容、以便我了解混淆点? 

x 出现错误。请重试或与管理员联系。