⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
字号:
/*
 * File:    isr.c
 */


#if !defined(__UART_H__)
#include "uart.h"
#endif
#if !defined(__ISR_H__)
#include "isr.h"
#endif




/*---------------------  Static Definitions  ------------------------*/
#define IISR_MAX_HNDLR      21

/*---------------------  Static Types  ------------------------------*/

/*---------------------  Static Macros  -----------------------------*/

/*---------------------  Static Classes  ----------------------------*/

/*---------------------  Static Variables  --------------------------*/

/*---------------------  Static Functions  --------------------------*/

/*---------------------  Export Variables  --------------------------*/
PFN_HOOK INTR_apfnIntrHandler[IISR_MAX_HNDLR] = {
    IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler,
    IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler,
    IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler,
    IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler,
    IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, IISR_vDummyHandler, 
    IISR_vDummyHandler
};




void INTR_vInit (void)
{
    // Clear All interrupt
    ASIC_INT_MASK = MASK_ALL & (~MASK_GLOBAL_INT);  // All interrupt disabled except global bit
    ASIC_INT_PEND = PEND_CLSALL;                    // All pending clear
    ASIC_INT_MODE = 0;                              // All set to IRQ mode
}


PFN_HOOK INTR_vGetHandler (UINT8 u8Vector)
{
    return INTR_apfnIntrHandler[u8Vector];
}


// Setup Interrupt Handler Vector Table
void INTR_vSetHandler (UINT8 u8Vector, PFN_HOOK pfnHandler)
{
    INTR_apfnIntrHandler[u8Vector] = pfnHandler;
}




//
// Interrupt Handler Dummy Function
//
void IISR_vDummyHandler (void)
{
}


//
// Exception Handler Function
//
void EISR_ExcptHndlr_Undef (PUINT8 pu8RegAdr)
{
    UART_iPrintk("\nUndef Instruction Address : %08x", (UINT32)(pu8RegAdr - 4));
    UART_iPrintk("  Data : %08x", *(pu8RegAdr - 4));
    do {} while (1);
}


void EISR_ExcptHndlr_Prefetch (PUINT8 pu8RegAdr)
{
    UART_iPrintk("\nPrefetch Abort Address : %08x", (UINT32)(pu8RegAdr - 4));
    UART_iPrintk("  Data : %08x", *(pu8RegAdr - 4));
    do {} while (1);
}


void EISR_ExcptHndlr_Abort (PUINT8 pu8RegAdr)
{
    UART_iPrintk("\nData Abort Address : %08x", (UINT32)(pu8RegAdr - 8));
    UART_iPrintk("  Data : %08x", *(pu8RegAdr - 8));
    do {} while (1);
}


void EISR_ExcptHndlr_Irq (void)
{
    INT     ii;
    UINT32  u32PendBits, u32IntNo;


    // get pending bits
    u32PendBits = ASIC_INT_PEND;
    // clear pending bit
    ASIC_INT_PEND = u32PendBits;
    // don't process those bits that is mask out
    u32PendBits &= ~ASIC_INT_MASK;

    for (ii = (IISR_MAX_HNDLR - 1); ii >= 0; ii--) {
        u32IntNo = 0x00000001 << ii;
        if ((u32PendBits & u32IntNo) != 0) {
            // Call interrupt service routine
            INTR_apfnIntrHandler[ii]();
        }
    }
}


void EISR_ExcptHndlr_Fiq (void)
{
    INT     ii;
    UINT32  u32PendBits, u32IntNo;


    // get pending bits
    u32PendBits = ASIC_INT_PEND;
    // clear pending bit
    ASIC_INT_PEND = u32PendBits;
    // don't process those bits that is mask out
    u32PendBits &= ~ASIC_INT_MASK;

    for (ii = (IISR_MAX_HNDLR - 1); ii >= 0; ii--) {
        u32IntNo = 0x00000001 << ii;
        if ((u32PendBits & u32IntNo) != 0) {
            // Call interrupt service routine
            INTR_apfnIntrHandler[ii]();
        }
    }
}


void INTR_vSwitchEnable (void)
{
    ASIC_INT_MASK &= ~MASK_EXT0_INT;
}


void INTR_vSwitchDisable (void)
{
    ASIC_INT_MASK |= MASK_EXT0_INT;
}


void INTR_vSwitchDma0Enable (void)
{
    ASIC_INT_MASK &= ~MASK_GDMA0_INT;
}


void INTR_vSwitchDma0Disable (void)
{
    ASIC_INT_MASK |= MASK_GDMA0_INT;
}


void INTR_vCriticalSectionEnter (void)
{
    ASIC_INT_MASK |= MASK_GLOBAL_INT;
}


void INTR_vCriticalSectionLeave (void)
{
    ASIC_INT_MASK &= ~MASK_GLOBAL_INT;
}


void INTR_vDisable (void)
{
    // disabled all interrupt
    ASIC_INT_MASK = MASK_ALL;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -