SPI:一種3線(有的沒有SS線(選擇主或從機模式))或4線的通信方式:
MOSI:主機出從機進數據線
MISO:主機進從機從數據線
SCK: 時鐘線
SS: 主從模式選擇線
工作過程的理解:設置好相應的配置后就可以發送或接收數據,當放送或接收完成后就會是SPIF置位,此時如果開了中斷就會就入中斷服務程序。如果沒開中斷就可以通過查詢該標志位來做相應的事。進入中段服務程序后,或者讀(寫)SPDR寄存器都可以清零SPIF標志位。從而可以開始下一次的傳輸
相應的寄存器
1:SCPR:控制寄存器:SPI的大部分設置
2:SPSR:標志寄存器:(查看一些標志(主要是SPIF位)和設置SPI速度)
3:SPDR:數據寄存器:
SS引腳的說明:(實質就是當配置為輸入時:是主機還是從機由輸入的電平來決定)
從機模式: 當 SPI 配置為從機時,從機選擇引腳 SS 總是為輸入。SS 為低將激活 SPI 接口,MISO
成為輸出 ( 用戶必須進行相應的端口配置 ) 引腳,其他引腳成為輸入引腳。當 SS 為高時
所有的引腳成為輸入, SPI 邏輯復位,不再接收數據。
SS引腳對于數據包/字節的同步非常有用,可以使從機的位計數器與主機的時鐘發生器同
步。當SS 拉高時SPI從機立即復位接收和發送邏輯,并丟棄移位寄存器里不完整的數據。
主機模式:當 SPI 配置為主機時 (SPCR 的 MSTR置位 ),用戶可以決定 SS 引腳的方向。
若 SS 配置為輸出,則此引腳可以用作普通的 I/O 口而不影響 SPI 系統。典型應用是用來
驅動從機的 SS 引腳。
如果 SS 配置為輸入,必須保持為高以保證 SPI 的正常工作。若系統配置為主機,SS 為
輸入,但被外設拉低,則 SPI 系統會將此低電平解釋為有一個外部主機將自己選擇為從
機。為了防止總線沖突, SPI 系統將實現如下動作:
1. 清零 SPCR 的 MSTR 位,使 SPI 成為從機,從而 MOSI 和 SCK變為輸入。
2. SPSR 的 SPIF 置位。若 SPI 中斷和全局中斷開放,則中斷服務程序將得到執行。
因此,使用中斷方式處理 SPI 主機的數據傳輸,并且存在 SS 被拉低的可能性時,中斷服
務程序應該檢查 MSTR 是否為 "1”。若被清零,用戶必須將其置位,以重新使能 SPI 主機
模式。
管腳配置
一:SCPR:控制寄存器:(SPI的大部分設置都在該寄存器)
二SPSR:標志寄存器:(查看一些標志和設置SPI速度,主要是用到SPIF這個標志位,接收完成和發送完成都會置位這個標志,進入中斷服務程序或訪問SPDR寄存 器都可以清零這個標志)
三SPDR:數據寄存器:
應用步驟:
1先根據是主還是從設置端口的模式(輸入還是輸出)
主機:SS MOSI SCK 為出 MISO為入
從機:SS MOSI SCK 為入 MISO 為出
2配置相應的寄存器(就三個寄存器,注意用到中斷時要先開總中斷)
3用中斷或查詢法發送或接收數據
注意:主機或者從機都可以發送或接收。發送完之后就可以馬上發下一個數據了。接收也是只要接收完了也可以馬上接收下一個數據了
一:發送:(一般用查詢方式發送比較好:此時只要查詢發送完畢的標志位SPIF是否置位)
常用:while(!(SPSR & (1< 例子: 主機發送(查詢方式)(只要發送完畢了就可以繼續發送了) //主機模式下發送1-255 #include #define uint unsigned int #define uchar unsigned char void spi_init(void) { PORTB |= (1< SPSR = 0x00; //SPI2x=0 } void SPI_send_data(char cData) { PORTB &=~ (1< while(!(SPSR & (1< } void Delay(uint z) // { unsigned int i,j; for(i=z;i>0;i--) for(j=2000;j>0;j--); } int main(void) { unsigned int i=0; spi_init(); while(1) { for(i=255;i>0;i--) { SPI_send_data(i); Delay(100); } } } 2從機接收(查詢方式) #include #include #define uchar unsigned char #define uint unsigned int void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0xFF; } void spi_init(void) { DDRB = (1<<5) |(1<<7); DDRB&=~(1<<4)|(1<<6); SPCR = 0x63; // SPI允許。從機方式 SPSR = 0x00; // SPI倍速.頻率為系統時鐘 } void init_devices(void) { port_init(); spi_init(); } //主函數 int main(void) { init_devices(); while(1) { while(!(SPSR & (1< _delay_loop_2(900); } } 3從機中斷方式接收數據(注意:當進入中斷服務程序后SPIF會自動清零) /*中斷方式接收數據*/ #include #include #define uchar unsigned char #define uint unsigned int //端口初始化 void port_init(void) { PORTA = 0xFF; DDRA = 0xFF; } void spi_init(void) { PORTB |= (1<<4) | (1<<5) | (1<<6) | (1<<7); // DDRB |= (1<<5) | (1<<7) | (1<<4); //Set MOSI, SCK AND SS as outputs SPCR = 0xE3; //SPI中斷使能,SPI使能,低位首發,從機模式,時鐘模式00,上升沿采樣;時鐘速率Fosc/128 SPSR = 0x00; //SPI2x=0 } void init_devices(void) { port_init(); spi_init(); sei();//開全局中斷 } //主函; int main(void) { init_devices(); while(1); } //SPI中斷函數 SIGNAL(SIG_SPI) { PORTA=SPDR; }
上一篇:AVR128單片機最小系統串口,外部中斷,跑馬燈,uCOS-II移植
下一篇:AVR128_uC/OS-II 移植代碼
推薦閱讀
史海拾趣
ECI公司深知人才是企業發展的關鍵因素。因此,公司高度重視人才的引進、培養和激勵。公司建立了完善的人才選拔機制,選拔具有潛力和才華的員工進行重點培養。同時,公司還提供了豐富的培訓和發展機會,幫助員工提升自身素質和能力。此外,ECI還建立了科學合理的薪酬制度和激勵機制,讓員工在為公司創造價值的同時也能獲得相應的回報。這種對人才的重視和投入讓ECI公司匯聚了一批優秀的員工隊伍,為公司的發展提供了有力的保障。
ECI公司深知人才是企業發展的關鍵因素。因此,公司高度重視人才的引進、培養和激勵。公司建立了完善的人才選拔機制,選拔具有潛力和才華的員工進行重點培養。同時,公司還提供了豐富的培訓和發展機會,幫助員工提升自身素質和能力。此外,ECI還建立了科學合理的薪酬制度和激勵機制,讓員工在為公司創造價值的同時也能獲得相應的回報。這種對人才的重視和投入讓ECI公司匯聚了一批優秀的員工隊伍,為公司的發展提供了有力的保障。
2014年,正泰公司接到了一份來自美國光伏巨頭SE的大訂單。然而,客戶對車間現場使用的安規測試儀的檢測方法提出了質疑,要求限期完成整改。面對這一挑戰,正泰公司的員工曹敬樂根據國際標準中的相關要求,結合實際參數,重新對檢測工裝進行改進設計和樣品制備。經過不斷測試和改進,最終滿足了外方的要求,訂單順利投產。這一事件不僅展示了正泰公司的技術實力和創新能力,也體現了公司對市場變化的敏銳度和應對挑戰的能力。
隨著技術的不斷發展,Corex Intervest Inc公司意識到要想在競爭激烈的電子行業中脫穎而出,必須不斷進行技術創新和產品升級。因此,公司加大了研發投入,引進了一批高端人才,積極研發新型電子產品。經過多年的努力,公司成功開發出了一系列具有創新性和市場競爭力的產品,如智能傳感器、高性能電源模塊等,為公司的發展奠定了堅實的基礎。
隨著環保意識的不斷提高,Eurohm Resistors公司積極響應綠色發展的號召。公司投入大量資源研發環保型電阻器產品,采用可再生材料和綠色生產工藝,降低產品對環境的影響。同時,公司還積極參與各種環保活動,推動行業的綠色發展。
隨著環保意識的不斷提高,Eurohm Resistors公司積極響應綠色發展的號召。公司投入大量資源研發環保型電阻器產品,采用可再生材料和綠色生產工藝,降低產品對環境的影響。同時,公司還積極參與各種環保活動,推動行業的綠色發展。
1).SOHC于DOHC兩者有什么優劣點? DOHC的設計是能使活瓣的角度更切合燃燒室的形狀,因此整體活瓣面積可增大,每個活瓣輕一點,慣性質量減少,進汽效率因而可提高.相反SOHC只有一枝凸輪軸,局限了活瓣的角度,基本惰性較高, ...… 查看全部問答∨ |
|
其實說到底信號完整性主要還是取決于參考平面的穩定性,電源完整性的作用是為系統所有的信號線提供完整的回流路徑。但在技術高速發展以及生產成本的控制下,往往不能為所有的信號線提供理想而完整的回流路徑,這就是說,在高速電路中,不能夠簡單地 ...… 查看全部問答∨ |
半橋式變壓器開關電源的優缺點 開關電源原理與設計(連載42) 1-8-2-6.半橋式變壓器開關電源的優缺點 半橋式變壓器開關電源與推挽式變壓器開關電源一樣,由于兩個開關管輪流交替工作,相當于兩個開關電源同時輸出功率,其輸出功率約等于單一開關電源輸出功率的兩倍。因此,半橋式變壓器開關電源輸出功率很大 ...… 查看全部問答∨ |
我只更改了一些Catelog的組件,編譯通不過,請給幫忙看看這是咋了? 錯誤列表如下: Error 1 Catalog Id "Bsp:Samsung:SMDK6410" duplicated in files "D:\\WINCE600\\platform\\SMDK6410\\catalog\\smdk6410.pbcxml" and "D:\\WINCE600\\platform ...… 查看全部問答∨ |
|
想用norflash做hive based,按照說的改好后運行 出現如下信息: Found pTOC signature. ROMHDR at Address 60000044h RomHdr.ulRAMStart=00FF0000h RomHdr.physfirst=29B00000h. Got EDBG_CMD_JUMPIMG Got EDBG_CMD_CONFIG, flags:0x00000000 ...… 查看全部問答∨ |
|
還有3個小時就是18號了,我就提前發啦哈,大家不見怪,怕明早起來晚了,晚上還要調試。使用HDL設計一個同步時序的分頻器,三分頻(每3個clk),counter在分頻時鐘的驅動下加1,counter位寬為8位。模塊大家隨意寫,為了統一,我稍規定下信號,三個是 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 有獎直播:安世半導體先進 SiC MOSFET 助力提升 EV-Charger 和 OBC 應用能效
- ADI有獎下載活動之21:ADI民用雷達解決方案
- 看是德科技利用校準降低儀器測量不確定度、提高測試精度 直播享好禮!
- 【新年活動】2023,兔 do list!
- 有獎直播:助力AI算力,下一代GPU服務器中卡緣高速互連解決方案哪里找?
- 有獎直播|5G多場景終端應用對連接器的新要求及Molex的5G連接方案
- 2018,EEWORLD邀請你定下新年成長計劃
- 【EE團拍賣】\\
- 下載有禮|是德科技電子書 《通過了解測試精度的基礎知識, 提高良率并降低風險》,不做“差不多先生”
- CadenceLIVE China 2022中國線上用戶大會 報名中!