历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2020年08月12日 | 利用捕获比较功能实现MSP430与微机串行通信的研究

2020-08-12 来源:elecfans

1 引言: 
MSP430系列单片机是美国TI公司于2000年推出的新一代超的低功耗16位单片机。由于它具有功能完善、超低功耗、开发简便、成本低廉等特点,目前已经在国内得到了广大工程技术人员的关注和应用。工程师们在进行机型选择时主要考虑该机型的性能和成本,因此在小型仪表以及普通应用中MSP430的11x系列、31x系列、41x系列受到了许多工程师的青睐。这些机型有一个共同的特点就是内部没有硬件UART模块。这就带来一个问题,这些单片机怎样实现串行通信呢?本文就针对这一问题进行研究,分析研究了MSP430中捕获比较功能的特点,以及利用捕获比较功能实现串行通信的方法。并以MSP430F413为例介绍了实现它与微机之间进行串行通信的软件代码和硬件电路。


1 捕获比较功能的介绍: 
MSP430系列单片机中都集成了捕获比较的功能模块。捕获比较功能的引入主要是为了提高I/O端口处理事务的能力和速度。捕获比较并不是非常新的概念,使用过Intel 的16位单片机中如80196MC的读者就会发现,MSP430中的捕获比较功能和80196系列单片机中的EPA功能有一些相似之处。以下结合实现串行通信的需要,简要介绍有关捕获比较的有关概念。


捕获比较模块用于捕获应用事件的发生时间,或产生定时间隔。如果相应的中断允许,那么完成一个时间捕获或一次定时间隔,捕获/比较模块都将产生中断。每一个捕获比较模块都可以对应一组硬件引脚。图1是捕获比较模块的结构框图。


捕获功能可以捕捉选定输入引脚的状态的变化,它可以选择捕捉上升沿、下降沿、前后沿。如果捕捉到了相应的变化,则定时器计数值将被复制到捕获比较寄存器CCR中,并会产生相应的中断。在串行通信中,正是利用捕获功能的特点来捕捉起始位的信息。 


图1:捕获比较模块结构框图

比较功能是借助比较器不断地将CCR中的设定值与定时器中的计数值相比较,当二者相等时,就产生中断,并产生设定的输出。利用比较功能,可以获得精确的时间间隔,利用该特性可以构造一个精确的波特率发生器,为串行通信提供时间基准。


2 利用捕获比较实现串行通信的方法 
本节具体介绍实现异步串行通信时,捕获和比较功能是如何工作的。


2.1 接收过程 


图2:在串行通信接收过程中捕获比较功能时序分析示意图

在异步串行通信中,每个数据帧一般由1位起始位、8位数据位、1位奇偶校位、1位停止位组成。图2所示为一个数据帧前3位的时序。在接收这种格式的数据帧时,首先要确定起始位,用来进行帧同步。在MSP430中是利用捕获功能来捕捉起始位的下跳沿(详见附录程序代码)。如图2,在A点捕获到起始位,系统将此刻的定时器值(T0)存放入CCR中,并产生中断。对A点所产生中断的处理非常重要。在该中断处理程序中,将捕获功能转换为比较功能,并将1.5位的时间间隔(T1.5)加到CCR中,即CCR=T0+T1.5。这样当到达1.5位时间间隔时(B点),即定时器的值等于T0+T1.5。将会由此比较功能触发一次中断,这样就实现了1.5位时间间隔的精确定时。在该中断处理程序中,可以读取输入引脚的状态,从而接收到Bit1的信息,然后再利用比较功能产生1位时间间隔(T1)的定时。此后,当下一个T1时间到达时,比较功能又会触发一次中断(C点)。在这时的中断服务程序中可以读取Bit2的信息。如此重复8次,就可以完成一个字节数据的接收。


2.2 发送过程 
相对于接收过程,发送过程比较简单。利用比较功能产生一个间隔为1位时间(T1)的时序,相当于一个波特率发生器。在每一次比较功能触发的中断服务程序中发送一位数据,如此循环执行,这样就可以完成一个数据帧的发送。异步串行通信的一个数据帧往往是10位或11位。对于这点可以利用MSP430是16位机的特点,将数据帧的所有位安排在一个待发送字中,然后移位发送,而不需要专门编程产生起始位和停止位。(详见附录中的程序代码及说明)


