汽車領(lǐng)域使用的芯片中,,中斷系統(tǒng)已然是標(biāo)配,。掌握中斷系統(tǒng)是一個工程師的基本技能。了解一個事物,,最好的方式就是實踐,。本文,基于RH850 F1KM,,聊一聊"中斷",。中斷系統(tǒng)主要包含三個部分:中斷觸發(fā)源,、中斷控制及中斷處理,示意如下:
講到中斷,,本質(zhì)是在討論CPU的行為,,即:中斷針對CPU。在沒有中斷系統(tǒng)之前,,CPU按照命令時序,,順序執(zhí)行。為了能讓CPU處理更緊急的任務(wù)(eg:剎車任務(wù)),,設(shè)計了中斷,,即:讓正在運行的CPU停下當(dāng)前任務(wù),去處理更高優(yōu)先級的任務(wù),,示意如下: 在一個具有中斷系統(tǒng)的芯片中,每個CPU會有一個中斷向量表基地址寄存器(eg:INTBP,, Base address of the interrupt handler address table),。那么,中斷向量表地址寄存器存儲的地址是多少呢,?答:用戶自定義,,即:中斷向量表寄存器存儲的地址,可根據(jù)芯片資源自行設(shè)定,,eg:0x00000200,,這個地址將成為中斷向量表的基地址。注意,,該地址一般需要放在PFlash內(nèi)存區(qū),。知道了中斷向量表入口位置,即可通過每個中斷的偏移(Offset)查找到對應(yīng)中斷函數(shù)入口地址,。 如上提到:CPU會對應(yīng)一個中斷向量表基地址寄存器(eg:INTBP),,而INTBP存放著中斷向量表的基地址,同時,,中斷向量表存放著每個中斷函數(shù)的入口地址,,示意如下:
中斷向量表基地址可以在鏈接文件中設(shè)定,也可以在頭文件(eg:*.h)等位置設(shè)定,。 中斷函數(shù)的處理,需要注冊中斷函數(shù),,即:將目標(biāo)中斷函數(shù)放入指定位置,。具體操作: 中斷函數(shù)需要用#pragma進(jìn)行聲明,示意如下:#pragma INTERRUPT inticup2pe_DataFlashRq_handler(vect=359) void inticup2pe_DataFlashRq_handler(void) { /* do something*/ }
#pragma ghs interrupt void inticup2pe_DataFlashRq_handler(void) { /* do something*/ } (二)在啟動文件(*.850)中注冊中斷函數(shù)
...... .offset (IRQ_TABLE_START+0x059C) #if (INTICUP_DATAFLASHPRQT_ENABLE > 0x00000000) .extern _inticup2pe_DataFlashRq_handler .word _inticup2pe_DataFlashRq_handler #else .word __unused_isr #endif ......
注意:鏈接文件注冊中斷函數(shù)時,,函數(shù)前需要添加下劃線"_",。 在RH850中,,中斷觸發(fā)方式可以是Level(eg:"1"),,也可以是Edge觸發(fā)(eg:上升沿、下降沿或者雙邊沿),。在芯片的datasheet中,,每個中斷源的觸發(fā)方式會給出具體約束,每個中斷源在中斷向量表中的偏移地址,、中斷Channel也會給出具體約束,,示意如下:對于每個中斷,中斷優(yōu)先級,、中斷觸發(fā)方式等需要通過中斷控制寄存器(Interrupt Control Registers)配置,。 (一)中斷使能
中斷的使能包含兩個部分:
1、中斷觸發(fā)源使能,,即:使能對應(yīng)中斷源的觸發(fā)能力
2,、中斷控制的使能,即:中斷控制單元使能,,使其可以接收中斷源的請求,,并把仲裁后的結(jié)果傳遞給CPU。
示意如下:
|