ARM中断程序之外部中断
----------------------------------------------------------------------
Author :tiger-john
WebSite :blog.csdn.net/tigerjb
Email :jibo.tiger@gmail.com
开发板 :LPC220
环境 :ADS1.2
Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我。3Q
-----------------------------------------------------------------------
目录:
四.ARM中断程序编写之外部中断
前言:VIC中断控制器定义了4个外部中断,中断号为EINT0(14),
EINT1(15),EINT2(16),EINT3(17)用来给用户进行编写外部中断(例如按键中断。。。)
1. 在编写外部中断事先要对引脚功能选择寄存器(PINSEL0)进行配置
(参照具体型号的ARM数据手册,此处以LPC2230进行配置)在LPC2230中:
Eg:PINSEL1 = 3<<8; // 设置管脚连接,P0.20设置为EINT3
2第二部外部中断还要对外部中断方式寄存器(EXTMODE)进行配置来选择每个EINT脚是电平触发还是边沿触发。
A.EXTMODE(外部中断方式寄存器):总共有8位
第0位:对第0位写入1表示对EINT0使用边沿触发,反之,写入0表示对EINT0使用电平触发。
第1位:功能和上面相似只是对EINT1进行配置
第2位:是对EINT2进行配置
第3位:是对EINT3进行配置
第4~7位:保留
Eg;EXTMODE = 1<<3; // 设置EINT3中断为边沿触发模式
EXTMODE = 0<<3; // 设置EINT3中断为电平触发模式
3第三部外部中断还要对外部中断极性寄存器进行配置(EXTPOLAR)进行配置(在电平触发方式中,EXTPOLAR寄存器用来选择相应引脚是高电平或低电平有效。在边沿触发方式中,EXTPOLAR寄存器用来选择引脚上升沿或下降沿有效)
A EXTPOLAT(外部中断极性寄存器)总共有8位
第0位:是对EINT0进行配置,对该位写入1表示时表示
EINT0高电平或上升沿有效。反之,对该位写入0表示表示EINT0低电平或下降沿有效
第1位:是对EINT1进行配置。功能和上面类似。
第2位:是对EINT2进行配置。功能和上面类似
第3位:是对EINT3进行配置。功能和上面类似
第4~7位:保留位。
Eg: EXTPOLAR = 0x00; // 设置EINT3中断为下降沿触发
EXTPOLAR = 0x00;// 设置EINT3中断为低电平有效
4.第四部配置中断选择寄存器VICIntSelect
功能和前面的类似
Eg; VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
5若外部中断为向量中断则对向量控制寄存器0~15(VICVectCntl0~15)
进行配置。若为非向量中断则此步骤可省掉。
Eg: VICVectCntl0 = 0x20|17; // 分配EINT3中断到向量中断0,0x20表示向量IRQ使能,1<<17表示EINT3在VIC通道17号
6配置外部中断服务程序的地址:
a.若为向量中断则配置向量地址寄存器(VICVectAddrx)
a. b.若为非向量中断则配置默认向量地址寄存器VICDefVectAddr
eg: VICVectAddr0 = (int)IRQ_Eint3; // 设置向量中断服务程序地址IRQ_Eint3(为函数名,可随意起)
VICDefVectAddr = (int)IRQ_Eint3; // 设置非向量中断服务程序地址
7.清除外部中断标志
切记要在初始化时对EXTINT进行初始化。否则程序会进入异常。
配置外部中断标志寄存器(EXTINT)
A. 通过对EXINT寄存器写人1来将其清零来清除外部中断标志
B. EXTINT总共有8位
第0位:是对EINT0进行配置,写入1对外部中断EINT0中断进行清除
第1位:是对EINT1进行配置,写入1对外部中断EINT1中断进行清除。
第2位:是对EINT2进行配置,写入1对外部中断EINT2中断进行清除。