使用Code Composer Studio开发MSP430 - GPIO外部中断

发布者:码上奇迹最新更新时间:2022-01-15 来源: eefocus关键字:Code  Studio  MSP430 手机看文章 扫描二维码
随时随地手机看文章

假设设计一个简单的数字手表,它的功能只是显示时间,假如您想更改其时区。你会怎么做?您只需按下一个按钮即可切换到菜单,该菜单使您可以更改时区。在这里,系统无法预测您的外部中断对其计时过程的影响,也无法要求您等待,因为它正忙于增加手表的秒数。这时就该用到中断功能了。


中断不必总是外部的。它也可以是内部的。嵌入式中断中的大多数时间也可以促进CPU的两个外设之间的通信。考虑到预设的计时器被重置,并且当时间达到计时器寄存器中的值时触发中断。中断处理程序可用于启动其他外设,如DMA。


在本篇文章中,我们使用了MSP430上的外部中断来切换不同的LED。当使用按钮通过状态改变给出外部中断时,控制权被转移(抢占)到ISR。要了解诸如MSP430G2 Lauchpad开发板的CCS环境设置之类的基础知识,请查看使用CCS开发MSP430入门链接,因为我们不会在本文中对此进行详细介绍。


为什么我们需要中断?

需要中断以节省嵌入式系统中的轮询开销。当需要通过抢占当前正在运行的任务来执行优先级更高的任务时,将调用它们。它还可以用于将CPU从低功耗模式唤醒。当外部信号通过GPIO端口的边沿转换唤醒时,将执行ISR,CPU再次返回低功耗模式。


MSP430中的中断类型

MSP430中的中断分为以下几种类型:

1.  系统复位(System Reset)

2.  不可屏蔽中断(Non-Maskable)

3.  可屏蔽中断(Maskable)

4.  向量中断和非向量中断(Vectored和Non-Vectored)


系统复位:

它可能是由于电源电压(Vcc)和RST / NMI引脚上的低信号(选择了复位模式)引起的,也可能是由于看门狗定时器溢出和违反安全密钥的原因而发生的。


不可屏蔽中断:

这些中断不能被CPU指令屏蔽。一旦启用了通用中断,就不能将不可屏蔽中断从处理中转移。这是由振荡器故障和手动赋予RST / NMI的边沿(在NMI模式下)之类的源产生的。


可屏蔽中断:

如果发生中断,并且可以通过CPU指令屏蔽该中断,则该中断为可屏蔽中断。他们不必总是外部的。它们还取决于外围设备及其功能。此处使用的外部端口中断属于此类别。


向量中断和非向量中断:

向量中断:在这种情况下,中断设备通过传递中断向量地址为我们提供了中断源。在这里,ISR的地址是固定的,控制权转移到该地址,然后由ISR负责其余的工作。

非向量中断:这里所有的中断都有共同的ISR。当来自非向量源的中断发生时,控制权将转移到所有非向量中断共享到的公共地址。


MSP430中的中断程序控制

发生中断时,MCLK变为ON,并且CPU从OFF状态被调用回。中断发生后,由于程序的控制权被转移到ISR地址,因此程序计数器和状态寄存器中的值将移入堆栈。

连续清除状态寄存器,从而清除GIE并终止低功耗模式。通过将中断向量地址放在程序计数器中,可以选择并执行优先级最高的中断。在获得MSP430 GPIO中断示例代码之前,了解其中涉及的端口寄存器的工作非常重要。


MSP430上用于GPIO控制的端口寄存器(Port Register):

PxDIR:它是端口方向控制寄存器。它允许程序员通过写入0或1专门选择其功能。如果将某个引脚选择为1,则它将用作输出。将端口1设为8位端口,如果将引脚2和3分配为输出端口,则必须将P1DIR寄存器设置为0x0C。

PxIN:这是只读寄存器,可以使用该寄存器读取端口中的当前值。

PxOUT:该特定寄存器可用于直接将值写入端口。仅当上拉/下拉寄存器被禁用时才可以使用。

