新聞中心

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://butianyuan.cn/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é)

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

0



評論


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

關(guān)閉