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 的AD采样 EOC中断问题



我现在将几个用于算法的模拟量,分配到了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;

    然后再处理采样结果

    这样就可以保证采样都完成了!!

  • 我也用28377,希望多多交流!!

  • 或者我是不是可以用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执行指令,怎么做?