PxREN:这是一个8位寄存器,用于启用或禁用上拉/下拉寄存器。当PxREN和PxOUT寄存器中的某个引脚都设置为1时,该特定引脚将被上拉。

PxSEL和PxSEL2:由于MSP430中的所有引脚都是多路复用的,因此必须在使用前选择特定功能。当特定引脚的PxSEL和PxSEL2寄存器都设置为0时,则选择通用I / O。当PxSEL设置为1时,将选择主要外设功能,依此类推。

PxIE:启用或禁用端口x中特定引脚的中断。

PxIES:选择产生中断的边沿。对于0,选择上升沿,对于1,选择下降沿。


MSP430测试GPIO中断的电路

下面显示了用于测试我们的MSP430中断示例代码的电路。

LED和按钮的地都连接到开发板的地。当按钮被按下时会连接在一起。在LED之前连接一个电阻,以避免LED消耗大量电流。通常,使用100ohm – 220ohm范围内的低电阻。


我们使用3种不同的代码来更好地了解端口中断。前两个代码使用与电路图1相同的电路。让我们深入研究代码。建立硬件连接后,设置如下所示。

MSP430的GPIO中断编程

代码说明如下。在下面的代码中使看门狗定时器停止运行。看门狗定时器通常执行两个操作。一种是通过复位控制器来防止控制器陷入无限循环,另一种是它使用内置计时器触发周期性事件。当微控制器被复位(或加电)时,它处于定时器模式,并且将会在32毫秒后复位MCU。


  1. WDTCTL = WDTPW + WDTHOLD;


将P1DIR寄存器的值设置为0x07可以将pin0、pin1和pin2的方向设置为输出。将P1OUT设置为0x30可以将其配置为在引脚4和引脚5上使能内部上拉电阻的输入。将P1REN设置为0x30可以在这些引脚上进行内部上拉。 P1IE使能中断,其中P1IES选择从高到低的跳变作为这些引脚上的中断沿。

  1. P1DIR |= 0x07;

  2.   P1OUT  = 0x30;

  3.   P1REN |= 0x30;

  4.   P1IE  |= 0x30;

  5.   P1IES |= 0x30;

  6.   P1IFG &= ~0x30;   

接下来在代码中启用低功耗模式并启用状态寄存器中的GIE,以便可以接收中断。

  1. __bis_SR_register(LPM4bits+GIE)



使用宏将程序计数器设置为端口1向量的地址。

  1. PORT1_VECTOR.

  2. #pragma vector=PORT1_VECTOR

  3. __interrupt void Port_1(void)


以下代码依次切换连接到引脚0、引脚1、引脚2的每个LED。

  1. if(count%3==0)

  2.   {

  3.   P1OUT ^= BIT1;

  4.   P1IFG &= ~0x30;

  5.   count++;

  6.   }

  7.   else if(count%3==1)

  8.   {

  9.       P1OUT ^= BIT1;

  10.       P1IFG &= ~0x30;

  11.       count++;

  12.   }

  13.   else

  14.   {

  15.       P1OUT ^= BIT2;

  16.       P1IFG &= ~0x30;

  17.       count++;

  18.   }


电路图2:

同样,让我们尝试使用其他引脚更好地理解该概念。因此,此处的按钮连接到引脚2.0而不是引脚1.5。修改后的电路如下。同样,该电路用于测试MSP430按钮中断程序。

此处端口2用于输入。因此必须使用不同的中断向量。 P1.4和P2.0读取输入型号。


由于端口2仅用于输入,因此P2DIR设置为0。要在启用内部上拉电阻的情况下将端口2的pin0设置为输入,必须将寄存器P2OUT和P2REN设置为1。在端口2的引脚0上中断并选择中断的边沿,将P2IE和P2IES的值设置为1。复位端口2中的标志,P2IFG被清除,以便可以在端口2上发生中断时再次设置该标志。


