大家好!我最近在着手使用DSP来控制AD7768-1进行电压采样,但是遇到了问题,还请大家指点一二。我根据芯片手册上的内容,给寄存器0x14、0x15、0x18、0x19分别配置相对应的内容,另外,配置了寄存器0x1D,给GPIO3发送一个1us左右的低电平,使其通过SYNC_OUT向SYNC_IN发送一个低电平来更新上述寄存器的值,但是DRDY输出的频率没有发生改变,仍然是15KHz左右。以下是我使用的代码,SPI是用GPIO口模拟的,时序的话,我用示波器抓取显示,没问题。
//写入寄存器0x14,无CRC,24位
addr = 0x14;
数据= 0x05;
写入ToAD7768RViaSpi( 添加器, 数据) ;
(50) 延迟;
//写入寄存器0x15,晶振、低速16分频
addr = 0x15;
数据 = 0x44; //01_ 00_ 00_ 0_ 1_ 00
写入ToAD7768RViaSpi( 添加器, 数据) ;
(50) 延迟;
//写入寄存器0x19,sinc5滤波、x256
addr = 0x19;
数据= 0x83;
写入ToAD7768RViaSpi( 添加器, 数据) ;
(50) 延迟;
添加器 = 0x18;
数据= 0x90;
写入ToAD7768RViaSpi( 添加器, 数据) ;
(50) 延迟;
添加器 = 0x1D;
数据 = 0x48;/ 0_ 1_ 00_ 1_ 0_ 00
写入ToAD7768RViaSpi( 添加器, 数据) ;
(50) 延迟;
以下的代码是判断出DRDY的上升沿后,flag = 0,然后给GPIO3(STARTn)输出一个低电平,用来更新寄存器的值,这部分参考的是数据手册上 Ini
tializing the Recommended Interface 这部分内容
{(旗子=0){
GPIOPinWrite(SOC_GPIO_0_REGS, 14, GPIO_PIN_LOW) ;
(50) 延迟;
GPIOPinWrite(SOC_GPIO_0_REGS, 14, GPIO_PIN_HIGH);
迟延(1);
课间休息;
}
其它{
继续;
}
下面是我所使用的模拟SPI代码
写入 ToAD7768RViaSpi( int * 地址, int * data) {
SET_SYNC();//CS拉高
(五) 迟延(5);
CLR_SYNC();//CS拉低
延迟_us(5);
SPIWrite(address, data);//写数据
延迟_us(5);
SET_SYNC();//CS拉高,一次写结束
}
无效 SPIWrite( int * 地址, int * data) {
Int 值写 [2];
无符号 i = 0;
无符号j = 0;
ValueToWrite[0] = (*address) 0x3f;//取寄存器地址
ValueToWrite[1] = (*data) 0xff;//取寄存器值
for(i = 0; i 《 2; i++){
for (j = 0; j 《 8; j++){
CLR_SCLK();//SCK拉低
如果( 0x80 = = (value to write[ i] 0x80 ) {
SET_SDIN(); //Send one to SDI pin,如果当前位为1,SDI输出1
}
其它{
CLR_SDIN () ; /// 将零发送到 SDI 端点
}
迟延(1);
SET_SCLK();//SCK拉高
迟延(1);
ValueToWrite 《《= 1; //Rotate data
}
}
}