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.
使用的软件时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)? 您能否展示您期望看到的内容与您实际看到的内容、以便我了解混淆点?