当中断源来自端口1时,连接到端口1的引脚1的LED发光。当中断源属于端口2时,连接到端口1的引脚2的LED发光。


  1. #pragma vector=PORT1_VECTOR

  2. __interrupt void Port_1(void)

  3. {

  4.       P1OUT ^= BIT1;

  5.       P1IFG &= ~0x10;

  6.       for(i=0;i<20000;i++)

  7.       {

  8.       }

  9.       P1OUT ^= BIT1;

  10. }

  11. #pragma vector=PORT2_VECTOR

  12. __interrupt void Port_2(void)

  13. {

  14.     P1OUT ^= BIT2;

  15.     P2IFG &= ~0x01;

  16.     for(j=0;j<20000;j++)

  17.          {

  18.          }

  19.     P1OUT ^= BIT2;

  20. }


使用CCS上传程序到MSP430

要将项目加载到启动板并对其进行调试,请选择项目,然后单击工具栏中的调试图标。或者,按F11或单击Run ànd Debug进入调试模式。


进入调试模式后,按绿色运行按钮可自由运行MCU中已加载的代码。现在,当按下按钮时,边沿的变化会触发中断,从而提示LED状态的变化。

MSP430上的中断程序

成功上传代码后,我们只需使用按钮即可对其进行测试。每当使用按钮发出中断时,LED模式就会根据我们的程序而改变。

关键字:Code  Studio  MSP430 引用地址:使用Code Composer Studio开发MSP430 - GPIO外部中断

上一篇:使用MSP430 Launchpad开发板连接HC-05蓝牙模块控制LED灯
下一篇:使用Code Composer Studio开发MSP430之1602图形显示屏的使用

推荐阅读最新更新时间:2024-11-17 03:04

基于MSP430的直流交流测量技术
功能设计要求(量程范围): 直流电压(DCV)―― 200 mV 2V 20V 200V 1000V 交流电压(ACV)―― 200mV 2V 20V 200V 700V 直流电流(DCA)―― 2mA 20mA 200mA 20A 交流电流(ACA)――2mA 20mA 200mA 电阻(OHM)――― 200 2K 20K 200K 2M20M 三、主要芯片:MSP430FE42X 四、操作方式:按键――DCV按键,ACV按键,DCA按键,ACA按键,OHM按键 五、原理框图: 五、测量原理: 当进行AD测量时,MSP430FE42X可以选择外部参考源,也可以选择内部参考源。 这里在
[单片机]
MSP430程序库<六>通过SPI操作AD7708
AD7708是16位的Σ-Δ型AD转换芯片,在低频应用中,AD7708可以作为单电源供电的完整前端。AD7708内部含有一个PGA(可编程增益放大器),可以完成对信号的放大;PGA范围是20-28八档可编程,当取参考电压2.5v时可以测量量程20mv到2.56v的电压。AD7708和AD7718引脚功能完全一样,只是位数AD7718是24位的,若用7718,只需改动少部分的程序,16位的部分改成24位即可。AD7708是通过SPI接口通信的;程序使用前一篇实现的SPI程序与AD芯片通信,可以作为SPI详细的使用示例。 硬件介绍: 硬件主要是MSP430的SPI接口和AD7708芯片的说用说明。 msp430的SPI接口:支
[单片机]
MSP430单片机的加密熔断器设计
引 言   MSP430系列单片机是德州仪器(TI)公司推出的一款16位超低功耗单片机。它能够在1.8~3.6 V电压、1 MHz频率的条件下运行,耗电电流在0.1~400μA。在运算速度上,MSP430系列单片机能在8 MHz晶振的驱动下,实现125 ns的指令周期。16位的数据宽度、125 ns的指令周期以及多功能的硬件乘法器相配合,能实现数字信号处理的某些算法(如FFT等)。   在整合方面,MSP430系列单片机将大量的CPU外围模块集成在片内,有如下一些模块:看门狗(WDT)、模拟比较器、串口、硬件乘法器、液晶驱动器、10位/12位/14位ADC、端口0~6、基本定时器。其中定时器A、B均带有多个捕获/比较寄存器,同
[单片机]
利用MSP430处理器实现音频频谱分析仪的设计
1.前言 在实际的广播电视发射工作中,新的发射机的进场测试,发射机的日常指标测试等都涉及了音频的测试。本文设计的音频频谱分析仪就是从信号源的角度出发,测量音频信号的频谱,从而确定各频率成分的大小,为调频广播的各项音频指标的提供参考。 在本文中主要提出了以MSP43处理器为核心的音频频谱分析仪的设计方案。以数字信号处理的相关理论知识为指导,利用MSP430处理器的优势来进行音频频谱的设计与改进,并最终实现了在TFT液晶HD66772上面显示。 2.频谱分析仪设计原理 由于在数字系统中处理的数据都是经由采样得到,所以得到的数据必然是离散的。对于离散的数据,适用离散傅立叶变换来进行处理。 快速傅里叶变换,是离散傅里叶变换的快
[测试测量]
利用<font color='red'>MSP430</font>处理器实现音频频谱分析仪的设计
msp430的printf函数的简单移植
在做一个基于TCS34725的RGB颜色传感器的工程,我使用的主控是MSP430,平时调试的时候用485总线发送到上位计(电脑或上层主控机),开始直接用串口发送函数直接发送,但是很多数据显示超级不方便,比如浮点数和有特地格式的数据流,先前都是自己用串口发送函数组一函数就是调用了int putchar(char *) 函数,于是我花了几分钟写了一个putchar函数,已使用,还真的成功了…….,想想先前傻逼的一个一个的构造格式,转化数字为字符串,现在终于可以使用printf函数了…. int putchar(int ch) { if (ch == '\n') { RS485Send_Byte(0x
[单片机]
[MPLAB] 分享一款mplab x ide 插件------Code Configurator
最近使用一款mplab插件,感觉蛮方便的,和大家分享: Code Configurator是一款免费的图形编程环境,可以通过简单的选择功能,自动生成pic的C代码,节省时间。 Code Configurator官方地址 为了方便说明,以PIC16F1823为例新建一个工程 standalone Project,我们不需要向里面添加任何文件,Code Configurator会自动添加。 然后点击Tools——Embedded——选择MPLAB® Code Configurator 在左边我们看到一些资源,这里有默认选好的的工程资源System,点击System,中间可以设置系统时钟,单片机配置字,我选择了内置系统时钟500Khz,
[单片机]
基于MSP430F149电机保护算法的实现
    目前,我国高压电动机的保护主要有机电式和集成电路两种,但都存在着诸多弊病,不能很好地保护电动机。其中,异步电动机的机电式保护,主要以电流增大作为判据,保护原理粗略,对断相等严重不对称故障,由于一般不出现显著的电流增大,从而使保护装置难以及时动作,造成事故扩大;集成电路式保护虽在保护原理上有所改善,但其保护特性一般无法与电动机热曲线实现较好配合,常发生拒动或误动,严重的甚至烧毁电动机。因此,研究电机保护算法具有重要的意义。 1 电动机故障分析     电动机的故障形式可分为对称和不对称两类。     对称故障包括过载、堵转和三相短路等,这类故障对电动机的损坏主要是热效应和机械应力,使绕组发热甚至损坏。其主要特征是三相仍基本对
[单片机]
基于<font color='red'>MSP430</font>F149电机保护算法的实现
基于MSP430的便携式心率计的设计
  在消费电子领域,便携式电子产品由于体积小、质量轻的特点越来越受到消费者的喜爱,已成为人们生活中不可缺少的部分。基于这个思路,我们设计了一款便携式心率计,它可以替代用脉搏听诊器等进行测量的传统方法,使用非常方便。该产品主要包括三个部分:信号的采集、数据处理以及LED显示和报警电路。    系统总体设计   图1为本系统的原理框图。 图1 系统结构框图   如图1所示,从传感器检测到的脉搏信号转化为电压信号送入电压跟随器,起到缓冲的作用,使前级和后级隔离开来,避免相互干扰。输出的信号经前置放大后送入高通滤波器,以滤除传感器的热电干扰,再经过低通滤波器滤除环境中的高频干扰。处理完的信号送入后级继续放大以便得到干扰小且
[医疗电子]

推荐帖子

msp430g2553的捕获 详解
写一个脉冲频率测量的程序先确定测频的方法--脉冲填充法被测信号____||___________||_____填充的脉冲||||||||||||||||||定时计数器CCR(第1次)CCR(第2次)2次捕获后的捕获寄存器的值相减就是填充的脉冲数若SMCLK的频率为1MHZ则,输入脉冲周期就是【CCR(第2次)-CCR(第1次)】微秒所以脉冲填充法不是真要向被测信号内填充脉冲,二是等效的脉冲填充。这里没有考虑到定时器的溢出!所以理论上能够测得信号的周期为6
火辣西米秀 微控制器 MCU
mos管的驱动程序怎么写啊?
本帖最后由paulhyde于2014-9-1509:12编辑mos管的驱动程序怎么写啊?看完芯片资料更是一头雾水啊,有哪位高人指点一二啊。感激~~~~~~mos管的驱动程序怎么写啊?本帖最后由paulhyde于2014-9-1509:12编辑第一次听说mos管有驱动程序。
九尤nn 电子竞赛
求ucosII /gui 通过vc++ 移植到pc机上的具体步骤
这方面接触的比较少完全没头绪求大神指点求ucosII/gui通过vc++移植到pc机上的具体步骤不懂您说的是什么,最近玩STM32F7的开发板,试了一下STEMWIN,感觉挺好用的 就是把ucos移植到pc机上其实我也不懂啊老师布置的时候也没说清楚 干嘛要移植到PC上?没有开发板吗?我好像听说过在PC上跑ucos,用什么BC31 对就是那个意思我是毕业设计抽到了这个题目本来这一块接触的就不多当初学习的时候也没用心老师要求是用vc++
吃吃吃包子 DSP 与 ARM 处理器
盘它STM32H750之二(QSPI内存映射)
由于STM32H750的内部flash只有128K,对于普通应用来说按理是足够的,但是如果加上一些相关中间件以及各种开源库,估计128Kflash也不足够用。楼主的外部flash使用的是W25Q64,容量为8M,这个对于普遍应用来说都足够了。STM32H750的QSPI有两个BANK,内存映射可以设置为单闪存模式和双闪存模式;不管什么模式,存储的其起始地址0x90000000,只是采用双闪存模式时,将同时访问两个Quad-SPIFLASH,吞吐量和容量均可提高二倍而已。这是比
RCSN stm32/stm8
一起弄个lpc1000的固件库?
没固件库太不方便了而示例中的库写得让人看着痛苦,用着痛苦。能不能一起来改造示例中的库,添加新的库,发到网上?一起弄个lpc1000的固件库?大家来讨论下:)回复楼主ssawee的帖子原帖由ssawee于2010-8-2412:38发表没固件库太不方便了而示例中的库写得让人看着痛苦,用着痛苦。能不能一起来改造示例中的库,添加新的库,发到网上?要有一个架构师负责全局,不然到时候就会很乱
ssawee NXP MCU
【CH579M-R1】+求助:如何接收完整的串口数据
通过串口的范例测试可以接收和发送数据,在串口调试助手中发送和接收都正常,下图为测试过程,无论发送的字符串长短不同,开发板均能返回正确的字符串。但是我试图的开发板中将接收到的字符串显示在LCD屏幕上却遇到了问题,接收函数总是按照每7个字符截取,无法获得完整的字符串。如下图,我发送的是2020-10-0614:36:50,但最后只显示36:50,之前的2020-10-0614:却看不到,仔细分析是先显示前7个字符2020-10,然后显示第二组7个字符-0614
hujj 国产芯片交流
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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