MSP430F5529学习笔记(三)——外部中断

        中断是单片机中一个很实用的经典操作,在各项项目中使用有事半功倍的效果。通过对中断服务函数的相关设置和中断触发方式的调整可以使程序更加高效简洁,本文针对MSP430中中断进行简单概述。

        中断的基本思想和原理简单来说就是在执行某指令时突然被打断执行新的操作,在执行完后退回被打断的指令继续执行。通俗的说可以理解为:“你在房间写作业突然有人敲门,你开门后继续回去写作业”这一过程,敲门即可以理解为中断触发信号,开门可以理解为中断事件。今天使用简单的按键出发中断控制LED灯亮灭来进行演示,首先依然是对应引脚的配置:

    WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
    P1DIR |=BIT0;//将P1.0设置为输出
    P1DIR &=~BIT1;//将P1.1设置为输入
    P1OUT |=BIT0;//将p1.0初始化为高电平
    P1REN |=BIT1;//使能上拉
    P1OUT |=BIT1;//将p1.1初始化为高电平

        在配置好输入输出引脚,设置好初始状态后即可开始配置中断

中断初始化

        本次案例中我们采用P1.1板载按键作为中断触发源,因此我们对其进行相对应的中断配置 ,使用到的寄存器分别为PxIE中断使能寄存器,PxIES中断标志寄存器,PxIFG中断触发沿选择寄存器,对应的设置为:

0

1

PxIE

关闭使能

开启使能

PxIES

上升沿触发

下降沿触发

PxIFG

没有中断请求

有中断请求

        根据上图我们可以参照设置对应的中断触发方式为:

    P1IE  |=BIT1;//中断使能
    P1IES |=BIT1;//设置为下降沿触发
    P1IFG &=~BIT1;//清空中断标志
    _BIS_SR(GIE);//开启中断使能

         我们将触发方式设置为下降沿触发,清空中断标志位后开启中断使能,从而实现对中断触发方式的简单设置,其他终端设置方法也以此类推。

中断服务函数

        任何中断都离不开中断服务函数,中断服务函数代表了进入中断后执行的操作等,是实现中断操作的核心之一。MSP430的中断服务函数组成如下:

#pragma vector=PORT1_VECTOR
__interrupt void P1_1ISR(void)
{
    P1IFG &=~BIT1;//清空中断标志
    P1OUT ^=BIT0;//电平翻转
}

        需要注意的是interrupt前的横线为英文输入法下的两次  ‘_’,请书写后检查,否则会产生编译错误无法生成对应的输出文件。通过编写中断函数,即可实现相应的中断操作,同时本次调试过程中出现过少许按键抖动,大家可以自行加入消抖程序进行优化

中断嵌套

        在MSP430中不可像STC51,STM32等单片机一样实现执行低优先级中断时及时响应高优先级中断,但是430中我们可以采用中断嵌套的方式来对此问题进行解决。MSP430产生中断响应以后自动关闭总中断,这时更高优先级的中断都不会响应,要中断嵌套的话,就必须在中断中打开总中断。

        简易中断嵌套函数(用两组呼吸灯演示中断嵌套)

#include <msp430.h> 

volatile int a,b;
void delay(volatile unsigned int t)
{
    while(t--);
}

void main(void)
{
    WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
    P1DIR |=BIT0;//将P1.0设置为输出
    P1OUT |=BIT0;//将p1.0初始化为高电平
    P4DIR |=BIT7;
    P4OUT |=BIT7;
    P1REN |=BIT1;//使能上拉
    P1DIR &=~BIT1;//将P1.1设置为输入
    P1OUT |=BIT1;//将p1.1初始化为高电平
    P1IE  |=BIT1;//中断使能
    P1IES |=BIT1;//设置为下降沿触发
    P1IFG &=~BIT1;//清空中断标志
    P2IE |=BIT1;
    P2IES |=BIT1;
    P2IFG &=~BIT1;
    _BIS_SR(GIE);//开启中断使能
}

#pragma vector=PORT1_VECTOR
__interrupt void P1_1ISR(void)
{
    P1IFG &=~BIT1;//清空中断标志
    for(a=10;a>0;a--)
    {
        P1OUT ^=BIT0;//电平翻转
        delay(50000);
        P2IE |=BIT1;
        P2IES |=BIT1;
        P2IFG &=~BIT1;
        _EINT();
    }
}

