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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > avr單片機(jī)SPI串行外設(shè)接口初始化配置及說明

          avr單片機(jī)SPI串行外設(shè)接口初始化配置及說明

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          串行外設(shè)接口 SPI允許 ATmega16 和外設(shè)或其他 AVR 器件進(jìn)行高速的同步數(shù)據(jù)傳輸。7 種可編程的比特率,主機(jī)或從機(jī)操作,全雙工, 3 線同步數(shù)據(jù)傳輸,可以從閑置模式喚醒 ,作為主機(jī)時具有倍速模式 (CK/2)

          /*
          PB7 SCK (SPI 總線的串行時鐘 )
          PB6 MISO (SPI 總線的主機(jī)輸入 / 從機(jī)輸出信號 )
          PB5 MOSI (SPI 總線的主機(jī)輸出 / 從機(jī)輸入信號 )
          PB4 SS (SPI 從機(jī)選擇引腳 )
          SCK – 端口 B, Bit 7 SCK :SPI 通道的主機(jī)時鐘輸出,從機(jī)時鐘輸入端口。工作于從機(jī)模式時,不論 DDB7 設(shè)
          置如何,這個引腳都將設(shè)置為輸入。工作于主機(jī)模式時,這個引腳的數(shù)據(jù)方向由 DDB7 控
          制。設(shè)置為輸入后,上拉電阻由 PORTB7 控制。
          MISO – 端口 B, Bit 6 MISO :SPI 通道的主機(jī)數(shù)據(jù)輸入,從機(jī)數(shù)據(jù)輸出端口。工作于主機(jī)模式時,不論 DDB6 設(shè)
          置如何,這個引腳都將設(shè)置為輸入。工作于從機(jī)模式時,這個引腳的數(shù)據(jù)方向由 DDB6 控
          制。設(shè)置為輸入后,上拉電阻由 PORTB6 控制。
          MOSI – 端口 B, Bit 5 MOSI : SPI 通道的主機(jī)數(shù)據(jù)輸出,從機(jī)數(shù)據(jù)輸入端口。工作于從機(jī)模式時,不論 DDB5 設(shè)
          置如何,這個引腳都將設(shè)置為輸入。當(dāng)工作于主機(jī)模式時,這個引腳的數(shù)據(jù)方向由 DDB5
          控制。設(shè)置為輸入后,上拉電阻由 PORTB5 控制。
          SS – 端口 B, Bit 4 SS: 從機(jī)選擇輸入。工作于從機(jī)模式時,不論 DDB4設(shè)置如何,這個引腳都將設(shè)置為輸入。
          當(dāng)此引腳為低時 SPI 被激活。工作于主機(jī)模式時,這個引腳的數(shù)據(jù)方向由 DDB4 控制。設(shè)
          置為輸入后,上拉電阻由 PORTB4 控制。
          簡單定義:
          引腳 方向SPI主機(jī) 方向SPI從機(jī)
          MOSI 用戶定義 輸入
          MISO 輸入 用戶定義
          SCK 用戶定義 輸入
          SS 用戶定義 輸入
          //*************************************SPI 控制寄存器SPCR***************************************
          SPI 控制寄存器SPCR

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

          bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
          SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
          SPIE: 使能SPI 中斷
          置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中斷使能位置位,就會引發(fā)
          SPI 中斷
          SPE: 使能SPI
          SPE 置位將使能SPI。進(jìn)行任何SPI 操作之前必須置位SPE
          DORD: 數(shù)據(jù)次序
          DORD 置位時數(shù)據(jù)的LSB 首先發(fā)送;否則數(shù)據(jù)的MSB 首先發(fā)送
          MSTR: 主/ 從選擇
          MSTR置位時選擇主機(jī)模式,否則為從機(jī)。如果MSTR為"1”,SS配置為輸入,但被拉
          低,則MSTR 被清零,寄存器SPSR 的SPIF 置位。用戶必須重新設(shè)置MSTR 進(jìn)入主機(jī)
          模式。
          CPOL: 時鐘極性
          CPOL 置位表示空閑時SCK 為高電平;否則空閑時SCK 為低電平。
          CPOL 功能
          CPOL 起始沿結(jié)束沿 CPOL
          0 上升沿下降沿 0
          1 下降沿上升沿 1

          SPR1, SPR0: SPI 時鐘速率選擇1 與0
          確定主機(jī)的SCK 速率。SPR1 和SPR0 對從機(jī)沒有影響。SCK 和振蕩器的時鐘頻率fosc
          關(guān)系如下表所示:
          SCK 和振蕩器頻率的關(guān)系
          SPI2X SPR1 SPR0 SCK
          0 0 0 fosc/4
          0 0 1 fosc/16
          0 1 0 fosc/64
          0 1 1 fosc/128
          1 0 0 fosc/2
          1 0 1 fosc/8
          1 1 0 fosc/32
          1 1 1 fosc/64
          CPHA :數(shù)據(jù)模式
          決定數(shù)據(jù)是在 SCK 的起始沿采樣還是在 SCK 的結(jié)束沿采樣
          相對于串行數(shù)據(jù), SCK 的相位和極性有4 種組合。CPHA 和CPOL 控制組合的方式。SPI
          數(shù)據(jù)傳輸格式。每一位數(shù)據(jù)的移出和移入發(fā)生于SCK不同的信號跳變沿,以保證有足夠的時
          間使數(shù)據(jù)穩(wěn)定。
          CPOL 與CPHA 功能
          模式 起始沿 結(jié)束沿 SPI
          CPOL 0 CPHA=0 采樣(上升沿) 采樣(下降沿) 0
          CPOL 0 CPHA=1 設(shè)置(上升沿) 采樣(下降沿) 1
          CPOL 1 CPHA=0 采樣(下降沿) 采樣(上升沿) 2
          CPOL 1 CPHA=1 采樣(下降沿) 采樣(上升沿) 3
          ///****************************SPI 狀態(tài)寄存器SPSR*********************************************
          SPI 狀態(tài)寄存器SPSR
          bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
          SPIF WCOL – – – – – SPI2X
          SPIF: SPI 中斷標(biāo)志
          串行發(fā)送結(jié)束后,SPIF 置位。若此時寄存器SPCR 的SPIE 和全局中斷使能位置位
          SPI中斷即產(chǎn)生。如果SPI 為主機(jī), SS 配置為輸入,且被拉低, SPIF 也將置位
          進(jìn)入中斷服務(wù)程序后SPIF自動清零?;蛘呖梢酝ㄟ^先讀SPSR,緊接著訪問SPDR來對
          SPIF清零。
          WCOL: 寫碰撞標(biāo)志
          在發(fā)送當(dāng)中對SPI 數(shù)據(jù)寄存器SPDR寫數(shù)據(jù)將置位WCOL。WCOL可以通過先讀SPSR,緊接
          著訪問SPDR 來清零。
          Bit 5..1 – Res: 保留
          保留位,讀操作返回值為零。
          SPI2X: SPI 倍速
          置位后SPI 的速度加倍。若為主機(jī),則SCK 頻率可達(dá)CPU 頻率的一半。若為從機(jī),
          只能保證fosc /4。
          ATmega16的SPI接口同時還用來實(shí)現(xiàn)程序和EEPROM的下載和上載。

          //********************************SPI 數(shù)據(jù)寄存器SPDR**************************************
          SPI 數(shù)據(jù)寄存器SPDR
          bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
          MSB LSB
          SPI 數(shù)據(jù)寄存器為讀/寫寄存器,用來在寄存器文件和SPI移位寄存器之間傳輸數(shù)據(jù)。寫
          寄存器將啟動數(shù)據(jù)傳輸,讀寄存器將讀取寄存器的接收緩沖器。
          */
          #include
          #include

          #pragma interrupt_handler SPI_END: iv_SPI_STC
          void SPI_MasterInit(void)// 初始化為主機(jī)
          {
          DDRB = (1<SPCR = (1<}
          void SPI_MasterTransmit(char cData) //主機(jī)數(shù)據(jù)發(fā)送
          {
          SPDR = cData; // 啟動數(shù)據(jù)傳輸
          while(!(SPSR & (1<}
          void SPI_SlaveInit(void)// 將SPI初始化為從機(jī)
          {
          DDRB = (1<SPCR = (1<}
          char SPI_SlaveReceive(void)//從機(jī)數(shù)據(jù)接收
          {
          while(!(SPSR & (1<return SPDR;// 返回數(shù)據(jù)
          }

          void SPI_END()
          {

          //add your code here!

          }



          評論


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