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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Atmega162串行外設(shè)接口SPI

          Atmega162串行外設(shè)接口SPI

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          一、Atmega162的SPI接口基本概念與工作原理

          SPI接口的全稱是"Serial Peripheral Interface",意為串行外圍接口。SPI主要使用4個信號:MOSI(master in slave out)、MISO(master out slave in)、SCK(串行時鐘)、CS(片選)。其中SCK由主機產(chǎn)生,作為傳輸?shù)耐綍r鐘,控制所有的數(shù)據(jù)傳輸。主機和外設(shè)都包含一個串行移位寄存器。主機通過向自己的SPI串行寄存器寫入一個字節(jié)來發(fā)起一次傳輸,然后通過MOSI信號線將數(shù)據(jù)傳給外圍設(shè)備,同時外設(shè)將自己移位寄存器中的內(nèi)容通過MISO信號線返給主機。這樣兩個移位寄存器中的內(nèi)容完成交換。也就是說,外設(shè)的寫操作和讀操作是同步完成的。在實際應(yīng)用中,如果只進行寫操作,則主機只需忽略收到的字節(jié)即可;如果主機要讀外設(shè)的數(shù)據(jù),必須發(fā)送一個自己來引發(fā)從機的傳輸,發(fā)送的這個字節(jié)可以是任意數(shù)據(jù)。

          本文引用地址:http://www.ex-cimer.com/article/201611/318467.htm
          二、SN74HC166與TPIC6A595

          SN74HC166 是8-BIT 并行加載移位寄存器。A~H為并行輸入管腳,SER串行輸入管腳,QH為輸出管腳,SH/LD管腳用于設(shè)置并行加載和移位模式,CLK為同步時鐘,控制數(shù)據(jù)傳輸。

          TPIC6A595是8-BIT移位寄存器。SER IN管腳串行輸入數(shù)據(jù), SER OUT管腳并行輸出數(shù)據(jù), SRCK為串行移位的脈沖, RCK的上升沿將使數(shù)據(jù)并行輸出到DRAIN0~DRAIN7。

          在電路中使用了4片74HC166的級聯(lián),采集32個IO點,使用3片595控制24個輸出端口。電路如下圖所示

          74H166數(shù)據(jù)采集

          595數(shù)據(jù)并行輸出

          電路中SCK,OEN,IEN分別接Atmega162的SPI接口。

          三、SPI接口和外設(shè)之間的數(shù)據(jù)傳輸

          使用Atemga162的SPI接口傳輸數(shù)據(jù),只要往其移位寄存器寫入要發(fā)送的數(shù)據(jù)即可。

          [cpp]view plaincopy
          1. voidSPIMasterTransmit(unsignedcharTranData)
          2. {
          3. SPDR=TranData;//數(shù)據(jù)放入SPI寄存器中
          4. while(!(SPSR&(1<<7)));//等待數(shù)據(jù)傳輸完畢
          5. }

          使用3片595級聯(lián),可以并行輸出3個字符的數(shù)據(jù)。先在3*8個CLK時鐘脈沖下將要發(fā)送的數(shù)據(jù)移入595,最后在RCK的上升沿數(shù)據(jù)將并行充DRAINx口輸出。

          [cpp]view plaincopy
          1. OEN=0;
          2. for(i=0;i<3;i++)
          3. SPIMasterTransmit(Data[i]);
          4. OEN=1;

          使用4片74HC166級聯(lián),將4個字節(jié)的數(shù)據(jù)移位通過SPI發(fā)送給Atemga162。

          [cpp]view plaincopy
          1. inti;
          2. OEN=0;//關(guān)閉SPI的輸出;
          3. IEN=0;//控制74HC166處于并行加載數(shù)據(jù)模式
          4. SPIMasterTransmit(0);//產(chǎn)生SPI數(shù)據(jù)傳送的時鐘,完成并行數(shù)據(jù)加載
          5. IEN=1;//控制74HC166處于移位模式
          [cpp]view plaincopy
          1. for(i=0;i<4;i++)
          2. {
          3. SPIMasterTransmit(0);
          4. IOCELL[i]=SPDR;
          5. }
          6. IEN=0;

          在最開始介紹了SPI的數(shù)據(jù)傳輸CLK需要主機發(fā)出,主機需要想移位寄存器寫隨意的一個數(shù)。因為我們只是需要采集輸入.所以關(guān)閉SPI的輸出即OEN = 0;

          四、總結(jié)

          當Atmega162只對外設(shè)進行讀操作,我們通過寫SPI移位寄存器來發(fā)出SCK,外設(shè)通過該時鐘才能將數(shù)據(jù)交換給SPI移位寄存器。對于數(shù)字芯片74HC166和595的操作,以及移位寄存器、鎖存器、觸發(fā)器等基本概念有些模糊,先學習再下篇繼續(xù)總結(jié)。

          0



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();