<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          CS5550讀寫程序

          作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
          最近一直在寫采集板的程序。

          采用STM32F101與外部AD CS5550

          本文引用地址:http://www.ex-cimer.com/article/201611/321484.htm

          剛剛接觸這個CS5550,感覺時序有點怪異。尤其是讀的時候,在后3個指節(jié),還要寫SYNCO.

          剛開始對這個非常不理解。后來參考了網(wǎng)上的一個程序。貌似網(wǎng)上就只有一個程序。于是有一點理解。就是說,單片機在讀CS5550的數(shù)據(jù)時(也就是讀MISO)還要往CS5550(MOSI)寫數(shù)據(jù)。

          CS5550讀寫大致是這樣的。

          讀寫都要32個周期。

          前8個周期讀寫都是相同的,就是都要先寫地址,然后讀/寫 地址的內(nèi)容。

          但是讀的時候在后24個周期的時候要寫3次SYNCO(11111110).這個是難點,容易被忽略。

          剛開始我也琢磨了很久。

          后來終于柳岸花明。

          然后就是周期的選擇,我是先低后高??吹骄W(wǎng)上很多程序都是先高后低。網(wǎng)上的程序我沒有成功過??赡茏约簺]設置好。

          把自己的代碼分享下,可能還有錯誤。大家可以指點下。

          總之寫程序要有耐心,可以模仿別人,但是千萬復制。往往復制的都會是有問題的。

          //延時都是精確延時,時間可以短一點沒問題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);
          //數(shù)據(jù)手冊上說每次寫的時候要等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;
          }//寫數(shù)據(jù)

          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;

          }




          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();