|
|
| <!--插入廣告JS代碼--> |
FRAM在DSP開發(fā)系統(tǒng)中的應(yīng)用
王煉紅 章兢 全惠敏
(湖南大學(xué)電氣與信息工程學(xué)院,湖南 長沙410082)
摘 要:本文首先介紹了FRAM的特點(diǎn);然后在分析了FRAM配置及DSP的SPI通信模塊的基礎(chǔ)上,給出了FM25L256與TMS320F2812 DSP的接口電路的硬件設(shè)計。最后,文章給出了SPI模塊的初始化程序及DSP與FRAM之間接口程序的設(shè)計。
關(guān)鍵詞: FRAM,SPI,DSP系統(tǒng),通信
APPLICATION of FRAM in DSP SYSTEM
Wang lian-hong Zhang jing Quan Hui-min
(College of Electrical and Information Engineering in Hunnan University ,Hunan Changsha ,410082)
ABSTRACT: This paper introduces firstly the characteristic of FRAM. Then, a circuit connection between FM25L256 and TMS320F2812 DSP is given after we analyze FRAM configuration and SPI communication module of DSP. At last, this paper provides initialized program of SPI and interface program between FRAM and DSP.
KEY WORDS: FRAM, SPI , DSP SYSTEM , COMMUNICATION
1. 前言
TMS320系列的體系結(jié)構(gòu)專為實(shí)時信號處理而設(shè)計,該系列DSP控制器將實(shí)時處理能力和控制器外設(shè)功能集于一身,為控制系統(tǒng)的應(yīng)用提供了一個理想的解決方案。一般情況下,采用24xDSP及以上系列的控制器就能實(shí)現(xiàn)對電機(jī)數(shù)字化的單芯片控制。但當(dāng)系統(tǒng)功能增強(qiáng),例如要記錄下電動汽車運(yùn)行中的實(shí)時數(shù)據(jù),以便進(jìn)行故障分析時,就需要進(jìn)行DSP外部存儲空間的擴(kuò)展。
FRAM由于具有無限次擦寫﹑高速讀寫﹑低功耗,在掉電的情況下能把數(shù)據(jù)完善地保存起來等特點(diǎn)而廣泛的應(yīng)用于水表﹑煤氣表﹑汽車﹑多功能影印機(jī)﹑打印機(jī)和其他在掉電情況下需要保留可靠數(shù)據(jù)的產(chǎn)品中。本文針對采用DSP系統(tǒng)對154T電動輪自卸車實(shí)現(xiàn)運(yùn)行控制,需要保存電動車運(yùn)行中的實(shí)時數(shù)據(jù)。如若發(fā)生故障時,還要將故障點(diǎn)前10幀和故障點(diǎn)后5幀共16幀的故障數(shù)據(jù)保存下來。這些數(shù)據(jù)還需要高速讀寫,掉電保存。綜上所述,本文考慮采用FRAM來擴(kuò)展DSP的外存儲空間。
FRAM與DSP的硬件連接

