利用捕获比较功能实现MSP430与微机串行通信的研究 1 引言: 1 捕获比较功能的介绍: 捕获比较模块用于捕获应用事件的发生时间,或产生定时间隔。如果相应的中断允许,那么完成一个时间捕获或一次定时间隔,捕获/比较模块都将产生中断。每一个捕获比较模块都可以对应一组硬件引脚。图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 发送过程 2.3 波特率的确定以及中断的安排 公式1 其中Tclk是指与该捕获比较模块相对应的定时器的基准频率,如使用ACLK作为时基则Tclk=32768;使用MCLK作为时基则Tclk=1M。式中的Baud就是期待的波特率值。MSP430每个捕获比较模块中的捕获和比较对应同一个中断地址,因此两者需要共享一段中断服务程序。这样就要求在中断服务程序中能区分触发中断的类别。主要是通过CCTL控制寄存器中的CAP位来区分[3]。另一方面接收和发送的也都需要在这段服务程序中处理,应该加以区分。(详见附录中的程序代码及说明) 3 超低功耗串行通信实例 3.1电路结构及其特点 图3 MSP430F413超低功耗串行通信电路原理图 3.2超低功耗的解决方案 当微机发送信号时,即Rin输入有效,接收器会自动打开,并产生有效的INVALID信号。该信号将触发P1.2引脚的中断。在中断处理程序中将MSP430F413的功耗模式设定为模式3(功耗电流0.7μA),这时利用频率为32768的ACLK时钟工作就可以完成低速的串行通信任务。当接收、处理完微机的数据后需要将结果返回给微机。这时可以打开MAX3221的驱动器,关闭接收器完成此工作。当发送完毕后可以将MSP430和MAX3221再设定为准备接收信息的最低功耗状态。 利用上述方法可以在满足串行通信的同时达到非常低的功耗。 表1:MAX3221收发器工作控制及其工作状态对照表
注:驱动器将MOS电平转换为RS232电平,接收器将RS232电平转换为MOS电平 4 结束语 |
|