1. 程式人生 > >ARM異常與中斷

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();

}