首页 理论教育 MSP430单片机通用串口应用

MSP430单片机通用串口应用

时间:2023-12-05 理论教育 版权反馈
【摘要】:7通用串口的应用7.1串行通信的基本知识计算机系统与外部的信息交换称为通信,通信方式主要有并行与串行两种方式。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。7.2MSP430F249的UART通信模式MSP430的通用串行结构USCI支持多种串行通信模式。图7.3USCI_A结构下的UART模式框图③发送部分:发送串行输出的数据。

MSP430单片机通用串口应用

7 通用串口的应用

7.1 串行通信的基本知识

计算机系统与外部的信息交换称为通信,通信方式主要有并行与串行两种方式。并行通信是指通信数据的各数据位在多条线上同时被传输,以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。串行通信只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

根据信息的传送方向,串行通信可以进一步分为单工、半双工全双工三种方式。信息只能单向传送称为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。

串行通信又分为异步通信和同步通信两种方式。

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干数据字符,它们均由同步字符、数据字符和校验字符(CRC)组成。其中,同步字符位于帧开头,用于确认数据字符的开始;数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1~2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。

异步通信中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。接收端检测到传输线上发送过来的低电平逻辑“0”(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。

最常见的串行通信标准有RS-232、RS-485、SPI和I2C等。其中RS-232和RS-485均是美国电子工业协会EIA(Electronic Industry Association)制定的串行物理接口标准。RS232接口是标准串行接口,其通信距离小于15 m,传输速率小于20 kb/s。RS-232标准是按负逻辑定义的,“1”电平在-5 V~-15 V之间,“0”电平在+5 V~+15 V之间。MAX232接口芯片是Maxim公司生产的一种RS232芯片,每个器件中都具有两个接收器,其典型连接如图7.1所示。

图7.1 MAX232典型连接图

虽然RS-232应用很广,但由于数据传输速率慢,通信距离短,特别是在100 m以上的远程通信中通信效果难以让人满意。RS-485采用差分信号负逻辑,+0.2 V~+6 V表示“0”,-6 V~-0.2 V表示“1”。RS-485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,已经很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。MAX485接口芯片是Maxim公司生产的一种RS-485芯片,每个器件中都具有一个驱动器和一个接收器,其典型连接如图7.2所示。

图7.2 MAX485典型连接图

随着科学技术的飞速发展,采用标准串行通信技术的外围芯片越来越多,而且传输速度也在不断提高,单片机嵌入式系统接口技术的一个重要变化趋势是由并行总线向串行总线发展。尽管采用串行接口具有电路系统简单、占用I/O资源少、使用方便灵活等特点,但是其软件设计却相对复杂,对程序设计人员的能力和水平也提出了更高的要求。

7.2 MSP430F249的UART通信模式

MSP430的通用串行结构USCI(Universal Serial Communication Interface)支持多种串行通信模式。每种不同的USCI模块用不同的字母命名,比如:USCI_A与USCI_B是不同的。MSP430F249有4个USCI模块,其中USCI_Ax结构支持UART模式、Ir DA通信(红外连接技术)、LIN通信(低成本的串行通信网络)的自动波特率检测和SPI模式;USCI_Bx结构支持I2C模式和SPI模式。

MSP430F249的串行通信模式可以通过软件设置来完成。当USCI_Ax控制寄存器UCAxCTL0的UCSYNC位为0时,工作在UART模式。

UCAxCTL0和UCAxCTL1是USCI_Ax控制寄存器,参见USCI相关寄存器的功能说明和msp430f249.h头文件中对各功能控制位的值进行的宏定义,在学习和编写程序时注意前后对照,以便于对程序的理解和提高程序的可读性。

(1)UCAxCTL0控制寄存器0如表7-1所示。

表7-1 UCAxCTL0控制寄存器

UCAxCTLO控制寄存器在程序中的功能如下。

(2)UCAxCTL1控制寄存器1如表7-2所示。

表7-2 UCAxCTL1控制寄存器

UCAxCTL1控制寄存器在程序中的功能如下:

(3)配置后,UART工作模式的内部硬件框图如图7.3所示,该模块包含以下3个部分。

①波特率部分:控制串行通信数据接收和发送的速度。

②接收部分:接收串行输入的数据。

图7.3 USCI_A结构下的UART模式框图

③发送部分:发送串行输出的数据。

(4)USCI_Ax模块通过UCAx RXD和UCAx TXD引脚与外部通信系统连接。UART模式的特性包括:

①采用奇偶校验或无校验的7或8位传输数据;

②独立的发射和接收移位寄存器

③分开的发射和接收缓冲寄存器;

④最低位或最高位开始的数据发射和接收模式;

⑤对多处理器系统,内建有线路空闲/地址通信协议

⑥接收数据时具有从LPMx模式自动唤醒的低功耗唤醒功能;

⑦可编程实现分频因子为整数和小数的波特率;

⑧具有错误检测和拟制的状态标志;

⑨具有地址检测的状态标志;

⑩独立的发射和接收中断。

7.2.1 异步UART模式的原理与操作

1)UART模式的初始化和复位

UART工作模式的初始化和复位主要由UCAxCTL0和UCAxCTL1两个控制寄存器控制。其初始化或重新配置USCI模块的步骤如下:

(1)置位UCSWRST;

(2)UCSWRST=1时初始化所有的USCI寄存器(包括UCAxCTL1);

(3)配置端口;

(4)复位UCSWRST;

(5)通过设置UCRXIE或UCTXIE寄存器启动中断。

USCI_A0工作于UART模式下的初始化程序如下:

2)字符格式

UART的字符格式包括1位起始位、7或8位数据位、1位可有可无的奇偶校验位、1位地址位(地址位模式)和1或2位停止位。UART的字符格式主要由USCI_Ax控制寄存器UCAxCTL0控制,如图7.4所示。传输时先传输数据的最高位还是最低位,由UCMSB位控制,UART通信时默认的是LSB作为第一位。USCI_Ax控制寄存器0的UC7BIT位控制7位或8位数据位。

图7.4 UART模式的数据格式

3)UART波特率的设置

在异步串行通信中,波特率是很重要的指标,其定义为每秒钟传送进制数码的位数。波特率反映了异步串行通信的速度。波特率部分由时钟输入选择和分频、波特率发生器、调整器和预置/除法器等组成。串行通信时,数据接收和发送的速率就由这些构件控制。

USCI波特率生成器可以从非标准频率源中产生标准的波特率。通过UCOS16位选择系统提供的两种操作模式。波特率可以通过使用BRCLK产生,根据UCSSELx设置,BRCLK可以是外部时钟UCAxCLK或内部时钟ACLK、SMCLK的时钟源。

(1)低频波特率。

当UCOS16=0时,选择低频模式,该模式允许从低频时钟源产生波特率(例如从32768 Hz晶振产生9600波特)。通过使用较低的输入频率,可以降低模块的功耗。

在低频模式下,波特率发生器使用预分频器调制器产生位时钟时序。预分频器由USCI_Ax波特率控制寄存器UCAxBR0和UCAxBR1来实现。

调制器由USCI_Ax的波特率调制控制寄存器UCAx MCTL来实现。参见USCI相关寄存器和msp430f249.h头文件中对各功能控制位的值进行的宏定义,以便于程序的编写和理解,具体如下。其中的3位UCBRSx对应表7-3的8种波特率调整模式,4位UCBRFx对应表7-4的16种波特率调整模式,UCOS16位控制低频或过采样模式。

表7-3 波特率调制器的调整模式

表7-4 BITCLK16调制器的调整模式

续表

UCAx MCTL波特率调制控制寄存器如表7-5所示,其在程序中的功能如下。

表7-5 UCAx MCTL波特率调制控制寄存器

UCAx MCTL波特率调制控制寄存器在程序中的功能如下。

UCAx MCTL是一个8位寄存器,基于UCBRSx设置进行波特率的调整(见表7-3),其中每一位分别对应8次分频情况。如果对应位为0,则分频器按照设定的分频系数分频计数;如果对应位为1,则分频器按照设定的分频系数加1分频计数。

(2)过采样波特率。

当UCOS16=1时选择过采样模式,该模式支持在较高输入时钟频率下对UART传输码流采样。其多数表决方法的结果总是在一个位时钟周期的1/16处产生。当使能Ir DA编码器和解码器时,这种模式也支持带有3/16位时间的Ir DA脉冲。

