新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于單片機與FPGA可調(diào)延時模塊的設(shè)計

基于單片機與FPGA可調(diào)延時模塊的設(shè)計

作者: 時間:2012-05-29 來源:網(wǎng)絡(luò) 收藏

  

  在P89C51RD2的64k閃存空間中,地址為0000H-7FFFH的32kB閃存空間作為程序空間,整個程序編譯后為15k,所以32k的程序空間足夠大。余下的8000H?FFFFH的32kB 閃存空間留作數(shù)據(jù)存儲空間。兩塊數(shù)據(jù)存儲空間輪流使用,當(dāng)數(shù)據(jù)量存滿其中一塊時通過程序跳轉(zhuǎn)到另一塊,在使用前先將該塊擦除。

  各函數(shù)介紹如下:

  main()——主程序;

  InitUart(void)——串口初始化;

  IapInit(void)——IAP功能初始化,使用IAP功能前必調(diào)用;

  PowerOnRead(void)——上電讀取最近一次存儲的參數(shù)。模塊對上電時間要求不苛刻,最新數(shù)據(jù)的地址可通過查表方式尋找。每一個數(shù)據(jù)幀占一個數(shù)據(jù)存儲空間,由于每次中斷都接收到8個數(shù)據(jù)幀,所以將每8個數(shù)據(jù)存儲空間劃分成一組,這樣只要查詢每組的頭一個地址就能快捷地完成查詢,大大節(jié)省了查詢時間。

  EraseBlock (uint AddressRestore)——判斷當(dāng)前數(shù)據(jù)存儲空間塊滿,并擦除;

  RestoreData(void)——數(shù)據(jù)存儲在數(shù)據(jù)存儲空間;

  DataUp(uchar DataRec)——更新接口數(shù)據(jù)。

  在程序中,要多次調(diào)用BootROM固件中的子程序。由于IAP子程序接口是匯編語言,為了編寫方便,同時使程序框架明了,編寫了一個IAPLIB.A51匯編語言接口函數(shù)庫和IAPLIB.H頭文件。在程序中加上IAP.H頭文件,調(diào)用固件程序時就不需在C51程序中嵌入?yún)R編,而是像調(diào)用C語言函數(shù)一樣簡單,這大大簡化了編程。

設(shè)計

  FPGA主要設(shè)計了DECODE延時通道譯碼器、CS片選信號控制器、N階SHIFTER移位寄存器。其中譯碼器用于完成對并口送來的數(shù)據(jù)進(jìn)行通道、時間參數(shù)的分離,用通道參數(shù)進(jìn)行尋址和譯碼,這是一種簡單的譯碼邏輯和觸發(fā)電路。N階移位寄存器用于完成對信號進(jìn)行N階的延時處理,是延時處理的核心單元?!⊙訒r通道譯碼器將單片機并口送來的延時參數(shù)送入鎖存器,同時輸出控制電路將移位寄存器對應(yīng)的延時階切換到輸出端。從不同的階引出信號即可獲得不同的延時量??刂茣r鐘和移位寄存器的階數(shù)決定了延時步進(jìn)調(diào)節(jié)精度和延時調(diào)節(jié)范圍。如果定時模塊有N個信號通道,每個定時模塊集成N個完全相同的延時調(diào)節(jié)單元,就可實現(xiàn)獨立調(diào)節(jié)各個通道信號延時大小的功能。集成的延時調(diào)節(jié)單元越多,占用可編程芯片的資源就越多,這可以根據(jù)實際需要選擇可編程邏輯器件。

  FPAG軟件的設(shè)計采用“自頂向下”、“軟硬兼施”的設(shè)計方法,主要的各單元設(shè)計采用VHDL語言描述完成,而整個多路信號的延時功能處理采用圖形輸入設(shè)計方法。軟件設(shè)計完成后,根據(jù)電路原理圖進(jìn)行引腳鎖定,然后啟動編譯程序來編譯項目。編譯器將進(jìn)行錯誤檢查、網(wǎng)表提取、邏輯綜合和器件適配,然后進(jìn)行行為仿真、功能仿真和時序仿真。最后通過編程器方式將POF文件下載到EPROM中。加電后,F(xiàn)PGA將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,完成配置,從而生成硬件電路。

  模塊功能調(diào)試實現(xiàn)

  模塊在調(diào)試中出現(xiàn)P89C51RD2有時上電程序運行不正常,讀取程序空間是空的。但是只要上電工作起來,就恢復(fù)正常。懷疑由于上電復(fù)位時序混亂,造成誤調(diào)用固件擦除芯片子程序。采用專用復(fù)位芯片替換電容電阻加二極管的復(fù)位電路,使問題得到了解決。同樣,在單片機正確送數(shù)情況下,F(xiàn)PGA上電出現(xiàn)不能正常恢復(fù)預(yù)設(shè)好的延時信號,信號總是零延遲(第一次上電,單片機數(shù)據(jù)存儲空間內(nèi)沒有數(shù)據(jù),信號就處于零延時狀態(tài)),但在工作狀態(tài)下,能夠很好地實現(xiàn)延時調(diào)節(jié)。懷疑這種情況是因存在復(fù)位問題而導(dǎo)致,但專用復(fù)位芯片不能解決問題。經(jīng)多次檢查程序,發(fā)現(xiàn)硬件語言程序中觸發(fā)語句是電平觸發(fā),改寫為脈沖上升觸發(fā)后問題得以解決。

  結(jié)束語

  采用單片機和FPGA設(shè)計的延時調(diào)節(jié)模塊,硬件結(jié)構(gòu)簡單,設(shè)計集成度高。軟件方面,單片機程序?qū)語言和匯編語言很好地結(jié)合,F(xiàn)PGA充分發(fā)揮了硬件語言易改變電路結(jié)構(gòu)和算法的優(yōu)越性。提高FPGA中移位寄存器的時鐘頻率,同時相應(yīng)增加移位寄存器程序輸出階數(shù),可實現(xiàn)更高精度的延時步進(jìn)調(diào)節(jié)和增大延時調(diào)節(jié)范圍。因此可以在不改變模塊硬件結(jié)構(gòu)基礎(chǔ)的上,通過軟件升級來提高模塊的性能,從而擴大模塊的應(yīng)用領(lǐng)域。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