Atmega162串行外設(shè)接口SPI
一、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
- voidSPIMasterTransmit(unsignedcharTranData)
- {
- SPDR=TranData;//數(shù)據(jù)放入SPI寄存器中
- while(!(SPSR&(1<<7)));//等待數(shù)據(jù)傳輸完畢
- }
使用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
- OEN=0;
- for(i=0;i<3;i++)
- SPIMasterTransmit(Data[i]);
- OEN=1;
使用4片74HC166級(jí)聯(lián),將4個(gè)字節(jié)的數(shù)據(jù)移位通過(guò)SPI發(fā)送給Atemga162。
[cpp]view plaincopy
- inti;
- OEN=0;//關(guān)閉SPI的輸出;
- IEN=0;//控制74HC166處于并行加載數(shù)據(jù)模式
- SPIMasterTransmit(0);//產(chǎn)生SPI數(shù)據(jù)傳送的時(shí)鐘,完成并行數(shù)據(jù)加載
- IEN=1;//控制74HC166處于移位模式
[cpp]view plaincopy
- for(i=0;i<4;i++)
- {
- SPIMasterTransmit(0);
- IOCELL[i]=SPDR;
- }
- 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)論