ARM Cortex—M0+KL25中断机制研究

2014-04-29 20:09:02韩啸
电脑知识与技术 2014年21期
关键词:中断

韩啸

摘要:该文介绍了KL25中断的基本概念、中断向量表文件,分析说明了KL25中断服务程序及ARM Coretex-M0+非内核中断编程结构, 最后给出UART接收中断程序实例。

关键词:KL25;中断;中断向量表;UART

中图分类号: TP338 文献标识码:A 文章编号:1009-3044(2014)21-5134-02

所谓中断,是指MCU在正常运行程序时,由于MCU内核异常或者MCU各模块发出请求事件,引起MCU停止正在运行的程序,而转去处理异常或执行处理外部事件的程序(又称中断服务程序)。

这些引起MCU中断的事件称为中断源。KL25的中断源分为两类:内核中断和非内核中断。内核中断主要是异常中断,即当出现错误时,这些中断会复位芯片或是做出其他处理。非内核中断是指MCU各个模块为中断源引起的中断, MCU执行完中断服务程序后,又回到刚才正在执行的程序,从停止的位置继续执行后续的指令。非内核中断又称可屏蔽中断,可通过编程控制,开启或关闭该中断。

1 KL25中断向量表文件

中断向量序号是每一个中断源的固定编号,由芯片设计生产时决定的,编程时不能更改,它代表了中断服务程序入口地址在中断向量表的位置[1]。

中断向量表是指按照中断源的中断向量序号的固定顺序,存放中断服务程序入口地址的一段存储区域。每个中断服务程序入口地址占用4个字节单元,KL25中断向量表的位置在存储区0x0000_0000~0x0000_00c0的一段地址范围,共48*4=192个字节,存放48个中断服务程序的入口地址。中断服务程序的入口地址又称为中断向量或中断向量指针,它指向中断服务程序在存储器中的位置。

在中断向量表头文件vectors.h中,主要包含以下内容:定义了中断向量表的类型*vector_entry,用于vectors.c中定义中断向量表数组。申明要用到的中断服务函数,其中extern,指明是外部函数。将中断服务函数名进行宏定义,宏名与中断向量序号对应[2]。可把这项任务在“isr.h”中断服务程序头文件中实现。在中断向量表源文件vectors.c中,将vectors.h定义的中断向量放在rom_vector[]数组中。另外定义了_int_kernel_isr(void)空函数。到此,中断向量表文件编写完成,中断向量表也就实现了。

2 KL25的中断服务程序及其“注册”

为了规范编程将各个中断服务程序放在"isr.c"中断底层驱动构件源文件。中断服务程序的“注册”就是将用户编写好中断服务程序入口地址,添加到中断向量表中。实际是在中断向量表头文件vectors.h中,将宏定义的中断服务函数名替换成用户编写好中断服务程序名。在设计工程框架时将中断向量表文件封装起来,避免用户直接对中断向量表文件进行修改,而采用“宏回调”的方式为用户提供编程接口。用户只需在“isr.h”文件中取消对应中断向量表项“VECTOR_XXX”指向默认中断服务例程函数的映射,再重新指定该表项为用户自定义的中断服务例程函数即可。

3 ARM Coretex-M0+ 非内核模块中断编程结构

M0+中断结构原理图如图1所示。由模块中断源、中断控制器(NVIC)和M0+内核组成。其中断过程分为二步,①模块中断源向中断控制器(NVIC)发出中断请求信号。②中断控制器对发来的中断信号进行管理,判断该中断是否允许中断,若允许,通过私有外设总线发送给M0+内核,由内核进行中断处理;如果同时有多个中断信号到来,NVIC根据设定好的中断信号的优先级进行判断,优先级高的中断首先响应,优先级低的中断挂起,压入堆栈保存;如果优先级完全相同的多个中断源同时请求,则先响应IRQ中断号较小的,其他的被挂起[3]。

4 UART接收中断程序实例

本实例实现以下功能:在主函数文件UART1模块首先向PC机发送字符串“Hello World!”,主程序进入主循环闪烁蓝色指示灯,当PC机向串口1发送数时产生中断,执行中断服务程序。中断服务程序程序的功能是:成功接收数据后,马上将该数据回发给PC机。中断处理程序执行完毕后,又回到主程序。KL25中断编程的步骤:在中断底层驱动构件源文件isr.c中,写好中断服务函数 void isr_uart1_re(void);在中断底层驱动构件头文件isr.h中,将中断服务函数void isr_uart1_re(void)注册到中断向量表中。在UART.C构件中写好串口接收中断使能,初始化函数uart_enable_re_int(uint_8 uartNo)。在主函数文件(main.c)中,调用uart_enable_re_int(uint_8 uartNo)函数,使能串口UART1模块接收中断的功能。

参考文献:

[1] 杨明.Freescale HCS08单片机原理及应用[M].北京:电子工业出版社,2011:162-168.

[2] 王宜怀.嵌入式技术基础与实践[M].北京:清华大学出版社,2013:124-132.

[3] 王宜怀.基于32位ColdFire构建嵌入式系统[M].北京:电子工业出版社,2009:116-122.

猜你喜欢
中断
在D-策略控制下服务员单重休假且休假不中断的M/G/1排队系统分析
“单片机中断概述”微课教学设计
数码世界(2019年12期)2019-12-01 00:48:21
一种考虑GPS信号中断的导航滤波算法
基于FPGA的中断控制器设计*
通信技术(2018年11期)2018-11-07 02:22:16
Linux中断线程化分析及中断延时测试
一起跨BSC切换CS域业务中断的案例分析
对80C51系列单片机中断问题的研究
电子制作(2018年2期)2018-04-18 07:13:44
跟踪导练(二)(5)
千里移防,卫勤保障不中断
解放军健康(2017年5期)2017-08-01 06:27:44
AT89C51与中断有关的寄存器功能表解