您好,
请问使用ADCSOCFRC1这个寄存器来强制ADC进行一次采用,有没有什么特殊的条件要求?
我用中断触发ADC采样,0~2ch寄存器读到的值都是正常的,
但是用Adc1Regs.ADCSOCFRC1.all=0x0007,强制让0~2ch采样,结果读到的值都是0x0FFF
您好,
请问使用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!