圖1 TMS320F2812與FM25L256的接線圖
圖1為DSP芯片TMS320F2812與FM25L256串行鐵電存儲器的接線原理圖。TMS320F2812通過SPI模塊與FM25L256進(jìn)行串行通信。圖中,DSP的SPISCLKA腳給FM25L256提供串行時鐘,控制系統(tǒng)的數(shù)據(jù)傳輸; SPISTEA腳給FRAM提供片選信號(低電平有效); SPISIMOA腳把數(shù)據(jù)輸出到FRAM的SI腳; SPISIMIA腳接收SO腳上的數(shù)據(jù)。引腳/WP是硬件寫保護(hù)引腳,當(dāng)/WP為低電平時寫保護(hù),當(dāng)/WP為高電平時不進(jìn)行寫保護(hù)。由于對FRAM要進(jìn)行即時讀寫,故/WP設(shè)置為高電平。
2.1 TMS320F2812的SPI模塊
DSP處理器常通過SPI模塊與外部外設(shè)以及其他處理器之間進(jìn)行通信,如連接移位寄存器、顯示驅(qū)動器、DAC以及日歷時鐘等[1]。SPI模塊設(shè)有多個控制寄存器[2,3]。 SPI發(fā)送/接收緩沖寄存器(SPIDAT)在SCLK信號的邊沿將其中的16位數(shù)據(jù)向左移位,移出的數(shù)據(jù)從DSP的SPISIMOA引腳逐位輸出,與此同時SPISOMIA引腳上的信號將逐位從SPIDAT的低位移入SPIDAT,移位的次數(shù)由SPICCR寄存器中的SPI CHAR3~SPI CHAR0來設(shè)定。在發(fā)送沒有激活時,向該寄存器寫入數(shù)據(jù)將會啟動發(fā)送和接收。發(fā)送數(shù)據(jù)時,若SPIDAT中有數(shù)據(jù)正在移位,SPI發(fā)送緩沖寄存器(SPITXBUF)將存放下一個將要發(fā)送的數(shù)據(jù)。當(dāng)發(fā)送還沒激活時,向該寄存器寫入數(shù)據(jù)后,數(shù)據(jù)將直接進(jìn)入SPIDAT并啟動發(fā)送。SPIDAT中的數(shù)據(jù)發(fā)送完后,SPIDAT將自動從SPITXBUF取出數(shù)據(jù)繼續(xù)發(fā)送。如果此時SPITXBUF中沒有數(shù)據(jù),那么SCLK將會停止,SPI操作終止。接收數(shù)據(jù)時,若SPIDAT中的數(shù)據(jù)移位完成,即SPISOMIA引腳上的數(shù)據(jù)便從SPIDAT的右端移入了SPIDAT,此時SPIRXBUF將自動從SPIDAT中取出16位數(shù)據(jù)。
本文TMS320F2812 DSP的SPI模塊設(shè)置如下:SPICCR為0x00C7,下降沿發(fā)送數(shù)據(jù),上升沿接收數(shù)據(jù),每次發(fā)送8位數(shù)據(jù)。SPICTL為0x0007,工作于主模式,時鐘無延時,發(fā)送允許,SPI中斷使能。SPIBRR為199,即SPI波特率為DSP慢速時鐘模塊頻率的1/200。當(dāng)慢速時鐘模塊頻率等于系統(tǒng)時鐘頻率100MHz時,SPI波特率為500Kbps。
2.2 鐵電FM25L256的配置
FM25L256是基于鐵電存儲原理的非易失性串行外圍接口RAM,它具備以下特性:存儲空間為32K×8bit;數(shù)據(jù)可保存長達(dá)10年;無讀寫次數(shù)限制;最高可達(dá)25MHz的工作頻率;提供硬件和軟件雙重寫保護(hù);工作電壓低等。FM25L256支持SPI接口,在SCLK的上升沿接收數(shù)據(jù),在SCLK的下降沿發(fā)送數(shù)據(jù)。為了向所有存儲空間進(jìn)行寫操作,F(xiàn)M25L256狀態(tài)寄存器設(shè)置為0x0,且/WP引腳接高電平,不采用硬件寫保護(hù)。在對FM25L256進(jìn)行操作之前,必須向其傳遞一個操作代碼,以指示FM25L256現(xiàn)在進(jìn)行的是什么操作[4]。
對FRAM進(jìn)行讀寫操作時,一般應(yīng)注意如下幾點(diǎn):FM25L256在上電后10ms才能開始對其進(jìn)行操作;每次對FM25L256進(jìn)行寫操作之前(無論是寫狀態(tài)寄存器還是寫存儲區(qū)),都必須使FM25L256處于寫使能狀態(tài)(即狀態(tài)寄存器的Bit1位WEL=1),如不處于寫使能狀態(tài),則進(jìn)行寫操作之前要傳遞0x06操作代碼給FM25L256,使其寫使能。且每次寫操作完成后,F(xiàn)M25L256自動將WEL清零,進(jìn)入寫保護(hù)狀態(tài),下次寫操作之前必須重新寫使能。
3.軟件設(shè)計
為了實(shí)時傳輸數(shù)據(jù),DSP的SPI接口采用中斷工作方式。數(shù)據(jù)的發(fā)送、接收和校驗都通過中斷服程序來完成。SPI接口程序負(fù)責(zé)DSP的SPI模塊與存儲芯片F(xiàn)M25L256之間的數(shù)據(jù)發(fā)送、接收以及校驗,接口程序采用C語言編制,具有較強(qiáng)的通用性。程序提供了可靠的校驗機(jī)制,當(dāng)系統(tǒng)初始化時,為了確保FM25L256狀態(tài)寄存器寫入設(shè)定值時無誤,寫入設(shè)定值后,馬上重讀兩次來校驗設(shè)定值是否已經(jīng)完全正確寫入了目標(biāo)寄存器,如出現(xiàn)錯誤則重寫。當(dāng)系統(tǒng)進(jìn)入工作狀態(tài),向FM25L256存儲空間寫入數(shù)據(jù)后,或從FM25L256存儲空間讀出數(shù)據(jù)后,馬上重讀一次與寫入值或讀出值進(jìn)行對比校驗,如出現(xiàn)錯誤則重寫或重讀。
3.1 DSP與FM25L256之間的接口程序
由于DSP系統(tǒng)中其他函數(shù)模塊可以同時對FRAM進(jìn)行操作,為了便于調(diào)用,該接口程序設(shè)計為一個WriteReadFram()函數(shù)形式。當(dāng)DSP系統(tǒng)各模塊同時調(diào)用該函數(shù)時,SPI接口會不可避免的出現(xiàn)沖突,為了解決此問題,在程序中設(shè)置了一個指令隊列機(jī)制。當(dāng)有一個調(diào)用出現(xiàn)時,指令隊列表中就會相應(yīng)添加一個標(biāo)志。操作順序采用先調(diào)用先操作的原則。最先調(diào)用SPI程序的指令將最先使用SPI通信模塊,依此類推,只有排在隊列前面的操作指令完成后才會將SPI通信模塊的使用權(quán)交給緊接著排在后面的操作指令。在對應(yīng)的SPI通信結(jié)束后,會根據(jù)OperateID的取值給予相應(yīng)的回復(fù)(相應(yīng)的完成標(biāo)志置位或啟動相應(yīng)的函數(shù))。
表1 OperateID的取值與含義
OperateID的取值 | 含義及操作方式 |
WriteFaultDataFlag | 故障診斷模塊向FM25L256寫入故障數(shù)據(jù)。調(diào)WriteFramMemory( ) 函數(shù),操作完成后回復(fù)標(biāo)志W(wǎng)riteFaultDataComplete=1 |
WriteAddressTableFlag | 故障診斷模塊向FM25L256寫入故障地址表。調(diào)WriteFramMemory()函數(shù),操作完成后回復(fù)標(biāo)志W(wǎng)riteAddressTableComplete=1 |
UpperComputerWriteFramFlag | 上位機(jī)向FM25L256寫入整定數(shù)據(jù)。調(diào)WriteFramMemory( ) 函數(shù),操作完成后無需回復(fù)標(biāo)志。 |
DspReadSetParaFlag | DSP從FM25L256讀取整定數(shù)據(jù)。調(diào)ReadFramMemory( ) 函數(shù)。操作完成后回復(fù)標(biāo)志DspReadSetParaComplete=1 |
UpperComputerReadFramFlag | 上位機(jī)從FM25L256讀取數(shù)據(jù)。調(diào)ReadFramMemory( ) 函數(shù)。操作完成后需通過SCI上傳數(shù)據(jù),此時調(diào)用Start_Sci_TX( )函數(shù)。 |
函數(shù)WriteReadFram (*BuffStartAddress, DataLength, ObjectAddress, OperateID)中所傳遞的各參數(shù)說明如下:*BuffStartAddress為RAM中發(fā)送或者接收緩沖區(qū)的首地址,無符號整型指針變量;DataLength為讀寫FM25L256的8位字節(jié)個數(shù),無符號整型變量;ObjectAddress為讀寫FM25L256的目標(biāo)地址,無符號整型變量;OperateID為操作標(biāo)識代碼,無符號整型變量。OperateID用以區(qū)別不同的操作,并在SPI讀寫操作完成后根據(jù)不同的操作,給予相應(yīng)的答復(fù)。其具體取值含義、操作和回復(fù)信息見表1。當(dāng)OperateID=UpperComputerReadFramFlag時,SPI模塊從FM25L256讀取了數(shù)據(jù)之后還要傳給上位機(jī)。因此,該子程序?qū){(diào)用Start_Sci_TX( )函數(shù),讀取的數(shù)據(jù)將通過DSP中的SCI模塊傳送到上位機(jī),實(shí)現(xiàn)上位機(jī)與DSP之間的串口通信。

圖2 接口程序流程圖
接口程序流程圖如圖2所示,程序根據(jù)隊列表首先判斷對FRAM執(zhí)行哪種(讀或?qū)懀┎僮鳎缓筠D(zhuǎn)向相應(yīng)的處理子程序(即調(diào)用表1中對應(yīng)函數(shù))。
3.2 SPI模塊初始化函數(shù)
該函數(shù)將打開SPI中斷,完成相關(guān)的GPIO口和SPI寄存器的設(shè)置,并產(chǎn)生SPI模塊的時鐘信號。其部分程序如下:
void InitSpi(void)
{ EALLOW;
// SPI中斷的初始化
IER|=0x0020; //使能PIE Group 6的中斷
PieCtrlRegs.PIECRTL.bit.ENPIE=1; //PIE使能
PieCtrlRegs.PIEIER6.bit.INTx1=1; //使能PIE中SPI的接收
PieCtrlRegs.PIEIER6.bit.INTx2=0; //禁止PIE中SPI發(fā)送中斷
SysCtrlRegs.PCLKCR.bit.SPIENCLK=1; //使能SPI模塊的時鐘信號
//GPIO方面的初始化
…
GpioMuxRegs.GPFMUX.bit.MDXA_GPIOF12=0; //確定GPIOF12為通用I/O引腳
GpioMuxRegs.GPFDIR.bit.GPIOF12=1; //方向為輸出
//Spi功能初始化,每次修改Spi寄存器時必須使SPISWRESET清0,修改完后置1
SpiaRegs.SPICCR.bit.SPISWRESET=0; //使SPI進(jìn)入復(fù)位狀態(tài)
SpiaRegs.SPICCR.all=0x0047; //下降沿?zé)o延時發(fā)送8位數(shù)據(jù)
SpiaRegs.SPICTL.all=0x0007; //使SPI工作在主動方式,發(fā)送允許,允許SPI中斷,禁止超時中斷
SpiaRegs.SPIBRR=199; //使SPIBRR=199,這樣波特率=LSPCLK/(SPIBRR+1)=500KHz
SpiaRegs.SPICCR.bit.SPISWRESET=1; //使SPI退出復(fù)位狀態(tài),進(jìn)入發(fā)送接收狀態(tài)
EDIS;
PieCtrlRegs.PIEACK.bit.ACK6=1; //開放Group6的中斷
}
4. 結(jié)束語
本文以鐵電FM25L256為基礎(chǔ),詳細(xì)討論了FM25L256與DSP之間的硬件連接以及它與DSP的SPI模塊進(jìn)行通信的方式及其相關(guān)配置。重點(diǎn)介紹了FM25L256與TMS320F2812的接口程序設(shè)計。
本文的創(chuàng)新點(diǎn)是在接口程序設(shè)計中,為了避免系統(tǒng)多個模塊對FRAM進(jìn)行讀寫操作時在SPI接口上產(chǎn)生數(shù)據(jù)沖突,構(gòu)造了一個指令隊列表,保證先調(diào)用的操作先執(zhí)行,同時增加了可靠的校驗機(jī)制,使系統(tǒng)能高速讀寫實(shí)時數(shù)據(jù)和上傳故障數(shù)據(jù)。本文中的接口程序為函數(shù)形式,采用C語言編寫,具有通用性和可移植性。
參考文獻(xiàn):
[1] 楊玲、 駱麗,多通道AD轉(zhuǎn)換器MAX1168及其與DSP系統(tǒng)適配性研究,微計算機(jī)信息,P73-74,P107,2004(12)
[2] 劉和平、王維俊等編著,《TMS320LF240x DSP C語言開發(fā)應(yīng)用》,北京航空航天大學(xué)出版社,2003
[3] TMS320F/C28x Digital Signal Processors Data Manual. Texas Instruments Inc. Literature Number SPRS174K. 2001
[4] FM25L256 Data Manual. Ramtron International Corporation Inc.2005
湖南省科技廳重點(diǎn)項目,項目編號:20053340248
作者簡介:王煉紅,女,1971年生,漢族,湖南大學(xué)電氣與信息工程學(xué)院講師,在職博士,主要從事語音、圖像信息的傳輸與處理及數(shù)據(jù)挖掘技術(shù)研究。
Author’s brief introduction: Lianhong Wang, female, birth 1971,a lecturer of College of Electrical and Information Engineering in Hunnan University, Ph.D. candidate, major in transmission and processing of audio and image information, also engage in the research of Data Mining technique.
通訊方式:湖南長沙湖南大學(xué)電氣與信息工程學(xué)院 (410082)
E-MAIL: wlh-01@163.com 或者 wanglh@hnu.cn