我现在将几个用于算法的模拟量,分配到了F28377D的ADCA 和 ADCB中,同时用PWM产生SOC 触发采样,用ADCA的EOC5触发ADCA1_INT中断,现在问题是,ADCA的EOC5只能代表ADCA中的五个通道采样完了,不知道ADCB的五个通道是不是采样完成,如果把ADCB的采样值带入算法中,不知道准不准,如果不行,不知道有什么方法解决吗
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.
我现在将几个用于算法的模拟量,分配到了F28377D的ADCA 和 ADCB中,同时用PWM产生SOC 触发采样,用ADCA的EOC5触发ADCA1_INT中断,现在问题是,ADCA的EOC5只能代表ADCA中的五个通道采样完了,不知道ADCB的五个通道是不是采样完成,如果把ADCB的采样值带入算法中,不知道准不准,如果不行,不知道有什么方法解决吗
你好,你可以通过以下代码确保ADCB采样完成了:
//wait for ADCB to complete, then acknowledge flag
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
然后再处理采样结果
这样就可以保证采样都完成了!!
或者我是不是可以用EOC15来触发中断,ADCA的EOC15发生了,那么ADCB的所用通道也应该都采完了吧,是不是可以理解成,ADCA 和 ADCB两个大模块获得触发后并行进行采样,不分先后,每个模块内部都遵循SOC0--SOC15这样的优先级进行,也就是说两个大模块的EOC会同时发生呢?
程序可以按你的适当考虑,还可以调整采样时间,采样时间也可以调整的。但最最保险的做法如下
加上以下语句保证你万无一失!
//wait for ADCB to complete, then acknowledge flag
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1
那如果我想让DMA直接将采集结果放在存储单元里,不想通过CPU执行指令,怎么做?