新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2014-3-18
- 在线时间
- 0 小时
|
发表于 2014-11-7 16:34:15
|
显示全部楼层
回复【12楼】将风汉王鑫:
---------------------------------
我按照你的意思设置了下,把DMA传输模式设为循环模式:DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
/* I/O????????????????PC5 */
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) != RESET) //?·±???·??ú?ú??EXTI Line????
{
DMA_endble();
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
ADC_DMACmd(ADC1, ENABLE);
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
void DMA1_Channel1_IRQHandler(void)
{
/* Test on DMA1 Channel1 Transfer Complete interrupt */
if(DMA_GetITStatus(DMA1_IT_TC1))
{
ADC_DMACmd(ADC1, DISABLE);
average();//?ó???ù??
printf("\r\n%4d %4d %4d %4d %4d %4d\r\n",sum[0],sum[1],sum[2],sum[3],sum[4],sum[5]);
DMA1->IFCR = DMA1_IT_TC1;
}
}
我是想在外部线中断函数里面开启ADC_DMA,然后再DMA中断函数里面关闭ADC_DMA ,并且处理数据,
但是DMA数据会错位,比如实际上sum[1]为4095,其他都为0,但是 偶尔会出现sum[2]=4095,其他为0
这个有遇到过吗 怎么解决呢? |
|