讨论一个问题ADUC7061

ADUC7061,这个芯片用来做一个产品,已经卖6年了。

以前用JLINK调试,发现24位的ADC,用JLINK和ULINK调试读数据,只显示16位。

也就是说调试的时候,没法获得24位数据,不能进入DEBUG,不管是单步还是RUN。

当然,写入FLASH后,上电运行,通过显示屏显示,则24位数据是对的。

我曾经在某个特定的版本,KEIL4的时候,用单步调试的方式下,成功读取到24位ADC数据。后来固件变化以后,或者其它原因,再没读到过。

这个是几年前的事情。

现在的情况是,

如果我设置DAC值,P0口设置成GPIO和模拟输入,本来是两个互相没关联的功能模块,居然会出错。

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

ADUC7061将PO口设置成模拟输出,就是GP0CON1 = 0x1;,设置成GPIO,就是GP0CON1 = 0x0.

问题是这样的,如果我设置DAC为0.6V,

SetDacInmv(600);
while(1)
{

T2CLRI = 0x55;

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

DelayMs(5);


GP0KEY1 = 0x7; 
GP0CON1 = 0x0; 
GP0KEY2 = 0x13;

DelayMs(5);
}

将P0口交替设置为GPIO和模拟端口。

就会发现:

1. 如果采用DEBUG进入,然后单步或者RUN模式执行。用示波器看DAC输出,结果是一条直线,即直流电压,0.6V。

2.如果下载FLASH,不要连JLINK,或者ULINK,然后上电发现示波器输出是个方波,0.9V和0.6V之间切换。

延时够长,不存在建立时间的问题。更何况,是方波,不是缓慢上升或下降。

问题是:如果说24位ADC不正常,是JLINK或者ULINK的问题,那么脱离了JLINK或ULIKN, DAC就不正常工作。

问题是:究竟是调试器有问题呢?还是ADIC芯片有问题呢?看DAC输出,似乎是调试器的复位或者初始化行为,修复了ADCI芯片的BUG.

当然,如果没有调试器,这个芯片,总是无法正确输出DAC的,在P0设置为模拟输入的时候。

当然,我现在只是好奇,问一下。我通过这段时间调试,发现ADI芯片是不可靠的,低级错误太多,而且售后环节不顺畅,打算换GD32F150+外置ADC方案。