#pragma vector=PORT2_VECTOR
__interrupt void P2_1ISR(void)
{
    P2IFG &=~BIT1;
    for(b=5;b>0;b--)
    {
        P4OUT ^=BIT7;
        delay(50000);
    }
}

       msp430的指令中,DINT和EINT分别指关和开所有中断, 以上程序效果为,当按下板载P1.1开关时,P1.0板载LED闪烁,当闪烁过程中检测到P2.1按下,P4.7LED闪烁,闪烁结束后继续执行P1.0闪烁。达到了中断执行中响应其他中断的效果。同时单独按下P2.1也会执行对应的闪烁程序,学识浅薄以上代码仅供参考如有更好的写法请告知。

        对于多个中断源共用一个中断向量,如P1/P2口中断一定要手动清标志位,,如果在这种中断打开总中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关。

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
<h3>回答1:</h3><br/>很高兴听到您正在学习msp430f5529 driverlib库函数。这个库函数是用于MSP430F5529微控制器的,它提供了许多方便的函数来帮助您编写代码。以下是一些学习笔记: 1. 首先,您需要了解MSP430F5529微控制器的基本知识,例如它的架构、寄存器、时钟等等。这将有助于您更好地理解库函数的使用。 2. 接下来,您可以查看driverlib库函数的文档,以了解每个函数的功能、参数和返回值。这将有助于您选择正确的函数来完成您的任务。 3. 在使用库函数之前,您需要包含相应的头文件。例如,如果您要使用GPIO函数,则需要包含gpio.h头文件。 4. 您可以使用Code Composer Studio等IDE来编写代码,并使用driverlib库函数来完成您的任务。在编写代码时,您可以使用库函数的示例代码作为参考。 5. 最后,您可以使用调试器来调试您的代码,并查看库函数的执行情况。这将有助于您更好地理解库函数的使用。 希望这些笔记对您有所帮助,祝您学习愉快! <h3>回答2:</h3><br/>MSP430F5529是德州仪器公司推出的一款低功耗微控制器。为了便于开发者控制芯片的各个模块,德州仪器提供了一套库函数集合——driverlib,让开发者更加轻松地进行开发工作。 在学习driverlib库函数时,开发者首先需要了解其所包含的功能模块。其中包括时钟、看门狗、ADC、UART、SPI、I2C、DMA等模块。接下来,开发者可以根据需要,按照一定的操作流程,调用对应的库函数实现所需功能。 以ADC模块为例,开发者可以通过以下步骤进行配置和使用: 1.配置ADCMCTLx寄存器:设置参考电压、采样时钟源和输入通道等参数。 2.配置ADC14CTL0寄存器:设置转换模式、采样序列长度、启用/禁用中断等参数。 3.配置ADC14CTL1寄存器:使能ADC、设置转换时钟源等参数。 4.配置ADC14INCHx寄存器:选择输入通道。 5.调用ADC14_enableConversion()函数使能转换。 6.等待转换完成并调用ADC14_getResult()函数获取结果。 通过以上步骤,开发者可以轻松地实现MSP430F5529的ADC模块读取功能。 除此之外,driverlib库函数还提供了丰富的例程和注释,使得开发者能够更好地理解每个函数的作用和用法。 总之,学习driverlib库函数是MSP430F5529开发工作的必要之一。只有深入了解库函数的功能和使用方法,开发者才能更高效地完成开发工作,并为产品的性能提升和功耗优化做出贡献。 <h3>回答3:</h3><br/>1.概述 MSP430F5529是TI公司推出的一款微控制器。MSP430F5529内置了16位CPU、16位寄存器、12位ADC、双DAC、多种时钟、计数器、UART、SPI、I2C、USB等多种外设。为了方便开发,TI公司提供了driverlib库函数。本篇笔记主要介绍MSP430F5529的driverlib库函数的使用方法。 2.使用方法 2.1 前置工作 在使用driverlib库函数之前,需要先安装MSP430F5529 LaunchPad开发板和MSP430F5529 microcontroller的相关软件和驱动程序。安装完成后,需要使用Code Composer Studio等IDE来编写工程并使用driverlib库函数。 2.2 库函数调用 函数库文件libdriver.a是包含所有driverlib库函数的库文件,在代码中需要添加链接该库。在Code Composer Studio中的Project属性中添加对libdriver.a的链接即可。 使用driverlib库函数的方法如下: #include <msp430.h> #include <driverlib.h> 初始化时钟: // Set the DCO to 16MHz CS_setDCOFrequency(16000000); 启用ADC: // Enable the ADC ADC14_enableModule(); 设置ADC采样和转换: // Set the ADC conversion clock and sample time ADC14_initModule(ADC_CLOCKSOURCE_SMCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_1, ADC_NOROUTE); 设置ADC输入通道: // Configure channel A0 for analog input ADC14_configureSingleSampleMode(ADC_MEM0, true); ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS, ADC_INPUT_A0, false); 启用ADC采样完成中断: // Enable ADC interrupt ADC14_enableInterrupt(ADC_MEM0); // Enable ADC interrupt in NVIC NVIC_EnableIRQ(ADC14_IRQn); 启动ADC采样: // Start sampling ADC14_enableConversion(); ADC14_toggleConversionTrigger(); 3.总结 通过上述代码,我们可以看出,在使用driverlib库函数时,只需使用简单的函数调用即可完成大部分工作,极大地提高了工程的开发效率。同时,driverlib库函数提供了丰富的功能,包括ADC、DAC、UART、SPI、I2C、GPIO等多种外设的驱动,大大简化了开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“hello word”工程师

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值