www.pudn.com > S3C2440_uCos-II.rar > 2440Int.c


//==================================================================== 
// IRQ 中断 操作  
//==================================================================== 
 
#include "2440Int.h" 
 
#include "option.h" 
#include "2440addr.h" 
 
static unsigned int *__IRQ_Vector = (unsigned int *)(_INT_VIC_STARTADDRESS)+8; 
 
//中断 初始化 
void IRQ_Init() 
{ 
    unsigned int i; 
 
    rINTMSK = 0xFFFFFFFF; 
    rINTSUBMSK = 0xFFFFFFFF; 
    rSRCPND = 0xFFFFFFFF; 
    rINTPND = 0xFFFFFFFF; 
    rSUBSRCPND = 0xFFFFFFFF; 
 
    rINTMOD = 0; 
 
    for( i = 0 ; i < 32 ; i++ ) 
    { 
        __IRQ_Vector[i] = (unsigned int)IRQ_FIQ_PABT_Def; 
    } 
     
} 
 
//开关 子中断 
void IRQ_SUB_Enable(unsigned int ID_SUB) 
{ 
    if( ID_SUB > 10 ) 
    { 
        return; 
    } 
 
    rINTSUBMSK = rINTSUBMSK & (~(1 << ID_SUB)); 
} 
 
void IRQ_SUB_Disable(unsigned int ID_SUB) 
{ 
    if( ID_SUB > 10 ) 
    { 
        return; 
    } 
 
    rINTSUBMSK = rINTSUBMSK | (1 << ID_SUB); 
} 
 
//开关 中断 
void IRQ_Enable(unsigned int ID) 
{ 
    if( ID > 31 ) 
    { 
        return ; 
    } 
 
    rINTMSK = rINTMSK & ( ~(1 << ID) ); 
} 
 
void IRQ_Disable(unsigned int ID) 
{ 
    if( ID > 31 ) 
    { 
        return ; 
    } 
 
    rINTMSK = rINTMSK | (1 << ID); 
    IRQ_Vector( ID, (unsigned int)IRQ_FIQ_PABT_Def); 
} 
 
//IRQ 中断向量注册 
void IRQ_Vector(unsigned int ID,unsigned int pVector) 
{ 
    if( ID > 31 ) 
    { 
        return ; 
    } 
 
    __IRQ_Vector[ID] = pVector; 
}