MSP430F5529——中断理解

简介: MSP430F5529——中断理解

MSP430的中断,需要两个部分,一部分是打开中断,另外一部分是编写中断服务函数

打开中断

_BIS_SR与__bis_SR_register

首先我们得知道__bis_SR_register和_BIS_SR是一个玩意。查看宏定义可知

#define _BIS_SR(x)                      __bis_SR_register(x)

_BIS_SR()可传入的参数

然后我们查看x的值,发现里面有八个可以传入的值

#define C                      (0x0001)
#define Z                      (0x0002)
#define N                      (0x0004)
#define V                      (0x0100)
#define GIE                    (0x0008)
#define CPUOFF                 (0x0010)
#define OSCOFF                 (0x0020)
#define SCG0                   (0x0040)
#define SCG1                   (0x0080)

我们这里只需要关系GIE就可以了,这个GIE表示总中断,如果没有使能GIE,那么你写的中断函数将永远无法进入!

低功耗

我们先看下面这一段宏定义

#define LPM0                   (CPUOFF)
#define LPM1                   (SCG0+CPUOFF)
#define LPM2                   (SCG1+CPUOFF)
#define LPM3                   (SCG1+SCG0+CPUOFF)
#define LPM4                   (SCG1+SCG0+OSCOFF+CPUOFF)


这里我们需要有一个概念了,众所周知MSP430引以为豪的东西就是低功耗。MSP430单片机具有7种低功耗模式(LPM0~4、LPM3.5和LPM4.5,并非全部系列都具有,MSP430F5529就没有),通过不同程度的休眠,可降低系统功耗。


中断服务函数

中断服务函数如下

#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
{
}


#pragma vector= xxx,此处的xxx是表示指定的中断函数。比如我是P1.1采用中断,就写#pragma vector= PORT1_VECTOR。

/*****以下都是我一个一个的从库里面复制粘贴过来的,如有发现少了请评论*****/
RTC_VECTOR
PORT2_VECTOR
TIMER2_A1_VECTOR
TIMER2_A0_VECTOR
USCI_B1_VECTOR
USCI_A1_VECTOR
PORT1_VECTOR
TIMER1_A1_VECTOR
TIMER1_A0_VECTOR
DMA_VECTOR
USB_UBM_VECTOR
TIMER0_A1_VECTOR
TIMER0_A0_VECTOR
ADC12_VECTOR
USCI_B0_VECTOR
USCI_A0_VECTOR
WDT_VECTOR
TIMER0_B1_VECTOR
TIMER0_B0_VECTOR
COMP_B_VECTOR
UNMI_VECTOR
SYSNMI_VECTOR
RESET_VECTOR

__interrupt表示之后的是中断服务函数,中断函数必须是void型!!!后面那个Port_1名字随便取。中断函数不能传参!!!

总结

如果我们有中断一定要使能GIE!!!个人不建议新手使用低功耗!!!代码如下

_BIS_SR(GIE);//开启中断使能


注意:无论是外部中断还是串口中断,都是中断,需要打开GIE!!!

目录
相关文章
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
847 4
|
JSON 数据格式 索引
Ansible fact变量与魔法变量
Ansible fact变量与魔法变量
211 6
|
自然语言处理 C++
通用大模型VS垂直大模型对比
通用大模型VS垂直大模型对比
|
监控 Serverless Go
Serverless 函数问题之定位如何解决
当函数日志和监控指标无法定位问题时,可利用coredump检查程序状态,tcpdump抓取网络包,jmap分析Java内存;若疑虑函数实例网络不稳定,可通过命令行登录实例,安装并使用tcpdump抓包,上传至对象存储再下载至本地,用Wireshark做进一步分析。
124 0
|
存储 负载均衡 监控
Serverless应用引擎SAE评测
Serverless应用引擎SAE是一款极简易用、自适应弹性的容器化应用平台。它提供全托管的计算服务,用户不必再关心复杂的基础设施,只需要上传代码或者容器镜像,SAE会自动运行,并提供网络、负载均衡、监控等配套能力,适用于网站、小程序、APP等Web应用以及微服务应用
|
网络协议 Linux 网络安全
如何实现SCTP多归属链路对接
最近完成了贝尔及华为软交换的SCTP 多归属链路对接。由于网络上对于多归属链路介绍的资料特别少。能看到的一些资料介绍,但是说明的不详细,大都是Demo性质不能完全商用。以客户端为例子,概括如下,首先绑定本端两个IP,然后绑定交换的主用Path。然后将该主用的Path的IP设置为PrimaryPath。如果对端交换不支持BEAT心跳消息,就不要发送该BEAT消息。 现在分享下我的具体的经验心得。
如何实现SCTP多归属链路对接
【数据结构专栏】动态扩容顺序栈详解
【数据结构专栏】动态扩容顺序栈详解
307 0
|
API 开发工具 Windows
M5310-E之SDK开发
build执行编译,build clean清除编译 • win+R进入windows的命令行 • cd到SDK的根目录 • build
212 0
|
Ubuntu
解决办法:自动挂载失效,VirtualBox共享文件夹给Ubuntu虚拟机
解决办法:自动挂载失效,VirtualBox共享文件夹给Ubuntu虚拟机
1401 0
|
缓存 NoSQL 搜索推荐
原创文章汇总(职场经验分享、自学教程、面试真题解析、技术专题深度解析)
技术文章不像时事新闻,看过就过,需要反复阅读、反复推敲。因此这边对个人的原创文章搞个汇总,方便有需要的同学查阅。后续的原创文章也会往该目录补充,喜欢我文章的同学可以收藏方便后续查阅。
217 0