2.3 波特率的确定以及中断的安排 
从以上的分析可以看出,串行通信的波特率主要是与1位时间间隔T1有关,T1可以通过以下公式确定:

  公式1

其中Tclk是指与该捕获比较模块相对应的定时器的基准频率,如使用ACLK作为时基则Tclk=32768;使用MCLK作为时基则Tclk=1M。式中的Baud就是期待的波特率值。MSP430每个捕获比较模块中的捕获和比较对应同一个中断地址,因此两者需要共享一段中断服务程序。这样就要求在中断服务程序中能区分触发中断的类别。主要是通过CCTL控制寄存器中的CAP位来区分[3]。另一方面接收和发送的也都需要在这段服务程序中处理,应该加以区分。(详见附录中的程序代码及说明)


3 超低功耗串行通信实例

3.1电路结构及其特点 
本文中使用上述的原理和方法,在MSP430F413和MAX3221构成的电路中实现了与微机的串行通信,电路原理如图3。该电路不但完成了串行通信,还进一步实践了超低功耗的应用原理。MSP430单片机的一大特点就是超低功耗,它有多种功耗状态可以编程控制[4]。MAX3221也是具有低功耗特点的接口器件,通过EN、FORCEON、FORCEOFF引脚可以控制驱动器、接收器的工作状态,启动或禁止自动降低功耗功能,从而使其工作在不同的能耗状态,达到降低功耗的目的[2]。控制及其状态详见表1



图3 MSP430F413超低功耗串行通信电路原理图

3.2超低功耗的解决方案 
选择了低功耗的器件,还要合理的控制才能达到最低的能耗[1]。对于本应用,MSP430处于从机工作状态。针对这种应用以下方案可以有效地降低能耗:初始化程序结束后,设定MSP430F413工作在功耗模式4等待P1.2引脚的中断。这时CPU将关闭,其能耗最低(0.1μA)。另一方面,初始控制MAX3221进入自动调节能耗状态。如果微机不发送信号,即Rin输入无效,驱动器和接收器都将关闭,进入很低功耗的待机状态(1μA)。

当微机发送信号时,即Rin输入有效,接收器会自动打开,并产生有效的INVALID信号。该信号将触发P1.2引脚的中断。在中断处理程序中将MSP430F413的功耗模式设定为模式3(功耗电流0.7μA),这时利用频率为32768的ACLK时钟工作就可以完成低速的串行通信任务。当接收、处理完微机的数据后需要将结果返回给微机。这时可以打开MAX3221的驱动器,关闭接收器完成此工作。当发送完毕后可以将MSP430和MAX3221再设定为准备接收信息的最低功耗状态。


利用上述方法可以在满足串行通信的同时达到非常低的功耗。

表1:MAX3221收发器工作控制及其工作状态对照表 

工作及能耗状态FORCEONFORCEOFFEN接收器输入信号Rin驱动器状态接收器状态
完全待机状态最低功耗X00X关闭激活
X01X关闭关闭
正常工作状态人工调节能耗110X激活激活
111X激活关闭
器件自理状态自动调节能耗010有效自动激活激活
011有效自动激活关闭
010无效关闭激活
011无效关闭关闭


注:驱动器将MOS电平转换为RS232电平,接收器将RS232电平转换为MOS电平


4 结束语 
应用上述的设计方法和电路,很好地实现了MSP430与微机之间的串行通信,并且达到了非常理想的功耗水平。实践证明该方法对于没有硬件UART的MSP430系列单片机进行串行通信非常有效,并给需要扩展串口的其他类型MSP430单片机提供了一种可行的方案。此外,文中的超低功耗电路设计方法对于功耗敏感的应用是一种很好的解决方案。


参考文献: 
[1] Brian Merritt. Ultralow Power Thermostat ([R]). Texas, U.S.A. : Texas Instruments Incorporated, 2001. 
[2] MAX3221 3-V TO 5.5-V single-channel RS-232 line driver/receiver (Manual). Texas, U.S.A. : Texas Instruments Incorporated, 2001. 
[3] 胡大可. MSP430系列超低功耗16位单片机原理与应用,北京航空航天出版社,2001。 
[4] 胡大可. MSP430系列FLASH型超低功耗16位单片机,北京航空航天出版社,2001。

