发表于 2016-11-7 16:03:56

楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中断。

风铃草2 发表于 2016-11-7 16:04:54

安 发表于 2016-11-7 15:58
楼主用的哪个CPU。

#define DMA_BUFF_SIZE      500
这是源码

风铃草2 发表于 2016-11-7 16:06:16

安 发表于 2016-11-7 16:03
楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中 ...

DMA_ClearITPendingBit(DMA1_IT_GL1);这一句就是把 TCHT TE三个DMA中断标志都清掉了

风铃草2 发表于 2016-11-7 16:06:33

安 发表于 2016-11-7 16:03
楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中 ...

DMA_ClearITPendingBit(DMA1_IT_GL1);这一句就是把 TCHT TE三个DMA中断标志都清掉了

发表于 2016-11-7 16:08:32

楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完最后关闭。先测试一下HT和TC是否能正常传输。

风铃草2 发表于 2016-11-7 16:10:40

安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...

TC正常   HT第一次是在传输一半中断后面就变成一直是全部传输中断。

风铃草2 发表于 2016-11-7 16:13:20

安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...

还是一样,   变成了每次都全部传输

风铃草2 发表于 2016-11-7 16:19:41

安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...

最开始发现问题是这样的,   我设置AD采样,采样周期2.2us采样一次, 然后用DMA的方式,结果发现没中断一次需要920us,而我只设置了传输一半中断,buff大小500,也就是采250个AD就中断, 时间应该=250*2.2us=500多us。   时间上差了一倍。然后我就改成全部传输完成中断, 结果时间还是920us,明显出问题了

发表于 2016-11-7 16:22:23

清除中断的时候,单独清除试试。

风铃草2 发表于 2016-11-7 16:31:31

安 发表于 2016-11-7 16:22
清除中断的时候,单独清除试试。

还是不行,我跑下Cube的例程吧
页: 1 [2] 3 4 5
查看完整版本: DMA 传输一半中断