该模式使用USCI_Ax波特率控制寄存器UCAxBRx和波特率调制控制寄存器UCAx MCTL先产生BITCLK16时钟,该时钟比BITCLK快16倍。这种组合方式支持波特率产生BITCLK16和BITCLK的小数分频。过采样模式下,最大的USCI波特率是UART源时钟频率BRCLK的1/16,即当UCBRx设置为0或1时,BRCLK等于BITCLK16,在这种情况下BITCLK16没有调制,因此将忽略UCBRFx和UCBRSx。

BITCLK16的调制器是基于UCBRFx设置的(见表7-4)。表中的1代表相应的BITCLK16周期,它是一个相对于BRCLK周期加1的周期。在16位调制器调整位都使用后,再重复这一顺序。

(3)设置波特率。

对于给定的BRCLK时钟源,所使用的波特率将决定分频系数N,N=BRCLK/波特率。分频系数N通常不是一个整数值,因此需对波特率控制寄存器UCAxBRx和波特率调制控制寄存器UCAx MCTL进行设置,以尽可能接近分频系数。如果N ≥16,还可以通过置位UCOS16选择过采样波特率产生模式。

在低频模式下,波特率控制寄存器UCAxBRx的分频值为:

UCBRx=INT(N)

小数部分由以下公式得到,波特率调制控制寄存器UCAx MCTL的调制值为:

UCBRSx=round((N-INT(N))×8) (round表示舍入)

UCBRSx计数值是增1或减1,必须经过详细的误差计算,使通信过程中产生较小的波特率误差。

实例7.1 UART收发一字节(低频模式)

任务要求:在USCI_A0模式下利用UART0接口收发信息,要求利用低频模式产生波特率为9600,UART0将收到的信息进行及时的转发。

分析说明:UART的时钟源有三种,分别是外部时钟(UCAxCLK)、ACLK和SMCLK;其波特率的产生有两种,一种是低频模式,一种是过采样模式。

BRCLK=32768Hz,要产生BITCLK=9600 Hz,分频器的分频系数为32768/9600=3.413,所以设置分频器的计数值为3。接下来用调制寄存器的值来设置小数部分0.413。显然这是在低频模式下,所以UCBRx=INT(N)=3;UCBRSx=round((N-INT(N))×8)=round((3.413-3)*8)=round(3.304)=3。按照表7-3的调制原则,8次分频计数过程中应该有3次加1计数,3次不加1计数。调制寄存器的数据由3个1和5个0组成。调制器的数据每8次周而复始循环使用,最低值最先调整。比如设置调制寄存器的值为2AH(00101010),当然也可以设置其他值。但必须有3个1,而且3个1要相对分散,即分频器按顺序3、4、3、4、3、4、3、3来分频。在8位调制器调制位都使用后,再重复这一顺序。

1)硬件电路设计

将P3.4和P3.5管脚选定为UART的发送TX和接收RX管脚,并接虚拟终端,用以观测发送和接收的数据。低频晶振LFXT1采用32768 Hz的晶振,获得稳定的ACLK时钟源。硬件电路如图7.5所示。

2)程序设计

时钟源选用ACLK(32768 Hz),UART传输波特率设定为9600,采用接收中断对收到的信息进行转发。P1.0引脚设置为输出方式,进入LPM3低功耗模式。

图7.5 实例7.1的硬件电路图

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_1.hex,设置仿真参数MCLK=(Default),ACLK=32768 Hz。如果未设定,则仿真无结果或结果不对。运行后可以在发射数据虚拟终端用键盘输入字符,可在接收数据虚拟终端收到一样的信息,如图7.6所示。

图7.6 实例7.1的仿真结果图

在过采样模式下,波特率控制寄存器UCAxBRx的分频值为:

UCBRx=INT(N/16)

小数部分由以下公式得到,波特率调制控制寄存器UCAx MCTL的调制值为:

UCBRFx=round(((N/16)–INT(N/16))×16)

当需要更高精度时,UCBRSx调制器可以实现从0~7的值。对于给定位,为了找到最低的最大误码率设置,对于带有初始UCBRFx设置和增1或减1的UCBRFx设置的UCBRSx,都必须从0~7的所有设置对其进行详细的误差计算。

实例7.2 UART收发一字节(过采样模式)

任务要求:在USCI_A0模式下利用UART0接口收发信息,要求利用过采样模式产生波特率为9600,UART0将收到的信息进行及时的转发。

1)硬件电路设计

与实例7.1相同,时钟源选用SMCLK(1 MHz),即BRCLK=1 MHz,要产生BITCLK=9600 Hz,分频器的分频系数为1000000/9600=104.167,所以预分频器的计数值UCBRx=INT(N/16)=6,UCBRFx=round(((N/16)–INT(N/16))×16)==round((6.51-6)×16)=8。

2)程序设计

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_2.hex,设置仿真参数SMCLK=1MHz。如果未设定,则仿真无结果或结果不对。运行后可以在发射数据虚拟终端用键盘输入字符,可在接收数据虚拟终端收到一样的信息。

7.2.2 红外线编码/解码模式

当红外线发送控制寄存器UCAxIRTCTL的UCIREN置1时,USCI_Ax工作在Ir DA编码/解码模式。其红外线通信的编码/解码格式如下所示。

1)红外线通信编码格式

红外线发送的数据码流与UART数据码流的不同之处在于只对数据0发送一个脉冲,如图7.7所示。脉冲持续时间由控制寄存器UCAxIRTCT的UCIRTXPLx指定UCIRTXCLK的半周期个数决定。

图7.7 Ir DA数据编码

当红外线发送控制寄存器UCAxIRTCTL的UCIRTXCLK=1且标准时钟是BITCLK16时,Ir DA的脉冲时间为数据时钟的3/16个周期时间,脉冲长度被设定为6个半周期时钟,UCIRTXPLx=6-1=5。

当UCIRTXCLK=0时,基于时钟BRCLK的发送脉冲长度t PULSE由如下公式计算:

UCIRTXPLx=t PULSE×2×f BRCLK-1

式中,f BRCLK是UART时钟源的频率。此时,发送的红外脉冲长度是基于时钟BRCLK的,且波特率控制寄存器UCAxBRx的UCBRx值必须大于等于5。

2)红外线通信解码格式

当UCIRRXPL=0时,解码器检测高脉冲;否则,检测低脉冲。另外,可以通过设置UCIRRXFE设计一个可编程的数字滤波器。当UCIRRXFE=1时,只有时长大于滤波器设定时长的脉冲保留下来,其余的被滤除掉。滤波器时长UCIRRXFL可由如下公式求得:

UCIRRXFLx=(t PULSE-t WAKE)×2×f BRCLK-4

其中:t PULSE是收到的最小脉冲宽度时间;t WAKE是MSP430F249低功耗模式下的唤醒时间。

UCAxIRTCTL和UCAxIRRCTL是USCI_Ax Ir DA的发送控制和接收控制寄存器,参见USCI相关寄存器和msp430f249.h头文件中对各功能控制位的值进行的宏定义,以便于程序的编写和理解,具体如下。

UCAxIRTCTL红外线发送控制寄存器如表7-6所示。

表7-6 发送控制寄存器

UCAxIRTCTL红外线发送控制寄存器在程序中的功能如下:

UCAxIRRCTL红外线接收控制寄存器如表7-7所示。

表7-7 接收控制寄存器

UCAxIRRCTL红外线接收控制寄存器在程序中的功能如下:

红外线遥控通信红外线编码是数据传输和家用电器遥控常用的一种通信方法,其实质是一种脉宽调制的串行通信。家电遥控中常用的红外线编码电路有μPD6121G型、HT622型和LC7461型等。

下面就以这些电路的编码格式来仿真怎样使用单片机的捕获中断功能来实现其解码。

实例7.3 红外线遥控器编码/解码通信

任务要求:完成红外线遥控器编码/解码通信,U1实现按键的键值编码和发射,U2实现接收和键值的解码;只要将U1的TX管脚接红外线发射管,U2的RX管脚接红外线接收管之后,就可以实现红外线遥控的功能了。

1)硬件电路设计

硬件电路分为两部分:编码发送部分和解码显示部分。编码发送由U1和键盘组成,解码显示由U2和LCD组成。由于Proteus中没有红外线发射和接收元器件,仿真的硬件电路连接图中是直接将发射端和接收端相连,如图7.8所示。

2)程序设计

(1)编码部分程序如下:

图7.8 IrDA编码/解码硬件电路

(2)解码部分的程序如下:

3)仿真结果与分析

