微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 深入理解ARM体系架构S3C6410外部中断控制实例

深入理解ARM体系架构S3C6410外部中断控制实例

时间:11-20 来源:互联网 点击:
关于S3C6410的中断问题,网上有很多高手已经分析过了,在这里我主要分析S3C6410实现过程,和自己已经编写好的简单程序。

我用的是mini6410 的k1键实现外部中断。

按键初始化:

void Key_Init(){rGPNCON|=(1<1);  //将GPN0设置为中断模式rGPNPUD&=~(1<0);//上拉电阻rEINT0CON0|=(3<0); //下降沿触发rEINT0MASK&=~(1<0);  //取消屏蔽rEINT0FLTCON0|=(1<7);  //延时滤波}

注意:我在这只初始化了一个引脚,即GPNCON0

按键中断程序:

void Key_ISR() __irq  //按键中断函数{i++;if(i%2==0)Led_Display(0x0);//在这里用户可添加其他的处理操作else Led_Display(0xf);rEINT0PEND|=(1<0);//写1清除中断INTC_ClearVectAddr();//这个函数下面我们再介绍}
/*清除中断指示,防止干扰下一次中断发生*/void INTC_ClearVectAddr(void){rVIC0ADDR = 0x0;rVIC1ADDR = 0x0;}


中断初始化函数:

void INTC_Init(void) {//关闭所有中断rVIC0INTENCLEAR = 0xffffffff; rVIC1INTENCLEAR = 0xffffffff; //都设置为IRQrVIC0INTSELECT = 0x0;rVIC1INTSELECT = 0x0;INTC_ClearVectAddr();}

使能中断函数:
//打开某一个中断int INTC_Enable(unsigned int intNum){if(intNum > INT_LIMIT)//数值检测{return -1;}if(intNum<32)//如果是vic0组{rVIC0INTENABLE |= (1

指定中断程序函数:

void INTC_SetIntISR(unsigned int intNum, void (*isr)(void) __irq){if(intNum > INT_LIMIT)//数值检测{return ;}if(intNum < 32)//如果是vic0组{VIC0VECTADDR[intNum] = (unsigned )isr;}else//如果是vic1组{VIC1VECTADDR[intNum-32] = (unsigned )isr;}}

编写main函数:

Led_Init();//led初始化Led_Display(0x0);//控制ledKey_Init();//按键初始化INTC_Init();//中断初始化INTC_Enable(INT_EINT0);//中断使能INTC_SetIntISR(INT_EINT0,Key_ISR);//指定中断处理函数while(1);//等待

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top