PSOC6通过DMA读取不到ADC采样数据的问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
zhji_4006061
Level 3
Level 3
25 replies posted 50 sign-ins First solution authored

Hi  all :

  我想通过DMA读取ADC采样数据(不通过dma是可以读到采样数据的),dma组件通过tr_in连接adc的 eos,配置如下图:

adcdma.jpg

DMA组件的配置如下图:

dmaconfig.jpg

我初始化了一个500个成员的数组,期望将ADC的数据放到数组中保存。

dma初始化代码如下:

uint16_t  usData[500] = {0};

DMA_US_Start((uint32*) SAR->CHAN_RESULT[0], (void *)&usData[0]);

目前的情况是 usData中的数据一直为0,无法获取ADC采样数据,请问是DMA配置有问题吗?还是ADC的eos没触发?谢谢!

 

0 点赞
1 解答
YuZh
Moderator
Moderator
Moderator
100 replies posted 10 likes received 50 sign-ins

Hi:

看来是MA_US_Start((uint32*) SAR->CHAN_RESULT[0], (void *)&usData[0]);函数的问题,不能大包大揽,还是要一步步调用,我那会也在想,从你的图形界面来看,没啥配置问题,看来还是接口调用初始化DMA的问题。

在原帖中查看解决方案

0 点赞
4 回复数
YuZh
Moderator
Moderator
Moderator
100 replies posted 10 likes received 50 sign-ins

Hi:

不好意思,PSOC6 Creator我用的也不多,你稍等下,我先试一下,然后我再告诉您怎么正确使用。

0 点赞
YuZh
Moderator
Moderator
Moderator
100 replies posted 10 likes received 50 sign-ins

Hi:

能把完整的代码发一下吗。

谢谢

0 点赞
zhji_4006061
Level 3
Level 3
25 replies posted 50 sign-ins First solution authored

我今天在调试中解决了该问题,主要是修改了DMA初始化代码,如下

DMA_US_SetDescriptorType(&DMA_US_Descriptor_1, CY_DMA_2D_TRANSFER);

DMA_US_Init();

DMA_US_SetSrcAddress(&DMA_US_Descriptor_1, (uint32*) &ADC_US_SAR__HW->CHAN_RESULT[0UL]);
DMA_US_SetDstAddress(&DMA_US_Descriptor_1, (uint32*) usData);

DMA_US_ChannelEnable();
Cy_DMA_Enable(DMA_US_HW);

取代了之前的:

DMA_US_Start((uint32*) SAR->CHAN_RESULT[0], (void *)&usData[0]);

0 点赞
YuZh
Moderator
Moderator
Moderator
100 replies posted 10 likes received 50 sign-ins

Hi:

看来是MA_US_Start((uint32*) SAR->CHAN_RESULT[0], (void *)&usData[0]);函数的问题,不能大包大揽,还是要一步步调用,我那会也在想,从你的图形界面来看,没啥配置问题,看来还是接口调用初始化DMA的问题。

0 点赞