附录:利用捕获比较实现异步串行通信的程序代码: 
;------------------------------------------------------------------------------

说明: 
硬件连接如图3,P1.0作为发送引脚,P1.1作为接收引脚,二者共用捕获比较模块0 
Tbit1 是1位时间间隔数据(T1),Tbit_5是半位时间间隔数据。(由公式1得出) 
RTbuff 是接收发送缓冲字单元,存放接收和发送的数据 
Counter 是收发过程中使用的计数器 
;------------------------------------------------------------------------------

发送子程序 

MOV&TAR,&CCR0; 将当前定时器值存入CCR中(T0)
ADD#Tbit1,&CCR0; 将1位时间间隔加入CCR中(T0+T1)
RLARTbuff; 将带发送的字节数据左移一位,构造最低位为起始位
BIS#0200h, RTbuff; 将停止位数据放入待发送字的第10位
MOV#10,Counter; 初始化数据帧计数器为10
MOV#OUTMOD0+CCIE,&CCTL0; 标记发送状态,打开捕获比较中断,启动发送
RET
; 返回


;------------------------------------------------------------------------------ 
接收准备子程序 

MOV#08,Counter; 初始化接收数据计数器为8(接收一个字节数据)
MOV#SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,&CCTL0;初始化捕获比较控制字,


; 设定为下降沿捕获模式,标记接收状态,打开中断,启动接收
RET
; 返回


;------------------------------------------------------------------------------


捕获比较模块0的中断服务程序 
;------------------------------------------------------------------------------ 


ADD#Tbit1,&CCR0; 将1位时间间隔加入CCR0中

BIT#CCIS0,&CCTL0; 判断接收、发送状态

JNZUART_RX; 是接收状态,转接收处理
UART_TXCMP#00h,Counter; 是发送状态,判断帧发送是否结束
JNETX_Next; 没有结束,转入发送
BIC#CCIE,&CCTL0; 帧发送结束,关闭中断
RETI
; 中断返回
TX_NextRRARTbuff; 待发送位移入进位位C
JCTX_One; 该位为1?跳转
BIS#OUTMOD2,&CCTL0; 该位为0,发送0
JMPTX_nxt2; 跳转继续处理
TX_OneBIC#OUTMOD2,&CCTL0; 该位为1,发送1
TX_nxt2DECCounter; 发送帧计数器减1
RETI
; 中断返回
;
UART_RXBIT#CAP,&CCTL0; 判断是否是捕获到起始位
JZRX_Bit; 接收的不是起始位,转入处理
RX_StartBIC#CAP,&CCTL0; 捕获到起始位,将状态转为比较模式
ADD#Tbit_5,&CCR0; 再增加半位时间间隔(T0+T1.5),以实现1.5 时间间隔
RETI
; 中断返回
RX_BitBIT#SCCI,&CCTL0; 将接收到的位存入进位位C
RRCRTbuff; 将接收到位,移入收发缓冲字
RX_TestDECCounter; 接收数据计数器减1
JNZRX_Next; 判断是否接收了所有数据位,没有跳转到后续处理
BIC#CCIE,&CCTL0; 接收到所有数据位,关闭捕获比较中断
RX_NextRETI
; 中断返回


推荐阅读

史海拾趣

Hirel Systems Ltd公司的发展小趣事

对于四通道红外遥控器接收器电路,网友可能提出的问题涉及多个方面,以下是一些可能的问题及回答:

一、技术原理类问题

  1. 问题:四通道红外遥控器接收器电路是如何工作的?
    回答:四通道红外遥控器接收器电路主要通过光电二极管接收遥控器发射的红外信号,经过放大、解码等处理,最终识别出不同的按键指令,并控制相应的设备执行操作。具体来说,当遥控器发射出特定频率的红外光信号时,光电二极管将光信号转换为电信号,经过放大电路放大后,送入解码器进行解码,解码器根据解码结果输出相应的控制信号,控制设备执行相应的操作。

  2. 问题:接收器电路中的关键元件有哪些?
    回答:接收器电路中的关键元件包括光电二极管(用于接收红外光信号)、放大器(用于放大微弱的电信号)、解码器(用于解码信号并输出控制信号)以及可能的滤波电路(用于滤除噪声干扰)等。这些元件共同协作,实现红外信号的接收和处理。

