前言
隨著信息時(shí)代的到來,各種信息的集成和交互越來越頻繁。在運(yùn)動(dòng)控制系統(tǒng)中需要處理和存儲(chǔ)的信息量也與日俱增,大部分運(yùn)動(dòng)控制系統(tǒng)中核心芯片MCU自身已經(jīng)集成了較大容量的存儲(chǔ)器(與以前MCU相比),但僅僅依靠MCU自身的存儲(chǔ)器一般很難滿足系統(tǒng)對(duì)大容量存儲(chǔ)器的要求,因此必須找到高效的方法實(shí)現(xiàn)對(duì)系統(tǒng)的存儲(chǔ)容量的擴(kuò)展。
SPI是一個(gè)高效的、數(shù)據(jù)位數(shù)可編程的高速輸入/輸出串行流接口,幾乎所有MCU生產(chǎn)廠商都提供對(duì)SPI接口的支持,目前高速的SPI接口時(shí)鐘頻率已達(dá)到60M甚至更高,SPI接口一般只用4根連接線即可完成所有的數(shù)據(jù)通訊和控制操作,因此不占用MCU的數(shù)據(jù)總線和地址總線,極大的節(jié)約了系統(tǒng)的硬件資源,是一種經(jīng)濟(jì)實(shí)用的擴(kuò)展系統(tǒng)存儲(chǔ)容量的方法。
本文利用TI公司最新的32位DSP―TMS320F2812自身的增強(qiáng)型SPI接口,結(jié)合性價(jià)比高的串行接口Flash,高效地實(shí)現(xiàn)了對(duì)系統(tǒng)存儲(chǔ)容量的擴(kuò)展,具有非常大的實(shí)用價(jià)值和推廣意義。
系統(tǒng)總體介紹
本文的FLASH擴(kuò)展實(shí)現(xiàn)的硬件系統(tǒng)是具有Ethernet接口的基于DSP和CPLD的運(yùn)動(dòng)控制板,系統(tǒng)總體結(jié)構(gòu)如圖所示。
核心芯片是TI公司最新推出的的32位定點(diǎn)DSP―TMS320F2812和ALTERA公司的MAXII系列CPLD―EPM1270G。主要完成對(duì)系統(tǒng)輸入信號(hào)檢測(cè)、處理、各種控制算法以及和各種接口(Ethernet接口和RS232接口)的通訊,運(yùn)動(dòng)控制系統(tǒng)的部分控制程序、大量的初始化數(shù)據(jù)和系統(tǒng)的配置信息都存放在ST公司的大容量串口FLASH:m25p80中,通過DSP增強(qiáng)型的SPI接口實(shí)現(xiàn)與核心處理器DSP的高速通信。
Flash擴(kuò)展的硬件設(shè)計(jì)
1. TMS320F2812的增強(qiáng)型SPI接口特性:
(1)波特率:可編程的125種不同的波特率。
(2)有效數(shù)據(jù)長(zhǎng)度:可編程的1~ 16位有效數(shù)據(jù)長(zhǎng)度
(3)支持4種時(shí)鐘模式:不帶相位延時(shí)的下降沿模式、帶相位延時(shí)的下降沿模式、
不帶相位延時(shí)的上升沿模式和帶相位延時(shí)的上升沿模式。
(4)可連續(xù)操作的特性:
Ø 16級(jí)發(fā)送和接收FIFO;
Ø 可編程的延時(shí)發(fā)送控制
時(shí)鐘模式應(yīng)根據(jù)具體的應(yīng)用中與MCU接口器件的操作時(shí)序決定,選取原則是保證在器件進(jìn)行讀寫操作過程中,所要求的CLK時(shí)鐘沿到來時(shí)所操作的數(shù)據(jù)必須已經(jīng)提供在相應(yīng)的引腳上。例如:當(dāng)接口器件(本系統(tǒng)中是FLASH)在上升沿接收數(shù)據(jù),在下降沿發(fā)送數(shù)據(jù)時(shí),MCU應(yīng)該選擇不帶相位延時(shí)的下降沿方式。
增強(qiáng)型的SPI接口具有16位16級(jí)深度的發(fā)送和接收FIFO,這為高速連續(xù)操作提供了可能,在發(fā)送和接收時(shí)可以最多進(jìn)行32個(gè)字節(jié)的連續(xù)操作,從而極大地提高了通訊效率;可編程的中斷優(yōu)先級(jí)使用戶可以根據(jù)具體系統(tǒng)應(yīng)用,確定產(chǎn)生中斷時(shí)已經(jīng)發(fā)送或者接收到的字節(jié)數(shù),提高了系統(tǒng)通訊效率和系統(tǒng)的靈活性;可編程的延時(shí)發(fā)送控制功能使用戶可以根據(jù)系統(tǒng)要求配置每次發(fā)送時(shí)的延時(shí)時(shí)間,當(dāng)接口器件操作速度相對(duì)MCU慢時(shí),在不改變SPI接口時(shí)鐘的條件下增加發(fā)送延時(shí)時(shí)間,既保證了接口操作的高速性時(shí)也滿足了慢速接口器件的操作時(shí)序要求。這些增強(qiáng)的特性為SPI接口的擴(kuò)展提供了極大的靈活性。
2.ST公司串行接口FLASH芯片m25p80特性:
m25p80是意法半導(dǎo)體公司推出的8M大容量串行接口FLASH芯片,芯片采用2.7~3.6V單電源供電,兼容標(biāo)準(zhǔn)的SPI接口,器件在上升沿接收數(shù)據(jù)下降沿發(fā)送數(shù)據(jù),接口時(shí)鐘最高為40M;支持最大256 bytes的快速頁面編程操作、快速的塊擦除(512 kbit)操作和快速的整體擦除(8M)操作;具有操作暫停和硬件寫保護(hù)功能。
SPI模塊接線圖如右圖所示:
SPISOMI:SPI從模 式輸出/主模式輸入引腳; 與FLASH的串行數(shù)據(jù)輸出引腳Q相連。
SPISIMO:SPI從模式輸入/主模式輸出引腳; 與FLASH的串行數(shù)據(jù)輸入D引腳相連。
SPISTE:SPI從模式發(fā)送使能引腳;與FLASH的片選引腳 相連。
SPICLK:SPI串行時(shí)鐘引腳;與FLASH的時(shí)鐘輸入引腳C相連。
RAM_WP信號(hào)由DSP的I/O口輸出,控制外部Flash的寫保護(hù)功能,當(dāng)RAM_WP為高電平時(shí),使能Flash的硬件寫保護(hù)功能,F(xiàn)lash內(nèi)部扇區(qū)受保護(hù)的,不能進(jìn)行寫操作。系統(tǒng)中對(duì)Flash的操作不會(huì)發(fā)生暫停,因此M25P80的 信號(hào)直接接高電平,不進(jìn)行中斷暫停操作。
3. m25p80的指令操作:m25p80支持的操作指令共有12條,所有指令都是8比特位,操作步驟如下:操作時(shí)先選中芯片(片選信號(hào)拉低),然后輸入8位操作指令字節(jié),緊接著輸入地址字節(jié)(0~3bytes,必要時(shí)還要加入啞讀字節(jié)),然后把片選信號(hào)拉高(有些指令不要求),然后m25p80即可以啟動(dòng)內(nèi)部控制邏輯,自行完成相應(yīng)的操作。以下以最常用的頁面快速編程指令進(jìn)行具體說明(其他指令與該指令操作相似可以相互參考):
進(jìn)行頁面編程操作首先應(yīng)將內(nèi)部狀態(tài)寄存器的寫允許位(WREN)置1,然后將片選信號(hào)拉低選中芯片,輸入pp指令字節(jié)02h,緊接著輸入3個(gè)字節(jié)的地址數(shù)據(jù),然后輸入要編程的數(shù)據(jù),所有數(shù)據(jù)都輸入后將片選信號(hào)拉高,m25p80隨即啟動(dòng)內(nèi)部邏輯完成編程操作。指令時(shí)序圖如下圖所示,具體的軟件編程實(shí)現(xiàn)請(qǐng)參考SPI模塊軟件編程部分。
SPI模塊軟件編程
SPI模塊軟件編程
(1)軟件流程說明:(流程圖如下圖所示)
a. 與SPI相關(guān)的系統(tǒng)初始化:完成SPI接口引腳功能的選擇、DSP外部接口時(shí)鐘的定標(biāo)、SPI接口時(shí)鐘的使能。本系統(tǒng)中具體為:GPIO多路復(fù)用控制寄存器:GPFMUX中將相關(guān)引腳配置為SPI功能引腳,低速設(shè)備時(shí)鐘定標(biāo)寄存器LOSPCP中低速設(shè)備時(shí)鐘的定標(biāo),外設(shè)時(shí)鐘控制寄存器PCLKCR中SPI接口時(shí)鐘使能;實(shí)現(xiàn)程序如下:
GpioMuxRegs.GPFMUX.all=0xfff7;
GpioMuxRegs.GPFDIR.all=0x0008; SysCtrlRegs.HISPCP.bit.HSPCLK=0x0001;
SysCtrlRegs.LOSPCP.bit.LSPCLK=0x0000;
SysCtrlRegs.PCLKCR.bit.SPIAENCLK=1;
b. 與SPI相關(guān)的中斷初始化:使能外部中斷向量表(PIEVECT寄存器),復(fù)位外部中斷應(yīng)答寄存器(PIEACK),清除外部中斷標(biāo)志寄存器(PIEIFR),置位PIE中斷使能寄存器(PIEIER),清除全局中斷屏蔽位(ST1 寄存器的INTM位)。
c. SPI接口初始化:在SPI配置寄存器(SPICCR)中:首先置位SPI軟件復(fù)位位,使SPI進(jìn)入復(fù)位模式、設(shè)置SPI接口的時(shí)鐘極性(根據(jù)具體的FLASH器件操作特性設(shè)置,在4中時(shí)鐘模式中選擇,本系統(tǒng)選擇不帶相位延時(shí)的下降沿方式)、選擇有效數(shù)據(jù)位數(shù)、選擇奇偶校驗(yàn)位;在SPI控制寄存器(SPICTL)中:使能接收中斷和發(fā)送中斷、選擇SPI時(shí)鐘相位、選擇主或從模式;SPI波特率寄存器(SPIBRR)中:設(shè)置SPI接口的通訊波特率。
d. SPI增強(qiáng)特性配置: SPIFIFO發(fā)送寄存器(SPIFFTX)中:復(fù)位SPI發(fā)送和接收通道、使能增強(qiáng)特性、復(fù)位FIFO指針、清除FIFO中斷標(biāo)志位、使能FIFIO中斷、設(shè)置FIFO中斷優(yōu)先級(jí);SPIFIFO接受寄存器(SPIFFRX):請(qǐng)參考SPIFFTX寄存器配置,兩者基本相同,分別用于發(fā)送控制和接收控制;SPIFIFO控制寄存器(SPIFFCT):根據(jù)具體器件的操作時(shí)序要求配置FIFO發(fā)送延時(shí)。實(shí)現(xiàn)程序如下:
SpiaRegs.SPIFFTX.all=0xe060;//連續(xù)發(fā)送16個(gè)字節(jié)后產(chǎn)生發(fā)送中斷
SpiaRegs.SPIFFRX.all=0x606f;//當(dāng)接收到一個(gè)數(shù)據(jù)時(shí)產(chǎn)生接受中斷
SpiaRegs.SPIFFCT.all=0x0006;//延時(shí)6個(gè)串行時(shí)鐘周期后發(fā)送數(shù)據(jù)
(2)頁編程PP軟件實(shí)例
//將寫允許位置1
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //片選信號(hào)拉低
SpiaRegs.SPIDAT=INS_WREN; //輸入寫允許位置1指令I(lǐng)NS_WREN
while(!SpiaRegs.SPISTS.bit.INT_FLAG); //等待發(fā)送完畢
GpioDataRegs.GPFDAT.bit.GPIOF3=1; //片選信號(hào)拉高
//PP頁面編程操作
GpioDataRegs.GPFDAT.bit.GPIOF3=0; //片選信號(hào)拉低
SpiaRegs.SPIDAT=INS_PP; // 輸入頁編程指令 INS_ PP=0x02h
for(i=0;i<4;i++) //連續(xù)發(fā)送3個(gè)字節(jié)的地址和一個(gè)字節(jié)的編程數(shù)據(jù)
{ if(I= =3)
SpiaRegs.SPIDAT=data; //data為輸入的編程數(shù)據(jù)
else
SpiaRegs.SPIDAT=w_addr8[i]; // w_addr8[i] 為輸入的地址字節(jié)
}
GpioDataRegs.GPFDAT.bit.GPIOF3=1; //片選信號(hào)拉高,執(zhí)行頁面寫操作
//接收中斷子程序
interrupt void spi_rx_isr(void)
{ FLASH_VALUE=SpiaRegs.SPIRXBUF; //讀取接收到的數(shù)據(jù)
PieCtrlRegs.PIEACK.all = 0xFFFF; //清除中斷響應(yīng)標(biāo)志位
}
結(jié)束語
本文所述的運(yùn)動(dòng)控制系統(tǒng)利用系統(tǒng)核心芯片DSP自身的SPI接口,結(jié)合其高速性、可連續(xù)操作性和極大的靈活性,選用性價(jià)比高的大容量串行接口FLASH,高效地實(shí)現(xiàn)了對(duì)系統(tǒng)存儲(chǔ)容量的擴(kuò)展,適應(yīng)了目前信息化發(fā)展趨勢(shì),滿足了系統(tǒng)大容量存儲(chǔ)空間的要求。本文的實(shí)現(xiàn)形式經(jīng)實(shí)驗(yàn)驗(yàn)證正確無誤,具有很高的參考價(jià)值和廣泛的應(yīng)用前景。
參考文獻(xiàn):
『1』 ST. Corporation ,Serial Flash Memory m25p80 Data Manual ,August 2005
『2』 Texas Instruments Incorporation ,TMS320F2812 Digital Signal Processors Data Manual ,USA,.December 2005。
『3』 張衛(wèi)寧,TMS320C28X系列DSP的CPU與外設(shè)(上、下),清華大學(xué)出版社, 2005-1
『4』 蘇奎峰,TMS320F2812原理與開放,電子工業(yè)出版社,2005-4。