飞思卡尔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无定义。 


 


1 0