MSP430使用指南5 -> ICC中断控制器

2020-03-31来源: eefocus关键字:MSP430  使用指南  ICC中断控制器

ICC,即Interrupt Compare Controller,中断比较控制器,作用便是设定中断优先级,同时通过比较中断优先级等实现中断的硬件嵌套。


首先普及一下MSP430的中断系统,大部分的MSP430  MCU中断优先级是不能设置的,也就是说对于每一个中断源的优先级是体现设定好的,不支持后期用户自动设置,因此可以说如果正在执行低优先级的程序,突然来了一个高的优先级中断,是可以打断低优先级的服务程序的,但是前提是进入低优先级中断服务程序时开启了全局中断即GIE。但是如果高优先级中断正在执行服务程序,来了一个低优先级的中断,那么只能等待高优先级中断服务程序执行完之后,才可以去执行低优先级的中断服务程序,这样也就是说不能灵活实现中断的嵌套。


ICC模块就是为了解决这个问题而出现的,即可以通过寄存器配置,来实现低优先级的中断打断高优先级的中断,这就需要比较电路了,ICC内部就是这个原理,内部结构如下图所示:


目前到2019年低为止,MSP430 MCU(16bit)只有四款含有ICC模块:MSP430FR3153,MSP430FR2155, MSP430FR2353, MSP430FR2355。

下面再简单的描述一下中断嵌套的含义,如下图所示,ISR2优先级高于ISR1,那么在正在只从ISR1程序时,遇到ISR2时,则会先把ISR1暂停一下,去执行ISR2,当ISR2执行完之后,返回再接着执行ISR1。

而MCU时如何实现去执行另一个程序,执行完之后再返回原本的点执行程序的呢?如下图所示,这个就类似与中断向量即堆栈,分为Push和Pop,首先当正在执行ISR1时,遇到了ISR2中断,那么MCU会把ISR1当前执行的程序地址推入堆栈保存起来,然后把ISR2的中断向量填入PC指针,去执行ISR2的程序,当ISR2程序执行完后,再从堆栈中读出当时保存的ISR1执行的程序地址,然后接着执行。


入栈如下图所示:

出栈如下图所示:

下面介绍一下ICC相关的寄存器,比较简单,因为你会发现,核心的两个寄存器,只有一位是读写的,其他都是只读寄存器,先附上所有寄存器的信息:

从上图可以看到,寄存器可以归为三个:ICCSC,ICCMVS,ICCILSRx。


ICCSC,ICC控制寄存器

你会发现,这个寄存器里,只有一位ICCEN(使能ICC功能寄存器)是支持读写操作的,其他的均为只读位,VSEFLG是堆栈标志位,可以通过观察此位的值来查看是否产生了ICC中断嵌套,因为出现嵌套的话,肯定会存在Push和Pop操作。


VSFLG位(这个User guide中标错了,应该是VSFLG而不是VSEFLG),这个是标注着ICCMVS寄存器中的MVSSP是否满了,也就是堆栈是否存满了。


ICMC则是当前比较的中断的设置优先级。(注意:这里的设置优先级不是默认的那个什么59 60之类的数,是通过ICCILSRx寄存器设定的,可以设定四个优先级,因为只有两位,具体见ICCILSRx寄存器配置)。


ICCMVS  可屏蔽中断堆栈寄存器

这个寄存器里面所有的位均为制度寄存器,其实就是存储着:当前堆栈了几个中断,然后ICM0-ICM3是比较位,也就是当前参与中断比较的这四位分别是谁而已。不需要用户设置,在调试中可能会使用。


ICCILSRx  中断优先级寄存器

ICCILSRx中断优先级寄存器有8个,每个寄存器里可以配置8个中断源,因此总共可以配置64个中断源,每个中断源对应那个资源的中断请查看每个芯片的datasheet,如下图所示是MSP430FR2355的中断源对应表:

OK,在功能和寄存器都描述完之后,我们来看一下使用过程中需要注意哪些点,或者说我们应该怎么正确的使用ICC资源。


下图是在Main函数中使用ICC的流程:

需要注意的是ICC使能和GIE使能的顺序即失能的顺序,即可以理解为,在使能或者失能ICC中断时,均要处于全局中断失能的状态下(即GIE=0),如下图所示,图中Disable  ICC处有点错误,我已经标明:

另外为了保证ICC功能的稳定正常运行,强烈建议用户在进入中断服务程序后使能GIE中断,因为在执行一个中断服务程序时,需要打开整体的中断使能,这样才能允许其他中断产生,从而才不会阻挡中断嵌套的功能,流程如下图所示:

最后附上使能ICC和失能ICC的程序:


ICC使能  Enable ICC Code Example:

//---------------------------------------------------------------------------------------

// Initializing and Enabling ICC

//---------------------------------------------------------------------------------------

 

void ICC_init (void)

{

    // disable global interrupt

    __bic_SR_register(GIE);

    // setting customized interrupt priorities.

    ICCILSR0 = 0xFFFF;

    ICCILSR1 = 0xFFFF;

    ICCILSR2 = 0xFFFF;

    ICCILSR3 = 0xFFFC;

    // enable ICC module

    ICCSC |= ICCEN;

    // enable global interrupt

    __bis_SR_register(GIE);

}

 


ICC失能  Disable ICC Code Example:

//---------------------------------------------------------------------------------------

// Disabling ICC

//---------------------------------------------------------------------------------------

 

void ICC_disable (void)

{

    // disable global interrupt

    __bic_SR_register(GIE);

    // enable ICC module

    ICCSC &= ~ICCEN;

    // enable global interrupt

    __bis_SR_register(GIE);

}

关键字:MSP430  使用指南  ICC中断控制器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492983.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:如何在IAR中通过Watch窗口观察局部变量的值
下一篇:MSP430使用指南8 -> WDT看门狗模块

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430F149内部Flash操作
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。硬件介绍:要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。一般430的单片机都统一编址在0-64k地址范围中,只有少数高端
发表于 2020-05-07
MSP430F149内部Flash操作
MSP430 FLASH读写
MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。其他段的地址根据容量不同,从0xFFFFh开始,每512字节为一段进行分配。FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入
发表于 2020-05-06
关于Msp430 Flash型单片机内部Flash的操作
1 Msp430Flash型单片机内部Flash存储器介绍MSP430的Flash存储器是可位、字节、字寻址和编程的存储器。该模块由一个集成控制器来控制编程和擦除的操作。控制器包括三个寄存器,一个时序发生器及一个提供编程、擦除电压的电压发生器。Msp430的Flash存储器的特点有:1)产生内部编程电压2)可位、字节、字编程,可以单个操作,也可以连续多个操作3)超低功耗操作4)支持段擦除和多段模块擦除2 Flash存储器的分割Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。Flash 存储器被分割成两部分:主存储器和信息存储器,两
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
1.JTAG口,JTAG引脚如下定义:单片机TCK——测试时钟输入,接仿真器7脚单片机TDI——测试数据输入,接仿真器2脚单片机TDO——测试数据输出,接仿真器1脚单片机TMS——测试模式选择,接仿真器5脚单片机TRST——测试复位,输入引脚,低电平有效(此引脚可选),接仿真器11脚 2. BSW接口单片机SBWTDIO/RST——测试数据输入输出,接仿真器1脚TDO,其中SBWTDIO和单片机复位RST引脚复用单片机SBWTCK/TEST——测试时钟,接仿真器7脚TCK
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
MSP430F169(四)——浅谈F169看门狗
什么是看门狗在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,从而失去应有的控制功能,引起MSP430发生“程序跑飞”事故。若不进行有效的处理,程序就不能回到正常的状态,从而失去应有的控制功能。看门狗定时器正是为了解放这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。看门狗有一个RST管脚,用来复位。看门狗的两种工作模式(一)看门狗模式:看门狗模式是看门狗这个组件的主要功能,(这不是废话嘛,看门狗组件肯定是看门狗啊)提到看门狗,不得不说这个密码保护了(WDTPW watchdog timer password )任何读写操作必须通过他才能正确执行指令
发表于 2020-05-06
MSP430F169(四)——浅谈F169看门狗
MSP430学习的第一个模拟I2C程序
#include <msp430.h>unsigned char I2CBUF;unsigned char checkbit;#define SCL_H   (P10OUT |= BIT2)      // P10.2为SCL#define SCL_L   (P10OUT &= ~BIT2)#define SDA_H   (P10OUT |= BIT1)     //p10.1为SDA#define SDA_L   (P10OUT &= ~BIT1)#define
发表于 2020-05-06
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved