基于AVR單片機SPI的串行設計
SPI(SerialPeripheralINTERFACE---串行外設接口)總線系統(tǒng)是一種同步串行外設接口,允許MCU與各種外圍設備以串行方式進行通信、數(shù)據(jù)交換,廣泛應用于各種工業(yè)控制領域?;诖藰藴?,SPI系統(tǒng)可以直接于各個廠家生產(chǎn)的多種標準外圍器件直接接口。SPI接口通常包含有4根線:串行時鐘(SCK)、主機輸入/從機輸出數(shù)據(jù)線(MISO)、主機輸出/從機輸入數(shù)據(jù)線(MOSI)和低電平有效的從機選擇線SS。在從機選擇線SS使能的前提下,主機的SCK脈沖將在數(shù)據(jù)線上傳輸主/從機的串行數(shù)據(jù)。主/從機的典型連接圖如圖(1)所示:
本文引用地址:http://m.butianyuan.cn/article/201611/317324.htm圖(1)主/從機的連接圖
串行外設接口SPI允許ATmega16和外設之間進行高速的同步數(shù)據(jù)傳輸。ATmega16SPI的特點如下:全雙工,3線同步數(shù)據(jù)傳輸,主/從機操作,LSB首先發(fā)送或MSB首先發(fā)送,7種可編程的比特率,傳送中斷結束,寫碰撞標志檢測,可以從閑置模式喚醒,作為主機時具有雙速模式(CK/2)。
如圖(2)所示,系統(tǒng)包括兩個移位寄存器和一個主時鐘發(fā)生器。通過將需要的從機的SS引腳拉低,主機啟動一次通信過程。主機和從機將需要的數(shù)據(jù)放到相應的移位寄存器,主機在SCK引腳上產(chǎn)生時鐘脈沖以交換數(shù)據(jù)。主機的數(shù)據(jù)從MOSI移出,從從機MISO移入。從機的數(shù)據(jù)從MISO移出,從從機MOSI移入。主機通過將從機的SS拉高實現(xiàn)與從機的同步。
圖(2)SPI主機-從機的互連
下面將介紹SPI的幾個特殊寄存器:
1.1SPI的控制寄存器—SPCR
SPIE為SPI中斷使能,置位后,只要SPSR寄存器的SPIF和SREG寄存器的全局中斷使能位置位,就會引發(fā)SPI中斷。SPE置位將使能SPI,DORD置位時數(shù)據(jù)的LSB首先發(fā)送;否則數(shù)據(jù)的MSB首先發(fā)送。MSTR置位時選擇主機模式,否則為從機。CPOL置位表示空閑SCK為高電平;否則空閑時SCK為低電平。CPHA決定數(shù)據(jù)是在SCK的起始沿采樣還是在SCK的結束沿采樣。通過對SPR1、SPR0進行設計,確定主機的SCK速率。
1.2SPI的狀態(tài)寄存器—SPSR
SPIF為中斷標志位,串行發(fā)送結束后,SPIF置位。若此時寄存器 SPCR的SPIE和全局中斷使能位置位,SPI中斷即產(chǎn)生。進入中斷例程后SPIF將自動清零。在發(fā)送當中對SPI數(shù)據(jù)寄存器SPDR寫數(shù)據(jù)將置位WCOL,SPI2X置位后SPI的速度加倍。
1.3SPI的數(shù)據(jù)寄存器—SPDR
SPDR數(shù)據(jù)寄存器為讀/寫寄存器,用來在寄存器文件SPI移位寄存器之間傳輸數(shù)據(jù)。寫寄存器將啟動數(shù)據(jù)傳輸,讀寄存器將讀取寄存器的接收緩沖器。SPI系統(tǒng)的發(fā)送方向只有一個緩沖器,而在接收方向有兩個緩沖器。也就是說,在發(fā)送時一定要等到移位過程全部結束后才能對SPI數(shù)據(jù)寄存器執(zhí)行寫操作。而在接收數(shù)據(jù)時,需要在下一個字符移位過程結束之前通過訪問SPI數(shù)據(jù)寄存器讀取當前接收到的字符。否則第一個字節(jié)將丟失。
比起8051使用軟件模擬時序實現(xiàn)SPI功能來,AVR的硬件SPI實在是先進了許多。通過讀寫相應的寄存器就能輕松實現(xiàn)SPI的操作,使得編程變得更加方面。下面是使用AVR SPI的幾個步驟:
- 首先,應設置相應管腳的讀寫寄存器以設定數(shù)據(jù)傳輸方向。在Mega16里,SPI的接口為以下管腳:PB4-PB7 (SS/MOSI/MISO/CLK)。如果工作在主模式則可以這么寫(PORTB=0xff; DDRB=0xBF; PB7(SCK):輸出 PB6(MISO):輸入 PB5(MOSI):輸出 PB4(SS):輸出)
- 接著還需要設定SPI工作寄存器,控制的寄存器只有三個:SPDR(SPI數(shù)據(jù)寄存器)、SPCR(SPI控制寄存器)、SPSR(SPI狀態(tài)寄存器),其中SPDR是讀寫移位寄存器中的值,SPSR中包括了SPIE:SPI中斷使能位 SPE:SPI使能位 DORD:數(shù)據(jù)傳送從最高位或最低位開始MSTR:主從工作方式選擇 COPL/CPHA:時鐘極性相位選擇 SPR1/SPR0:時鐘速率選擇;SPSR中主要是幾個狀態(tài)標志位,用來做軟件查詢,SPIF:SPI中斷標志位 WCOL:沖則可以如下設置突標志位 如果使用的是軟件查詢, SPCR中只需要置SPE和MSTR兩位。
- 隨后的工作就是往SPDR里讀寫數(shù)據(jù),需要注意的是一次最少讀寫一個Byte(8 bit)的數(shù)據(jù),這和硬件的設計有關。在讀取數(shù)據(jù)前需要先寫入數(shù)據(jù)。可以一次讀寫一個字節(jié),也可以塊讀寫,在OurAVR上的例程中這兩種方式均有.
評論