1 引言
在DSP系統的設計中,經常要使用片外存儲器擴充系統存儲空間。特別是當DSP的片內數據存儲器和程序存儲器容量比較小時, 必須把一部分數據,如常量、原始數據庫等存儲到片外的存儲器中,從而節省DSP芯片內部的存儲器資源。在實際應用中,片外存儲器通常選擇RAM或FLASH MEMORY。RAM數據掉電即丟失,不適合長期保存數據。對于一些無需頻繁讀寫但需要長期保存的數據,如字模數據、端口地址等時,通常選擇片外FLASH作偽擴展的數據存儲器。使用片外 FLASH必須要解決對其擦寫的問題。
在實際應用中,對片外FLASH的擦寫有兩種方式:一是使用通用編程器對FLASH芯片進行擦寫;二是直接由DSP對FLASH進行擦寫。對于需要修改或已安裝在電路板上的FLASH芯片無法使用第電感生產一種方式,只能采用第可調電感二種方式,且便于調試。本文介紹一種利用存儲器映射技術實現對DSP片差模電感外FLASH擦寫的方法。
DSP56F805芯片是Motoro電感廠家la公司在DSP56800 的基礎上開發的系列DSP芯片之一。該芯片采用先進的修正哈佛結構,三個內部地址總線和四個內部數據總線支持數據傳輸;采用MCU形式的指令集,尋址方式靈活;具有較強的片外存儲空間擴展能力;功耗小,高度并行。但是該芯片的片內數據存儲器空間最大為64k,程序存儲空間尋址范圍是64k,內部模式(Mode0A和Mode0B)下只有31.5k。對于一些需要復雜中文圖形用戶界面的 DSP系統來說芯片存儲資源顯得不夠,必須對芯片存儲空間進行擴展。考慮到具體要求,本文使用片外FLASH來擴展系統數據存儲空間,將DSP系統的中文圖形用戶界面中用到的所有字模數據和頁面內容數據存放到片外FLASH中,大大節省了片內的數據存儲器空間。
CodeWarrior IDE是由Metrowerks公司專為Motorola的DSP56800系列設計的開發平臺。該平臺具有簡單明了的圖形用戶界面和豐富的軟件開發工具,適合于開發基于DSP56800系列的應用程序、插件程序等各種程序代碼。在CodeWarrior環境中,用戶可以通過修改.cmd文件來配置存儲器分配方式,還可以通過修改startup文件夾中的初始化程序來控制系統的初始化操作。用戶編譯并鏈接后,將生成.elf文件,在文件中可以看到存儲器的詳細分配情況。當用戶將程序下載到DSP芯片后,可以使用CodeWarrior的調試器對程序進行全面的調試,如設置斷點、單步執行等;也可以使用 Watch Memory指令來檢查存儲器中的各地址段的值,還可以使用Save/Load Memory指令來保存或是載入某段存儲器的值。
2 方法介紹
首先利用GPIOD0口生成合適的片外FLASH和片內XRAM片選信號,實現片內XRAM和片外FLASH的訪問切換。例如當GPIOD0 =0時,0x8000~0xFFFF映射到片內XRAM,此時對于整個0x0000~0xFFFF地址范圍的讀寫操作就是對于片內 XRAM的操作;當GPIOD0=1時,0x8000~0xFFFF地址范圍映射到數據FLASH,則對0x8000~0xFFFF 地址范圍的讀寫操作就是對于片外FLASH的操作;對0x工字電感器0000~0x7FFF地址范圍的讀寫仍是針對片內 XRAM的操作,從而將數據存儲空間擴展了32k。
再將映射方式設置為片內,將需要寫到FLASH中的數據文件載入片內XRAM。最后根據需要設置GPIO端口值,切換地址映射的存儲器。這樣通過地址映射的方法,便可實現將XRAM中數據寫入片外FLASH的操作,而對于DSP芯片來說只是進行了其XRAM尋址空間內部的數據搬移操作。
假設要將一組二維數組character[180][32]形式的字模數據保存入片外數據FLASH的0x8000~0xA000地址段中,先做以下準備工作:
①用一個GPIO端口,擴展系統的可尋址數據存儲器空間;②編寫FLASH擦寫程序,程序流程如圖1所示。
#define N 100 /* 由于FLASH與RAM的讀寫速度不同,所以需要在每項操作后加入若干個延遲以保證正確性,延遲的具體長短可以根據具體情況作調整 */