新聞中心

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

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

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

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

本文引用地址:http://m.butianyuan.cn/article/201611/318467.htm
二、SN74HC166與TPIC6A595

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

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

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

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級(jí)聯(lián),可以并行輸出3個(gè)字符的數(shù)據(jù)。先在3*8個(gè)CLK時(shí)鐘脈沖下將要發(fā)送的數(shù)據(jù)移入595,最后在RCK的上升沿?cái)?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級(jí)聯(lián),將4個(gè)字節(jié)的數(shù)據(jù)移位通過(guò)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í)鐘,完成并行數(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;

在最開(kāi)始介紹了SPI的數(shù)據(jù)傳輸CLK需要主機(jī)發(fā)出,主機(jī)需要想移位寄存器寫隨意的一個(gè)數(shù)。因?yàn)槲覀冎皇切枰杉斎?所以關(guān)閉SPI的輸出即OEN = 0;

四、總結(jié)

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

0



評(píng)論


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

關(guān)閉