5.3.1ARM外设IO中断编程(上)

5.3.1ARM外设IO中断编程(上)
5.3.1ARM外设IO中断编程(上)
5.3.1ARM外设IO中断编程(上)
5.3.1ARM外设IO中断编程(上)
5.3.1ARM外设IO中断编程(上)
问题:每次delay,比方花掉半秒钟或者一秒钟,实际都是程序执行完delay,执行if这语句的瞬间,才回去检查我们引脚有没有被按下,换言之没半秒钟delay后,也就是执行这条语句那几十个几百个纳秒回去按键,如果这半秒在delay内松开,这样案件信息就已经丢失了

delay时间短点就是轮询模式,但灯闪的变快了
5.3.1ARM外设IO中断编程(上)

中断的步骤

5.3.1ARM外设IO中断编程(上)

step1 如何打开中断

5.3.1ARM外设IO中断编程(上)
要打开总开关global enable也要打开子开关dedicated enable
在cpu内部状态寄存器和r0-r15这些状态寄存器在一起,有一个寄存器是PRIMASK,中断和优先级的掩码寄存器,它里头最后一个比特PM这个比特,为0或是为1是控制这个微控制器是否相应中断,是一个总开关,不映射地址,在cpu内部,直接通过两条指令分别对它置0和置1,来关闭或打开主开关。
CPSIE i
CPSID i
D对应disable分别是打开全局中断开关和关闭全局中断开关。
5.3.1ARM外设IO中断编程(上)
子开关打开,打开KL25 53页去看看中断向量表
5.3.1ARM外设IO中断编程(上)

从0-47一共48个vector可以响应,在这48个里并不是全是外部中断。
arm公司将0-15预留给了cpu内部作为异常处理,包括复位系统时钟,非法指令的复位等等这些响应。称为异常处理
剩下32个,从vectot向量表编号16-47,从终端号0-31.每一个都有芯片外设厂商给功能用比如定时器,ad。后面32位由NXP或freescale等厂商设计。
需要运行子开关要对NVIC(Nested Vector Interrupt controller module)模块的寄存器进行编程。可嵌套外部中断控制模块
5.3.1ARM外设IO中断编程(上)
从地址向量表发现,这个模块,地址不在io串行通讯地址段,在最下面地址段
这个寄存器定义在两个地方可以找到,一个NXP kl25 138,看arm芯片手册57页。
这些寄存器地址起始位置是E000E100这个地址段。
5.3.1ARM外设IO中断编程(上)
ISER,对0-31这32个外部中单源意义对应置位打开中断子开关
ICER。一一对应置位关闭中断子开关
IPR:S设置优先级
打开只要ISER在32位中关联哪一位置1,关闭不是置0,是把ICER中哪一位置11
5.3.1ARM外设IO中断编程(上)
5.3.1ARM外设IO中断编程(上)