飞思卡尔kinetis L系列MCU之中断5扇门
来源:互联网 发布:深圳多迪网络靠谱吗 编辑:程序博客网 时间:2024/05/17 02:54
Kinetis L是飞思卡尔32位微控制器/单片机,基于ARM® Cortex®-M0+内核,集成了丰富的功能和特性,具有出类拔萃的低功耗性能和扩展性。
官网链接:freescale kinetis L serial
访问IO可以通过查询、中断和DMA方式,我们看看kinetis L上GPIO中断使用。
ARMv6 M架构引入嵌套向量中断控制器NVIC概念,使用NVIC管理所有外部中断信号。使用cortex M0+内核的MCU都会实现NVIC,可以通过相应寄存器访问。
要想让ARM内核响应外部中断,必须进行一下几个步骤:
1.使用CPSIE i指令设置PRIMASK寄存器来开启中断控制器
2.设置NVIC_ISER寄存器相应位来开启相应引脚中断,注意该位设置是MCU相关,MCU实现时可以将不同的中断对应到响应位,请参考芯片参考手册第3章芯片配置->核心模块->NVIC部分来查看相应信号。
3.kinetis L芯片基于低功耗设计,每个PORTx模块都有使能控制开关,需要通过SIM模块给PORTx时钟来开启该模块。该寄存器位于SIM的SIM_SCGC5中,即系统时钟开关控制模块。参考芯片参考手册第12章SIM模块。
4.开启了PORTx还不能马上响应外部中断请求,因为很可能外部引脚并没有连接到PORTx模块。为什么?这就要说到kinetis芯片的另一个特点:强大的信号复用。MCU引脚个数有限,如果每个引脚可以有复用功能,那么会给产品开发带来很多方便。kinetis 每个引脚具有7种复用功能,需要通过PORT MUX位段进行设置选择,GPIO(MUX(1))功能。此外,PORT模块还有IRQC位段来设置中断类型。如果这两个位段设置不正确,很可能外部引脚信号无法产生中断请求到NVIC。请参考芯片参考手册第11章来查看PORTx_PCR MUX和IRQC位段的设置
5.方向,一定不要忘记设置IO方向,要将其设置为输入,此功能需要通过GPIO模块PDDR寄存器实现。参考芯片参考手册42章GPIO。
在使用kinetis L系列MCU时,要想使用外部引脚中断,必须经过这5扇门,否则中断信号无法被相应。此外,程序中还要实现相应中断服务程序入口,并在中断服务程序中清中断标志,这些都是老生常谈了。下面给出一段C代码来说明kinetis中断响应。
/*use gpioc 5 as falling egde interrupt*/
/*1.Enable NVIC*/
__asm("CPSIE i");
/*2.Enable GPIOCD interrupt(bit 31) */
NVIC_ISER |= (1<<31);
/*3.Enable PORT5*/
SIM_SCGC5 = SIM_SCGC5_PORTC_MASK;
/*4.Function as gpio, and enable falling edge interrupt*/
PORTC_PCR5 |= PORT_PCR_MUX(1)| PORT_PCR_PE_MASK |PORT_PCR_IRQC(0x0a) | PORT_PCR_PS_MASK;
/*5.Set pin direction input*/
GPIOC_PDDR &= ~GPIO_PDDR_PDD(1<<5);
PS:使用的宏包含在MKLxxZxx.h中,有些版本采用CMSIS标准调用,比如第二步NVIC设置可能会采用NVIC_EnableIRQ(PORTD_IRQn)而导致NVIC_ISER无定义。
- 飞思卡尔kinetis L系列MCU之中断5扇门
- 飞思卡尔kinetis L系列MCU bootloader引导程序
- 飞思卡尔kinetis L系列芯片之security
- 飞思卡尔kinetis L系列芯片之debug
- 飞思卡尔kinetis L系列芯片之电源管理
- 飞思卡尔kinetis L系列芯片之最简单模块watchdog
- Kinetis K系列(飞思卡尔)
- 飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其应用举例
- 飞思卡尔Kinetis系列单片机被锁住后,怎么解锁
- 今天去飞思卡尔MCU/Kinetis/i.MX解决方案研讨会蹭吃蹭喝啦!
- 飞思卡尔MCU自定义中断向量的相关问题 bootloader程序过程中的问题
- 飞思卡尔Kinetis 60(K60)时钟系统分析
- 飞思卡尔Kinetis 60(K60)时钟…
- 飞思卡尔系列MC9S12XS128的中断系统
- Kinetis MCU GPIO 使用
- 飞思卡尔 HCS12(X)系列 MCU 的 Prm 文件中的逻辑地址和全局地址的转换
- 飞思卡尔MCU MC9S08DZ60 数据存储的问题
- kinetis 学习之(二)中断
- android之调用webservice 实现图片上传
- MemCached Cache Java Client封装优化历程
- S3C2440 Linux驱动移植——LCD
- 摄影比赛 截止日期一览表
- 求解大数据的阶乘的值的显示
- 飞思卡尔kinetis L系列MCU之中断5扇门
- 做acm用到的几个C++库函数
- 微信分享(对比及配置)
- S3C2440 Linux驱动移植——按键
- 程序员必看的十大电影
- CentOS 安装无线网卡驱动,配置无线上网
- DeDecms中利用关键词实现简单tag功能的php代码
- VC 开机自动启动程序代码
- 深入浅出MFC 第8章 关于序列化(Serialize)的一些问题