資料介紹
引 言
DSP(數字信號處理器)憑借其高速數字信號處理功能、實時性強、低功耗、高集成度等嵌入式微計算機的特點,已在通信、航空航天、工業控制、醫療、國防、汽車等領域得到了廣泛的應用。TMS320LF240xA DSP(以下簡稱LF240xA)是美國TI公司推出的高性能16位數字信號處理器,它具有運算速度快,在片集成的外設豐富等特點,故又稱其為DSP控制器。應用領域主要針對工業測控、電機控制、家用電器和消費電子等場合。
LF240xA的軟件開發過程,既可以使用匯編語言,也可以使用C語言。匯編語言的代碼執行效率高、運行速度快,可以直接對寄存器進行操作,充分發揮了DSP控制器的硬件性能;但其開發的工作量大,程序可讀性、移植性差。與匯編語言不同的是,C語言可讀性強、編程簡單、調試方便,適合編寫結構和算法比較復雜的程序。然而,對于控制來說,用C語言開發程序也有其明顯的缺點:首先,C語言代碼有冗余,降低了執行效率,對于實時性要求很高的某些控制領域來說不符合要求;其次,C語言無法實現某些底層的操作。
在具體軟件開發過程中,可以將匯編語言和C語言結合起來編程,發揮各自的優點。這樣既能滿足實時性要求又能實現所需的功能,同時兼顧程序的可讀性和編程效率。為此,了解及掌握C語言和匯編語言的混合編程技術對于DSP的軟件開發具有重要的意義。
1 準備工作
在進行混合編程之前,首先要創造一個運行的基本環境。這個基本環境包括存儲空間的分配、DSP寄存器映射地址的定義以及中斷向量的定義等方面。
(1)存儲空間的分配
命令文件(*.cmd)用來實現對程序存儲器和數據存儲器空間的分配。一是目標存儲器定義(由MEMORY命令定義),二是各段的定位(由SECTIONS命令定義)。
(2)寄存器映射地址的定義
頭文件(*.h)用來定義所用到的DSP控制器內部寄存器的映射地址,以及用戶自定義的常量、寄存器等。通常,頭文件在主程序的開始,使用匯編指示符“.include”和“.copy”對其調用。頭文件的定義有2種方式。第1種是以指針變量的形式定義各種寄存器,即采用如下形式:
volatile unsigned int T1CMPR Ox7402第2種則是用宏定義的方式定義各種寄存器的名稱:
# define T1CMPR Ox7402
(3)中斷向量的定義
LF240xA內部提供了多個中斷,如INTl~INT6、TRAP等。復位中斷向量(c_intO)是在實時運行支持庫(rts2xx.1ib)中定義的一種特殊的中斷,它的作用是先進行軟件堆棧操作,然后初始化全局變量,最后調用主程序main()。所以當復位(Reset)時,程序跳轉到c_int0進行相應的處理。中斷向量表則是將主程序中用到的中斷子程序和相應中斷級別類型連接起來的一個簡單的跳轉指令表。表中每個中斷向量占2個字,在命令文件中將其聲明到程序存儲器空間的0000h~003Fh。
2 混合編程的一般方法
對于LF240xA的混合編程一般有3種方法:一、對C語言程序編譯后形成的匯編程序進行手工修改與優化;二、在C語言程序中直接嵌人匯編語句;三、分別編寫C語言程序和匯編語言程序,然后獨立編譯成目標代碼模塊,再進行鏈接。第一種編程方式要求對匯編與C語言都極其熟悉,并且這樣的編程方式對程序的可讀性和擴展性的負面影響比較大,一般不建議使用。第二種方法適用于語句執行頻率非常高,并且C編程與匯編編程效率差異較大的情況,例如進入中斷的通用中斷子程序等。第三種方式是混合編程最常用的方式之一,在這種方式下,C語言程序與匯編語言程序均可使用另一方定義的函數與變量。下面著重介紹后兩種方法。
2.1 C語言程序中嵌入匯編語言
C語言程序支持asm指令,所以可以利用這條指令直接將匯編語句嵌入到C語言程序中。LF240xA中一些C語言無法操作的控制位,可以采用這種方式來實現。這種方法只需在匯編語句兩邊加上雙引號并用小括號括起來,前面再加上asm關鍵字,即“asm(“匯編語句”);”。需要注意的是,匯編語句不能緊挨著前一個雙引號,它們之間必須用空格、Tab或標號開頭。例如,在匯編語言中開中斷指令SETC INTM,嵌入到C語言中為“asm(“SETCINTM”);”。這種方式雖然操作簡單,但是匯編代碼很有可能破壞原來的C語言環境,從而導致不可預料的結果。因此只提倡在程序開始的系統初始化部分少量使用,而在C語言中嵌入實現某一完整功能的多句匯編語言時,不提倡采用這種方式。
2.2 C語言與匯編語言程序相互調用
(1)C語言程序調用匯編函數
C語言程序中調用的匯編函數,在匯編語言中其名稱以程序標號的形式出現。程序標號作為操作數用.global進行定義,在前面加下劃線“_”。匯編函數也可以利用累加器給C語言程序傳遞返回值。
LF240xA有8個輔助寄存器(AR0~AR7)可供使用,在C語言環境中這些寄存器都有明確的分工。
①AR0:幀指針(Frame Pointer,FP)。LF240xA只提供了大小為8個字的硬件棧,不能滿足需要。因此,C環境定義了一段特殊的存儲器空間,作為軟件棧。軟件棧的作用是分配局部變量、傳遞函數的參數、保存處理器的狀態、保存臨時結果等。AR0指向軟件棧中函數局部數據空間的起始處。
②ARl:軟件棧的棧頂指針(Stack Pointer,SP)。ARl為指向軟件棧棧頂的專用指針。
③AR2:局部變量指針(Local Variable Pointer,LVP)。AR2存放局部變量的偏移量,與AR0(FP)一起對局部變量進行尋址定位。
④AR6、AR7:寄存器型變量。在C語言程序中用register修飾的變量存放在AR6、AR7中。
⑤AR3~AR5:用戶自定義。AR3~AR5沒有特殊的約定,可以由用戶自由決定其用途。在匯編程序的入口處,假設ARP已經被設置為ARl,這是由C編譯器自動完成的。C語言程序調用匯編函數時,匯編函數程序必須遵循下述規范:
①從硬件堆棧中彈出返回地址,然后把它壓入軟件堆棧;
②把C程序的數據結構指針FP壓入堆棧;
③如果匯編程序改變了AR6或AR7,也需要把它們壓入堆棧;
④分配局部數據結構;
⑤執行匯編程序的實際任務代碼;
⑥如果匯編程序有返回值,則把這個返回值放入累加器中;
⑦設置ARP為ARl;
⑧解除分配的局部數據結構;
⑨如果AR6和AR7曾經被保存過,則從軟件堆棧恢復它們的值;
⑩從軟件堆棧恢復FP;
⑾把軟件堆棧中存儲的返回地址壓入硬件堆棧;
⑿返回。
DSP(數字信號處理器)憑借其高速數字信號處理功能、實時性強、低功耗、高集成度等嵌入式微計算機的特點,已在通信、航空航天、工業控制、醫療、國防、汽車等領域得到了廣泛的應用。TMS320LF240xA DSP(以下簡稱LF240xA)是美國TI公司推出的高性能16位數字信號處理器,它具有運算速度快,在片集成的外設豐富等特點,故又稱其為DSP控制器。應用領域主要針對工業測控、電機控制、家用電器和消費電子等場合。
LF240xA的軟件開發過程,既可以使用匯編語言,也可以使用C語言。匯編語言的代碼執行效率高、運行速度快,可以直接對寄存器進行操作,充分發揮了DSP控制器的硬件性能;但其開發的工作量大,程序可讀性、移植性差。與匯編語言不同的是,C語言可讀性強、編程簡單、調試方便,適合編寫結構和算法比較復雜的程序。然而,對于控制來說,用C語言開發程序也有其明顯的缺點:首先,C語言代碼有冗余,降低了執行效率,對于實時性要求很高的某些控制領域來說不符合要求;其次,C語言無法實現某些底層的操作。
在具體軟件開發過程中,可以將匯編語言和C語言結合起來編程,發揮各自的優點。這樣既能滿足實時性要求又能實現所需的功能,同時兼顧程序的可讀性和編程效率。為此,了解及掌握C語言和匯編語言的混合編程技術對于DSP的軟件開發具有重要的意義。
1 準備工作
在進行混合編程之前,首先要創造一個運行的基本環境。這個基本環境包括存儲空間的分配、DSP寄存器映射地址的定義以及中斷向量的定義等方面。
(1)存儲空間的分配
命令文件(*.cmd)用來實現對程序存儲器和數據存儲器空間的分配。一是目標存儲器定義(由MEMORY命令定義),二是各段的定位(由SECTIONS命令定義)。
(2)寄存器映射地址的定義
頭文件(*.h)用來定義所用到的DSP控制器內部寄存器的映射地址,以及用戶自定義的常量、寄存器等。通常,頭文件在主程序的開始,使用匯編指示符“.include”和“.copy”對其調用。頭文件的定義有2種方式。第1種是以指針變量的形式定義各種寄存器,即采用如下形式:
volatile unsigned int T1CMPR Ox7402第2種則是用宏定義的方式定義各種寄存器的名稱:
# define T1CMPR Ox7402
(3)中斷向量的定義
LF240xA內部提供了多個中斷,如INTl~INT6、TRAP等。復位中斷向量(c_intO)是在實時運行支持庫(rts2xx.1ib)中定義的一種特殊的中斷,它的作用是先進行軟件堆棧操作,然后初始化全局變量,最后調用主程序main()。所以當復位(Reset)時,程序跳轉到c_int0進行相應的處理。中斷向量表則是將主程序中用到的中斷子程序和相應中斷級別類型連接起來的一個簡單的跳轉指令表。表中每個中斷向量占2個字,在命令文件中將其聲明到程序存儲器空間的0000h~003Fh。
2 混合編程的一般方法
對于LF240xA的混合編程一般有3種方法:一、對C語言程序編譯后形成的匯編程序進行手工修改與優化;二、在C語言程序中直接嵌人匯編語句;三、分別編寫C語言程序和匯編語言程序,然后獨立編譯成目標代碼模塊,再進行鏈接。第一種編程方式要求對匯編與C語言都極其熟悉,并且這樣的編程方式對程序的可讀性和擴展性的負面影響比較大,一般不建議使用。第二種方法適用于語句執行頻率非常高,并且C編程與匯編編程效率差異較大的情況,例如進入中斷的通用中斷子程序等。第三種方式是混合編程最常用的方式之一,在這種方式下,C語言程序與匯編語言程序均可使用另一方定義的函數與變量。下面著重介紹后兩種方法。
2.1 C語言程序中嵌入匯編語言
C語言程序支持asm指令,所以可以利用這條指令直接將匯編語句嵌入到C語言程序中。LF240xA中一些C語言無法操作的控制位,可以采用這種方式來實現。這種方法只需在匯編語句兩邊加上雙引號并用小括號括起來,前面再加上asm關鍵字,即“asm(“匯編語句”);”。需要注意的是,匯編語句不能緊挨著前一個雙引號,它們之間必須用空格、Tab或標號開頭。例如,在匯編語言中開中斷指令SETC INTM,嵌入到C語言中為“asm(“SETCINTM”);”。這種方式雖然操作簡單,但是匯編代碼很有可能破壞原來的C語言環境,從而導致不可預料的結果。因此只提倡在程序開始的系統初始化部分少量使用,而在C語言中嵌入實現某一完整功能的多句匯編語言時,不提倡采用這種方式。
2.2 C語言與匯編語言程序相互調用
(1)C語言程序調用匯編函數
C語言程序中調用的匯編函數,在匯編語言中其名稱以程序標號的形式出現。程序標號作為操作數用.global進行定義,在前面加下劃線“_”。匯編函數也可以利用累加器給C語言程序傳遞返回值。
LF240xA有8個輔助寄存器(AR0~AR7)可供使用,在C語言環境中這些寄存器都有明確的分工。
①AR0:幀指針(Frame Pointer,FP)。LF240xA只提供了大小為8個字的硬件棧,不能滿足需要。因此,C環境定義了一段特殊的存儲器空間,作為軟件棧。軟件棧的作用是分配局部變量、傳遞函數的參數、保存處理器的狀態、保存臨時結果等。AR0指向軟件棧中函數局部數據空間的起始處。
②ARl:軟件棧的棧頂指針(Stack Pointer,SP)。ARl為指向軟件棧棧頂的專用指針。
③AR2:局部變量指針(Local Variable Pointer,LVP)。AR2存放局部變量的偏移量,與AR0(FP)一起對局部變量進行尋址定位。
④AR6、AR7:寄存器型變量。在C語言程序中用register修飾的變量存放在AR6、AR7中。
⑤AR3~AR5:用戶自定義。AR3~AR5沒有特殊的約定,可以由用戶自由決定其用途。在匯編程序的入口處,假設ARP已經被設置為ARl,這是由C編譯器自動完成的。C語言程序調用匯編函數時,匯編函數程序必須遵循下述規范:
①從硬件堆棧中彈出返回地址,然后把它壓入軟件堆棧;
②把C程序的數據結構指針FP壓入堆棧;
③如果匯編程序改變了AR6或AR7,也需要把它們壓入堆棧;
④分配局部數據結構;
⑤執行匯編程序的實際任務代碼;
⑥如果匯編程序有返回值,則把這個返回值放入累加器中;
⑦設置ARP為ARl;
⑧解除分配的局部數據結構;
⑨如果AR6和AR7曾經被保存過,則從軟件堆棧恢復它們的值;
⑩從軟件堆棧恢復FP;
⑾把軟件堆棧中存儲的返回地址壓入硬件堆棧;
⑿返回。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- matlab vsFortran混合編程工具 0次下載
- 單片機C語言和匯編語言混合編程實例詳解 227次下載
- LabVIEW和MATLAB混合編程的資料合集免費下載 36次下載
- 如何實現VisualC++與MATLAB接口進行混合編程詳細方法說明 20次下載
- DSP混合編程關鍵技術設計方案 1次下載
- ARM Bootloader 的實現C 和 ASM 混合編程 15次下載
- 基于Matlab和VC混合編程的DSP數據采集系統 4次下載
- Qt與Matlab混合編程 0次下載
- DSP集成開發環境中的混合編程及FFT算法的實現 16次下載
- DSP6748與FPGA混合編程-StarterWare 27次下載
- Matlab與C混合編程匯總 0次下載
- LabVIEW數據庫與報表的混合編程設計技術 52次下載
- Matlab和VC混合編程的DSP數據采集系統
- 基于flash MX和authorware的混合編程軟件小助
- TMS320F24x 的混合編程方法
- 儲能BMS的關鍵技術是什么 810次閱讀
- 光伏逆變器拓撲概述及關鍵技術 903次閱讀
- C與C++混合編程是什么 1744次閱讀
- 混合編程中的模塊命名與管理 992次閱讀
- WCDMA系統中關鍵技術的分析及應用解決方案 3444次閱讀
- 芯片的未來靠哪些關鍵技術? 5202次閱讀
- ptn技術要素及關鍵技術 6044次閱讀
- 本田i-MMD混動系統關鍵技術分析 3.9w次閱讀
- ofdm關鍵技術及應用 2w次閱讀
- 無人駕駛關鍵技術分析 2.2w次閱讀
- 基于LabVIEW和Matlab混合編程的小波降噪方法 1w次閱讀
- 云計算關鍵技術與研究問題 1050次閱讀
- 淺談智能電網狀態檢測中的關鍵技術 1603次閱讀
- 有線電視網絡實現IPTV的幾大關鍵技術 1873次閱讀
- DSP編程的關鍵問題分析 1721次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1489次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 91次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 9次下載 | 免費
- 6基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7基于單片機和 SG3525的程控開關電源設計
- 0.23 MB | 3次下載 | 免費
- 8基于單片機的紅外風扇遙控
- 0.23 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30319次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論