?? eint0_def.c
字號:
/****************************************************************************
* 文件名:EINT0_DEF.C
* 功能:使用外部中斷0進行LED1的控制,每當有一次中斷時,即取反LED1控制口,以便指示中
* 斷輸入。使用非向量中斷方式。
* 說明:將跳線器JP4_LED1短接,然后按下/放開KEY1,使EINT0為低/高電平。
****************************************************************************/
#include "config.h"
#define LED1CON (1<<22) /* P0.22口為LED1控制端 */
/****************************************************************************
* 名稱:IRQ_Eint0()
* 功能:外部中斷EINT0服務函數,取反LED1控制口。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void __irq IRQ_Eint0(void)
{ uint32 i;
i = IO0SET; // 讀取當前LED1控制值
if( (i&LED1CON)==0 ) // 控制LED1輸出取反
{ IO0SET = LED1CON;
}
else
{ IO0CLR = LED1CON;
}
/* 等待外部中斷信號恢復為高電平(若信號保持為低電平,中斷標志會一直置位) */
while( (EXTINT&0x01)!=0 )
{ EXTINT = 0x01; // 清除EINT0中斷標志
}
VICVectAddr = 0; // 向量中斷結束
}
/****************************************************************************
* 名稱:main()
* 功能:初始化外部中斷0(EINT0)為向量中斷,并設置為電平觸發模式,然后等待外部中斷。
* 說明:在STARTUP.S文件中使能IRQ中斷(清零CPSR中的I位)。
****************************************************************************/
int main(void)
{ PINSEL0 = 0x00000000;
PINSEL1 = 0x00000001; // 設置管腳連接,P0.16設置為EINT0
IO0DIR = LED1CON; // 設置LED1控制口為輸出,其它I/O為輸入
EXTMODE = 0x00; // 設置EINT0中斷為電平觸發模式
/* 打開EINT0中斷(使用非向量IRQ) */
VICIntSelect = 0x00000000; // 設置所有中斷分配為IRQ中斷
VICDefVectAddr = (int)IRQ_Eint0; // 設置中斷服務程序地址
EXTINT = 0x01; // 清除EINT0中斷標志
VICIntEnable = 0x00004000; // 使能EINT0中斷
while(1); // 等待中斷
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -