http://blog.youkuaiyun.com/cp1300/article/details/7341757
mrc p15,0,r0,c1,c0,0
orrr0,r0,#(1<<24)
mcr p15,0,r0,c1,c0,0
1. 初始化中断向量控制器:
2.
4. 设置外部中断类型:
5. 装载中断伺服程序:
/////////////////////////////////////////////////////////////////////////
void led_init(void)
{
GPIOM->CON
GPIOM->DAT
}
void Delay(u32 n)
{
u32i;
while(n--)
{
for(i= 0;i < 2000000;i ++);
}
}
void __irqIRQ_Exception(void)
{
EINT0PEND= 1;//写1清除中断标志
GPIOM->DAT^= BIT2;
ClearInterrupt(INT_EINT0);//中断结束
}
void Key_Init(void)
{
//PN0
GPION->CON= 2;//外部中断模式
EINT0CON0= 0x2;
EINT0PEND= 0xffffffff;
EINT0MASK&= ~(BIT0);//取消中断屏蔽
Set_IsrAddr(INT_EINT0,(u32)IRQ_Exception);
Set_IntEnable(INT_EINT0,Enable);
}
void __irqIsr_Timer0(void)
{
TINT_CSTAT|= BIT5;//清除中断标志
GPIOM->DAT^= 1 << 3;
ClearInterrupt(INT_TIMER0);//中断结束
}
voidTIMER0_Init(void)
{
TCFG0=65;
TCON= BIT3;//定时器0自动更新使能
TCNTB0 = 200000;//重装值,200ms
TINT_CSTAT|= BIT5;//清除中断标志
TINT_CSTAT= 1;//使能定时器0中断
Set_IsrAddr(INT_TIMER0,(u32)Isr_Timer0);
Set_IntEnable(INT_TIMER0,Enable);//使能定时器0全局中断
//以下操作启动定时器0
TCON|= BIT1;//手动更新
TCON&= ~BIT1;//结束手动更新
TCON|= BIT0;//启动定时器0
}
//主函数
void main(void)
{
u8i;
led_init();
Key_Init();
TIMER0_Init();
while(1)
{
for(i= 0;i < 2;i ++)
{
GPIOM->DAT^= 1 << i;
Delay(10);
}
}
}
//把下面的汇编加入到启动文件中,主要用来打开CPU中断和初始化VIC
;VIC Port模式,开启后就可以不用汇编使用中断,使用VIC控制中断
mrc p15,0,r0,c1,c0,0
orr r0,r0,#(1<<24)
mcr p15,0,r0,c1,c0,0
;允许中断,开启CPU总中断
MRS R0, CPSR
BIC R0, R0, #0x80
MSR CPSR_c, R0
以上就是相关的代码,因为大家的寄存器宏定义不同,因此名字可能不同,因为我写了注释的,大家可以对着文档,设置相应的寄存器就可以了,如果需要可以找我,邮箱:cp1300@139.com
代码:http://download.youkuaiyun.com/detail/cp1300/4266684,S3C6410裸机外部中断+定时器中断