MSP430中断的一个细节问题
关于中断标志:
从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中断的一个细节问题的更多相关文章
- Luogu3163 [CQOI2014]危桥 ---- 网络流 及 一个细节的解释
Luogu3163 [CQOI2014]危桥 题意 有$n$个点和$m$条边,有些边可以无限次数的走,有些边这辈子只能走两次,给定两个起点和终点$a_1 --> a_2$(起点 --> 终 ...
- Protoc Buffer 优化传输大小的一个细节
Protoc Buffer 是我们比较常用的序列化框架,Protocol Buffer 序列化后的占空间小,传输高效,可以在不同编程语言以及平台之间传输.今天这篇文章主要介绍 Protocol Buf ...
- 【JOB】Oracle中JOB的创建方法以及一个细节的探究
在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...
- 读《锋利的jQuery》中first-child时的一个细节
今天在看<锋利的jQuery>这书时,看到过滤选择器那一节.有个知识点引起了我的注意. (我不用书里一模一样的代码做例子)举个简单的例子-代码: <ul> <li> ...
- java Integer包装类装箱的一个细节
原文:https://www.cnblogs.com/JackPn/p/9392145.html java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer.从jdk1.5开 ...
- onCreateView的一个细节--Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup contaiiner, Bundle savedInstanceState) 在 ...
- Swift 函数做参数和闭包做参数的一个细节差别
函数作参数,示例为传入一个String和一个添加前缀的函数,返回一个添加完前缀的String: func demo(str:String,addPrefix:(String)->String)- ...
- 关于移动端click事件绑定的一个细节
click是最常见的点击事件,但是对于移动终端,比如手机,一般都是以touch事件代替的,而click事件在手机也是生效的,只是会有1-2秒左右的延迟,那么当你想要用click而非touch事件的时候 ...
- 新手在sae部署程序容易忽略的一个细节
从来没用过这类云空间服务,尝了下鲜试用一下sae,但是部署的时候发现问题了,各种404..各种无奈啊..虽然百度无数篇介绍,但是都千篇一律没什么启发.. 但是巧在我部署的应用有个欢迎页面,点击链接的时 ...
随机推荐
- linux 每天一点点 【ubuntu16.04 】
1.查看防火墙状态 sudo ufw status [非root用户需要sudo] inactive状态是防火墙关闭状态 active是开启状态 2.查看CentOS版本信息 cat /etc ...
- CycleGan论文笔记
原文地址:https://arxiv.org/abs/1703.10593 背景——风格迁移 图片生成领域是GAN网络的天下,最近很多人将GAN网络应用到了图像风格迁移领域.这篇论文也是做image ...
- 常用User-Agent大全
浏览器User-Agent的详细信息 PC端: safari 5.1 – MAC User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8 ...
- UIPath Level 1
近日搬砖养家糊口,忙于项目,博客更新一度中断,自己都觉得委屈了. 培训视频看的眼睛耳朵疼,做完最后一个终极考试,哪儿哪儿都觉得不舒服~ 先来个截图,醒醒脑~ 今儿就歇下了~
- Trojan.Backdoor分析
总结:这是一个HTTP的后门,以安装(-in)||移除(-re)||配置(-c)为目的运行此程序时, 必须指定abcd为最后一个参数. 安装时他会把自身拷贝到%SYSTEMROOT%\WINDOWS\ ...
- prerender-spa-plugin Vue预渲染配合meta-info优化seo
记录一下解决方案的过程 先安装prerender和puppeteer插件 这个国外大神写的 github地址就不附上了(百度有) cnpm install prerender-spa-plugin ...
- WPF拖动总结
https://www.cnblogs.com/DebugLZQ/archive/2013/05/07/3062733.html <Window xmlns="http://schem ...
- bzoj2748
题解: 简单dp 代码: #include<bits/stdc++.h> using namespace std; ; int n,x,m,a[N],f[N][N]; int main() ...
- Java中的异常处理与抛出
一.异常处理 程序运行过程中出现的,导致程序无法继续运行的错误叫做异常. Java中有多种异常,所有异常的父类是Throwable,他主要有两个子类Error和Exception. Error一般是J ...
- thinkphp5和thinkphp3.2.3中URL重写出现No input file specified
查询后解决办法是打开public目录下的.htaccess文件,把:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 改为:RewriteRule ^(.*)$ i ...