void CS5532_SPIInit(void)
{
unsigned char i;
unsigned int CS5532ID=0;
Delay_ms(20);
for(i=0;i<16;i++)
SPI_FLASH_SendByte(0xff);
SPI_FLASH_SendByte(0xfe);
for(i=0;i<5;i++)
SPI_FLASH_SendByte(cs5532ResetData[i]);
;
Delay_ms(20);
SPI_FLASH_SendByte(0x0b);
CS5532ID=SPI_ReadByte(); //返回值0x10 说明正确复位CS5532了 3.3V可以reset VD一定要跟单片机电压一样,当然单片机5V我就不知道了
SPI_ReadByte();
SPI_ReadByte();
SPI_ReadByte();
if(CS5532ID==0x10)
Uart0_Printf("Reset sucess \r\n");
CS5532_Config();
Delay_ms(500);
}
我的共享一下吧,这是SPI的。。
unsigned int ReadCs5532ID(void) //读id 复位cs5532
{
unsigned char i;
unsigned char reg0,reg1,reg2,reg3;
Delay_ms(20);
for(i=0;i<31;i++)
Cs5532_WriteByte(0xff); //初始化,写15个字节SYNC1
Cs5532_WriteByte(0xfe); //写一个字节的SYNC0
for(i=0;i<5;i++)
Cs5532_WriteByte(cs5532ResetData[i]); //reset cs5532
;;
Delay_ms(20);
//复位后RV会返回1(如果成功)。
Cs5532_WriteByte(0x0b); //从物理通道1配置寄存器读 //读寄存器的值
reg0=ReadCs5532_Reg();
reg1=ReadCs5532_Reg();
reg2=ReadCs5532_Reg();
reg3=ReadCs5532_Reg();
if(reg0==0x10) //复位成功,bitRV=1
{
Uart0_Printf("read cs5532id success");
}
else
{
Uart0_Printf("read cs5532id error");
}
Cs5532_WriteByte(0x03); //写配置寄存器
Cs5532_WriteByte(0x00);//
Cs5532_WriteByte(0x08);
Cs5532_WriteByte(0x00);
Cs5532_WriteByte(0x00);
Cs5532_WriteByte(0x05); //写通道寄存器
Cs5532_WriteByte(0x32);//
Cs5532_WriteByte(0x40);
Cs5532_WriteByte(0x32);
Cs5532_WriteByte(0x40);
Cs5532_WriteByte(0xc0);
return 0;
}
IO口模拟。
这款芯片我调试了很长时间,后面的干扰也是我一个人搞的。。读数据是基本的,抗干扰是最大的问题,直接影响到精度,办公室电脑很多的情况下开增益一个小时肯定会NG(芯片裸露的情况)。 |