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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR單片機(jī)SPI的串行設(shè)計(jì)

          基于AVR單片機(jī)SPI的串行設(shè)計(jì)

          作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          1、AVR單片機(jī)SPI接口

            SPI(SerialPeripheralINTERFACE---串行外設(shè)接口)總線系統(tǒng)是一種同步串行外設(shè)接口,允許MCU與各種外圍設(shè)備以串行方式進(jìn)行通信、數(shù)據(jù)交換,廣泛應(yīng)用于各種工業(yè)控制領(lǐng)域?;诖藰?biāo)準(zhǔn),SPI系統(tǒng)可以直接于各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口。SPI接口通常包含有4根線:串行時(shí)鐘(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線(MISO)、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線(MOSI)和低電平有效的從機(jī)選擇線SS。在從機(jī)選擇線SS使能的前提下,主機(jī)的SCK脈沖將在數(shù)據(jù)線上傳輸主/從機(jī)的串行數(shù)據(jù)。主/從機(jī)的典型連接圖如圖(1)所示:

          本文引用地址:http://www.ex-cimer.com/article/201611/317324.htm

          圖(1)主/從機(jī)的連接圖

           串行外設(shè)接口SPI允許ATmega16和外設(shè)之間進(jìn)行高速的同步數(shù)據(jù)傳輸。ATmega16SPI的特點(diǎn)如下:全雙工,3線同步數(shù)據(jù)傳輸,主/從機(jī)操作,LSB首先發(fā)送或MSB首先發(fā)送,7種可編程的比特率,傳送中斷結(jié)束,寫碰撞標(biāo)志檢測,可以從閑置模式喚醒,作為主機(jī)時(shí)具有雙速模式(CK/2)。

           如圖(2)所示,系統(tǒng)包括兩個(gè)移位寄存器和一個(gè)主時(shí)鐘發(fā)生器。通過將需要的從機(jī)的SS引腳拉低,主機(jī)啟動(dòng)一次通信過程。主機(jī)和從機(jī)將需要的數(shù)據(jù)放到相應(yīng)的移位寄存器,主機(jī)在SCK引腳上產(chǎn)生時(shí)鐘脈沖以交換數(shù)據(jù)。主機(jī)的數(shù)據(jù)從MOSI移出,從從機(jī)MISO移入。從機(jī)的數(shù)據(jù)從MISO移出,從從機(jī)MOSI移入。主機(jī)通過將從機(jī)的SS拉高實(shí)現(xiàn)與從機(jī)的同步。

          圖(2)SPI主機(jī)-從機(jī)的互連

           下面將介紹SPI的幾個(gè)特殊寄存器:

          1.1SPI的控制寄存器—SPCR

           SPIE為SPI中斷使能,置位后,只要SPSR寄存器的SPIF和SREG寄存器的全局中斷使能位置位,就會(huì)引發(fā)SPI中斷。SPE置位將使能SPI,DORD置位時(shí)數(shù)據(jù)的LSB首先發(fā)送;否則數(shù)據(jù)的MSB首先發(fā)送。MSTR置位時(shí)選擇主機(jī)模式,否則為從機(jī)。CPOL置位表示空閑SCK為高電平;否則空閑時(shí)SCK為低電平。CPHA決定數(shù)據(jù)是在SCK的起始沿采樣還是在SCK的結(jié)束沿采樣。通過對(duì)SPR1、SPR0進(jìn)行設(shè)計(jì),確定主機(jī)的SCK速率。

          1.2SPI的狀態(tài)寄存器—SPSR

           SPIF為中斷標(biāo)志位,串行發(fā)送結(jié)束后,SPIF置位。若此時(shí)寄存器 SPCR的SPIE和全局中斷使能位置位,SPI中斷即產(chǎn)生。進(jìn)入中斷例程后SPIF將自動(dòng)清零。在發(fā)送當(dāng)中對(duì)SPI數(shù)據(jù)寄存器SPDR寫數(shù)據(jù)將置位WCOL,SPI2X置位后SPI的速度加倍。

          1.3SPI的數(shù)據(jù)寄存器—SPDR

           SPDR數(shù)據(jù)寄存器為讀/寫寄存器,用來在寄存器文件SPI移位寄存器之間傳輸數(shù)據(jù)。寫寄存器將啟動(dòng)數(shù)據(jù)傳輸,讀寄存器將讀取寄存器的接收緩沖器。SPI系統(tǒng)的發(fā)送方向只有一個(gè)緩沖器,而在接收方向有兩個(gè)緩沖器。也就是說,在發(fā)送時(shí)一定要等到移位過程全部結(jié)束后才能對(duì)SPI數(shù)據(jù)寄存器執(zhí)行寫操作。而在接收數(shù)據(jù)時(shí),需要在下一個(gè)字符移位過程結(jié)束之前通過訪問SPI數(shù)據(jù)寄存器讀取當(dāng)前接收到的字符。否則第一個(gè)字節(jié)將丟失。

          比起8051使用軟件模擬時(shí)序?qū)崿F(xiàn)SPI功能來,AVR的硬件SPI實(shí)在是先進(jìn)了許多。通過讀寫相應(yīng)的寄存器就能輕松實(shí)現(xiàn)SPI的操作,使得編程變得更加方面。下面是使用AVR SPI的幾個(gè)步驟:

          • 首先,應(yīng)設(shè)置相應(yīng)管腳的讀寫寄存器以設(shè)定數(shù)據(jù)傳輸方向。在Mega16里,SPI的接口為以下管腳:PB4-PB7 (SS/MOSI/MISO/CLK)。如果工作在主模式則可以這么寫(PORTB=0xff; DDRB=0xBF; PB7(SCK):輸出 PB6(MISO):輸入 PB5(MOSI):輸出 PB4(SS):輸出)

          • 接著還需要設(shè)定SPI工作寄存器,控制的寄存器只有三個(gè):SPDR(SPI數(shù)據(jù)寄存器)、SPCR(SPI控制寄存器)、SPSR(SPI狀態(tài)寄存器),其中SPDR是讀寫移位寄存器中的值,SPSR中包括了SPIE:SPI中斷使能位 SPE:SPI使能位 DORD:數(shù)據(jù)傳送從最高位或最低位開始MSTR:主從工作方式選擇 COPL/CPHA:時(shí)鐘極性相位選擇 SPR1/SPR0:時(shí)鐘速率選擇;SPSR中主要是幾個(gè)狀態(tài)標(biāo)志位,用來做軟件查詢,SPIF:SPI中斷標(biāo)志位 WCOL:沖則可以如下設(shè)置突標(biāo)志位 如果使用的是軟件查詢, SPCR中只需要置SPE和MSTR兩位。

          • 隨后的工作就是往SPDR里讀寫數(shù)據(jù),需要注意的是一次最少讀寫一個(gè)Byte(8 bit)的數(shù)據(jù),這和硬件的設(shè)計(jì)有關(guān)。在讀取數(shù)據(jù)前需要先寫入數(shù)據(jù)??梢砸淮巫x寫一個(gè)字節(jié),也可以塊讀寫,在OurAVR上的例程中這兩種方式均有.


          評(píng)論


          技術(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); })();