汽車(chē)領(lǐng)域使用的芯片中,中斷系統(tǒng)已然是標(biāo)配。掌握中斷系統(tǒng)是一個(gè)工程師的基本技能。了解一個(gè)事物,最好的方式就是實(shí)踐。本文,基于RH850 F1KM,聊一聊"中斷"。中斷系統(tǒng)主要包含三個(gè)部分:中斷觸發(fā)源、中斷控制及中斷處理,示意如下:
 講到中斷,本質(zhì)是在討論CPU的行為,即:中斷針對(duì)CPU。在沒(méi)有中斷系統(tǒng)之前,CPU按照命令時(shí)序,順序執(zhí)行。為了能讓CPU處理更緊急的任務(wù)(eg:剎車(chē)任務(wù)),設(shè)計(jì)了中斷,即:讓正在運(yùn)行的CPU停下當(dāng)前任務(wù),去處理更高優(yōu)先級(jí)的任務(wù),示意如下:
 在一個(gè)具有中斷系統(tǒng)的芯片中,每個(gè)CPU會(huì)有一個(gè)中斷向量表基地址寄存器(eg:INTBP, Base address of the interrupt handler address table)。那么,中斷向量表地址寄存器存儲(chǔ)的地址是多少呢?答:用戶自定義,即:中斷向量表寄存器存儲(chǔ)的地址,可根據(jù)芯片資源自行設(shè)定,eg:0x00000200,這個(gè)地址將成為中斷向量表的基地址。注意,該地址一般需要放在PFlash內(nèi)存區(qū)。知道了中斷向量表入口位置,即可通過(guò)每個(gè)中斷的偏移(Offset)查找到對(duì)應(yīng)中斷函數(shù)入口地址。 如上提到:CPU會(huì)對(duì)應(yīng)一個(gè)中斷向量表基地址寄存器(eg:INTBP),而INTBP存放著中斷向量表的基地址,同時(shí),中斷向量表存放著每個(gè)中斷函數(shù)的入口地址,示意如下:

中斷向量表基地址可以在鏈接文件中設(shè)定,也可以在頭文件(eg:*.h)等位置設(shè)定。 中斷函數(shù)的處理,需要注冊(cè)中斷函數(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*/ } (二)在啟動(dòng)文件(*.850)中注冊(cè)中斷函數(shù)
...... .offset (IRQ_TABLE_START+0x059C) #if (INTICUP_DATAFLASHPRQT_ENABLE > 0x00000000) .extern _inticup2pe_DataFlashRq_handler .word _inticup2pe_DataFlashRq_handler #else .word __unused_isr #endif ......
注意:鏈接文件注冊(cè)中斷函數(shù)時(shí),函數(shù)前需要添加下劃線"_"。 在RH850中,中斷觸發(fā)方式可以是Level(eg:"1"),也可以是Edge觸發(fā)(eg:上升沿、下降沿或者雙邊沿)。在芯片的datasheet中,每個(gè)中斷源的觸發(fā)方式會(huì)給出具體約束,每個(gè)中斷源在中斷向量表中的偏移地址、中斷Channel也會(huì)給出具體約束,示意如下:
對(duì)于每個(gè)中斷,中斷優(yōu)先級(jí)、中斷觸發(fā)方式等需要通過(guò)中斷控制寄存器(Interrupt Control Registers)配置。 (一)中斷使能
中斷的使能包含兩個(gè)部分:
1、中斷觸發(fā)源使能,即:使能對(duì)應(yīng)中斷源的觸發(fā)能力
2、中斷控制的使能,即:中斷控制單元使能,使其可以接收中斷源的請(qǐng)求,并把仲裁后的結(jié)果傳遞給CPU。
示意如下:
|