以文本方式查看主題 - 曙海教育集團(tuán)論壇 (http://www.hufushizhe.com/bbs/index.asp) -- DSP系統(tǒng)和硬件開發(fā)討論區(qū) (http://www.hufushizhe.com/bbs/list.asp?boardid=5) ---- DSP/BIOS在嵌入式數(shù)據(jù)采集系統(tǒng)中的應(yīng)用 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=5&id=1309) |
-- 作者:wangxinxin -- 發(fā)布時(shí)間:2010-11-13 12:09:29 -- DSP/BIOS在嵌入式數(shù)據(jù)采集系統(tǒng)中的應(yīng)用 1 引言 數(shù)據(jù)采集系統(tǒng)在工業(yè)測控以及試驗(yàn)室研究方面的應(yīng)用非常廣泛。隨著科學(xué)技術(shù)的發(fā)展,數(shù)據(jù)采集技術(shù)被普遍認(rèn)為是現(xiàn)代科學(xué)研究和技術(shù)發(fā)展的一個(gè)重要方面:一方面,數(shù)據(jù)采集系統(tǒng)正向著高精度、高速度、穩(wěn)定可靠和集成化的方向發(fā)展;另一方面,數(shù)據(jù)采集系統(tǒng)也向著實(shí)時(shí)系統(tǒng)方向發(fā)展,特別是邏輯和時(shí)序要求比較高的系統(tǒng)。 本文介紹的嵌入式數(shù)據(jù)采集系統(tǒng)采用dsp/bios實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)響應(yīng)和調(diào)度。系統(tǒng)介紹了硬件系統(tǒng)設(shè)計(jì)結(jié)構(gòu),并說明了dsp/bios在系統(tǒng)中的應(yīng)用,最后闡述了系統(tǒng)的自啟動(dòng)實(shí)現(xiàn)。 2 系統(tǒng)的硬件結(jié)構(gòu) 在本系統(tǒng)中,采用ti的高端dsp芯片—tms320c6205作為系統(tǒng)的cpu,外圍擴(kuò)展同步動(dòng)態(tài)ram和異步靜態(tài)rom(flash),并帶有數(shù)據(jù)采集緩沖系統(tǒng)fifo,cpu通過自身的外圍接口直接連接到pci總線上,實(shí)現(xiàn)系統(tǒng)與主機(jī)的實(shí)時(shí)通訊。系統(tǒng)結(jié)構(gòu)圖如圖1。 在系統(tǒng)運(yùn)行過程中,視頻輸入信號由fifo緩沖后送入dsp的外圍擴(kuò)展sdram,經(jīng)dsp處理后輸出到pci接口及總線與上位機(jī)通訊。sdram主要保存系統(tǒng)實(shí)時(shí)運(yùn)行的程序和臨時(shí)數(shù)據(jù),flash保存系統(tǒng)的啟動(dòng)及處理程序和一些配置參數(shù)。外圍jtag接口不僅可以對系統(tǒng)進(jìn)行調(diào)試,還可以實(shí)現(xiàn)實(shí)時(shí)輸出信號處理的結(jié)果。 3 dsp/bios實(shí)時(shí)系統(tǒng) dsp/bios可以看作一個(gè)準(zhǔn)實(shí)時(shí)操作系統(tǒng),主要是為需要實(shí)時(shí)調(diào)度和同步以及主機(jī)/目標(biāo)機(jī)系統(tǒng)通信和實(shí)時(shí)監(jiān)測的應(yīng)用而設(shè)計(jì)的。dsp/bios支持的ti dsp芯片的各種實(shí)時(shí)操作系統(tǒng)都是以dsp/bios作為底層軟件,為嵌入式應(yīng)用提供基本的運(yùn)行服務(wù)。此外,它還能通過系統(tǒng)中的jtag接口實(shí)時(shí)獲取目標(biāo)機(jī)的信息,并傳送到上位機(jī)對應(yīng)用程序進(jìn)行實(shí)時(shí)分析。 dsp/bios提供的運(yùn)行服務(wù)包括基于優(yōu)先級的任務(wù)調(diào)度、中斷處理和io服務(wù)。在軟件開發(fā)階段,它為實(shí)時(shí)應(yīng)用提供底層軟件,節(jié)約實(shí)驗(yàn)室開發(fā)時(shí)間。dsp/bios的數(shù)據(jù)獲取、統(tǒng)計(jì)和事件記錄功能在軟件調(diào)試階段和主機(jī)的ccs(code composer studio,ti發(fā)布的集成開發(fā)環(huán)境)內(nèi)的分析工具配合,可以完成對應(yīng)用程序的實(shí)時(shí)探測、跟蹤和監(jiān)控,與rtdx技術(shù)和ccs的可視化工具相配合,除了可以直接實(shí)時(shí)顯示原始數(shù)據(jù)外,還可以對原始數(shù)據(jù)進(jìn)行處理,如實(shí)時(shí)fft頻譜分析等。 dsp/bios由3部分組成:(1)dsp/bios實(shí)時(shí)多任務(wù)內(nèi)核;(2)api、dsp/bios實(shí)時(shí)分析工具;(3)dsp/bios配置工具。 3.1 dsp/bios實(shí)時(shí)內(nèi)核和api dsp/bios api被分為多個(gè)模塊,根據(jù)應(yīng)用程序模塊的配置和使用情況的不同,dsp/bios的代碼為500字到6500字不等。應(yīng)用程序通過調(diào)用api來使用dsp/bios,所有dsp/bios的api都是以c可調(diào)用的形式提供的。只要遵從c的調(diào)用約定,匯編代碼也可以調(diào)用dsp/bios的api。 本系統(tǒng)中要用到dsp/bios實(shí)時(shí)內(nèi)核中的csl(chip support library)調(diào)用板級支持包,調(diào)用gbl(global setting manager)對系統(tǒng)的環(huán)境進(jìn)行加載,調(diào)用hwi(hardware interrupt manager)對系統(tǒng)需要用到的硬件中斷進(jìn)行設(shè)置,調(diào)用swi(software interrupt manager)對系統(tǒng)的軟件中斷進(jìn)行設(shè)置。對用到實(shí)時(shí)數(shù)據(jù)交換的地方還需要調(diào)用rtdx(real-time data exchange setting)對交換模塊進(jìn)行設(shè)置。 3.2 dsp/bios配置工具 dsp/bios配置工具有一個(gè)類似windows資源管理器的界面,它具有兩個(gè)功能:一個(gè)是在運(yùn)行時(shí)設(shè)置dsp/bios庫使用的一系列參數(shù);一個(gè)是作為一個(gè)可視編輯器,創(chuàng)建被dsp應(yīng)用程序調(diào)用的dsp/bios api函數(shù)時(shí)所使用的運(yùn)行對象,這些對象包括軟件中斷、任務(wù)、io流及是件日志等。 本系統(tǒng)中在調(diào)試時(shí)需要用到軟件仿真環(huán)境,這些環(huán)境的參數(shù)需要在配置工具中設(shè)定具體的參數(shù),比如sdram的大小、類型,dsp的外部設(shè)備硬件中斷號設(shè)定,信息處理程序的軟件中斷設(shè)定等。使用配置工具,dsp/bios的對象可以事先配置好并和應(yīng)用程序綁定在一起,比運(yùn)行是動(dòng)態(tài)建立這些對象有更高的響應(yīng)速度。 3.3 dsp/bios實(shí)時(shí)分析工具 dsp/bios分析工具可以輔助ccs環(huán)境實(shí)現(xiàn)程序的實(shí)時(shí)調(diào)試,以可視化的方式觀察程序的性能,并且不影響應(yīng)用程序的運(yùn)行。dsp/bios分析工具可以通過選擇ccs菜單dsp/bios打開。 與傳統(tǒng)的調(diào)試方法不同的是,程序的實(shí)時(shí)分析要求在目標(biāo)處理器上運(yùn)行監(jiān)測代碼。使用dsp/bios的api和對象,可以自動(dòng)監(jiān)測目標(biāo)處理器,采集實(shí)時(shí)信息并通過ccs分析工具上傳到主機(jī)。實(shí)時(shí)分析包括:程序跟蹤、性能監(jiān)測和文件服務(wù)等。 4 基于dsp/bios的程序開發(fā) dsp/bios支持交互式的程序開發(fā)模式,可以先為應(yīng)用程序生成一個(gè)框架,在使用實(shí)際算法之前給程序加上一個(gè)仿真的運(yùn)行負(fù)荷來測試程序。在dsp/bios環(huán)境下可以方便的修改線程的優(yōu)先級和類型。 4.1 dsp/bios下一個(gè)程序的開發(fā)過程 在dsp/bios下一個(gè)程序的開發(fā)過程如下: (1) 用配置工具建立應(yīng)用程序要用到的對象; (2) 保存配置文件,保存的同時(shí)會(huì)生成在編譯和鏈接應(yīng)用程序時(shí)所包括的文件; (3) 為應(yīng)用程序編寫一個(gè)框架,可以使用c、c 、匯編語言或這些語言的任意組合; (4) 在ccs環(huán)境下編譯并鏈接程序; (5) 使用仿真器(或者使用硬件平臺原型)和dsp/bios分析工具來測試應(yīng)用程序; (6) 重復(fù)上述步驟直至程序運(yùn)行正確; (7) 當(dāng)正式產(chǎn)品硬件開發(fā)好后,修改配置文件來支持產(chǎn)品硬件并測試。 4.2 dsp/bios對象的動(dòng)態(tài)建立、引用和刪除 在程序開發(fā)過程中,經(jīng)常會(huì)動(dòng)態(tài)建立新的dsp/bios對象、動(dòng)態(tài)引用dsp/bios對象或者刪除dsp/bios對象。通過xxx_create函數(shù)可以建立大部分dsp/bios對象,但不是全部對象,有些對象只能在配置工具中創(chuàng)建。每個(gè)xxx_create函數(shù)都可以為對象的內(nèi)部狀態(tài)信息分配存儲(chǔ)空間,并返回一個(gè)指向新建對象的句柄,這樣xxx模塊的其他函數(shù)就可以使用這個(gè)句柄引用這個(gè)新建的對象。下面的一段代碼是建立并初始化pro對象的過程: #include pro_attrs attrs; pro_handle process; attrs=pro_attrs; attrs.name-#quot;reader#quot;; attrs.priority=pro_minpri; process=pro_create((fxn)foo,#attrs); xxx_create函數(shù)所返回的指向某個(gè)對象的句柄可以作為引用該對象的參數(shù)傳遞給其他函數(shù),例如傳遞給xxx_delete函數(shù)來刪除對象,代碼如下: pro_delete(process); 5 系統(tǒng)啟動(dòng)的實(shí)現(xiàn) 系統(tǒng)啟動(dòng)包括兩部分:系統(tǒng)上電引導(dǎo)和dsp/bios啟動(dòng)。上電完成后dsp運(yùn)行部分由dsp/bios來控制。 5.1 系統(tǒng)上電引導(dǎo) ti c6000系列dsp可以有3種上電引導(dǎo)方式,包括不加載、rom加載和主機(jī)加載等。其中不加載是cpu直接從地址0處開始執(zhí)行代碼。主機(jī)加載是在引導(dǎo)過程中,外部主機(jī)通過主機(jī)接口初始化cpu的存儲(chǔ)空間,主機(jī)完成所有的初始化工作后,向接口控制寄存器的dspint位寫1,結(jié)束引導(dǎo)過程,cpu退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。主機(jī)加載有三種方式,即hpi接口加載、擴(kuò)展總線加載和pci總線加載。 在本系統(tǒng)中,為了保持系統(tǒng)的獨(dú)立性,把加載系統(tǒng)放在外部rom中,實(shí)現(xiàn)rom加載。rom加載過程為:位于外部ce1空間的rom中的代碼(從首地址開始的64kb數(shù)據(jù))首先通過dma(或者edma)被搬入地址0處。加載過程在復(fù)位信號撤銷之后完成,此時(shí)cpu內(nèi)部保持復(fù)位狀態(tài),由dma(或者edma)執(zhí)行1個(gè)單幀的數(shù)據(jù)塊傳輸。傳輸完成后,cpu退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。對tms320c6205來說,用戶可以指定外部加載rom的存儲(chǔ)寬度,emif(外部存儲(chǔ)器接口)會(huì)自動(dòng)將相鄰的6bit/16bit數(shù)據(jù)打包成32bit的指令,并且rom中的程序必須按little-endian的模式存儲(chǔ)。 5.2 dsp/bios啟動(dòng) autoinit.c和boot.snn文件決定了dsp/bios應(yīng)用程序的啟動(dòng)序列,這些文件是由庫bios.ann和bioss.ann提供的。啟動(dòng)過程包括一下幾步: (1) 初始化dsp:dsp/bios程序從入口點(diǎn)c_int00開始運(yùn)行,復(fù)位中斷向量指向c_int00地址。對于tms320c6205來說,堆棧指針(b15)和全局指針(b14)被初始化指向.stack段的末尾和.bss段的開始。控制寄存器amr、ier和csr也被初始化。 (2) 用.cinit段中的記錄來初始化.bss段:堆棧建立好后,初始化例程用.cinit段中的記錄初始化全局變量。 (3) 調(diào)用bios_init初始化dsp/bios模塊:bios_init執(zhí)行基本的模塊初始化,然后調(diào)用mod_init宏分別初始化每個(gè)用到的模塊。如hwi_init初始化有關(guān)中斷的寄存器。 (4) 處理.pinit表:.pinit表包含了初始化函數(shù)的指針 (5) 調(diào)用應(yīng)用程序主程序main函數(shù):在所有dsp/bios模塊初始化之后,調(diào)用main函數(shù)。此時(shí)硬件中斷和軟件中斷都是禁止的,應(yīng)用程序可以在此添加自己的初始化代碼。 (6) 調(diào)用bios_start啟動(dòng)dsp/bios:bios_start函數(shù)是由配置工具產(chǎn)生的,包含在programcfg.snn文件中,它負(fù)責(zé)使能dsp/bios模塊并為每個(gè)用到的模塊調(diào)用mod_startup宏使其開始工作。 在這些工作完成之后,dsp/bios調(diào)用idl_loop引導(dǎo)程序進(jìn)入dsp/bios空閑循環(huán),此時(shí)硬件和軟件中斷可以搶先空閑循環(huán)的執(zhí)行,主機(jī)也可以和目標(biāo)機(jī)之間開始數(shù)據(jù)傳輸。 6 結(jié)束語 dsp/bios在整個(gè)目標(biāo)模板上主要起到兩方面的作用:其一是實(shí)現(xiàn)主機(jī)調(diào)試環(huán)境對目標(biāo)模板上運(yùn)行的應(yīng)用程序的實(shí)時(shí)監(jiān)察和控制,其二是實(shí)現(xiàn)各線程之間的調(diào)度和線程間的通信。將dsp/bios應(yīng)用于數(shù)據(jù)采集板上dsp應(yīng)用程序的設(shè)計(jì)不但能夠縮短開發(fā)周期,而且因?yàn)閐sp/bios的多線程機(jī)制使得應(yīng)用程序的功能得到了徹底的分化,所以在這種情況下,當(dāng)原程 |