新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2017-3-25
- 在线时间
- 35 小时
|
14金钱
我有个关于DMA的疑问。最近试了一个2路AD采集,用了ADC1和ADC2,采样周期都为3个ADCCLK,ADCCLK为36MHz,这样每一路需要用时15/36=0.41us。然后我用的DMA把采到的数据传到变量HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&data1,M1*N1);
HAL_ADC_Start_DMA(&hadc2,(uint32_t *)&data2,M2*N2);
然后在DMA的中断里把采集到的值直接DA输出,程序段如下:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc==&hadc1)
{
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, data1[0][0]);
}
if(hadc==&hadc2)
{
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, data2[0][0]);
}
}
data1和data2都是只有一个变量的二维数组uint16_t[1][1]。用示波器看发现只有DAC_CHANNEL_1有输出,DAC_CHANNEL_2是输出了一个高电平3.2V(可以不用纠结这个),如图1。然后我把开启DMA的语句交换了一下,就变成了DAC通道2有输出,DAC1没有,图2。我觉得可能是每个通道的采样周期设置的太小导致的一些问题,所以我试着把采样周期调整到480cycles,这样每个通道的采样时间为492/36=13.6us,然后发现DAC通道1和2都有输出,图3。但是为什么会出现这样的现象呢,是因为ADC1和ADC2是同一个DMA2的不同流,由于设置采样周期太短时出现冲突了?求大神解答
|
|