?? interrupt.c
字號:
#include "interrupt.h"
#include "led.h"
//中斷初始化
void init_interrupt()
{
//關閉中斷
disable_interrupt();
//初始化相關寄存器
rI_ISPC = 0x3ffffff;
//active EINT4,5,6,7
rEXTINTPND = 0xf;
//IRQ:0 FIQ:1
rINTMOD = 0;
//Reserved V I F 0101
rINTCON = 0x5;
//service available EINT 4/5/6/7
rINTMSK = ~(0x4000000 | 0x200000);
(*(unsigned*)(0xc7fff00 + 0x18)) = (unsigned)(irq_isr);
//PG的控制寄存器 EINT1~7=11
rPCONG = 0xffff;
//enable pull up register
rPUPG = 0x00;
//external interrupt control register
rEXTINT = rEXTINT | 0x22220020; //中斷4567 全部下降沿觸發
//clear register IRQ interrupt service
rI_ISPC = rI_ISPC | 0x200000; //EINT4567 clear the pending bit
rEXTINTPND = 0xf;
//使能寄存器
enable_interrupt();
}
void irq_isr()
{
disable_interrupt();
led(8, 1); /* 點亮LED1 */
delay(1000); /* 延時 */
led(9, 1); /* 點亮LED2 */
delay(1000);
led(8, 0); /* 點亮LED3 */
delay(1000);
led(9, 0); /* 熄滅LED1 */
delay(1000);
rEXTINTPND = 0xf; //EXTINT4.5.6.7同時清除;
rI_ISPC = 0x3ffffff; //清除中斷狀態寄存器,[21]為1的時候,清除extint4.5.6.7;
enable_interrupt();
}
//關閉中斷
void disable_interrupt()
{
__asm
{
MRS R0,CPSR
ORR R0,R0,#0x80
MSR CPSR_c,R0
}
}
//使能中斷
void enable_interrupt()
{
__asm
{
MRS R0,CPSR
BIC R0,R0,#0x80
MSR CPSR_c,R0
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -