Nios II的LlED顯示屏控制器設(shè)計(jì)
3.1.2 緩存數(shù)據(jù)的組織
若要進(jìn)行特技效果顯示,則當(dāng)前顯示的數(shù)據(jù)幀和下一個(gè)數(shù)據(jù)幀存在著某種變換關(guān)系。由于CPU只能對顯存進(jìn)行寫操作,所以需在緩存中劃分出一塊大小和顯存相等、地址一一對應(yīng)的區(qū)域screen,用于存儲當(dāng)前顯示的數(shù)據(jù)幀信息。如果各窗口之間存在重疊現(xiàn)象,且特技數(shù)據(jù)處理運(yùn)算直接在screen區(qū)域進(jìn)行,則窗口重疊部分信息可能發(fā)生混亂。故在緩存中再為每一個(gè)窗口劃分出一塊存取空間(part 1,part 2,…,part n),用于存儲本窗口顯示的前一幀數(shù)據(jù)信息。在特技數(shù)據(jù)處理運(yùn)算時(shí),先在part區(qū)域處理各窗口的數(shù)據(jù)信息,將轉(zhuǎn)換完的數(shù)據(jù)送往各窗口在screen區(qū)域中所對應(yīng)地址的存取空間,最后將screen中的數(shù)據(jù)寫入地址對應(yīng)的顯存。
3.2 讀取CF卡軟件設(shè)計(jì)
任務(wù)1負(fù)責(zé)將CF卡上的數(shù)據(jù)讀取到SDRAM中,供其他任務(wù)使用。在程序中使用了1個(gè)指針(*pwmdata),為數(shù)據(jù)文件在SDRAM中分配空間。在文件系統(tǒng)初始化時(shí),首先調(diào)用CF卡初始化函數(shù)IDE_initialize()判斷CF卡是否存在。若存在,則讀取文件系統(tǒng)的基本信息。通過調(diào)用函數(shù)FS_SearchFile(char*FName,F(xiàn)S_TFile*R,unsigned char dir)來查找需要讀取的文件是否存在,若存在,則通過指針(*pwmdata)為數(shù)據(jù)文件在SDRAM中分配一個(gè)緩沖區(qū)。讀取時(shí),每次讀取一個(gè)扇區(qū),直到將數(shù)據(jù)全部讀取到sDRAM中。
部分程序源碼如下:
3.3軟件總體設(shè)計(jì)
基于以上數(shù)據(jù)結(jié)構(gòu),軟件設(shè)計(jì)的流程如圖5所示。系統(tǒng)首先進(jìn)行初始化操作,然后從Flash中讀取顯示屏參數(shù),進(jìn)行參數(shù)初始化。接著建立任務(wù)TaskControt(),其優(yōu)先級比各窗口顯示任務(wù)都要高,主要用于實(shí)時(shí)管理各窗口顯示任務(wù),每個(gè)窗口的顯示由單個(gè)窗口顯示任務(wù)來控制。窗口顯示任務(wù)根據(jù)各窗口顯示方式的不同,在其對應(yīng)的part存儲區(qū)域進(jìn)行下一幀數(shù)據(jù)的處理運(yùn)算,然后調(diào)用窗口顯示子任務(wù)進(jìn)行顯示。在完成一幀數(shù)據(jù)的顯示后,調(diào)用一次OSTimeDlyHMSM()使當(dāng)前任務(wù)進(jìn)入等待狀態(tài),下一個(gè)優(yōu)先級最高并進(jìn)入了就緒態(tài)的任務(wù),立刻被賦予了CPU的控制權(quán),由此完成窗口顯示任務(wù)之間的切換。任務(wù)TaskControl()定期查詢Reset是否有效,若有效則刪除原來建立的任務(wù),重新讀取窗口數(shù),建立新任務(wù),啟用各個(gè)窗口顯示任務(wù)Task_i。
評論