本帖最后由 terrybuck 于 2010-8-26 11:22 编辑
CS5532的DOUT一直是高电平!发送31个0xff和1个0xfe,配置寄存器写rs=1,再读配置寄存器看RV, SDO一直是高 有没有复位都不知道 下面的设置写都没法写 更不用说读数据了,驱动程序我看了好多 都差不多 但好像没有卡在第一步的 郁闷啊 ps 晶振对的
const u8 ADResetData[5]={0x03,0x20,0x00,0x00,0x00};
const u8 ADSetData[5]={0x03,0x00,0x00,0x00,0x00};
const u8 ADInitData[15]={0x05, //写通道寄存器1
0x31,0xc0,0x00,0x00, //0x31:增益=64,15HZ,通道1
0x01,
0xfe,0x00,0x00,0x00, //通道0偏移寄存器
0x02, //增益寄存器,增益64
0x20,0x00,0x00,0x00,
};
void CS5532_init(){
int i=0;
u8 d=1;
IOSET=SPI0_CSB;
delay(1000);
IOCLR=SPI0_CSB;
for(i=0;i<31;i++)
MSPISendData(0xff);
MSPISendData(0xfe);
delay(10000);
for(i=0;i<5;i++)
MSPISendData(ADResetData); //复位CS5532, 写bit RS=1
while((d&0x10)==0){
MSPISendData(0x0b); //读配置寄存器,直到bit RV=1
delay(1000);
d=MSPISendData(0x00);
MSPISendData(0x00);
MSPISendData(0x00);
MSPISendData(0x00);
}
delay(1000);
for(i=0;i<5;i++)
MSPISendData(ADSetData);
while(d!=0x00){
MSPISendData(0x0b); //读配置寄存器,直到bit RV=0;
d=MSPISendData(0x00);
MSPISendData(0x00);
MSPISendData(0x00);
MSPISendData(0x00);
}
for(i=0;i<15;i++)
MSPISendData(ADInitData);
delay(100);
MSPISendData(0x81); //自偏移校准
MSPISendData(0x82); //自增益校准
附上主芯片LPC2103的SPI初始化
/***************配置SPI**************************/
/******SPI0初始化******/
int SPI0_init(u8 SPI_Fdiv){
if(SPI_Fdiv<8)
SPI_Fdiv=8; //分频数小于8时,令其等于8;
S0SPCCR=SPI_Fdiv&0xFE; //设置SP分频;F_SPI=Fpclk/SPI_Fdiv;保证分频数为偶数;
S0SPCR = SPI_MODE;
IODIR|=SPI0_CSB;
IOCLR=SPI0_CSB; //片选
return(0);
}
/************************************************/
//函数功能:向SPI0总线发送数据、并接受从机发回数据
// 入口参数: 待发送的数据data
// 出口参数: 接收到的数据
u8 MSPISendData(u8 data){
IOCLR=SPI0_CSB; //片选
S0SPDR=data;
while((S0SPSR&0x80)==0); //等待发送完毕
// S0SPSR=0x00;
IOSET=SPI0_CSB; //片选
return S0SPDR; //返回接收到的数据
} |