历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | MSP430中断的一个细节问题

2020-02-06 来源:eefocus

关于中断标志:


从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文章,可诸如小编这样的看待中断的角度展开叙述的,颇少!

推荐阅读

史海拾趣

Extech公司的发展小趣事

1994年,Extech公司推出了国内第一套基于“AutoCAD FOR WINDOWS”的XTMCAD软件,这一创新举措标志着公司在CAD领域迈出了坚实的步伐。XTMCAD软件凭借其先进的技术和易用性,迅速获得了市场的认可,并在同年荣获了国家教委科技进步一等奖。这一荣誉不仅是对Extech公司技术实力的肯定,也为公司未来的发展奠定了坚实的基础。

淩志比高公司的发展小趣事

在电子行业的浪潮中,淩志比高公司由几位充满激情的创业者创立。创业初期,公司面临着资金短缺、市场竞争激烈等挑战。然而,凭借对技术的深刻理解和敏锐的市场洞察力,淩志比高成功开发出一款具有创新性的电子产品,迅速在市场上获得了一席之地。

Everspin Technologies公司的发展小趣事

Everspin的MRAM和STT-MRAM产品因其独特的数据持久性和非易失性特性,在数据中心和云存储市场中得到了广泛应用。超过1.2亿个MRAM和STT-MRAM产品被部署在这些市场中,为数据中心和云存储提供了高性能、高效率、可靠的系统解决方案。Everspin的产品在这些领域中的成功应用,进一步巩固了其在电子行业中的地位。

台湾兆欣(EMTEK)公司的发展小趣事

兆欣深知品质和服务对于企业发展的重要性。他们始终坚持高品质的生产标准,确保每一件产品都符合客户的期望。同时,兆欣还提供了周到的售前咨询和售后服务,为客户提供了全方位的支持。这种以客户为中心的经营理念赢得了客户的广泛赞誉和信任。

Datatronic公司的发展小趣事

Datatronic公司深知人才是企业发展的核心。因此,公司一直注重人才的培养和引进。公司建立了完善的人才培训体系,为员工提供广阔的发展空间和机会。同时,公司还积极引进国内外优秀人才,为公司的技术创新和市场拓展提供了有力支持。这些举措使得Datatronic公司在人才方面形成了竞争优势。

EDO Corp公司的发展小趣事

随着科技的不断进步,电子行业也在不断变化。Eclipse Magnetics深知,只有不断创新才能保持竞争力。因此,公司不断加大研发投入,积极探索新的技术方向。同时,公司还面临着来自全球竞争对手的挑战。然而,Eclipse Magnetics凭借其强大的研发实力和品牌影响力,始终保持着领先地位。

以上故事均基于Eclipse Magnetics在电子行业中的发展历程进行概括性描述,具体细节可能因实际情况而有所不同。

问答坊 | AI 解惑

模拟电路一日通(Ti的模拟电路应用基础资料)

本帖最后由 dontium 于 2015-1-23 11:33 编辑 模拟电路一日通(Ti的模拟电路应用基础资料) 本人认为很好的资料 …

查看全部问答>

eeworld论坛这里怎么获得积分啊,我初学者,很多问题又都回答不了,拿不了分,但我的分又快用完了……

eeworld论坛这里怎么获得积分啊,我初学者,很多问题又都回答不了,拿不了分,但我的分又快用完了………

查看全部问答>

Wince5.0 With PlatForm Builder 安装补丁后的问题。

PB5.0,安装了2007年全年的补丁(下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=a54779d5-f4a5-49f0-9e36-979d461f536c&DisplayLang=en)后,编译生成的NK.bin,烧入2410的板子后,系统启动时候出现,     致命 ...…

查看全部问答>

vxworks对java的支持?

请教:    想在vxworks下做java 开发,不知道能不能行得通?听说vxworks6.4+workbench可以,但却没有这方面的资料.希望高手给予指点.有此想发的朋友一起研究. qq:120964089…

查看全部问答>

驱动获得系统目录

驱动里面怎么获得系统目录啊。。…

查看全部问答>

k51开发环境是针对几位单片机的呀?因为不同位的单片机汇编器是不同的呀。

k51开发环境是针对几位单片机的呀?因为不同位的单片机汇编器是不同的呀。…

查看全部问答>

MSP430 FLASH 请教

IAR编译器以下显示是不是说 FLASH 程序占用8 884 bytes对吗?那也可以说是9K不到是吗? 8 884 bytes of CODE memory 788 bytes of CONST memory (+ 14 bytes shared) 357 bytes of DATA memory (+ 64 bytes shared)…

查看全部问答>

stm32驱动ov7660工作的时候出问题了。。。求指点呀!!!!

程序老是卡在摄像头初始化那块。。。这该如何是好呀?????    …

查看全部问答>

串口打印字符的问题

其实就是简单的串口打印字符的问题,但我这里需要用到的是类似printf()这样的函数,要知道printf ()这括号里面输入的参数是不定的即所谓的不定参数函数。网上找了好多资料 都说可以做函数的重定义。重定义函数如下#ifdef __GNUC__ #define P ...…

查看全部问答>