打印

请教CS5532驱动问题

[复制链接]
2773|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
terrybuck|  楼主 | 2010-8-25 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;    //返回接收到的数据
  
}

相关帖子

沙发
terrybuck|  楼主 | 2010-8-26 10:09 | 只看该作者
没人回啊  自顶

使用特权

评论回复
板凳
jancey| | 2010-8-26 10:27 | 只看该作者
匠人没有看到:(

使用特权

评论回复
地板
terrybuck|  楼主 | 2010-8-26 11:18 | 只看该作者
高手来啊  这cs5532 郁闷  时序 下降沿输出 上升沿采样  没错啊  继续求教   芯片是LPC2103 用的spi总线读的

使用特权

评论回复
5
terrybuck|  楼主 | 2010-8-27 08:51 | 只看该作者

使用特权

评论回复
6
jianzhangx| | 2013-5-16 11:38 | 只看该作者
for(i=0;i<5;i++)
  MSPISendData(ADResetData); //复位CS5532, 写bit RS=1
有问题,不应该用循环,单独写试试:
MSPISendData(0x03);
MSPISendData(0x20);
MSPISendData(0x00);
MSPISendData(0x00);
MSPISendData(0x00);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