双击MSP430F249单片机U1,装载可执行文件Debug\Exe\ex7_3.hex,设置仿真参数SMCLK=8 MHz。如果未设定,则仿真无结果或结果不对。运行后,在4× 4键盘上每按一次按键,U1都通过P3.4端口输出IrDA的编码;在U2端对P3.5端口接收的编码进行解码,并将键值显示在LCD上。实例7.3的仿真结果如图7.9所示。

7.2.3 USCI中断

USCI有一个发送中断向量和一个接收中断向量,USCI_Ax和USCI_Bx不共用中断向量。

1)USCI发送中断操作

发射机置位UCTXIFG中断标志,这表明UCAx TXBUF已经准备好接收另一个字符(即UCAx TXBUF为空),如果UCTXIE和GIE也置位的话,将产生中断请求。如果将字符写入,UCAx TXBUF、UCTXIFG将自动复位而无需软件复位。一个PUC之后或UCSWRST=1时,UCTXIFG置位,UCTXIE复位。

图7.9 Ir DA编码/解码实例仿真结果

2)USCI接收中断操作

每接收到1个字符并将其载入UCAx RXBUF时,UCRXIFG中断标志置位,如果UCTXIE和GIE也置位的话,将产生中断请求。UCRXIFG和UCRXIE可以通过系统复位PUC信号或UCSWRST=1复位。当读取UCAx RXBUF时,UCRXIFG自动复位。

此外,中断控制特点还包括:

(1)当UCAx RXEIE=0时,错误的字符UCRXIFG不置位;

(2)当UCDORM=1时,在多处理器模式下,无地址字符UCRXIFG不置位,在单一UART模式时,没有字符UCRXIFG被置位;

(3)当UCBRKIE=1时,在断点条件下,UCBRK位和UCRXIFG标志位均被置位。

3)USCI中断使用

USCI_Ax和USCI_Bx共用同一个中断矢量。接收中断标志UCAx RXIFG和UCBx RXIFG映射为同一个中断矢量;同样,发送中断标志UCAx TXIFG和UCBx-TXIFG映射为同一个中断矢量。

实例7.4 UART数据通信,中断方式

任务要求:使用UART0在9600波特率下,以每接收到的8个数据为转发一个数据单位,回发出去;并将每次接收到的数据的ASCII二进制码用接在P1端口上的数码管显示出来。

1)硬件电路设计

仿真电路如图7.10所示,实际电路还需添加相应的数码管驱动电路。

图7.10 实例7.4硬件电路连接图

2)程序设计

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_4.hex,设置仿真参数ACLK=1 MHz。如果未设定,则仿真无结果或结果不对。运行后可以在发射数据虚拟终端用键盘输入字符,每输入一个字符,在P1端口的数码管显示该字符的16进制ASCII码;输入8个字符后才在接收数据虚拟终端显示8个字符的信息,实例7.4的仿真结果如图7.11所示。

图7.11 实例7.4仿真结果

7.2.4 USCI_A型模式下UART的寄存器

(1)控制和状态寄存器。

USCI_A0型模式下UART的控制和状态寄存器如表7-8所示。

表7-8 USCI-A0型模式下控制和状态寄存器

USCI_A1型模式下UART的控制和状态寄存器如表7-9所示。

表7-9 USCI_A1型模式下控制和状态寄存器

(2)控制寄存器。

USCI_Ax控制寄存器0(UCAxCTL0)如表7-10所示。

表7-10 USCI_Ax控制寄存器0

UCPEN 校验使能位,奇偶校验与发送和接受寄存器有关。在具有地址的多处理器模式下,其奇偶校验位值的计算还包含地址位。置0时校验禁止;置1时校验允许。

UCPAR 奇偶校验位,当UCPEN位禁止时,该位无效。置0时为奇校验;置1时为偶校验。

UCMSB 最高优先选择位,用于控制发送和接收移位寄存器的方向。置0时为最低位优先;置1时为最高位优先。

UC7BIT 字符长度。置0时为8位数据;置1时为7位数据。

UCSPB 停止位选择。置0时为1位停止位;置1时为2位停止位。

UCMODEx USCI模式选择位,在UCSYNC=0时,控制异步通信模式。置00b时为UART模式;置01h时为空闲线多处理器模式;置10b时为地址线多处理器模式;置11b时为波特率自动检测UART模式。

UCSYNC 同步使能。置0时为异步模式;置1时为同步模式。

USCI_Ax控制寄存器1(UCAxCTL1)如表7-11所示。

表7-11 USCI_Ax控制寄存器1

UCSELx USCI时钟选择,决定BRCLK的时钟源。置00b时为外部时钟;置01b时为辅助时钟(ACLK);置10b和11b时为子系统时钟(SMCLK)。

UCXEIE 接受错误字符中断使能。置0b时为禁止中断;置1b时为使能中断,且使UCXIFG置位。

UCBRKIE 接受中止字符中断使能。置0b时为禁止中断;置1b时为使能中断,且使UCXIFG置位。

UCDORM 休眠控制位。置0b时为禁止休眠;置1b时为休眠,在空闲线多处理器模式或地址线多处理器模式下,使UCXIFG置位,在波特率自动检测UART模式下只有设置了中止和同步有效时,才使UCXIFG置位。

UCTXADDR 发送地址位。在多处理器模式下,判断发送的是地址帧还是数据帧。置0b时下一帧为发送数据;置1b时下一帧为发送地址。

UCTXBRK 发送终止位。将发送的终止命令写入发送缓存器中。在波特率自动检测UART模式下,写55h到UCAx TXBUF缓存器中,其余情况下写00h到UCAx TXBUF缓存器中。置0b时为下一帧不是中止;置1b时为下一帧是中止或中止/同步信息。

UCSWRST 软件复位使能。置0b时为禁止,正常操作;置1b时为使能,保持复位状态。

(3)波特率控制寄存器。

USCI_Ax波特率控制寄存器0(UCAxBR0)如表7-12所示。

表7-12 USCI-Ax波特率控制寄存器0

USCI_Ax波特率控制寄存器1(UCAxBR1)如表7-13所示。

表7-13 USCI_Ax波特率控制寄存器1

这两个寄存器的值,都只有在UCSWRST=1b时,才可以更改。这两个寄存器用于存放波特率的时钟预置定标器的值。其中UCAx BR0为低字节,UCAxBR1为高字节。

(4)调制控制寄存器。

USCI_Ax调制控制寄存器(UCAx MCTL)如表7-14所示。

表7-14 USCI_Ax调制控制寄存器

UCBRFx 第一调制段选择,这些位在UCOS16=1时决定了BITCLK16的调制模式,如表7-4所示;当UCOS16=0时,忽略不计。

UCBRSx 第二调制段选择,这些位决定了BITCLK的调制模式,如表7-2所示。

这两个字段值的设定,参见“波特率设定”一节的说明。

UCOS16 过采样模式使能。置0b时为低频波特率模式;置1b时为过采样波特率模式。

(5)状态寄存器。

USCI_Ax状态寄存器(UCAxSTAT)如表7-15所示。

表7-15 USCI_Ax状态寄存器

UCLISTEN 侦听使能。置0b时为禁止;置1b时为使能,发送的数据反馈到接收器。

UCFE 帧错误标志位。该位在4线串行通信的主模式下表示总线冲突,在3线制主模式或其他从模式下无效。置0b时为无冲突;置1b时为总线冲突发生。

UCOE 溢出错误标志。当一个字符被传输到UCx RXBUF之前的一个字符被读取时该位被置位,UCx RXBUF被读取后UCOE自动清除。注意不能用软件清零,否则不正常工作。置0b时为无溢出;置1b时为溢出发生。

UCPE 校验错误标志位。当UCAxCTL0控制寄存器的校验使能位UCPEN=0时禁止校验时,UCPE读为0。置0b时为无错误;置1b时为接收数据的校验位错误。

UCBRK 中止检验标志位。置0b时为无中止发生;置1b时为中止发生。

UCRXERR 接收错误标志。置0b时为无错误;置1b时为有错误。

UCADDR 在地址位多处理器模式下的地址接收位。置0b时为接收的是数据;置1b时为接收的是地址。

UCIDLE 在空闲线多处理器模式下的空闲线检验位。置0b时为无空闲线被检测到;置1b时为检测到空闲线。

UCBUSY 忙闲标志位。置0b时为闲;置1b时为忙,表示正在发送或接收数据。

(6)接收/发送数据寄存器。

USCI_Ax接收数据寄存器(UCAx RXBUF)如表7-16所示。

表7-16 USCI_Ax接收数据寄存器

接收缓存存放从接收移位寄存器最后接收的字符。如果传输7位数据,接收缓存的内容右对齐,最高位为0。

