单片机/MCU论坛
直播中

发生的方式

8年用户 1139经验值
擅长:处理器/DSP
私信 关注
[问答]

ADUC7061设置DAC值,P0口设置成GPIO和模拟输入,为什么会报错呢?

ADUC7061如果我设置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方案。

回帖(1)

李鸿洋

2024-1-11 11:46:09
根据给出的信息,ADUC7061芯片设置P0口为GPIO和模拟输入时会报错。这可能是因为在设置GPIO和模拟输入之前,需要先解除特殊功能寄存器(GP0KEY1和GP0KEY2)的保护。正确的操作顺序应该是先设置GP0KEY1和GP0KEY2,然后再设置GP0CON1。例如:

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

这样就可以成功设置P0口为模拟输入。

同样的道理,要设置P0口为GPIO,也需要解除保护,并按正确的顺序进行设置。例如:

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

这样就可以成功设置P0口为GPIO。

建议仔细检查设置DAC值和P0口功能的顺序是否正确,并确保在设置P0口功能前解除保护。此外,也要确保其他相关寄存器和配置正确,以避免出错。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分