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