您的位置 首页 嵌入式

深化了解ARM系统架构S3C6410外部中止操控实例

关于S3C6410的中断问题,网上有很多高手已经分析过了,在这里我主要分析S3C6410实现过程,和自己已经编写好的简单程序。我用的是mini6410

关于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);//等候

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/263893.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部