interrupt.JPG

首先在一開始 配置 中斷向量時就會配置出

    b    ResetHandler
    b    HandlerUndef    ;handler for Undefined mode
    b    HandlerSWI    ;handler for SWI interrupt
    b    HandlerPabort    ;handler for PAbort
    b    HandlerDabort    ;handler for DAbort
    b    .        ;reserved
    b    HandlerIRQ    ;handler for IRQ interrupt
    b    HandlerFIQ    ;handler for FIQ interrupt

這是一般一開始的配置

接下來就直接跳到 ResetHandler 去了

只有發生中斷時才會再回來這裡找

這裡的位址是 0x0000_0000 一開始的頭

發生中斷後 會回來這裡找  是那裡發生中斷再對著中斷跳到 nGCS6 所寫的中斷向量表

所以在 Initial 時一定也要配置好 中斷向量表

這裡 SRAM 的容量沒有用完  所以才會劃一半

跳到中斷向量表後 再去找 所對應的 向量後

再跳到 所對應的 函式去做

 

例子

在 main 中寫好中斷

static void __irq Eint0_ISR(void)
{
    ClearPending(BIT_EINT0);
    Uart_Printf("EINT0  is occurred.\n");
}

static void __irq Eint2_ISR(void)
{
    ClearPending(BIT_EINT2);
    Uart_Printf("EINT2 is occurred.\n");
}

static void __irq Eint11_19_ISR(void)
{
    if(rEINTPEND & (1<<11))
    {  
    Uart_Printf("EINT11 is occurred.\n");
    rEINTPEND=(1<<11);
    ClearPending(BIT_EINT8_23);
    }
    else if(rEINTPEND & (1<<19))
    {
    Uart_Printf("EINT19 is occurred.\n");
    rEINTPEND=(1<<19);
    ClearPending(BIT_EINT8_23);
    }
    else
    {
    Uart_Printf("others ENTs are occurred\n");
    rEINTPEND=0xffffff;
    ClearPending(BIT_EINT8_23);
    }
}

 

發生 Eint0_ISR 中斷後會跳到

b    HandlerIRQ    ;handler for IRQ interrupt

回到 SRAM 的中斷向量表的頭

#define    _ISR_STARTADDRESS         0x33ffff00

算出 偏移量

#define pISR_EINT0        (*(unsigned *)(_ISR_STARTADDRESS+0x20))

後回到 main 的

static void __irq Eint0_ISR(void)
{
    ClearPending(BIT_EINT0);
    Uart_Printf("EINT0  is occurred.\n");
}

完成中斷

 

以上例子取自 開發光碟 //2440

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ffyy99 的頭像
    ffyy99

    喜歡亂搞的世界

    ffyy99 發表在 痞客邦 留言(0) 人氣()