F28M36 强制启动ADC采样---采到数据不对

您好,

请问使用ADCSOCFRC1这个寄存器来强制ADC进行一次采用,有没有什么特殊的条件要求?

我用中断触发ADC采样,0~2ch寄存器读到的值都是正常的,

但是用Adc1Regs.ADCSOCFRC1.all=0x0007,强制让0~2ch采样,结果读到的值都是0x0FFF

  • @Caspar !

       我在去年在用F28M35时也遇到这个问题,我查了一下代码,查询和中断我都试过,好像中断方式结果有问题,折腾了很长时间,一会好,一会不好,不得不放弃了中断方式,最后改用用查询方式,没有问题,现已量产。不知道是不是用的那个芯片的Silicon Version有问题。

      正式代码如下:

       Adc1Regs.ADCSOCFRC1.all=0xffff;                        // Force ADC1 Start of Conversion,见TRM P921

       while((Adc1Regs.ADCCTL1.bit.ADCBSY !=0)  ||(Adc1Regs.ADCCTL1.bit.ADCBSYCHN != 0x0f));   // 判断BUSY是否空闲,且最后一个通道是否是SOC15, 见TRM P910和P911

      // while(Adc1Regs.ADCINTFLG.bit.ADCINT1==0);         // 等待ADCINT1信号产生(由SOC15转换完毕产生)    

      // Adc1Regs.ADCINTFLGCLR.bit.ADCINT1=1;              // 清除ADCINT1中断信号

       ADValue[0] =  Adc1Result.ADCRESULT0;  

       ADValue[1] =  Adc1Result.ADCRESULT1;    

         ..................... 

       ADValue[15] = Adc1Result.ADCRESULT15;

  • 您好,谢谢您的回复,

    按照您的建议做了尝试,但还是没有采样数据。

  • 附件是源程序,请各位帮忙看一下哪里有问题?多谢

  • @Caspar !

      下面这几句不用加吗?我的F28M35是有的!

         Adc1Regs.ADCCTL1.bit.ADCBGPWD = 1;                // Power ADC1 BG, Bandgap circuit(带隙基准电路) 上电, 见TRM P911 ADCCTL1
         Adc1Regs.ADCCTL1.bit.ADCREFPWD = 1;              // Power reference,Reference buffers circuit power down
         Adc1Regs.ADCCTL1.bit.ADCPWDN = 1;                  // Power ADC1, ADC power down
        Adc1Regs.ADCCTL1.bit.ADCENABLE = 1;               // Enable ADC1
        Adc1Regs.ADCCTL1.bit.ADCREFSEL = 0;               // Select interal BG, Internal/external reference select
        for(delay=0;delay<750000;delay++);                          // delay about 5ms

        FYI ! Good Luck!

  • 加上去试了,还是没有作用。