| 
一下为三星的中断测试代码<br />未见有将cpsr中的IRQ中断屏蔽为I请零的操作。却能中断,这是为什么?????<br /><br /><br /><br /><br />void Test_Eint(void)<br />{<br />    int i;<br />    int extintMode;<br /><br />    Uart_Printf("[External Interrupt Test through PF0/2/11/19]\n");<br /><br />    Uart_Printf("1.L-LEVEL  2.H-LEVEL  3.F-EDGE  4.R-EDGE  5.B-EDGE\n");<br />    Uart_Printf("Select the external interrupt type.\n");<br />    extintMode=Uart_Getch();<br /><br />    //extintMode='3';<br />    rGPFCON = (rGPFCON & 0xffcc)|(1<<5)|(1<<1);        //PF0/2 = EINT0/2<br />    rGPGCON = (rGPGCON & 0xff3fff3f)|(1<<23)|(1<<7);    //PG3/11 = EINT11/19<br />     <br />    switch(extintMode)<br />    {<br />    case '1':<br />        rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x0<<8 | 0x0<<0; //EINT0/2=low level triggered<br />    rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x0<<12; //EINT11=low level triggered<br />    rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x0<<12; //EINT19=low level triggered<br />        break;<br />    case '2':<br />        rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x1<<8 | 0x1<<0; //EINT0/2=high level triggered<br />    rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x1<<12; //EINT11=high level triggered<br />    rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x1<<12; //EINT19=high level triggered<br />        break;<br />    case '3':<br />        rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x2<<8 | 0x2<<0; //EINT0/2=falling edge triggered<br />    rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12; //EINT11=falling edge triggered<br />    rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x2<<12; //EINT19=falling edge triggered<br />        break;<br />    case '4':<br />        rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x4<<8 | 0x4<<0; //EINT0/2=rising edge triggered<br />    rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x4<<12; //EINT11=rising edge triggered<br />    rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x4<<12; //EINT19=rising edge triggered<br />         break;<br />    case '5':<br />        rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x6<<8 | 0x6<<0; //EINT0/2=both edge triggered<br />    rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x6<<12; //EINT11=both edge triggered<br />    rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x6<<12; //EINT19=both edge triggered<br />        break;<br />    default:<br />        break;<br />    }<br /><br />    Uart_Printf("Press the EINT0/2/11/19 buttons or Press any key to exit.\n");<br /><br />    pISR_EINT0=(U32)Eint0Int;<br />    pISR_EINT2=(U32)Eint2Int;<br />    pISR_EINT8_23=(U32)Eint11_19;<br /><br />    rEINTPEND = 0xffffff;<br />    rSRCPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23; //to clear the previous pending states<br />    rINTPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23;<br />    <br />    rEINTMASK=~( (1<<11)|(1<<19) );<br />    rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);<br />        <br />    Uart_Getch();<br />    <br />    rEINTMASK=0xffffff;<br />    rINTMSK=BIT_ALLMSK;<br />}<br /> |   
     
  
 |