关于中断标志:

从SPI发送一字节数据:

void SPI_Set_SD_Byte(unsigned char txData)

{

UCB0TXBUF = txData; // 写入发送缓冲区

while ((UCB0IFG & UCTXIFG) == 0); // 等待发送完毕

}

分析:以9600bps 发送一字节 1ms估算,而以12MHz时钟执行(UCB0TXBUF = txData;)需要时间大概1us,

因此可怕的事情发生了,要等待发送完毕需要浪费3999个CPU周期去查询。如果等待过程换成休眠多好啊!

看下面程序:

void SPI_Set_SD_Byte(unsigned char txData)

{

UCB0TXBUF = txData; // 写入发送缓冲区

LPM3;

}

#pragma vector=USCI_B0_VECTOR

__interrupt void USCI_B0_ISR(void)
{
  //order interrupt service
  switch (__even_in_range (UCB0IV,8))
  {

case 0: break;

case 2: break;

case 8: while (!(UCB0IFG&UCTXIFG));

break;

LPM3_EXIT;
  }

巧妙地事情发生了,你CPU先歇着,让我SPI单独工作。

但系统中开启仅SPI发送中断时,上面是OK的,可问题来了,只发送不接受吗?有时候SPI通信未必

只有一个外设,为了实现低功耗,常常会唤醒低功耗在中断。

你怎能保证其他终端唤醒CPU时,SPI已发送完毕呢?

本文的重点来了,全局通信变量标志位是一把利剑。

void SPI_Set_SD_Byte(unsigned char txData)

{

UCB0TXBUF = txData; // 写入发送缓冲区

SPI_TxFlag_sd = 0;// 清除全局标志位

while (SPI_TxFlag_sd == 0 ) // 发送过程中CPU才唤醒

{

LPM3;

}

}

__interrupt void USCI_B0_ISR(void)
{
  //order interrupt service
  switch (__even_in_range (UCB0IV,8))
  {

case 0: break;

case 2: break;

case 8: SPI_TxFlag_sd = 1;

LPM3_EXIT;

break;

}

分析:任何中断都可能把CPU唤醒,但是只有SPI发送完毕后,SPI_TxFlag_sd 才置1 。

小编看过很多MSP430文章,可诸如小编这样的看待中断的角度展开叙述的,颇少!

希望有用吧!

MSP430中断的一个细节问题的更多相关文章

  1. Luogu3163 [CQOI2014]危桥 ---- 网络流 及 一个细节的解释

    Luogu3163 [CQOI2014]危桥 题意 有$n$个点和$m$条边,有些边可以无限次数的走,有些边这辈子只能走两次,给定两个起点和终点$a_1 --> a_2$(起点 --> 终 ...

  2. Protoc Buffer 优化传输大小的一个细节

    Protoc Buffer 是我们比较常用的序列化框架,Protocol Buffer 序列化后的占空间小,传输高效,可以在不同编程语言以及平台之间传输.今天这篇文章主要介绍 Protocol Buf ...

  3. 【JOB】Oracle中JOB的创建方法以及一个细节的探究

    在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...

  4. 读《锋利的jQuery》中first-child时的一个细节

    今天在看<锋利的jQuery>这书时,看到过滤选择器那一节.有个知识点引起了我的注意. (我不用书里一模一样的代码做例子)举个简单的例子-代码: <ul> <li> ...

  5. java Integer包装类装箱的一个细节

    原文:https://www.cnblogs.com/JackPn/p/9392145.html java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer.从jdk1.5开 ...

  6. onCreateView的一个细节--Fragment

    public View onCreateView(LayoutInflater inflater, ViewGroup contaiiner, Bundle savedInstanceState) 在 ...

  7. Swift 函数做参数和闭包做参数的一个细节差别

    函数作参数,示例为传入一个String和一个添加前缀的函数,返回一个添加完前缀的String: func demo(str:String,addPrefix:(String)->String)- ...

  8. 关于移动端click事件绑定的一个细节

    click是最常见的点击事件,但是对于移动终端,比如手机,一般都是以touch事件代替的,而click事件在手机也是生效的,只是会有1-2秒左右的延迟,那么当你想要用click而非touch事件的时候 ...

  9. 新手在sae部署程序容易忽略的一个细节

    从来没用过这类云空间服务,尝了下鲜试用一下sae,但是部署的时候发现问题了,各种404..各种无奈啊..虽然百度无数篇介绍,但是都千篇一律没什么启发.. 但是巧在我部署的应用有个欢迎页面,点击链接的时 ...

随机推荐

  1. .NET Core WEB API中接口参数的模型绑定的理解

    在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-a ...

  2. OO-第二单元总结

    一.三次作业的设计策略 (1). 第五次作业 第五次作业由于较为简单,在强测及互测中均没有出现BUG,但是并没有做优化.本次的设计有些不合理,所以在后面的作业中也做了重构.本次的作业主要有三个类,主函 ...

  3. springboot killed springboot 无故停止运行解决办法

    测试环境的服务部署在阿里云服务器上,运行一段时间总是自动宕掉,在配置文件里加上内存溢出配置,也不能打印出相关日志,一直找不出原因.今天在网上:http://www.cnblogs.com/chener ...

  4. Linux系统优化及基础命令

    1.Linux系统优化及基础命令 2. vim编辑器 vim 操作命令 在命令模式下操作 pageup 往上翻页(重要指数****)pagedown 往下翻页(重要指数****)H 移动到屏幕首行gg ...

  5. .zip压缩版MySql的安装( )

    Mysql解压缩版下载安装过程 1.进入https://www.mysql.com/downloads/官网进行mysql的下载 找到downloads首页最下方MySQL Community Edi ...

  6. js中for(var key in o ){};用法小记

    o不只可以是对象,key也不只可以是对象中的键. o也可以是一个数组,这时候的key就是数组的下标,从"0"开始,注意下标“0”是个字符串类型. 但是这种循环在 IE8浏览器下 对 ...

  7. PDF 补丁丁 0.6.0.3427 版发布(修复提取图片问题)

    新的版本进一步改善了导出图片的问题.

  8. 【性能测试】LoadRunner11安装(包含破解、汉化)

    LoadRunner安装(包含破解.汉化) 安装LoadRunner a.以解压包的方式打开[性能测试工具LR11.00].loadrunner-11.iso文件,运行“setup.ext”(花费时间 ...

  9. 分享身为linux爱好者的成长及学习经历

    成长是无尽的阶梯,一步一步的攀登,回望来时的路,会心一笑:转过头,面对前方,无言而努力的继续攀登.现在来和linux爱好者说说我的成长经历,在我的大学时光里我从一个一无所知的少年转变成了一个见多识广的 ...

  10. cocoapods 换源

    1. 用以下步骤换源: pod repo remove master pod repo add master https://code.aliyun.com/Magi/CocoaPods.git po ...