ARM Cortex—M0 KL25中断机制研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:chanstan
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文介绍了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.
其他文献
摘要:函数是程序的基本组成单位,是C语言程序设计课程的核心部分。结合多年的教学实践,探讨了函数教学的一些行之有效的教学方法,供同行参考。  关键词:C语言;程序设计;函数;教学方法  中图分类号:G642 文献标识码:A 文章编号:1009-3044(2013)22-5108-04  C语言一般作为普通高校各理工专业的第一门程序设计语言[1],学好C语言对学生学习后续计算机课程至关重要。C语言的基
摘要:该文针对《软件设计基础》课程教学特点,基于培养学生计算思维的目标,提出项目驱动式教学模式和评价方式改革的具体措施,即对如何在程序设计课程中培养和强化训练学生计算思维进行了阐述,以提高学生计算机应用能力、研究创新能力以及计算思维和计算能力。  关键词:计算思维;项目驱动;教学模式;改革  中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2013)16-3799-03  1 概
经过40年的发展,计算机图形学在很多计算机的应用方面都有卓越的发展和应用前景,该文通过介绍计算机图形学的定义、整体框架、以及计算机图形学作为计算机专业教学核心课程的发展现状,指出计算机图形学在当前的计算机教学中所面临的主要问题,并且针对这些问题提出了一些教学改革的方案。实践表明,文中提出的教学改革手段对加深学生对这门课程理解、提高学习这门课程的兴趣和对教师提高这门课程的教学质量都有着明显的作用。
白细胞介素(IL)-11是IL-6家族的一种细胞因子,其通过共同的信号转导分子糖蛋白130(gp130)介导下游信号转导。IL-11是一种抗炎因子,可通过直接作用于巨噬细胞及NK细胞等发挥抑
开关的动作缓慢、跳合闸失败是影响供电可靠性的主要因素之一。上世纪八十年代末,英美等国提出了通过在运行中测量开关控制回路的相关特征参数来评价开关性能的概念。实践证
目的:通过对孕妇孕期护理干预和宣教,提高孕产妇对自然分娩知识的知晓率,扩大自然分娩知识的覆盖率,降低剖宫产率,提高自然分娩率,使分娩回归自然。方法:对本院产科门诊的825例初产
强直性脊柱炎(AS)是一种以中轴关节炎症为特点的慢性进行性疾病,发病机制目前尚不明晰。人类白细胞抗原B27(HLA-B27)是人类主要组织相容性复合体(MHC)Ⅰ类分子,是最早发现的
联合肝脏离断和门静脉结扎二步肝切除术(ALPPS)可使残余肝脏体积在较短时间内迅速增生,提高肝癌的R0切除率,进一步降低肝癌患者病死率。目前ALPPS在传统ALPPS术式的基础上有
目的:分析脑梗死恢复期延续护理中应用中医护理技术的作用。方法:随机将脑梗死恢复期患者分为对照组和观察组,每组37例,分别给予常规延续护理和中医护理技术,观察护理效果。