



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.ecos中斷機(jī)制分析(1) 不同的微處理器提供的中斷處理機(jī)制不相同,ecos對(duì)各種處理機(jī)制作了一定的抽象,提供了一種通用的中斷處理機(jī)制。下面以m68k的mcf52xx系列處理器為例分析。當(dāng)中斷產(chǎn)生時(shí),ecos的一段跳轉(zhuǎn)程序使處理器跳轉(zhuǎn)到相應(yīng)的VSR,對(duì)mcf52xx處理器來說這段跳轉(zhuǎn)程序就是中斷向量表,當(dāng)然不同處理器的跳轉(zhuǎn)程序有不同的實(shí)現(xiàn)方式。VSR作了一些簡單處理后,會(huì)調(diào)用中斷服務(wù)程序(ISR)作進(jìn)一步處理,對(duì)ISR的調(diào)用采用尋找中斷服務(wù)程序向量表的方式。有些中斷在ISR結(jié)束后還會(huì)調(diào)用延遲服務(wù)程序(DSR)作進(jìn)一步處理。以下是構(gòu)成mcf52xx的中斷向量表的匯編代
2、碼:/*/* ROM vector table */ .macro hw_vsr name .long hw_vsr_name .endm .s
3、ection ".romvec","ax" .globl rom_vsr_tablerom_vsr_table: /* 0 - Initial SSP &
4、#160; */ hw_vsr stack /* 1 - Initial PC
5、160; */ hw_vsr reset /* 2-24 - Default exception handlers
6、60; */ .rept 24-2+1 hw_vsr default .endr /* 25-31 - Autovect
7、or interrupts 1-7 */ .rept 31-25+1 hw_vsr autovec .endr /*
8、160; 32-63 - Default exception handlers */ .rept 63-32+1 hw_vsr default .endr
9、 /* 64-255 - User interrupt vectors */ .rept 255-64+1 hw_vsr interrupt
10、160; .endr .equ rom_vsr_table_size, . - rom_vsr_table 這段代碼構(gòu)成了中斷向量表,假設(shè)處理器按rom方式啟動(dòng),通過鏈接腳本.ld文件將該中斷向量表的起始位置放在復(fù)位后PC入口位置(假設(shè)為0xFFE00000),該向量表在rom中的存儲(chǔ)示意圖如下圖:
11、 當(dāng)復(fù)位中斷產(chǎn)生時(shí),處理器首先從0xFFE00000取出一個(gè)長字來初始化堆棧寄存器SP,然后取出緊跟著的一個(gè)長字來初始化PC,此時(shí)PC值為hw_vsr_reset,也即一段向量服務(wù)程序(VSR)的入口地址。同樣,當(dāng)其他中斷(或例外)產(chǎn)生時(shí),mcf52xx處理器自動(dòng)將一個(gè)32位狀態(tài)字和PC壓棧,如下圖所示:其中VECTOR7:0為當(dāng)前中斷的中斷向
12、量號(hào),SR(STATUSREGISTER) 10:8三位為當(dāng)前中斷級(jí)別,用于屏蔽低于或等于當(dāng)前級(jí)別的中斷,之后處理器會(huì)根據(jù)中斷號(hào)從中斷向量表中獲得相應(yīng)向量服務(wù)程序(VSR)的入口地址。這里重點(diǎn)分析64到255號(hào)中斷的向量服務(wù)程序。 .equ int_pres_regs_sz,(2+3)*4) .macro int_pres_regs&
13、#160; lea.l -int_pres_regs_sz(%sp),%sp movem.l %d0-%d2/%a0-%a1,(%sp) .endm .macro in
14、t_rest_regs movem.l (%sp),%d0-%d2/%a0-%a1 lea.l int_pres_regs_sz(%sp),%sp .endm 首先定義了兩個(gè)宏int_pres_regs和int_rest_regs分別用于壓棧和恢復(fù)d0,d1,d2
15、,a0,a1五個(gè)寄存器,即對(duì)CPU狀態(tài)進(jìn)行一定程度的保存。 .text .balign 4hw_vsr_interrupt: int_pres_regs move.l
16、#(-64+7)*4,%d0 hw_vsr_int_common: move.w in
17、t_pres_regs_sz(%sp),%d1 and.l #0x000003fc,%d1
18、60; add.l %d1,%d0 asr.l #2,%d1 這里獲取65-255號(hào)中斷ISR入口地址在中斷服務(wù)程序(ISR)向量表存放的位置。前面提到VSR作了一些簡單處理后,會(huì)調(diào)用中斷服務(wù)程序(ISR)作進(jìn)一步處理,對(duì)ISR的調(diào)用采用從中斷服務(wù)程序向量表
19、獲取ISR入口地址的方式。 mcf52xx系列ISR向量表實(shí)際是一個(gè)數(shù)組cyg_hal_interrupt_handlers,那么數(shù)組里保存的ISR入口地址是什么時(shí)候存進(jìn)去的呢?,原來用戶在添加ISR的時(shí)候會(huì)通過cyg_drv_interrupt_attach()函數(shù),該函數(shù)將該ISR的入口地址按中斷向量號(hào)順序存入ISR向量表數(shù)組。具體實(shí)現(xiàn)如下:#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) CYG_MACRO_START
20、 cyg_
21、uint32 _index_;
22、HAL_TRANSLATE_VECTOR(_vector_), _index_); if (cyg_hal_interrupt_handlers_index_
23、160; =(CYG_ADDRESS)&hal_arch_default_isr)
24、
25、; cyg_hal_interrupt_handlers_index_ = (CYG_ADDRESS)(_isr_); cyg_hal_interrupt_data_index_ = (CYG_ADDRWORD)(_data_); &
26、#160; cyg_hal_interrupt_objects_index_ = (CYG_ADDRESS)(_object_);
27、; CYG_MACRO_END其中HAL_TRANSLATE_VECTOR宏又定義為:#define HAL_TRANSLATE_VECTOR(_vect
28、or_,_index_) CYG_MACRO_START
29、0; switch (_vector_) &
30、#160;
31、;
32、; case CYGNUM_HAL_VECTOR_AUTOVEC1 . CYGNUM_HAL_VECTOR_AUTOVEC7: (_index_) = (_vector_) - CYGNUM_HAL_VECTOR_AUTOVEC1);
33、0; break;
34、160; case CYGNUM_HAL_VECTOR_INTRFIRST . CYGNUM_HAL_VECTOR_INTRLAST: (_index_) = (_vector_)
35、160; &
36、#160; - CYGNUM_HAL_VECTOR_INTRFIRST + (CYGNUM_HAL_VE
37、CTOR_AUTOVEC7 - CYGNUM_HAL_VECTOR_
38、AUTOVEC1 + 1); &
39、#160; break;
40、0;
41、60; default:
42、; CYG_FAIL("Unknown Interrupt!");
43、60; (_index_) = (typeof(_index_)-1;
44、0;
45、60; CYG_MACRO_END 上面兩段宏顯示了ISR向量表數(shù)組的構(gòu)成,cyg_hal_interrupt_handlers0到cyg_hal_interrupt_handlers6為25-31號(hào)Autovector interrupts1-7的ISR程序入口地址,cyg_hal_interrupt_handlers7到cyg_hal_in
46、terrupt_handlers198為64-255號(hào)User interrupt的ISR程序入口地址。 例如產(chǎn)生的是第70號(hào)中斷,那么是剛才那段匯編程序獲得ISR程序入口地址在cyg_hal_interrupt_handlers 數(shù)組中存放位置? 當(dāng)70號(hào)中斷產(chǎn)生時(shí),MCU將自動(dòng)壓棧32位狀態(tài)字和PC,因?yàn)闋顟B(tài)字里VECTOR7:0保存了中斷向量號(hào),所以根據(jù)這個(gè)向量號(hào)就可以換算出ISR放在cyg_hal_interrupt_handlers數(shù)組的位置了。 hw_vsr_interrupt
47、: int_pres_regs move.l #(-64+7)*4,%d0 hw_vsr_int_common:
48、160; move.w int_pres_regs_sz(%sp),%d1 /出棧32位狀態(tài)字 and.l #0x000003fc,%d1
49、160; /獲取VECTOR7:0 add.l %d1,%d0 /d0為ISR程序入口地址在
50、60; /cyg_hal_interrupt_handlers數(shù)組的相對(duì)位置 asr.l #2,%d1 /d1為中斷向量號(hào) 獲取了ISR入口地址,接下來該調(diào)用ISR了。
51、 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT .extern cyg_scheduler_sched_lock addq.l #1,cyg_scheduler_sched_lock /將調(diào)度器上鎖次數(shù)增加1#endif
52、; pea (%sp) .extern cyg_hal_interrupt_objects
53、 lea cyg_hal_interrupt_objects,%a0 move.l (%a0,%d0.l),-(%sp) .extern cyg_hal_interrupt_data
54、160; lea cyg_hal_interrupt_data,%a0 move.l (%a0,%d0.l),-(%sp) .extern cyg_hal_interrupt_handlers
55、60; lea cyg_hal_interrupt_handlers,%a0 move.l (%a0,%d0.l),%a0 move.l %d1,-(%sp)
56、160; 這一段主要為調(diào)用static cyg_uint32 isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)以及void interrupt_end(cyg_uint32 isr_ret, Cyg_Interrupt *intr,HAL_SavedRegisters *regs)作準(zhǔn)備, 將函數(shù)需要的參數(shù)*intr,vector和data壓棧 jbsr (%a0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 4s店危廢管理制度
- it配置管理制度
- 標(biāo)準(zhǔn)物流運(yùn)輸管理制度
- 校內(nèi)咖啡團(tuán)隊(duì)管理制度
- 校園人臉通道管理制度
- 校園衛(wèi)生健康管理制度
- 校園安全崗位管理制度
- 校園洗手設(shè)施管理制度
- 校園維修安全管理制度
- 校園足球家長管理制度
- 法律文化-形考作業(yè)4-國開(ZJ)-參考資料
- 2025年中考物理押題猜想卷(山西卷)(全解全析)
- 華為-項(xiàng)目管理培訓(xùn)-項(xiàng)目失敗的風(fēng)險(xiǎn)初探
- 溫敏型羥丁基殼聚糖護(hù)創(chuàng)敷料技術(shù)審評(píng)報(bào)告
- (完整版)裝飾裝修工程監(jiān)理規(guī)劃
- 英語專業(yè)四級(jí)寫作評(píng)分標(biāo)準(zhǔn)
- 鏈板回轉(zhuǎn)式格柵除污機(jī)出廠檢驗(yàn)報(bào)告(LF型)
- 陜西省中小學(xué)學(xué)生休學(xué)復(fù)學(xué)申請(qǐng)表
- 模具外發(fā)加工與驗(yàn)收標(biāo)準(zhǔn)及流程
- 空調(diào)水管、流量、流速、管徑自動(dòng)計(jì)算以及推薦表和水管各種參數(shù)對(duì)照表47729
- 《架空輸電線路防鳥擋板技術(shù)規(guī)范》征求
評(píng)論
0/150
提交評(píng)論