張曼 緱麗敏
摘 要:介紹了嵌入式PowerPC處理器MPC8270的體系架構(gòu)和串行外設(shè)接口(SPI)控制器的工作原理?;赩xWorks和MPC8270嵌入式系統(tǒng)開發(fā)平臺,詳細(xì)介紹了MPC8270處理器芯片自帶的SPI驅(qū)動程序的設(shè)計實(shí)現(xiàn)過程,描述了SPI的初始化、中斷處理以及數(shù)據(jù)發(fā)送、數(shù)據(jù)接收等關(guān)鍵技術(shù)?;贛PC8270的SPI設(shè)計具有較強(qiáng)的實(shí)用性。
關(guān)鍵詞:MPC8270;SPI;VxWorks操作系統(tǒng);串行外設(shè)接口
MPC8270是廣泛應(yīng)用于通信和網(wǎng)絡(luò)系統(tǒng)的一款通用處理器,具有強(qiáng)大的接口能力,其中自帶的SPI接口可以應(yīng)用于EEPROM、FLASH、實(shí)時時鐘、AD轉(zhuǎn)換器,還有數(shù)字信號處理器和數(shù)字信號解碼器之間。本文在基于VxWorks操作系統(tǒng)的嵌入式處理器模塊上實(shí)現(xiàn)了通過SPI與AD轉(zhuǎn)換器通信,采集AD信號的功能。
本文基于VxWorks操作系統(tǒng)的SPI驅(qū)動開發(fā),使得MPC8270上的SPI做為主設(shè)備,與SPI從設(shè)備AD7940進(jìn)行AD模擬量數(shù)據(jù)采集。
1 MPC8270處理器SPI硬件功能模型
MPC8270處理器的SPI硬件功能模型如圖1所示:
從硬件功能模型可以看出,SPI硬件接口通過配置的外部復(fù)用管腳收發(fā)SPI信號,通過SPI BRG時鐘從MPC8270處理器獲取時鐘,當(dāng)接收數(shù)據(jù)時,交換寄存器將從SPI總線上將接收的數(shù)據(jù)獲取出來,放入接收寄存器中,當(dāng)發(fā)送數(shù)據(jù)時,將發(fā)送數(shù)據(jù)寄存器中的數(shù)放入交換寄存器中,通過交換寄存器送給SPI總線,發(fā)送出去。發(fā)送寄存器和接收寄存器通過MPC8270處理器內(nèi)的外部總線連接到通訊處理器內(nèi)核(CP)中。SPI總線的工作狀態(tài)包括發(fā)送接收數(shù)據(jù)長度、時鐘相位和極性設(shè)置等通過SPI模式寄存器進(jìn)行設(shè)置,SPI模式寄存器通過60x總線與CPU內(nèi)核連接。
2 SPI驅(qū)動的設(shè)計與實(shí)現(xiàn)
2.1 SPI初始化
SPI初始化的具體步驟如下:
1)分配管腳,配置PD16、PD17、PD18、PD19管腳對應(yīng)的PPAR寄存器對應(yīng)位為1,PDIR寄存器對應(yīng)位為0,PSOR對應(yīng)位為1。
2)分配并初始化SPI操作所需的內(nèi)存空間。Internal data ram memory map定義了內(nèi)部RAM空間,SPI parameter ram 的參數(shù)定義在這部分空間內(nèi),接收和發(fā)送BD的數(shù)據(jù)結(jié)構(gòu)也定義在這部分空間內(nèi),而BD的buffer pointer不定義在這部分空間內(nèi),使用的memory空間。本項目中SPI parameter ram對應(yīng)的internal Data Ram地址為0xF00089FC,在此地址上配置SPI parameter ram對應(yīng)的地址為0xf0000100,接收緩存描述符(Receive Buffer Descriptor,RxBD)表的基地址和指針配置地址為0xf0000140,發(fā)送緩存描述符(Transmit Buffer Descriptor,TxBD)表的基地址和指針配置地址為0xf0000148。BD的個數(shù) 為1,接收緩存描述符配置的buffer pointer大小為32字節(jié),發(fā)送緩存描述符配置的buffer pointer大小為32字節(jié)。
3)初始化SPI模式配置寄存器。SPI模式配置寄存器會配置SPI波特率、SPI傳輸數(shù)據(jù)長度、SPI主/從模式、SPI數(shù)據(jù)方向(按照從高字節(jié)到低字節(jié),或者低字節(jié)到高字節(jié)順序發(fā)送)
4)初始化接收發(fā)送BD。初始化接收和發(fā)送BD時,需要將最后一個BD描述符的控制狀態(tài)字設(shè)置為0x2000表示這是BD table中的最后一個BD。
5)初始化SPI parameter ram。在初始化SPI parameter ram時,需要將接收BD基地址和指針設(shè)置為0xf0000140,再將發(fā)送BD基地址和指針設(shè)置為0xf0000148。
6)設(shè)置SPI Event Register和SPI Mask Register,清中斷狀態(tài)寄存器。
7)設(shè)置SPI mode 寄存器,使能SPI操作。
2.2 SPI的接收處理實(shí)現(xiàn)
SPI的接收處理是首先初始化RxBD和TxBD,雖然是接收操作,但是對于MPC8270 SPI來說接收數(shù)據(jù)的同時,會發(fā)送數(shù)據(jù);發(fā)送數(shù)據(jù)和接收數(shù)據(jù)是在一個時鐘周期不同的沿完成的,因此,接收數(shù)據(jù)時也要初始化發(fā)送BD。設(shè)置接收BD的控制狀態(tài)字為READY,發(fā)送BD的控制狀態(tài)字為EMPTY。然后,設(shè)置SPISEL信號為零;之后,設(shè)置SPI mode寄存器為發(fā)送數(shù)據(jù)開始。
通過查詢SPI Event寄存器和SPI Mask寄存器判斷接收是否結(jié)束,并查詢接收緩沖區(qū)是否正確。如果接收正確設(shè)置SPISEL信號為1,并從接收BD中讀取有效數(shù)據(jù)。如果出錯則返回錯誤。
SPI接收處理實(shí)現(xiàn)如下。
2.3 SPI的發(fā)送處理實(shí)現(xiàn)
SPI的發(fā)送處理是首先初始化RxBD和TxBD,將需要發(fā)送的數(shù)據(jù)拷貝到發(fā)送BD的buffer中,設(shè)置發(fā)送BD的控制狀態(tài)字為EMPTY,接收BD的控制狀態(tài)字為READY。然后,設(shè)置SPISEL信號為零;之后,設(shè)置SPI mode寄存器為發(fā)送數(shù)據(jù)開始。
通過查詢SPI Event寄存器和SPI Mask寄存器判斷發(fā)送是否結(jié)束,并查詢發(fā)送數(shù)據(jù)是否正確。如果發(fā)送正確設(shè)置SPISEL信號為1。如果出錯則返回錯誤。
SPI發(fā)送實(shí)現(xiàn)處理實(shí)現(xiàn)如下。
2.4 中斷處理
MPC8270 SPI在連續(xù)收發(fā)數(shù)據(jù)時,每完成一次發(fā)送或者接收數(shù)據(jù)后,都需要清中斷狀態(tài)標(biāo)志寄存器SPI Event寄存器和SPI Mask寄存器,否則連續(xù)傳輸時,會出現(xiàn)錯誤。
3 性能測試結(jié)果分析
通過測試設(shè)備對SPI進(jìn)行測試,在25M波特率下,連續(xù)收發(fā)數(shù)據(jù)3600s,收發(fā)數(shù)據(jù)正確,丟包率為0。在12.5M波特率下,連續(xù)收發(fā)數(shù)據(jù)3600s,收發(fā)數(shù)據(jù)正確,丟包率為0。在6.25M波特率下,連續(xù)收發(fā)數(shù)據(jù)3600s,收發(fā)數(shù)據(jù)正常,丟包率為0。通過長時間的數(shù)據(jù)收發(fā)測試,驗證了SPI驅(qū)動程序的穩(wěn)定性和可靠性。
4 結(jié)語
通過性能測試說明,利用低功耗,通訊處理能力強(qiáng)的MPC8270的SPI接口,可以比較容易的實(shí)現(xiàn)SPI通訊處理。本文介紹了MPC8270內(nèi)部的SPI的通訊原理及驅(qū)動程序設(shè)計方法,對其他的設(shè)計應(yīng)用有一定的借鑒作用。
參考文獻(xiàn):
[1] Freescale.MPC8280Power QUICCII Family Reference Manual[EB/OL].[2013-03-18].http://www.freescale.com.
[2] Freescale.PowerQUICCⅡ Family Hardware Specifications[EB/OL].[2013-03-25].http://www.freescale.com.
作者簡介:
張曼(1982-),女,陜西西安人,碩士,工程師,嵌入式計算機(jī)軟硬件開發(fā);
緱麗敏(1986-),女,陜西西安人,碩士,工程師,研究方向為嵌入式計算機(jī)設(shè)計等。