?? 2410_eint.c
字號:
#include "2410lib.h"
#include "2410addr.h"
//使用K1按鍵觸發EINT0,EINT0->GPF0
//使用K3按鍵觸發EINT2,EINT2->GPF2
//使用K5按鍵觸發EINT11,EINT11->GPG3
//使用K7按鍵觸發EINT19,EINT19->GPG11
//KSCAN0->GPE11
/*********** 外部中斷服務程序 ************/
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);
}
}
/*********** 外部中斷初始化 ************/
void Eint_Init(void)
{
//設置GPE11為輸出0
rGPECON = (rGPECON|(3<<22)) & ~(2<<22);
rGPEUP |= (1<<11);
rGPEDAT &= ~(1<<11);
rGPFCON = rGPFCON & ~(3)|(1<<1); //GPF0設置為EINT0
rGPFCON = rGPFCON & ~(3<<4)|(1<<5); //GPF2設置為EINT2
rGPGCON = rGPGCON & ~(3<<6)|(1<<7); //GPG3設置為EINT11
rGPGCON = rGPGCON & ~(3<<22)|(1<<23); //GPG11設置為EINT19
rGPFUP|=(1<<0); //disable GPF0 pull up
rGPFUP|=(1<<2); //disable GPF2 pull up
rGPGUP|=(1<<3); //disable GPG3 pull up
rGPGUP|=(1<<11); //disable GPG11 pull up
rEXTINT0 = (rEXTINT0 & ~(7<<0))|(2<<0); //EINT0 ->falling edge triggered
rEXTINT0 = (rEXTINT0 & ~(7<<8))|(2<<8); //EINT2 ->falling edge triggered
rEXTINT1 = (rEXTINT1 & ~(7<<12))|(0x2<<12); //EINT11->falling edge triggered
rEXTINT2 = (rEXTINT2 & ~(7<<12))|(0x2<<12); //EINT19->falling edge triggered
pISR_EINT0 = (unsigned)Eint0_ISR;
pISR_EINT2 = (unsigned)Eint2_ISR;
pISR_EINT8_23 = (unsigned)Eint11_19_ISR;
}
/*********** 開外部中斷 ************/
void Enable_Eint(void)
{
rEINTPEND = 0xffffff; //to clear the previous pending states
rSRCPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
rINTPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
rEINTMASK=~( (1<<11)|(1<<19) );
rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);
}
int xmain()
{
ChangeClockDivider(1,1);
ChangeMPllValue(0xa1,0x3,0x1);
Port_Init();
Uart_Select(0);
Uart_Init(0,115200);
Eint_Init();
Enable_Eint();
while(1)
{ //等待中斷,死循環
Uart_Printf("the main is running\n");
Delay(5000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -