第三章 宝马1768——EXTI 开发环境:集成开发环境μVision4 IDE版本4.60.0.0 主机系统:Microsoft Windows XP 开发平台:旺宝NXP LPC1768开发板
3.1 EXTI 3.2 硬件描述 3.3 程序说明 3.4 实验现象
1、LPC1768_EXTI:这章主要介绍LPC1768的外部中断,通过本章的学习,可以了解到LPC1768的中断机制,以及外部中断使用。本章所使用的例程是通过按键触发外部中断,然后控制LED的亮灭。 LPC1768支持35个可嵌套向量中断,可对系统异常和外设中断进行控制,具有32个可编程的中断优先级,硬件优先级屏蔽和软件中断功能。外设中断如下表所示。 LPC1768有EINT0、EINT1、EINT2和EINT3,四个外部中断,这四个外部中断引脚分布中可以查到分别对应于P2.10、P2.11、P2.12和P2.13,如下图所示。就是说这四个引脚可以作为外部中断的输入引脚,但是从LPC1768的官方数据手册中明确说明P0和P2都可以作为外部中断的输入引脚,注意中断向量表EINT3的说明中有一个注,上面注明的是EINT3通道和GPIO的中断共用。只有当P2.10、P2.11、P2.12和P2.13这四个引脚被配置为外部中断引脚时,他们才会对应的连接到自己外部中断通道,当他们被配置为普通GPIO时,但是又被配置为中断引脚,那么他们用的就是外部中断3的中断通道。所以在编程的时候一定要注意这点。 2、硬件描述: 该例程涉及的主要是LED灯的端口引脚,以及按键的输入引脚。进行此实验时要插上JP8。 按键的原理图: LED灯的原理图 3、程序说明:程序的运行是从启动文件开始的,即复位中断开始运行,如下图所示。上电复位之后,程序从此处开始运行,然后先运行的是SystemInit(),进行时钟的配置;然后通过__main函数跳转到主函数main中。 接下来看主函数,首先是对一些变量的初始化,idxCur变量:点亮的LED编号;idxOld变量:上一个点亮的LED灯编号;dir变量:流水灯的方向。然后对LED灯以及按键的端口引脚的初始化,以及初始化LED 下面看端口引脚的初始化,其中涉及到FIODIR寄存器和FIOSETH寄存器,其中对P0.18、P0.19和P0.20的设置主要是为了屏蔽U9对于LED端口的影响。 如上图所示,是FIODIR寄存器的描述,为1时是输出,为0是输入,复位值为0。同时该寄存器还可以以字,半字以及字节的方式访问。如下图所示。 如下图所示,是FIOSET寄存器的描述,设置控制的引脚输出电平,当设置为0,则控制引脚电平不改变,置1的时候是,设置为高电平。
这里要注意的是,如果清零该端口引脚,不是对该寄存器进行复位,而是对另外一个寄存器 FIOCLR进行置1操作,则是对端口引脚的清零。如下图所示,FIOCLR寄存器复位,则是不改变原来端口电平,置1则是对端口引脚清零操作。其中FIOSET和FIOCLR寄存器都是可以进行字、半字和字节的访问。 下面看按键的初始化,这里按键是作为GPIO中断的功能进行实现响应的,上面有提到GPIO的中断是和EINT3中断使用的是一个中断通道。 如上图所示,是IOxIntEnF寄存器的描述,0禁能,1是使能GPIO的下降沿中断,而上升沿的中断是另外一个寄存器IOxIntEnR描述的,如下图所示。 然后使能EINT3的中断通道,这个函数的原型是在core_cm3.c文件中的。 最后是对LED灯的一个初始化设置,即点亮第一个LED灯。 本例程涉及到中断,自然少不了中断服务程序,中断服务函数名,已经在启动文件startup_LPC17xx.s中命名好了,只需要按照已经命名好的函数名,然后往里面填写对应的中断处理程序就可以了。 该程序使用的是外部中断3通道,中断函数如下图所示: 在中断处理函数中,首先是对中断标志位进行清除,然后对LED灯的状态变量进行改变,然后改变LED的状态。中断清除寄存器IOxIntClr的描述如下图所示。写1是清除中断标志位,写0则相应的位不改变。 4、实验现象:通过按键INT0,实现8个LED灯的轮流点亮。注意的是跳线帽JP8LED要插上。
|