




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第6章章C語言和匯編語言程序混合編程語言和匯編語言程序混合編程方法及中斷處理方法方法及中斷處理方法6.1 C語言和匯編語言程序混合編程方法語言和匯編語言程序混合編程方法 數(shù)據(jù)類型 寄存器變量6.1.1 在在C語言中嵌入?yún)R編語言程序語言中嵌入?yún)R編語言程序在用在用C語言開發(fā)語言開發(fā)DSP應(yīng)用程序時,需要對應(yīng)用程序時,需要對DSP的底層的底層資源進行操作的場合。資源進行操作的場合。 用用C語言編寫相應(yīng)的代碼有一定的難度;語言編寫相應(yīng)的代碼有一定的難度; 某些操作某些操作C語言根本就無法實現(xiàn)(如對語言根本就無法實現(xiàn)(如對OVM、CNF等位的操作)。等位的操作)。在在C語言中嵌入單條匯編語句語言中嵌入
2、單條匯編語句asm(需要嵌入的匯編語句需要嵌入的匯編語句) / 系統(tǒng)初始化子程序系統(tǒng)初始化子程序 void initial( )asm( setcSXM);/ SXM位置位置1,抑制,抑制符號位擴展符號位擴展 asm( clrcOVM);/ OVM位清位清0,累,累加器中結(jié)果正常溢出加器中結(jié)果正常溢出 asm( clrcCNF);/ CNF位清位清0,B0被被配置為數(shù)據(jù)存儲空間配置為數(shù)據(jù)存儲空間 2. 訪問訪問I/O空間空間3. 訪問數(shù)據(jù)空間訪問數(shù)據(jù)空間預(yù)先定義如:預(yù)先定義如:volatile unsigned int *IMR=(volatile unsigned int *)0X0004;
3、volatile unsigned int *IFR=(volatile unsigned int *)0X0006;實例中:實例中: *IMR=0X0; *IFR=0X0FFFFH;4. 存儲器模式存儲器模式5. 系統(tǒng)堆棧系統(tǒng)堆棧6. 在在C語言中嵌入語言中嵌入實現(xiàn)某一完整功能的多條匯編語句實現(xiàn)某一完整功能的多條匯編語句把需要嵌入的多條匯編語句編制成一個子程序,并在把需要嵌入的多條匯編語句編制成一個子程序,并在其入口和出口處遵循其入口和出口處遵循C語言的調(diào)用規(guī)范進行一些必要語言的調(diào)用規(guī)范進行一些必要的操作,就可以方便地在的操作,就可以方便地在C語言中調(diào)用匯編語言程序語言中調(diào)用匯編語言程序 。
4、在在C語言中調(diào)用匯編語言程序編寫的子程序時,應(yīng)特語言中調(diào)用匯編語言程序編寫的子程序時,應(yīng)特別注意使用的堆棧不是別注意使用的堆棧不是DSP的硬件堆棧,而是的硬件堆棧,而是.CMD文件定義的軟堆棧。文件定義的軟堆棧。 (1)調(diào)用函數(shù)時堆棧的使用情況調(diào)用函數(shù)時堆棧的使用情況(2)C語言調(diào)用子程序的規(guī)范語言調(diào)用子程序的規(guī)范1)主程序的操作)主程序的操作 主程序把需要向子程序傳遞的參數(shù)按反序壓入堆主程序把需要向子程序傳遞的參數(shù)按反序壓入堆棧(最右邊的參數(shù)最先被壓入堆棧,最左邊的參數(shù)棧(最右邊的參數(shù)最先被壓入堆棧,最左邊的參數(shù)最后被壓入堆棧);最后被壓入堆棧); 主程序調(diào)用子程序;主程序調(diào)用子程序; 在子
5、程序返回前,在子程序返回前,ARP已設(shè)置為已設(shè)置為AR1; 當子程序調(diào)用完畢后,主程序要彈出先前壓入堆當子程序調(diào)用完畢后,主程序要彈出先前壓入堆棧的傳遞參數(shù)。棧的傳遞參數(shù)。操作語句:操作語句:SBRK n(n是主程序向子程序傳遞的參數(shù)的個數(shù))是主程序向子程序傳遞的參數(shù)的個數(shù))注意:注意:ARP已經(jīng)由編譯器自動設(shè)置為已經(jīng)由編譯器自動設(shè)置為AR1。 子程序的操作子程序的操作在子程序的入口處,假設(shè)在子程序的入口處,假設(shè)ARP已經(jīng)被設(shè)置為已經(jīng)被設(shè)置為AR1(由(由C編譯器自動完成的)。編譯器自動完成的)。 從硬件堆棧中彈出返回地址,再把它壓入軟件堆棧;從硬件堆棧中彈出返回地址,再把它壓入軟件堆棧; 將
6、主程序的數(shù)據(jù)結(jié)構(gòu)指針將主程序的數(shù)據(jù)結(jié)構(gòu)指針FP壓入堆棧;壓入堆棧; 若在子程序中要改變?nèi)粼谧映绦蛑幸淖傾R6或者或者AR7,需要把它們壓入,需要把它們壓入堆棧;堆棧; 分配局部數(shù)據(jù)結(jié)構(gòu);分配局部數(shù)據(jù)結(jié)構(gòu); 執(zhí)行子程序的實際任務(wù)代碼;執(zhí)行子程序的實際任務(wù)代碼; 如果子程序有返回值,則把此返回值放入累加器中;如果子程序有返回值,則把此返回值放入累加器中; 設(shè)置設(shè)置ARP為為AR1; 解除分配的局部數(shù)據(jù)結(jié)構(gòu);解除分配的局部數(shù)據(jù)結(jié)構(gòu); 如果保存了如果保存了AR6和和AR7,則從軟件堆棧恢復(fù)它們,則從軟件堆?;謴?fù)它們的值;的值; 從軟件堆?;謴?fù)從軟件堆棧恢復(fù)FP; 把軟件堆棧中存儲的返回地址壓入硬件堆
7、棧;把軟件堆棧中存儲的返回地址壓入硬件堆棧; 返回。返回。說明說明如果是如果是C語言主程序調(diào)用語言主程序調(diào)用C語言子程序,則上面所述語言子程序,則上面所述的調(diào)用規(guī)范是的調(diào)用規(guī)范是C編譯器在生成匯編語言程序代碼時自編譯器在生成匯編語言程序代碼時自動完成的;動完成的;如果是如果是C語言主程序調(diào)用匯編語言程序編寫的子程序,語言主程序調(diào)用匯編語言程序編寫的子程序,則子程序的編寫必須遵循前述則子程序的編寫必須遵循前述“子程序需要進行的操子程序需要進行的操作作”規(guī)范,而規(guī)范,而“主函數(shù)需要進行的操作主函數(shù)需要進行的操作”則由則由C編譯編譯器自動完成。器自動完成。6.1.2 分開編寫分開編寫C語言和匯編語言
8、程序語言和匯編語言程序1分離的分離的C語言程序和匯編語言程序接口語言程序和匯編語言程序接口在編寫匯編語言程序時應(yīng)注意:在編寫匯編語言程序時應(yīng)注意: 必須遵守有關(guān)的調(diào)用規(guī)則和寄存器規(guī)則,這樣必須遵守有關(guān)的調(diào)用規(guī)則和寄存器規(guī)則,這樣不會影響不會影響C語言程序的運行環(huán)境。語言程序的運行環(huán)境。C語言程序既可以調(diào)用匯編語言程序,也可以訪語言程序既可以調(diào)用匯編語言程序,也可以訪問匯編語言程序中定義的變量。問匯編語言程序中定義的變量。I. 匯編語言程序也可以調(diào)用匯編語言程序也可以調(diào)用C語言函數(shù)或訪問語言函數(shù)或訪問C語語言程序中定義的變量。言程序中定義的變量。 2在在C語言程序中訪問匯編語言程序的變量語言程序
9、中訪問匯編語言程序的變量根據(jù)變量或常數(shù)定義的方式,可用以下根據(jù)變量或常數(shù)定義的方式,可用以下3種方法來實種方法來實現(xiàn)這種操作。現(xiàn)這種操作。(1)匯編變量在)匯編變量在.bss段中定義。段中定義。訪問在訪問在.bss中定義的變量按以下步驟可進行正常訪問:中定義的變量按以下步驟可進行正常訪問: 采用采用.bss命令定義變量;命令定義變量; 采用采用.global命令定義變量;命令定義變量; 在變量名前加一下劃線在變量名前加一下劃線“_”; 在在C語言程序中將變量說明為外部變量。語言程序中將變量說明為外部變量。 (2)變量不在)變量不在.bss段中定義。段中定義。訪問不在訪問不在.bss中定義的變量
10、按以下步驟可進行正常訪中定義的變量按以下步驟可進行正常訪問:問:(3)用)用.set和和.global命令定義全局常數(shù)。命令定義全局常數(shù)。從從C語言程序中訪問在匯編語言程序中用語言程序中訪問在匯編語言程序中用.set和和.global命令定義的常數(shù),按以下步驟可進行正常訪問:命令定義的常數(shù),按以下步驟可進行正常訪問: 在匯編語言程序中將常數(shù)(符號)定義為全局常數(shù);在匯編語言程序中將常數(shù)(符號)定義為全局常數(shù);C語言程序中訪問匯編語言程序中的常數(shù)時,應(yīng)在語言程序中訪問匯編語言程序中的常數(shù)時,應(yīng)在常數(shù)名之前加一個地址操作符常數(shù)名之前加一個地址操作符“&”。3在匯編語言程序中訪問在匯編語言程
11、序中訪問C語言程序變量語言程序變量從匯編語言程序中訪問從匯編語言程序中訪問C語言程序變量按以下步語言程序變量按以下步驟可進行正常訪問:驟可進行正常訪問: 在在C語言程序中定義變量(如語言程序中定義變量(如 x););在匯編語言程序中使用時前面加下劃線在匯編語言程序中使用時前面加下劃線“_”。(如(如_x)。)。6.2 用用C語言處理語言處理DSP中斷中斷F240X內(nèi)核提供了一個不可屏蔽的中斷內(nèi)核提供了一個不可屏蔽的中斷NMI和和6個按個按優(yōu)先級獲得服務(wù)的可屏蔽中斷優(yōu)先級獲得服務(wù)的可屏蔽中斷INT1INT6。F240X系列系列DSP通過中斷系統(tǒng)中的一個兩級中斷來擴通過中斷系統(tǒng)中的一個兩級中斷來擴
12、展系統(tǒng)可響應(yīng)的中斷個數(shù)。展系統(tǒng)可響應(yīng)的中斷個數(shù)。DSP的中斷請求的中斷請求/應(yīng)答硬件邏輯和中斷服務(wù)程序軟件應(yīng)答硬件邏輯和中斷服務(wù)程序軟件是一個兩級的層次結(jié)構(gòu)。是一個兩級的層次結(jié)構(gòu)。如果一個引起中斷的外設(shè)事件發(fā)生且相應(yīng)的中斷使能如果一個引起中斷的外設(shè)事件發(fā)生且相應(yīng)的中斷使能位被置位被置1,則會產(chǎn)生一個從外設(shè)到中斷控制器的中斷,則會產(chǎn)生一個從外設(shè)到中斷控制器的中斷請求。請求。從幾個外設(shè)來的外設(shè)中斷請求(從幾個外設(shè)來的外設(shè)中斷請求(PIRQ)在中斷控制)在中斷控制器處器處“或或”產(chǎn)生一個到產(chǎn)生一個到CPU的中斷請求(的中斷請求(INTn)。)。如果一個外設(shè)中斷請求如果一個外設(shè)中斷請求PIRQ在在CP
13、U對對INTn應(yīng)答后的應(yīng)答后的一個周期內(nèi)仍然有效時,則另一個中斷請求脈沖一個周期內(nèi)仍然有效時,則另一個中斷請求脈沖INTn也會產(chǎn)生。也會產(chǎn)生。而而CPU總是響應(yīng)優(yōu)先級高的外設(shè)中斷請求。總是響應(yīng)優(yōu)先級高的外設(shè)中斷請求。 CPU應(yīng)答外設(shè)中斷時,從應(yīng)答外設(shè)中斷時,從PIVR寄存器中讀取相應(yīng)中寄存器中讀取相應(yīng)中斷的向量,并產(chǎn)生一個轉(zhuǎn)到該中斷服務(wù)子程序入口的斷的向量,并產(chǎn)生一個轉(zhuǎn)到該中斷服務(wù)子程序入口的向量。向量。 用用C語言實現(xiàn)可屏蔽中斷程序的兩種方法語言實現(xiàn)可屏蔽中斷程序的兩種方法 : 通過軟件識別中斷標志的方法。通過軟件識別中斷標志的方法。優(yōu)點:實現(xiàn)中斷程序代碼少、易于理解。優(yōu)點:實現(xiàn)中斷程序代碼
14、少、易于理解。 2. 通過外圍中斷向量寄存器通過外圍中斷向量寄存器PIVR的值識別中斷。的值識別中斷。實現(xiàn):用實現(xiàn):用C語言中的語言中的SWITCH在中斷服務(wù)程序,在中在中斷服務(wù)程序,在中斷程序入口處,根據(jù)斷程序入口處,根據(jù)PIVR的值來判斷發(fā)生的中斷是的值來判斷發(fā)生的中斷是否為需要的中斷。否為需要的中斷。 例例1:用軟件識別中斷標志的方法實現(xiàn)捕捉單元:用軟件識別中斷標志的方法實現(xiàn)捕捉單元4的中的中斷(斷(CAP4INT)。)。1. 建立一個復(fù)位和中斷向量文件建立一個復(fù)位和中斷向量文件vectors.asm:.titlevectors.asm.ref_c_int0,_nothing,_capi
15、nt ;定義符號;定義符號.sect.vectorsreset:b _c_int0 ;復(fù)位向量;復(fù)位向量 INT1:b _nothingINT2: b _nothingINT3:b _nothingINT4:b _capint;當發(fā)生;當發(fā)生int4中斷時,中斷時,程序跳轉(zhuǎn)至程序跳轉(zhuǎn)至“capint”所標志的中斷服務(wù)程序。所標志的中斷服務(wù)程序。INT5:b _nothingINT6:b _nothing ;當發(fā)生其它級別的;當發(fā)生其它級別的中斷時,直接跳轉(zhuǎn)至中斷時,直接跳轉(zhuǎn)至nothing所標志的中斷服務(wù)程序所標志的中斷服務(wù)程序 2. 中斷源辨別中斷源辨別 當 發(fā) 生當 發(fā) 生 C A P 4
16、 I N T 時 , 其 相 應(yīng) 的 中 斷 標 志 位時 , 其 相 應(yīng) 的 中 斷 標 志 位(EVBIFRC最低位)置最低位)置1。在在capint標號的中斷服務(wù)程序?qū)χ袛嘣磁袛啵簶颂柕闹袛喾?wù)程序?qū)χ袛嘣磁袛啵喝羧鬍VBIFRC的最低位為的最低位為1,則執(zhí)行后面的中斷服務(wù)程,則執(zhí)行后面的中斷服務(wù)程序;序;若若EVBIFRC的最低位為的最低位為0,表明沒有發(fā)生,表明沒有發(fā)生CAP4INT中中斷,則中斷直接返回(或跳到與該中斷標志相對應(yīng)的斷,則中斷直接返回(或跳到與該中斷標志相對應(yīng)的中斷服務(wù)程序)。中斷服務(wù)程序)。/ CAPINT4中斷服務(wù)程序中斷服務(wù)程序 void interrupt c
17、apint() int flag; flag=EVBIFRC&0X01; / 判斷是否是判斷是否是CAP4中斷中斷 if(flag!=0 x01) asm( clrc INTM); / 返回前開中斷返回前開中斷 return;/ 如果不是如果不是CAP4中斷,則直接返中斷,則直接返回回 ;/ 如果是如果是CAP4中斷,則執(zhí)行響應(yīng)中斷,則執(zhí)行響應(yīng)的中斷操作的中斷操作 EVBIFRC=EVBIFRC|0 x01;/ 寫寫1清除清除CAP4中斷標志中斷標志 asm( clrc INTM);/ 返回前開中斷返回前開中斷 return;/ 中斷返回中斷返回 例例2:用外設(shè)中斷向量寄存器:用外設(shè)中
18、斷向量寄存器PIVR的值識別中斷的方的值識別中斷的方法,來實現(xiàn)法,來實現(xiàn)CAP4INT 。當某一個外設(shè)中斷發(fā)生時,當某一個外設(shè)中斷發(fā)生時,CPU就會把相應(yīng)的中斷就會把相應(yīng)的中斷向量裝載到外設(shè)中斷向量寄存器向量裝載到外設(shè)中斷向量寄存器PIVR中,并且每一中,并且每一個中斷向量和各個外設(shè)中斷一一對應(yīng)。個中斷向量和各個外設(shè)中斷一一對應(yīng)。 CAP4INT:PIVR=0X0036/ 中斷服務(wù)子程序中斷服務(wù)子程序 void interrupt capint() switch(*PIVR) case 0 x0036: 。 /用戶程序用戶程序 EVBIFRC=EVBIFRC|0 x01;/ 寫寫1清除清除CAP4中斷標志中斷標志 break;/ 如果是如果是CAP4中斷,則執(zhí)行響應(yīng)的中斷服務(wù)程序代碼中斷,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能建筑系統(tǒng)集成與智能監(jiān)控系統(tǒng)在商業(yè)綜合體中的應(yīng)用案例報告
- 文化產(chǎn)業(yè)園產(chǎn)業(yè)集聚與文化產(chǎn)業(yè)發(fā)展路徑選擇報告001
- 2025年醫(yī)藥行業(yè)未來趨勢:仿制藥一致性評價下的醫(yī)藥電商發(fā)展報告001
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)與數(shù)據(jù)管理與分析報告
- 咨詢工程師2020課件
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)模式下的臨床試驗外包服務(wù)合同管理與風(fēng)險控制報告
- 折扣零售業(yè)態(tài)行業(yè)競爭態(tài)勢與品牌戰(zhàn)略研究報告
- 2025年醫(yī)藥流通企業(yè)供應(yīng)鏈成本控制與績效評估報告
- 醫(yī)療健康數(shù)據(jù)隱私保護2025年合規(guī)技術(shù)應(yīng)用案例集報告
- 保潔安全知識試題及答案
- 環(huán)保相關(guān)知識培訓(xùn)課件
- 2025年河北高考真題化學(xué)試題+解析(參考版)
- 護理事業(yè)十五五發(fā)展規(guī)劃(2026-2030)
- 2025至2030中國中藥材種植行業(yè)運作模式與競爭格局分析報告
- 武漢大學(xué)2020年強基計劃物理試題(原卷版)
- 2025年隨州國投集團公開招聘42名工作人員筆試參考題庫附帶答案詳解
- 2025年3月10日吉林省紀委監(jiān)察廳遴選面試真題及解析
- 2025年 內(nèi)蒙古能源集團所屬單位招聘考試筆試試題(含答案)
- 2025年“安康杯”安全知識競賽題庫(含答案)
- 2025年江西省高考物理真題
- CJ/T 463-2014薄壁不銹鋼承插壓合式管件
評論
0/150
提交評論