ADUC7061的ADC采不到数据

ADUC7061的ADC1采集ADC8的数据读出来的数据不正确。

如果改用ADC4通道,读取的数据则正常。

我感觉这个芯片有一些BUG,或者有些操作要求,可能没有在说明书里写明白。

我的板子电路是:DAC输出一个电压,然后通过一个1千欧的电阻输出到ADC8和ADC4。

因为ADC8和ADC4连接在一起,测量到的数据,不考虑误差的话,应该相近。

但实际读到的值有很大差别。

如果改变DAC输出值,ADC4的采集值会变化,但ADC8读到的值,几乎不变。

无论怎么改变DAC,ADC8读到的值,似乎都是固定的一个垃圾数值。

所以我怀疑,ADC8通道的值,和GP0的配置有关系,可能芯片内部被恒拉低或拉高。

但我检查我的代码,并没有发现有什么不合理的地方。

请帮忙看看是什么问题,谢谢。

代码如下:

#include "ResGf.h"
int main()
{
volatile signed long s;
signed char N = -1;
char Err = 0;
float fN = 0;

PLLKEY1 = 0xaa;
PLLCON = 0x00;
PLLKEY2 = 0x55;

POWKEY1 = 0x1;
POWCON0 = 0x38; // Set core to max CPU speed of 10.24Mhz
POWKEY2 = 0xF4;

POWKEY3 = 0x76;
POWCON1 = 0x024;
POWKEY4 = 0xB1;

DACCON = 0x0013;
DACDAT = 0x04ff0000;

ADCCFG |= 0x4;
while(1)
{

ADCFLT = 0x8083;

GP0CON0 = 0x00000000; //p0.0~p0.4 gpio
GP0PAR = 0x00; //01110
GP0DAT = 0xfbfb0000;

GP0KEY1 = 0x7;
GP0CON1 = 0x1; // adc
GP0KEY2 = 0x13;

ADC0CON = 0;
ADC1CON = 0x878c;;

s = ADCSTA;
s = ADC0DAT;
s = ADC1DAT;
//////////
ADCMDE = 0x83;
////
ADC1CON = 0x800c | 0x0480;//ch 8
//ADC1CON = 0x800c | 0x0480;//ch 9
//ADC1CON = 0x800c | 0x0300;//ch 4

s = ADC1DAT;
s = ADCSTA;
ADCMDE = 0x82;
do
{
s = ADCSTA;
if (s & 0x2000) //adc1cerr
{
Err |= 1; //over range
}
} while(!(s & 0x2));

s = ADC1DAT;
ADCMDE = 0x83;

//3. exit adc
ADCMDE = 0x83; //idle
ADCFLT = 0x80ff;
ADC1CON = 0x78c; //internally shorted

GP0CON0 = 0x00001011; //back to spi
GP0PAR = 0x04;
GP0DAT = 0x1b010000;

GP0KEY1 = 0x7;
GP0CON1 = 0x0; // exit adc
GP0KEY2 = 0x13;
}
}