快速 SPI 端口可通過(guò) GPIO 引腳進(jìn)行位沖擊,并作為具有 SPI 端口的 8051 兼容微控制器的低成本替代方案。本應(yīng)用筆記所示的代碼利用8051特有的特性,使用最少的額外代碼創(chuàng)建快速SPI端口。
雖然可以使用帶有SPI端口的8051兼容微控制器,但具有SPI端口通過(guò)GPIO引腳位敲擊的低成本器件通常足以滿足許多應(yīng)用的需求。此處顯示的代碼利用特定于 8051 內(nèi)核的功能,以最小的工作量創(chuàng)建快速 SPI 端口。#define語(yǔ)句中的 CPHA、CPOL 和CS_TOGGLE_BETWEEN_BYTES常量初始化宏,這些宏根據(jù)正在實(shí)現(xiàn)的 SPI 端口類型定制代碼。 預(yù)處理器在編譯時(shí)而不是運(yùn)行時(shí)執(zhí)行此代碼定制,從而節(jié)省了寶貴的時(shí)鐘周期,如果使用決策結(jié)構(gòu)(即常規(guī)的 if-else 語(yǔ)句),這些周期將被浪費(fèi)。
下面的代碼包括利用 8051 內(nèi)核功能所需的特定于 8051 的 C 命令。盡管這些命令是特定于編譯器的(在本例中為 8051 的 Keil μVision v2 開發(fā)工具),但所有適用于 8051 兼容設(shè)備的“好”C 編譯器都包含類似的命令。
檢查代碼,PORT_0定義為 sfr 類型,它提醒編譯器此標(biāo)簽是 8051 特殊功能寄存器 (SFR)。由于此 SFR 是位可尋址的,因此 sbit 類型定義引用特定 SFR 位以充當(dāng) SPI 端口引腳的標(biāo)識(shí)符。spiTmp 聲明中使用的 bdata 類型允許將此變量放置在 8051 內(nèi)核的直接可尋址 RAM 內(nèi)的特殊位可尋址內(nèi)存中。同樣,sbit 類型定義了將引用 spiTmp 變量中特定位的標(biāo)識(shí)符。
要通過(guò) SPI 端口發(fā)送的字節(jié)將加載到全局字節(jié)數(shù)組 spiData 中。將此變量聲明為全局變量允許 SPI 發(fā)送/接收函數(shù)訪問 spiData,而無(wú)需將其作為參數(shù)傳遞。使用數(shù)據(jù)標(biāo)識(shí)符聲明它強(qiáng)制編譯器將數(shù)組存儲(chǔ)在 8051 內(nèi)核內(nèi)最快的可訪問內(nèi)存(直接可尋址內(nèi)存)中。
spiReadWriteBlock 函數(shù)包含位撞擊 SPI 端口的代碼。它使用此 SPI 端口有效地傳輸 spiData 數(shù)組中的每個(gè)字節(jié),從數(shù)組中的最后一個(gè)元素到第一個(gè)元素。使用此反向順序訪問數(shù)組允許與零進(jìn)行比較(請(qǐng)參閱代碼),由于 8051 指令集,這意味著更快的組裝。當(dāng) spiReadWriteBlock 函數(shù)完成時(shí),使用 SPI 端口讀取的字節(jié)將替換 spiData 數(shù)組中的原始數(shù)據(jù),再次從數(shù)組中的最后一個(gè)元素開始到第一個(gè)元素。
請(qǐng)注意,代碼經(jīng)過(guò)優(yōu)化,可以發(fā)送和接收大于一個(gè)字節(jié)的數(shù)據(jù)塊。對(duì)于單字節(jié)傳輸,應(yīng)刪除 spiReadWriteBlock 中的循環(huán)結(jié)構(gòu)和局部變量。(這可以使用預(yù)處理器完成。
當(dāng)針對(duì)Maxim DS89C430/450系列8051兼容微控制器進(jìn)行編譯時(shí),該位撞擊式SPI端口的運(yùn)行速度略高于2Mbps,如圖1所示。此外,該代碼只需要兩個(gè)字節(jié)的可直接尋址RAM和139字節(jié)的閃存用于代碼空間(包括SPI端口初始化和主程序循環(huán))。
圖1.這些波形表示當(dāng)CPHA、CPOL和CS_TOGGLE_BETWEEN_BYTES常數(shù)設(shè)置為1時(shí),位撞擊SPI端口的輸出。此固件使用 8051 內(nèi)核中的位可尋址存儲(chǔ)器來(lái)提高 SPI 端口的速度。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151423 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120366 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52098
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論