二、故障排查与维修类问题

  1. 问题:接收器无法接收到信号,可能的原因有哪些?
    回答:接收器无法接收到信号的可能原因包括:

    • 光电二极管损坏或老化,导致无法有效接收红外光信号。
    • 接收器电路中的连接线松动或接触不良,导致信号传输中断。
    • 放大器或解码器故障,无法对接收到的信号进行正常放大或解码。
    • 接收器受到外界干扰(如光线、电磁干扰等),影响信号的接收和处理。

    针对以上问题,可以逐一检查光电二极管、连接线、放大器、解码器等元件的状态,并采取相应的维修或更换措施。同时,注意避免将接收器放置在易受干扰的环境中。

  2. 问题:如何排查和解决接收器响应延迟或误动作的问题?
    回答:排查和解决接收器响应延迟或误动作的问题可以从以下几个方面入手:

    • 检查遥控器发射的红外信号是否正常,包括信号的频率、强度等是否符合接收器的要求。
    • 检查接收器电路中的滤波电路是否设置得当,以避免噪声干扰导致误动作。
    • 检查解码器的解码逻辑是否正确,以确保能够准确识别出遥控器发射的指令。
    • 如果以上均正常,可以考虑检查接收器的电源系统是否稳定,以及是否有其他电路元件故障导致的影响。

    针对具体问题,可以采取相应的调整或维修措施来解决。

三、应用与拓展类问题

  1. 问题:四通道红外遥控器接收器电路可以应用于哪些场景?
    回答:四通道红外遥控器接收器电路可以广泛应用于各种需要遥控控制的设备中,如智能家居系统(如电视、空调、灯光等的遥控控制)、工业自动化控制(如电机、阀门等的远程控制)、安防监控系统(如摄像头、报警器的遥控操作)等。通过扩展通道数量和增加控制逻辑,还可以实现更复杂的控制功能。

  2. 问题:如何对四通道红外遥控器接收器电路进行升级或改造?
    回答:对四通道红外遥控器接收器电路进行升级或改造时,可以考虑以下几个方面:

    • 升级光电二极管或放大器等关键元件的性能,以提高接收灵敏度和信号处理能力。
    • 增加滤波电路或改进解码算法,以减少噪声干扰和提高解码准确性。
    • 扩展通道数量或增加控制逻辑,以实现更复杂的控制功能。
    • 引入无线通信模块(如Wi-Fi、蓝牙等),将红外遥控与无线控制相结合,提高控制的灵活性和便捷性。

    在进行升级或改造时,需要根据具体的应用需求和技术条件进行选择和设计。

Aavid Thermalloy公司的发展小趣事

Aavid Thermalloy公司是一家专注于热管理解决方案的公司,以下是关于该公司发展的五个相关故事:

  1. 公司成立和早期发展: Aavid Thermalloy公司成立于1964年,总部位于美国新罕布什尔州。最初,公司主要从事铝材料加工和制造业务,为电子行业提供散热器和热管理解决方案。在成立初期,公司注重产品质量和技术创新,逐渐赢得了客户的信赖和认可。

  2. 技术创新和产品扩展: 随着市场需求的变化和技术的进步,Aavid Thermalloy不断进行技术创新,并逐步扩展产品线。公司不仅提供各种类型的散热器产品,还涉足导热材料、热管、热板等领域,为客户提供全方位的热管理解决方案。

  3. 国际市场拓展: Aavid Thermalloy致力于拓展国际市场,与全球各地的客户建立了广泛的合作关系。公司产品远销美国、欧洲、亚洲等地区,销售网络覆盖了全球主要的电子市场。同时,公司在一些国家设立了分支机构和办事处,加强了对当地市场的服务和支持。

  4. 合并和收购: 为了进一步扩大业务规模和增强竞争力,Aavid Thermalloy进行了一系列的合并和收购活动。公司通过并购具有相关技术和市场资源的企业,扩大了产品线和市场份额,加强了在热管理领域的领先地位。

  5. 可持续发展和未来展望: Aavid Thermalloy公司致力于可持续发展,注重环境保护和社会责任。公司通过采取节能减排、提高资源利用率等措施,努力降低对环境的影响。未来,公司将继续致力于技术创新和产品升级,为客户提供更优质的产品和服务,推动热管理行业的发展和进步。

