×
单片机 > 单片机程序设计 > 详情

CS5550读写程序

发布时间:2020-06-22 发布时间:
|
最近一直在写采集板的程序。

采用STM32F101与外部AD CS5550。

刚刚接触这个CS5550,感觉时序有点怪异。尤其是读的时候,在后3个指节,还要写SYNCO.

刚开始对这个非常不理解。后来参考了网上的一个程序。貌似网上就只有一个程序。于是有一点理解。就是说,单片机在读CS5550的数据时(也就是读MISO)还要往CS5550(MOSI)写数据。

CS5550读写大致是这样的。

读写都要32个周期。

前8个周期读写都是相同的,就是都要先写地址,然后读/写 地址的内容。

但是读的时候在后24个周期的时候要写3次SYNCO(11111110).这个是难点,容易被忽略。

刚开始我也琢磨了很久。

后来终于柳岸花明。

然后就是周期的选择,我是先低后高。看到网上很多程序都是先高后低。网上的程序我没有成功过。可能自己没设置好。

把自己的代码分享下,可能还有错误。大家可以指点下。

 

总之写程序要有耐心,可以模仿别人,但是千万复制。往往复制的都会是有问题的。

//延时都是精确延时,时间可以短一点没问题Delay_us(10)都行;

u32 Read_CS5550(u8 Read_Addr)
{
 u8 Num;
 u32 Read_Temp,Read_Data=0;
 CS5550_CS_1;
 Delay_us(50);
 CS5550_CS_0;
 Delay_us(100);
         //数据手册上说每次写的时候要等24个周期。自己试验后不需要等。
 for(Num=1;Num<=8;Num++)
 {
  if(Read_Addr&0x80)
   MOSI_1;
  else
   MOSI_0;
  SCK_0;
  Delay_us(1);
  SCK_1;
  Delay_us(1);
  Read_Addr=Read_Addr<<1;
 }//写命令字

  MOSI_1;
  for(Num=1;Num<=24;Num++)
 
  SCK_0;
  Delay_us(20);
  if(Num==7||Num==15||Num==23)//这里是难点,自己琢磨下。
  MOSI_0;
  if(Num==8||Num==16||Num==24)//这里是难点,自己琢磨下。

  MOSI_1;
  Read_Data=Read_Data<<1;
  Read_Temp=MISO;
  if(Read_Temp)
  Read_Data=Read_Data+1;
  Delay_us(200);
  SCK_1;
  Delay_us(200);
 
 }
  MOSI_1;
 CS5550_CS_1;
 Delay_us(200);
 return Read_Data;
 
}
//READ 修改。。

void Write_CS5550(u8 Write_Addr,u32 Write_Data)

 u8 num;
 CS5550_CS_1;
 Delay_us(50);

 CS5550_CS_0;
 Delay_us(50);
 
 
 MOSI_1;
 Delay_us(200);
 for(num=1;num<=8;num++)
  {
   if(Write_Addr&0x80)
    MOSI_1;
   else
    MOSI_0;
   SCK_0;
   Delay_us(200);
   SCK_1;
   Delay_us(200);
  
   Write_Addr=Write_Addr<<1;
  }//写命令字
 for(num=0;num<24;num++)
  {
   if(Write_Data&0x800000)
    MOSI_1;
   else
    MOSI_0;
   SCK_0;
   Delay_us(200);
   SCK_1;
   Delay_us(200);
   Write_Data=Write_Data<<1;
  }//写数据
  

 MOSI_1;
 SCK_0;
 Delay_us(100);
 CS5550_CS_1;

}

void Write_Command(u8 Command_Data)
{
 u8 NUM;
 CS5550_CS_1;
 Delay_us(100);
 CS5550_CS_0;
 Delay_us(200);
  for(NUM=1;NUM<=24;NUM++)
  {
   SCK_0;
   Delay_us(200);
   SCK_1;
   Delay_us(200);

  

 for(NUM=1;NUM<=8;NUM++)
  {
   if(Command_Data&0x80)
    MOSI_1;
   else
    MOSI_0;
   SCK_0;
   Delay_us(200);
   SCK_1;
   Delay_us(200);


   Command_Data= Command_Data<<1;
  }

  for(NUM=1;NUM<=24;NUM++)
  {
   SCK_0;
   Delay_us(200);
   SCK_1;
   Delay_us(200);

  }
 CS5550_CS_1;
 SCK_1;
 MOSI_1;
  
}


关键字:CS5550  读写程序  STM32F101与

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录