ARM異常與中斷
http://blog.chinaunix.net/uid-28458801-id-3780127.html
先mark,有的地發還沒有完全消化。
總結一下中斷配置步驟:
中斷涉及:中斷源 中斷控制器 ARM核中斷相關內容
1.中斷源配置:
(1)禁止中斷
(2)清除中斷標誌peng暫存器
(3)配置GPIO為中斷功能
(4)禁止上下啦
(5)濾波
(6)中斷觸發方式
2.中斷控制器的配置
(1)禁止對應的向量中斷=》VICOINTENCLEAR
(2)TZICOINTSELECT把中斷配置成VIC/TZIC
(3)把中斷配置成IRQ/FRQ
(4)地址清零
(5)把編寫的中斷服務程式地址寫道這個暫存器
3.ARM核配置
(1)中斷源的MASK暫存器開啟
(2)中斷控制暫存器,中斷使能
(3)ARM的CSPR的中斷控制位開啟
eg:
void irq_init(viod):
{
//1.中斷源配置
EXTINT2MASK=0xff;//該暫存器為中斷遮蔽,0為使能,1為禁止
EXTIN2PEND=0xff;//1中斷掛起
GPH2CON|=0xff;//將GPIO口配置為中斷功能
GPH2PUD&=0xf;//0禁止上下拉,1使能上下拉
EXTINT2CON = (EXTINT2CON&(~0xff))|0x22;//中斷觸發使用下降沿
EXTINT2FLT = 0;//不使用濾波
//2.中斷控制器的配置
VIC0INTENCLEAR |= (1<<16);//中斷清除
TZIC0INTSELECT &= ~(1<<16);//把中斷配置成走VIC
VIC0INTSELECT &= ~(1<<16);//把中斷配置成走IRQ
VIC0ADDRESS = 0;//清零
VIC0VECTADDR16 = (unsigned int)extint_func;//.配置中斷服務程式的地址
//3.開啟中斷
EXTINT2MASK &= ~0x3;
VIC0INTENABLE |= (1<<16);
enable_irq();
}