Hei Inc Optoelectronic Division公司的发展小趣事
确保控制电路的稳定性是首要问题。需要合理设计电路布局、选择合适的元件和参数,并进行充分的测试和验证。
Euvis Inc公司的发展小趣事

Euvis Inc公司自成立以来,始终将技术创新作为发展的核心动力。公司投入大量研发资源,成功开发出一款具有革命性意义的新型半导体材料,该材料具有更高的导电性能和更低的能耗,极大地提升了电子产品的性能。随着这款材料的广泛应用,Euvis Inc公司在半导体材料市场迅速崛起,成为行业内的领军企业。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

CDIL采用无晶圆厂模式生产分立半导体器件,专注于功率半导体和高可靠性组件的研发与生产。这一模式使CDIL能够更加灵活地应对市场变化,降低生产成本,提高产品竞争力。同时,公司还采用自己的封装技术,确保产品能够满足太空应用等严苛环境的严格标准。

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

问答坊 | AI 解惑

arm 的很好的资料

arm 的很好的资料,特别适合初学者!!!…

查看全部问答>

vxworks5.5请教(关于isa总线和中断)

硬件平台:pc104,cpu是x86的,外扩板卡是isa总线的,中断连到IRQ5,示波器测中断引脚有2k的触发信号,中断服务程序进不去,这是怎么回事呢,我的设置是否错误? 程序代码如下: 在usrAppInit()里配置 intConnect( (INUM_TO_IVEC(5+0x20)) , I ...…

查看全部问答>

wm6.0用C#将摄像头视频通过网络向外发送,是否可行?

wm6.0下,想通过C#实现对摄像头视频的捕捉,并且通过网络向外界发送(直播、监控),能不能实现? 大体思路是怎样的?…

查看全部问答>

在ADS编译器中下载程序问题

小弟我刚买了块开发板(arm9 2410), 自己写了个小程序, 在ADS下可以正确编译了, 但是不知道怎么下载到板子里面调试. 好像是用超级终端下载, 但是我在超级终端里面找不到下载的按钮什么的, 郁闷中, 请教各位了. 谢谢各位大侠了!!…

查看全部问答>

加载出现错误,PLA 后缀是啥文件

一个例子,alarm clock,项目有若干个源文件,其中有一个后缀为pla的,用modelsim complie all通过了,可加载仿真的时候提示几个错误:Error: (vsim-3033) F:/hdl_src/mit/tutorial/verilog/CONVERTOR_CKT.v(18): Instantiation of \'CONVERTOR\' f ...…

查看全部问答>

FPGA学习经验谈

FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片逻辑到复杂的ASIC原型验证,从小家电到航天器,都可以看到FPGA应用,它的优点在这里无庸赘述。从个人实用角度看,对 ...…

查看全部问答>

ModelSim SE 6.5下载及安装步骤(转自新浪博客)

ModelSim SE 6.5下载及安装步骤 1 ModelSim SE 6.5下载 在ModelSim网站www.model.com下载ModelSim SE 6.5源文件,进入www.model.com后,进入DOWNLOADS,再进入Download Archives,在MODELSIM SE中选择版本,这里选择SE 6.5,进入请求下载 ...…

查看全部问答>

STM的堆可以更改嘛,最大可以更改为多少?

如题!(在malloc的时候出现了问题) 谢谢!…

查看全部问答>

关于LM3S系列的运行区间RAM和下载区间ROM FLASH设置

LM3S系列的运行区间RAM和下载区间ROM FLASH设置,请问在KEIL中怎么设置,比如说我要下载到哪个区域去,9B96的RAM和ROM FLASH的基址分别是多少?求助了…

查看全部问答>

【TI 无线主题征集】xbee模块

本帖最后由 fjfhjmh 于 2014-12-3 16:11 编辑      xbee模块是美国DIGI的zigbee模块,XBEE只是型号,是一种远距离低功耗的数传模块,频段有2.4G,900M,868M三种同时可兼容802.15.4协议。可组mesh网络,每个模块都可以做为路 ...…

查看全部问答>