ADUC7061是有些问题的,比如通过JLINK调试,STEP BY STEP模式下,读取的ADC1DAT数据是16位而不是24位,如果改用某个特定版本的ULINK,则可以显示24位。这个是
仿真调试工具和芯片接口上出了问题。但无论如何,归类为BUG是没有问题的。我不想讨论这个细节,我只是说ADUC7061其实也有很多BUG。不要全部归责到用户使用是否熟悉上。
ADC1可以采集通道1~9,1~5是专用通道,6~9是和SPI、I2C复用的。
用ADC去采集1~5通道的数据,是没有问题的。这个确实也是比较简单的。
但我用同样的代码去采集ADC8通道,就问题大了。
当然,会把芯片脚的复用功能切换到模拟上,即把初始的GPIO功能改到模拟输入。然后读取ADC值。
按DATAHEET操作,不行。
我的板子是ADC4和ADC8连接在一起的,ADC5接地AGND,单端模式,读ADC4没有问题,正确且正常,但读ADC8的数据,读到的值在0x5fexx~0x607xx之间变化,换个芯片,也是这样。
我个人认为,ADI芯片的配置代码,可能存在一些BUG,导致配置可能需要特定的顺序或者特定的要求,理解为BUG的意思是:至少DATASHEET里没有说明,用户无法猜测到。
通道4~通道8的差别是这样的。就一句差别:
ADC1CON = 0x8004 | 0x0480;//ch 8
//ADC1CON = 0x800c | 0x0300;//ch 4
端口的配置是这样的:
GP0CON0 = 0x00000000; //p0.0~p0.4 gpio
GP0PAR = 0x0f; //01110
GP0DAT = 0x10100000;
GP0KEY1 = 0x7;
GP0CON1 = 0x1; // adc
GP0KEY2 = 0x13;
我还试过,GP0CON1 修改后再配置GP0复用,以测试是否有顺序要求,但效果不对。
为了检测芯片脚是否短路,我使用过ADC8复用的SPI功能,SPI用来驱动显示屏,工作正常(测ADC8的时候,显示屏当然会取下)。
这个简单的功能,验证了好几天,实在想不到有什么遗漏的地方可以测试,只能归结为芯片BUG。
看看有没有哪位师傅,有兴趣帮一下。谢谢
(注:这个芯片用五六年了,不会有低级错误,估计是芯片BUG,我以前处理过好几BUG,就这个芯片的)
附代码:
#include "ResGf.h"
int main()
{
vola
tile 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;
while(1)
{
ADCCFG = 0x84;
ADCFLT = 0x8083;
GP0CON0 = 0x00000000; //p0.0~p0.4 gpio
GP0PAR = 0x0f; //01110
GP0DAT = 0x10100000;
GP0KEY1 = 0x7;
GP0CON1 = 0x1; // adc
GP0KEY2 = 0x13;
ADC0CON = 0;
ADC1CON = 0x878c;;
s = ADCSTA;
s = ADC0DAT;
s = ADC1DAT;
//////////
ADCMDE = 0x83;
////
ADC1CON = 0x8004 | 0x0480;//ch 8
//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 = 0x10100000;
GP0KEY1 = 0x7;
GP0CON1 = 0x0; // exit adc
GP0KEY2 = 0x13;
}
}