USCI_Ax发送数据寄存器(UCAx TXBUF)如表7-17所示。

表7-17 USCI_Ax发送数据寄存器

发送缓存内容可以传送至发送移位寄存器,然后由UCRTXBUFx传输。对发送缓存进行写操作,可以复位UTXIFGx。如果传输7位数据,发送缓存内容最高位为0。

(7)发送/接收控制寄存器。

USCI_Ax Ir DA发送控制寄存器(UCAxIRTCTL)如表7-18所示。

表7-18 USCI_Ax IrDA发送控制寄存器

UCIRTXPLx 发送脉冲长度。脉冲长度t PULSE=(UCIRTPLx+1)/(2×f IRTXCLK)。

UCIRTXCLK Ir DA发送脉冲时钟选择。置0b时时钟为BRCLK;置1b时当UCOS16=1时,时钟为BITCLK16,其余情况,时钟为BRCLK。

UCIREN Ir DA编解码使能。置0b时为禁止;置1b时为使能。

USCI_Ax Ir DA接收控制寄存器(UCAxIRRCTL)如表7-19所示。

表7-19 USCI_Ax Ir DA接收控制寄存器

UCIRRXFLx 发送滤波器长度。可接收的最短脉冲长度为:t MIN=(UCIRRXFLx+4)/(2×f IRTXCLK)。

UCIRRXPL 红外线接收输入UCAx RXD极性。置0b时为将接收到的光脉冲转化为一个高脉冲;置1b时为将接收到的光脉冲转化为一个低脉冲。

UCIRRXFE Ir DA接收滤波器使能。置0b时为禁止;置1b时为使能。

(8)自动波特率控制寄存器。

USCI_Ax自动波特率控制寄存器(UCAx ABCTL)如表7-20所示。

表7-20 USCI_Ax自动波特率控制寄存器

UCDELIMx 中止/同步分隔时长。置00b时为1位时钟长度;置01b时为2位时钟长度;置10b时为3位时钟长度;置11b时为4位时钟长度。

UCSTOE 同步域超时错误。置0b时为无错误;置1b时为超时。

UCBTOE 中止错误。置0b时为无错误;置1b时为中断域时长超过了22位。

UCABDEN 自动波特率检测使能。置0b时为禁止;置1b时为使能。

(9)中断使能/标志寄存器。

中断使能寄存器2(IE2)如表7-21所示。

表7-21 中断使能寄存器2

UCA0TXIE 发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA0RXIE 接收中断使能。置0b时为中断禁止;置1b时为中断使能。

中断标志寄存器2(IFG2)如表7-22所示。

表7-22 中断标志寄存器2

UC A0TXIFG 发送中断标志。置0b时为无中断;置1b时为中断发生。

UC A0RXIFG 接收中断标志。置0b时为无中断;置1b时为中断发生。

USCI_A1中断使能寄存器(UC1IE)如表7-23所示。

表7-23 USCI_A1中断使能寄存器

UCA1TXIE 发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA1RXIE 接收中断使能。置0b时为中断禁止;置1b时为中断使能。

USCI_A1中断标志寄存器(UC1IFG)如表7-24所示。

表7-24 USCI_A1中断标志寄存器

UCA1TXIFG 发送中断标志位。当UCA1TXBUF为空时,UCA1TXIFG=1。置0b时为中断禁止;置1b时为中断使能。

UCA1RXIFG 接收中断标志位。当UCA1RXBUF收到一个完整字符时,UCA1RXIFG=1。置0b时为中断禁止;置1b时为中断使能。

7.3 MSP430F249的SPI通信模式

串行外设接口SPI(Serial Peripheral Interface)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设备包括Flash RAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。其主从设备间的连接方式如图7.12所示。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。

图7.12 SPI通信时的连接方式

7.3.1 MSP430F249的SPI通信模式概述

在同步通信模式下,MSP430通过UCxSIMO、UCxSOMI、UCxCLK、UCxSTE中的3或4根线与外部设备进行连接。当USCI控制寄存器UCAxCTL0的UCSYNC =1时,MSP430工作于SPI模式;UCAxCTL0的MCMODEx字段的值,决定SPI工作于3线制还是4线制。其内部硬件如图7.13所示。

SPI模式的特性包括:

(1)7或8位传输数据长度;

(2)最低位或最高位开始的数据发射和接收模式;

(3)3线或4线的操作模式;

(4)具有主、从两种操作模式;

(5)独立的发射和接收移位寄存器;

(6)分开的发射和接收缓冲寄存器;

(7)连续的发送和接收操作;

(8)可选时钟极性和相位控制;

(9)主机模式下,时钟频率可变;

(10)独立的发射和接收中断;

(11)从机模式可在LMP4低功耗模式下工作。

图7.13 SPI模式的硬件框图

7.3.2 SPI模式下的操作

在SPI模式下,主设备为串行数据发送和接收的多个从设备提供一个共享的时钟,但在同一时刻只允许一个设备作为主机。并且主设备通过UCxSTE引脚来控制外部从设备的接收和发送数据。

SPI通过3或4个信号的完成数据的通信如下。

(1)UCx MOSI 主设备数据输出,从设备数据输入。

(2)UCx MISO 主设备数据输入,从设备数据输出。

(3)UCxCLK 时钟信号,由主设备产生。

(4)UCxSTE 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip Select)。该信号只在4-Pin的模式下使用,允许在同一条总线上有多个主设备。其具体操作如表7-25所示。

表7-25 UCxSTE的操作模式

如果主设备处于无效状态下,有数据写入发送寄存器UCx TXBUF中,一旦主设备有效,则该数据被发送出去;而当主设备由有效转入无效时,正在发送的数据将被忽略;要想发送该数据,则需在主设备由无效转入有效时,重新将数据写入发送寄存器UCx TXBUF中。

SPI是全双工的,即主设备在发送的同时也在接收数据,传送的速率由主设备编程决定。主设备提供时钟UCxCLK与数据,从设备利用这一时钟接收数据,或在这一时钟下送出数据。主设备可在任何时候初始化发送并控制时钟,时钟的极性和相位也是可以选择的,具体的约定由设计人员根据总线上各设备接口的功能决定。

1.主机模式

当UCxCTL0的UCMST=1时,该设备工作于主机模式。图7.14所示的是一个主设备与另一个SPI从设备的连接。

图7.14 SPI主设备与外部从设备的连接图

其工作原理为SPI主设备待发送的数据先移入发送数据寄存器UCx TXBUF中,当发送移位寄存器为空时,再将UCx TXBUF的数据移入发送移位寄存器中,最后数据通过UCxSIMO信号线按照UCxCTL0的UCMSB字段设定的低位优先或是高位优先的顺序发送出去。SPI主设备接收数据时,在时钟UCxCLK的上升沿时刻,将UCxSOMI信号线的数据依次移入接收移位寄存器中。接收完一个字符时,将接收移位寄存器中的数据存入接收数据寄存器中,同时获得一个中断标志UCx RXIFG被置位,表明一次数据的发送与接收完成。而发送中断标志UCx TXIFG被置位,仅说明UCx TXBUF的数据已移入发送移位寄存器,UCx TXBUF准备接收新的数据,而不能说明一次数据的发送与接收已完成。

实例7.5 SPI应用

任务要求:使用MSP430F249和74164完成对共阴极7段数码管的译码显示。

分析:74164是时钟上升沿触发的8位串口输入并口输出移位寄存器,其真值表如表7-26所示,只需用两根线与MCU相连,就可实现对数码管的译码,从而大大节省了MCU和外部器件间的连接管脚。

表7-26 真值表

1)硬件电路设计

硬件电路设计如图7.15所示。

(www.xing528.com)

图7.15 实例7.5硬件电路设计图

2)程序设计

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_5.hex,设置仿真参数SMCLK=1 MHz。如果未设定,则仿真无结果或结果不对。仿真结果为数码管上循环显示0~F。示波器上的波形第1道为SPI的时钟信号,第2道为发送数据信号。仿真结果如图7.16所示。

2.从机模式

当UCxCTL0的UCMST=0时,该设备工作于从机模式。图7.17所示的是一个主设备与另一个SPI从设备的连接。

在从机模式下,外部主设备提供的UCxCLK信号作为从设备的SPI时钟,该时钟决定从设备的SPI数据传输率。从UCx TXBUF寄存器写入发送移位寄存器的数据在UCxCLK时钟到来之前,依次从UCxSOMI信号线上发送出去。UCxSIMO信号线上接收的数据写入接收移位寄存器中,当达到数据格式的位数(7位或8位)时,在UCxCLK时钟的上升沿时刻将其写入UCx RXBUF寄存器中,同时读取中断标志为UCx RXIFG被置位,表明接收到一组数据。

图7.16 实例7.5硬件仿真结果

图7.17 从机模式工作状态连接图

7.3.3 串行时钟的控制

主设备的SPI总线的UCxCLK信号即为串行时钟。当UCMST=1时工作于主机模式,该时钟信号通过时钟生成器送达UCxCLK对应的管脚。时钟生成器的输入时钟由控制寄存器UCAxCTL0的UCSSELx来选择。当UCMST=0时工作于从机模式,USCI的时钟由主设备的UCxCLK信号提供,而与本设备的内部时钟无关。SPI模式下的时钟生成器如图7.18所示。

图7.18 SPI模式下的时钟生成器

位码率控制寄存器UCxxBR1和UCxxBR0的16位UBCRx的值由USCI时钟源BRCLK分频实现。在主机模式下,最大的数据流时钟即为BRCLK。在SPI模式下不使用调制码段,如果是在USCI_A下使用SPI模式,则UCAx MCTL须清零。

UCAxCLK/UCBxCLK的SPI传输速率f BitClock=f BRCLK/UCBRx。

UCxCLK时钟的极性和相位由UCAxCTL0控制寄存器的UCCKPL和UCCKPH的组合值来控制。SPI主机模式下的时序如图7.19所示。

图7.19 SPI主机模式下的时序图

7.3.4 SPI的中断

SPI模式下,只有两个中断矢量,即发送中断矢量和接收中断矢量。

1)发送中断操作

当UCx TXBUF发送寄存器准备接收新的数据,发送中断标志位UCx TXIFG将会被置位,发生一次中断请求。当UCx TXIE和GIE均被置位时,也表示一次中断发生。当有新数据写入到UCx TXBUF发送寄存器时,发送中断标志位UCx TXIFG被自动清零。经过一个PUC或UCSWRST=1时,UCx TXIFG被置位,UCx TXIE被复位。

2)接收中断操作

接收完一个新的数据且移入UCx RXBUF接收寄存器时,接收中断标志位UCx RXIFG将会被置位,发生一次中断请求。当UCx RXIE和GIE均被置位时,也表示一次中断发生。当从UCx RXBUF寄存器读出数据时,UCx RXIFG被自动清零。经过一个PUC或UCSWRST=1时,UCx RXIFG被置位,UCx RXIE被复位。

3)中断的使用

USCI_Ax和USCI_Bx共用相同的中断矢量。接收中断矢量UCAx RXIFG和UCBx RXIFG被映射为同一个中断矢量,发送中断矢量UCAx TXIFG和UCBx TXIFG被映射为同一个中断矢量。因此,在同一个MSP430F249系统上同时使用USCI_Ax和USCI_Bx时要注意其中断的应用。

实例7.6 SPI模式AD电压采集

任务要求:使用8位串行ADC芯片TLC549实现对外部电压的采集,将其值在LCD上显示。

分析:TLC549是TI公司生产的一种低价位、高性能的8位A/D转换器,它以8位开关电容逐次逼近的方法实现A/D转换,其转换速度小于17μs,最大转换速率为40000 Hz,4 MHz典型内部系统时钟,电源为3~6 V。它能方便地采用3线串行接口方式与各种微处理器连接,构成各种测控应用系统。

该系统只需一个主机,且TLC549与控制MCU之间仅需使能端CS、时钟端CLK和数据输出端DATA 3根线相连。因此,可以选用MSP430F249的SPI通信模式,选用3线制对其进行控制即可。

图7.20 实例7.6硬件电路设计图

1)硬件电路设计

其硬件电路连接如图7.20所示。TLC549的参考电压为2.048 V,在实际应用中可由稳压芯片产生。TLC549的SDO数据输出端接MSP430F249的P3.2脚(UCB0SOMI),CS接P3.0脚(UCB0STE),SCLK接P3.3脚(UCB0CLK)。将P2端口作为LCD的数据接口,P6.1和P6.2作为LCD的控制接口。

2)程序设计

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_6.hex,设置仿真参数SMCLK=1 MHz。如果未设定,则仿真无结果或结果不对。仿真结果是将电位器上的电压值采集后显示在LCD液晶屏上。示波器上的波形第1道显示的TLC549的CS信号,由于其上升时间太短未显示出其复位的波形;第2道为SPI的时钟信号,第3道为接收数据信号。图7.21所示为TLC549采集的电压为0.41 V,其在LCD上显示的转换结果为409 m V。

7.3.5 SPI模式下的寄存器

USCI_A和USCI_B模块均可工作于SPI模式,与二者相关的各种寄存器如表7-27和表7-28所示。

图7.21 实例7.6硬件仿真结果图

表7-27 USCI_A0和USCI_B0在SPI模式下的控制和状态寄存器

表7-28 USCI_A1和USCI_B1在SPI模式下的控制和状态寄存器

(1)控制寄存器。

USCI_Ax/USCI_Bx控制寄存器0(UCAxCTL0/UCBxCTL0)如表7-29所示。

表7-29 USCI_Ax/USCI_Bx控制寄存器

UCCKPH 时钟相位选择。置0b时为在第一个UCLK时钟的数据交换,下降沿数据捕获;置1b时为在第一个UCLK时钟的数据捕获,下降沿数据交换。

UCCKPL 时钟极性选择。置0b时为低电平无效;置1b时为高电平无效。

UCMSB 最高优先选择位,用于控制发送和接收移位寄存器的方向。置0b时为最低位优先;置1b时为最高位优先。

UC7BIT 字符长度。置0b时为8位数据;置1b时为7位数据。

UCMST 主从模式选择。置0b时为从机模式;置1b时为主机模式。

UCMODEx USCI模式选择位,在UCSYNC=1时,控制同步通信模式。置00b时为3线SPI模式;置01b时为STE高有效的4线SPI模式;置10b时为STE低有效的4线SPI模式;置11b时为I2C通信模式。

UCSYNC 同步使能。置0b时为异步模式;置1b时为同步模式。

USCI_Ax/USCI_Bx控制寄存器1(UCAxCTL1/UCBxCTL1)如表7-30所示。

表7-30 USCI_Ax/USCI_Bx控制寄存器1

UCSSELx USCI时钟选择,决定BRCLK的时钟源。置00b时为外部时钟;置01b时为辅助时钟(ACLK);置10b和置11b时为子系统时钟(SMCLK)。

UCSWRST 软件复位使能。置0b时为禁止,正常操作;置1b时为使能,保持复位状态。

(2)波特率控制寄存器。

USCI_Ax/USCI_Bx波特率控制寄存器0(UCAxBR0/UCBxBR0)如表7-31所示。

表7-31 USCI_Ax/USCI_Bx波特率控制寄存器0

USCI_Ax/USCI_Bx波特率控制寄存器1(UCAxBR1/UCBxBR1)如表7-32所示。

表7-32 USCI_Ax/USCI_Bx波特率控制寄存器1

这两个寄存器的值,都只有在UCSWRST=1b时,才可以更改。这两个寄存器用于存放波特率的时钟预置定时器的值。其中UCAx BR0为低字节,UCAxBR1为高字节。

(3)状态寄存器。

USCI_Ax/USCI_Bx状态寄存器(UCAxSTAT/UCBxSTAT)如表7-33所示。

表7-33 USCI_Ax/USCI_Bx状态寄存器

UCLISTEN 侦听使能。置0b时为禁止;置1b时为使能,发送的数据反馈到接收器。

UCFE 帧错误标志位。该位在4线串行通信的主模式下表示总线冲突,在3线制主模式或其他从模式下无效。置0b时为无冲突;置1b时为总线冲突发生。

UCOE 溢出错误标志。当一个字符被传输到UCx RXBUF之前的一个字符被读取时该位被置位,UCx RXBUF被读取后UCOE自动清除。注意不能用软件清零,否则不正常工作。置0b时为无溢出;置1b时为溢出发生。

UCBUSY 忙闲标志位。置0b时为闲;置1b时为忙,表示正在发送或接收数据。

(4)接收/发送数据寄存器。

USCI_Ax/USCI_Bx接收数据寄存器(UCAx RXBUF/UCBx RXBUF)如表7-34所示。

表7-34 USCI_Ax/USCI_Bx接收数据寄存器

接收缓存存放从接收移位寄存器最后接收的字符。如果传输7位数据,接收缓存的内容右对齐,最高位为0。

USCI_Ax/USCI_Bx发送数据寄存器(UCAx TXBUF/UCBx TXBUF)如表7-35所示。

表7-35 USCI_Ax/USCI_Bx发送数据寄存器

发送缓存内容可以传送至发送移位寄存器,然后由UCRTXBUFx传输。对发送缓存进行写操作,可以复位UTXIFGx。如果传输7位数据,发送缓存内容最高位为0。

(5)中断使能/标志寄存器。

中断使能寄存器2(IE2)如表7-36所示。

表7-36 中断使能寄存器2

UCB0TXIE USCI_B0发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCB0RXIE USCI_B0接收中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA0TXIE USCI_A0发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA0RXIE USCI_A0接收中断使能。置0b时为中断禁止;置1b时为中断使能。

中断标志寄存器2(IFG2)如表7-37所示。

表7-37 中断标志寄存器2

UCB0TXIFG USCI_B0发送中断标志。置0b时为无中断;置1b时为中断发生。

UC B0RXIFG USCI_B0接收中断标志。置0b时为无中断;置1b时为中断发生。

UC A0TXIFG USCI_A0发送中断标志。置0b时为无中断;置1b时为中断发生。

UC A0RXIFG USCI_A0接收中断标志。置0b时为无中断;置1b时为中断发生。

USCI_A1/USCI_B1中断使能寄存器(UC1IE)如表7-38所示。

表7-38 USCI_A1/USCI_B1中断使能寄存器

UCB1TXIE USCI_B1发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCB1RXIE USCI_B1接收中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA1TXIE USCI_A1发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCA1RXIE USCI_A1接收中断使能。置0b时为中断禁止;置1b时为中断使能。

USCI_A1/USCI_B1中断标志寄存器(UC1IFG)如表7-39所示。

表7-39 USCI_A1/USCI_B1中断标志寄存器

UCB1TXIFG USCI_B1发送中断标志位。当UCA1TXBUF为空时,UCA1TXIFG=1。置0b时为中断禁止;置1b时为中断使能。

UCB1RXIFG USCI_B1接收中断标志位。当UCA1RXBUF收到一个完整字符时,UCA1RXIFG=1。置0b时为中断禁止;置1b时为中断使能。

UCA1TXIFG USCI_A1发送中断标志位。当UCA1TXBUF为空时,UCA1TXIFG=1。置0b时为中断禁止;置1b时为中断使能。

UCA1RXIFG USCI_A1接收中断标志位。当UCA1RXBUF收到一个完整字符时,UCA1RXIFG=1。置0b时为中断禁止;置1b时为中断使能。

7.4 MSP430F249的I2C通信模式

I2C(Inter-Integrated Circuit)总线是由Philps公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。只需要将串行数据(SDA)和串行时钟(SCL)线连接到总线上,就能实现器件间传递信息。

支持I2C的设备有微控制器,A/D、D/A转换器,存储器,LCD控制器,I/O端口扩展器以及实时时钟等。

I2C器件能够减少电路间连线,减少电路板尺寸,降低硬件成本,并提高系统可靠性

7.4.1 MSP430 I2C通信模式概述

在I2C模式下,USCI模块为MSP430单片机提供一个与外部I2C器件连接的2线I2C串行总线,实现二者之间的数据通信。在互连的系统中,每个设备都有自己唯一的地址,可以作为发送设备、接收设备,或同时具有发送和接收功能(如存储器)。根据设备是否必须启动数据传输还是仅仅被寻址的情况,来决定发送设备或接收设备是工作于主机模式还是从机模式。

图7-22所示的为MSP430与外部I2C设备的典型连接框图。

图7.22 MSP430与外部I2C设备的典型连接框图

通常的I2C总线包括SCL——双向串行时钟线和SDA——双向传输的串行数据线。

由于SDA与SCL为双向I/O线,都是集电极开路(输出1时,为高阻状态),因此I2C总线上的所有设备的SDA和SCL引脚都要外接上拉电阻。但要注意,MSP430 的SDA和SCL管脚的电压不允许拉高超过MSP430的VCC电压。

MSP430的I2C模式具有以下特性:

(1)与Philips公司发布的I2C规范的V2.1版本兼容,包括:

●7位和10位的设备寻址方式;

●广播模式;

●开始/重新开始/停止;

●多主设备收发模式;

●从设备收发模式;

●支持高达100 kbps的标准方式和高达400 kbps的高速方式。

(2)在主设备模式中,UCxCLK频率可编程。

(3)低功耗设计。

(4)从设备根据检测到的开始信号将MSP430从LPMx模式唤醒。

(5)在DM4模式可以进行从机操作。

在MSP430的I2C通信模式下,USCI模块配置的内部硬件如图7.23所示。

7.4.2 MSP430 I2C通信的原理

1)USCI模块的初始化与复位设置

通过一个PUC或置位UCSWRST,可以使USCI复位。在一个PUC信号后,UCSWRST位自动置1,其间USCI保持在复位状态。通过将控制寄存器UCBx-CTL0的UCMODEx位配置为11b,选择工作于I2C模式。将UCSWRST复位,使I2C处于正常的操作模式。

(1)为了避免不可预测的行为,当对UCSWRST置1时应该对USCI进行设置或者重新设置。在I2C模式下对UCSWRST置位,有如下影响:

图7.23 USCI模块在I2C模式下的配置框图

①I2C通信停止;

②SDA和SCL处于高阻态;

③寄存器UCBxI2CSTAT的0~6位清0;

④发送中断UCBx TXIE和接收中断UCBx RXIE清0;

⑤发送中断标志UCBx TXIFG和接收中断标志UCBx RXIFG清0;

⑥其余位和寄存器保持不变。

(2)USCI初始化/重设置的推荐步骤如下:

①UCSWRST位置1;

②在UCSWRST=1时初始化所有的USCI寄存器;

③配置端口;

④通过软件使UCSWRST位清0;

⑤通过使能UCx RIE或UCx TXIE或者两者皆有,使能中断。

2)I2C的串行数据格式

I2C的主机为传输的每一位数据产生一个时钟,传输的数据以字节为单位。数据传输的时序如图7.24所示。

传输的第一个字节由7位从设备地址码和1位读写标志R/W组成,R/W=0,表示主设备发送数据给从设备;R/W=1,表示主设备接收数据。其后的字节均为8位数据。每次传输完一个字节数据后,从设备都会向主设备发送一个应答脉冲ACK给主设备。

图7.24 I2C的数据传输时序

图7.25中的START和STOP信号均由主设备产生。START信号在SDA线上是电平从高变到低,同时SCL线上保持高电平;STOP信号在SDA线上是电平从低变到高,同时SCL线上保持高电平。SDA线上的数据位必须在一个SCL时钟的高电平期间保持稳定,且只有在SCL信号为低电平时发生反转;否则,就会产生一个START或STOP信号。

3)I2C的地址模式

I2C支持7位地址和10位地址两种模式,即I2C总线上可以连接的设备最多可达128个和1024个。

7位地址模式的数据格式如图7.25所示。

图7.25 7位地址模式的数据格式

10位地址模式的数据格式如图7.26所示。

图7.26 10位地址模式的数据格式

要注意的是,10位地址模式下的第1个字节由二进制位11110和从地址的最高两位以及读/写控制位R/W组成,第2个字节就是从地址的低8位。

7.4.3 MSP430 I2C通信的模式

I2C模块的传送模式为主机/从机模式,对系统中的某一器件来说有4种可能的工作方式,即主发送方式、从发送方式、主接收方式以及从接收方式。

1.从机模式

当控制寄存器的UCMODEx=11b,UCSYNC=1b,UCMST=0b时,USCI模块工作于I2C模式的从机模式下。

初始化USCI模块时,必须UCTR=0b,将I2C设备配置为接收端,使其可以接收I2C地址。之后,根据收到的从设备地址和R/W位来决定后面的发送/接收操作。

I2C从设备地址是通过设定UCBxI2COA寄存器来确定的。当寄存器的UCA10 =0b,为7位地址模式;UCA10=1b,为10位地址模式。如果需要响应广播,可以将UCGCEN位置1。

当从I2C总线上识别到一个START信号时,从设备将收到的地址与存储于UCBxI2COA寄存器的本机地址相比较,如果地址相同,则UCSTTIFG中断标志位被置1,表示主设备与本设备建立通信。

1)12C从发送模式

当从设备发现主设备发送的从地址与本地地址匹配,并且R/W位为1时,该设备进入从发送模式。从发送端根据主设备产生的时钟脉冲向SDA总线发送串行数据位。虽然从设备不产生时钟信号,但是当一个字节发送完毕,需要CPU干预将SCL信号拉低。

如果主设备向从设备请求数据,则从设备的USCI模块会自动地设置为发送端,同时UCTR位和UCBx TXIFG位置1。SCL线在第一个数据写进发送寄存器UCBx TXBUF开始发送之前保持低电平。当地址被响应之后,UCSTTIFG标志位清除,然后开始传输数据。一旦数据转移到移位寄存器之后,UCBx TXIFG位将重新置1。当一个数据被主设备接收响应之后,写进UCBx TXBUF寄存器的下一个数据开始传输;或者这时候发送寄存器还处于空的状态,这种情况下,SCL线会保持低电平将应答周期延迟,直到新的数据被写进UCBx TXBUF寄存器。如果主设备发送一个NACK应答信号后面是停止条件,则UCSTTIFG标志位置1。如果NACK应答信号后面是重新起始条件,则USCI的I2C状态重新回到地址接收状态。

2)I2C从接收模式

当检测到主设备发送的从地址和本地地址匹配,并且R/W位为0时,该设备进入从接收模式。在从接收模式中,设备每产生一个时钟脉冲,SDA总线上就能接收到串行数据位。从设备不产生时钟脉冲,但是当接收到一个字节后,需要CPU干预将SCL信号拉低。

如果已经接收的数据在接收结束时没有被从UCBx RXBUF读走,总线会通过保持SCL信号为低电平将总线延时。在UCBx RXBUF接收到的新数据被读取的时候,一个应答信号会发送给主设备,这时就可以开始接收下一个数据了。

在下一个应答周期中,设置UCTXNACK位会产生一个应答信号发送给主设备。即使UCBx RXBUF还没有准备接收最新的数据,NACK信号也会发送。如果SCL信号保持低电平时UCTXNACK位被置1,那么总线将会释放。一个NACK信号将马上被发送,同时UCBx RXBUF将会装载最后接收到的数据。由于先前的数据还没有被读取,可能会使这些数据丢失。为了避免数据的丢失,在UCTXNACK被置位之前,UCBx RXBUF需要被读取。

当主设备产生一个停止条件的时候,UCSTPIFG标志被置位。

如果主设备发送一个重复开始条件,USCI的I2C状态返回到它的地址接收状态。

2.主机模式

当控制寄存器的UCMODEx=11b,UCSYNC=1b,UCMST=1b时,USCI模块工作于I2C模式的主机模式下。在一个多主设备系统中,每个主设备的地址通过设定其UCBxI2COA寄存器来确定。当寄存器的UCA10=0b时,为7位地址模式;UCA10=1b时,为10位地址模式。

1)12C主发送模式

在初始化之后,主发送端模块也需要做一些初始化工作:将目标从地址写进UCBxI2CSA寄存器,通过USCLA10位选择从地址的大小,将UCTR置位使其工作在发送模式,将USTXSTT位置1产生一个起始条件。

USCI模块首先检查总线是否可用,然后产生一个起始信号并发送从地址。当起始信号产生,第一个写进UCBx TXBUF的数据被发送后,UCBx TXIFG位置1。一旦从设备响应发送的地址之后,USTCSTT位将清0。

在传输从地址的过程中,如果总线仲裁没有失效,则写进UCBx TXBUF的数据会被发送。当要发送的数据从缓冲区转移到移位寄存器中时,UCBx TXIFG将再次置1。如果在响应周期前没有数据装载进UCBx TXBUF,SCL总线将在应答周期中保持低电平状态,直到有数据写进UCBx TXBUF。在数据传输或者总线占用时,UCTXSTT和UCTXSTP位不会置1。

接收到从设备发来的响应信号之后,如果将UCTXSTP位置1则会产生一个停止条件。如果在发送从设备地址,或者USCI模块等待数据写进UCBx TXBUF寄存器的过程中对UCTXSTP位置1,即使没有数据被发送也会产生一个停止信号。当传输单一数据的时候,在数据传输的时候必须将UCTXSTP位置1,或者在数据开始发送之后不要将新的数据写进UCBx TXBUF寄存器。否则,只有地址信息被传输。当要发送的数据从缓冲区转移到移位寄存器后,UCBx TXIFG位会置1,表示数据传输已经开始,可以将UCTXSTP位置1。

将UCTXSTT位置1会产生一个起始信号。在这种情况下,UCTR可以置1或清0,从而将设备配置为发送端或者接收端。如果有需要,不同的从地址可以写进UCBxI2CSA寄存器。

如果从设备没有响应发送的数据,则没有响应中断标志UCNACKIFG位置1。主设备必须通过一个停止信号或者一个重新起始信号来作出响应。如果已经有数据写进UCBx TXBUF寄存器,则该数据将被抛弃。如果这个数据需要在一个重新起始条件之后被发送,那么该数据就需要重新写进UCBx TXBUF寄存器。

2)I2C主接收模式

在初始化之后,主接收端模块也需要做一些初始化工作:将目标从地址写进UCBxI2CSA寄存器,通过UCSLA10位选择从地址的大小,将UCTR位置1,使其工作在接收模式,将USTCSTT位置1产生一个起始信号。

USCI模块首先检查总线是否可用,然后产生一个起始条件和发送从地址。当从设备响应该地址之后,USTCSTT位清0。

从设备对地址响应,且发送的第一个数据被主设备接收并响应后,UCBx RXIFG标志置1。在接收从设备的数据过程中,UCTXSTP和UCTXSTT不会置位。在接收数据最末位的过程中,如果主设备没有读取UCBx RXBUF,主设备则一直占用总线,直到UCBx RXBUF寄存器被读取。

如果从设备没有响应发送的数据,则没有响应中断标志UCNACKIFG位置1。主设备必须通过一个停止信号或者一个重新起始信号来作出响应。

UCTXSTP位置1会产生一个停止信号。如果UCTXSTP置位,在接收完从设备发送的数据之后,将会产生一个停止信号跟随在NACK信号后面,或者如果USCI模块正在等待UCBx RXBUF被读取,这时停止条件会立即产生。

3.总线仲裁

当两个或者多个主发送设备在总线上同时开始发送数据时,总线仲裁过程被启用。两个设备之间的总线仲裁过程如图7.27所示。仲裁过程中使用的数据就是相互竞争的设备发送到SDA线上的数据。第一个主发送设备产生的逻辑高电平被第二个主发送设备产生的逻辑低电平否决。在总线仲裁过程中,发送的串行数据数值最小的设备将获得总线的优先权。失去仲裁的主发送设备转变成从接收模式,并且设置仲裁失效中断标志位UCALIFG。如果两个或者更多的设备发送的第一个字节的内容相同,则根据后面传输的数据进行仲裁。

图7.27 两个主发送设备的总线仲裁过程

7.4.4 MSP430 I2C通信的时钟与中断

I2C通信的时钟SCL由系统主设备来决定。当USCI模块工作于I2C的主机模式时,通信的位时钟BITCLK由USCI的时钟生成器和控制寄存器0的UCSSELx选择的时钟源来决定。其分频系数存放在UCBxBRx寄存器中。单主设备系统的最快位时钟频率f BITCLK=f BRCLK/4;多主机系统的最快位时钟频率f BITCLK=f BRCLK/8。其计算公式为:

f BITCLK=f BRCLK/UCBRx

I2C通信模式下有两个中断向量:一个是发送和接收中断标志,一个是4种工作模式变换中断标志。每个中断标志对应一个中断使能位,一旦有中断发生,则GIE被置位,发生一个中断请求。

USCI_Ax和USCI_Bx共享相同的中断矢量。USCI_Bx的4个状态转换中断标志分别为UCSTTIFG、UCSTPIFG、UCIFG、UCALIFG和USCI_Ax的UCAx RXIFG中断标志位映射为同一个中断矢量。USCI_Bx的发送和接收中断标志UCBx-TXIFG、UCBx RXIFG和USCI_Ax的UCAx TXIFG标志位映射为另一个中断矢量。

1)发送中断

当发送数据寄存器UCBx TXBUF准备好接收新的数据时,其对应的发送中断标志位UCBx TXIFG被置位。此时,如果UCBx TXIE和GIE均处于置位状态,则产生一个发送中断请求。当新的数据写入了UCBx TXBUF寄存器或收到一个NACK应答信号,UCBx TXIFG标志位自动复位。一个PUC后或UCSWRST=1b时,UCBx RXIE自动复位,UCBx RXIFG自动置位。

2)接收中断

当接收数据寄存器UCBx RXBUF接收到数据时,其对应的接收中断标志位UCBx RXIFG被置位。此时,如果UCBx TXIE和GIE均处于置位状态,则产生一个接收中断请求。当数据从UCBx TXBUF寄存器读取后,UCBx RXIFG标志位自动复位。一个PUC后或UCSWRST=1b时,UCBx RXIFG和UCBx RXIE自动复位。

3)状态转换中断

I2C的状态转换中断如表7-40所示。

表7-40 I2C的状态转换中断说明

实例7.7 I2C模式铁电存储器的读写

任务要求:实现对AT24C64存储器的读写操作。

分析:AT24C64提供64Kbit的串行电可擦写可编程只读存储器(EEPROM),组织形式为8Kbit×8bit位字长。适用于许多要求低功耗和低电压操作的工业级或商业级应用。

1)硬件电路设计

硬件电路设计如图7.28所示。

2)程序设计

图7.28 实例7.7的硬件电路图

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件Debug\Exe\ex7_7.hex,设置仿真参数SMCLK=8 MHz。如果未设定,则仿真无结果或结果不对。仿真结果是MSP430工作于主设备发送状态将BUFF[16]的16个数据先写入AT24C64中,然后每按动一次按键,就从AT24C64中读取一个数值并将其显示在数码管上,以核对读取与写入的数据是否相符,其仿真结果如图7.29所示。

图7.29 实例7.7的仿真结果图

7.4.5 I2C模式相关寄存器

只有USCI_B模块可工作于I2C模式下,与之相关的各寄存器如表7-41和表7-42所示。具体字段及含义见表中说明。

表7-41 USCI_B0模式下I2C的控制和状态寄存器

表7-42 USCI_B1模式下I2C的控制和状态寄存器

1)控制寄存器

USCI_Bx控制寄存器0(UCBxCTL0)如表7-43所示。

表7-43 USCI_Bx控制寄存器0

UCA10 本机地址模式选择。置0时为7位地址;置1时为10位地址。

UCSLA10 从设备地址模式选择。置0时为7位地址;置1时为10位地址。

UCMM 多主设备模式选择。置0时为单主设备;置1时为多主设备。

UCMST 主机模式选择。置0时为从机模式;置1时为主机模式。

UCMODEx USCI模式选择位,在UCSYNC=1时,同步通信模式选择。置00b时为3线SPI模式;置01h、10b时为4线SPI模式;置11b时为I2C模式。

UCSYNC 同步使能。置0时为异步模式;置1时为同步模式。

USCI_Bx控制寄存器1(UCAxCTL1)如表7-44所示。

表7-44 USCI_Bx控制寄存器1

UCSELx USCI时钟选择,决定BRCLK的时钟源。置00b时为外部时钟;置01b时为辅助时钟(ACLK);置10b和11b时为子系统时钟(SMCLK)。

UCTR 接收/发送选择。置0b时为接收;置1b时为发送。

UCTXNACK 发送无应答信号。发送一个NACK无应答信号后,该位自动复位清零。置0b时为应答正常;置1b时为生成NACK信号。

UCTXSTP 主机模式下发送一个STOP信号,从机模式下忽略,主机接收模式下其优先级高于无应答NACK。生成STOP信号后该位自动复位清零。置0b时为不生成STOP信号;置1b时为生成STOP信号。

UCTXSTT 主机模式下发送一个START信号,从机模式下忽略,主机接收模式下其优先级高于无应答NACK。生成START信号后该位自动复位清零。置0b时为不生成START信号;置1b时为生成START信号。

UCSWRST 软件复位使能。置0b时为禁止,正常操作;置1b时为使能,保持复位状态。

2)波特率控制寄存器

USCI_Bx波特率控制寄存器0(UCBxBR0)如表7-45所示。

表7-45 USCI_Bx波特率控制寄存器0

USCI_Bx波特率控制寄存器1(UCBxBR1)如表7-46所示。

表7-46 USCI_Bx波特率控制寄存器1

这两个寄存器用于存放波特率的分频系数值。其中UCAxBR0为低字节,UCAxBR1为高字节。

3)状态寄存器

USCI_Bx状态寄存器(UCBxSTAT)如表7-47所示。

表7-47 USCI_Bx状态寄存器

UCSCLLOW SCL低电平。置0b时为SCL不保持低电平;置1b时为SCL保持低电平。

UCGC 收到选择呼叫地址。置0b时为未收到;置1b时为收到。

UCBBUSY 总线忙标志。置0b时为闲;置1b时为忙。

UCNACKIFG 收到无应答中断标志位。该标志位在收到START信号后自动复位清零。置0b时为无中断发生;置1b时为中断发生。

UCSTPIFG STOP信号中断标志位。该标志位在收到START信号后自动复位清零。置0b时为无中断发生;置1b时为中断发生。

UCSTTIFG START信号中断标志位。该标志位在收到STOP信号后自动复位清零。置0b时为无中断发生;置1b时为中断发生。

UCALIFG 仲裁丢失中断标志位。置0b时为无中断发生;置1b时为中断发生。

4)接收/发送数据寄存器

USCI_Bx接收数据寄存器(UCBx RXBUF)如表7-48所示。

表7-48 USCI_Bx接收数据寄存器

接收缓存存放从接收移位寄存器最后接收的字符。

USCI_Bx发送数据寄存器(UCBx TXBUF)如表7-49所示。

表7-49 USCI_Bx发送数据寄存器

发送缓存内容可以传送至发送移位寄存器,然后由UCRTXBUFx传输。对发送缓存进行写操作时,复位UTXIFGx。

5)主/从设备地址寄存器

USCI_Bx主设备地址寄存器(UCBxI2COA)如表7-50所示。

表7-50 USCI_Bx主设备地址寄存器

UCGCEN 选择呼叫应答使能。置0b时为不应答;置1b时为应答。

I2COAx I2C主设备地址。10位地址模式下,9位是最高位;7位地址模式下,6位是最高位,9~7位忽略。

USCI_Bx从设备地址寄存器(UCBxI2CSA)如表7-51所示。

表7-51 USCI_Bx从设备地址寄存器

I2CSAx I2C从设备地址,只在主机模式使用。10位地址模式下,9位是最高位;7位地址模式下,6位是最高位,9~7位忽略。

6)中断使能/标志寄存器

USCI_Bx中断使能寄存器(UCBxI2CIE)如表7-52所示。

表7-52 USCI_Bx中断使能寄存器

UCNACKIE 无应答中断使能。置0b时为中断禁止;置1b时为中断使能。

UCSTPIE STOP中断使能。置0b时为中断禁止;置1b时为中断使能。

UCSTTIE START中断使能。置0b时为中断禁止;置1b时为中断使能。

UCALIE 仲裁丢失中断使能。置0b时为中断禁止;置1b时为中断使能。

中断使能寄存器2(IE2)如表7-53所示。

表7-53 中断使能寄存器2

UCB0TXIE 发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCB0RXIE 接收中断使能。置0b时为中断禁止;置1b时为中断使能。

中断标志寄存器2(IFG2)如表7-54所示。

表7-54 中断标志寄存器2

UCB0TXIFG 发送中断标志。置0b时为无中断;置1b时为中断发生。

UCB0RXIFG 接收中断标志。置0b时为无中断;置1b时为中断发生。

USCI_B1中断使能寄存器(UC1IE)如表7-55所示。

表7-55 USCI_B1中断使能寄存器

UCB1TXIE 发送中断使能。置0b时为中断禁止;置1b时为中断使能。

UCB1RXIE 接收中断使能。置0b时为中断禁止;置1b时为中断使能。

USCI_B1中断标志寄存器(UC1IFG)如表7-56所示。

表7-56 USCI_B1中断标志寄存器

UCB1TXIFG 发送中断标志位。当UCB1TXBUF为空时,UCB1TXIFG=1。置0b时为中断禁止;置1b时为中断使能。

UCB1RXIFG 接收中断标志位。当UCB1RXBUF收到一个完整字符时,UCB1RXIFG=1。置0b时为中断禁止;置1b时为中断使能。

思考与练习

1.MSP430F249的USCI有哪两种模型?各模型又有几种串行通信模式?

2.MSP430F249串行通信的时钟来源有几个,分别是什么?

3.在MSP430F249单片机中,假设MCLK=8 MHz,ACLK=32768 Hz。要求编程实现波特率为9600的UART通信,低波特率模式如何配置?过采样模式如何配置?

4.MSP430F249的SPI有几种工作模式,如何配置?

5.MSP430F249的I2C有几种工作模式,几种工作状态,如何配置?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