MSP430 LaunchPad学习第二记——UART
一、摘要
本应用报告介绍了如何使用Timer_A实现UART功能。该包括例子是专门为MSP430x11x家庭,但他们能适应任何MSP430家族成员纳入Timer_A。使用硬件UART的功能在Timer_A功能和软件。执行是半双工的,事件驱动,它支持的8N1波特率协议从1200到115200或者更快。
二、简介
异步串行通信,可以添加到MSP430x11x应用程序综合Timer_A模块硬件的功能。这份报告提供了一些的UART函数实例演示了一对一MSP430F1121闪存RS232接口单片机与PC机串行端口。一个描述如何使用Timer_A1硬件提供自动启动位检测,波特率生成和数据位锁存是详细。Timer_A硬件特性的软件,大大降低CPU开销通常与微控制器软件UART实现。硬件的功能也让Timer_A的 UART操作作为背景的作用,同时与其他实时系统的任务。
MSP430x11x Timer_A的UART描述:串行通信的MSP430F1121与另一个系统,在这报告电脑使用RS232接口。特点是两个系统之间交换通过三线:接收,传输和共同点。协议使用的字符是8N1:8个数据位,无奇偶校验,一个停止位。用户可以修改UART的功能支持其他协议和波特率,奇偶校验和包括一个9个位寻址。 UART的功能描述使用捕获比较寄存器0(CCR0),Timer_A的三个可用寄存器之一。 CCR0用于起始位检测,波特率生成和数据位锁存。另外两个捕获比较寄存器可用于其他事。该CCR0选择是任意的。任何或所有CCRx寄存器可用于UART的功能。端口引脚P1.1和P2.2是外设选项选择的相关于Timer_A CCR0。 P1.1用于传输,P2.2用于接收。外设选项选定为使用外围设备选项选择引脚寄存器,P1SEL和P2SEL。由于P1.1置为输出时,该引脚必须配置为使用输出端口方向寄存器1(P1DIR)。 P2.2作为运行需要输入。这是一个MSP430的端口引脚的默认。 Timer_A配置为运行在连续模式,允许定时器资源用于同时与UART等功能可用。中央处理器寄存器R4是为RXTXData -缓冲区使用的UART数据或出位的变化。 R5的CPU寄存器用于BitCnt,有点跟踪登记。 R4和R5的选择是任意的。任何CPU寄存器或RAM字节可以用于这些功能。
在接收模式下,捕获比较控制寄存器0(CCTL0)的初始配置,使得在下降沿接收引脚P2.2 CCR0捕获。由于接收线路空闲高,一降边指示起始位开始。当UART功能已准备好接收数据,没有开销放在CPU的功能,即使是准备接收任何一个字符时间。 CPU资源执行后,起始位下降沿上P2.2发生。下降对P2.2边沿捕获了自由运行Timer_A计数器寄存器(焦油)的电流值,CCR0与任何其他运行时的活动无关。捕获是通过Timer_A硬件,而不是由软件。同时发出一个中断给CPU。中断的延迟并不大关注确切时间的下降沿触发中断正在CCR0存储,独立其他活动。启动后位的边缘检测,软件重新配置,使CCR0的CCTL0在第一种模式的比较发生在第一个数据位的中间。一个1.5位偏移量添加到CCR0,定位比较下的第一个数据位的中间。接收到的数据是同步的捕获比较输入(SCCI)Timer_A锁存硬件。SCCI是可读的CCTL0闩锁。在UART的功能,SCCI捕获的逻辑电平同步与CCR0输入P2.2进行比较。 UART的功能是从SCCI中接收锁存的数据。软件不直接测试P2.2。
第一个数据位后,1位长的偏移量添加到CCR0定位在未来捕捉中间的每一位。八位连续的数据被锁存,并收到来自SCCI软件到RXTXData位的数据。发射模式任务是简单,因为MSP430在决定时,传输数据,没有启动位边缘检测的必要性。在缓冲区中存储的数据RXTXData传输引脚P1.1使用Timer_A CCR0输出至硬件。
CCR0是预先在比较模式下位传输使用输出模式控制位在CCTL0。模式控制位被预先配置为复位模式(逻辑0),或设置模式(逻辑1)发生在未来比较CCR0。当比较时,在一开始
位传输的数据,自动输出CCR0硬件数据配置P1.1置位并发出一个中断。随着CCR0硬件自动输出数据上P1.1置位,软件中断延迟和位定时的关注减少。这不是必要的软件准备CCR0输出锁存器在一个确切的时间内。 UART的功能软件不直接对P1.1置输出数据,而是预装在CCR0输出数据位输出至锁存器的硬件。
每个位输出之前,软件循环查询RXTXData到进位。适当的跳转提出和CCTL0输出模式准备和1位长的偏移量添加到CCR0。
三、波特率计算
Timer_A CCR0用于波特率产生。根据所需波特率,间隔Bitime的计算方法。 Bitime是Timer_A位和PC之间的计数长度时间间隔Timer_A闩锁在接收和发送出的数据位。 Bitime是为Timer_A计算时钟的波特率分源。
Timer_A有几个可用的时钟源和除法(参见器件表具体数据)。可用于MSP430x11x Timer_A模块的时钟源包括辅助时钟(ACLK),子系统时钟(SMCLK)和两个外部时钟。
例如:考虑与Timer_A作为辅助时钟源选择9600波特率ACLK,它被配置为作为一个3.579545 MHz的的XTAL相同。Bittime = 3 5799600/545= 372.9〜373实际波特率= 3 579三百七十三分之五百四十五= 9597由于只有一个Bitime整数值可以被添加到CCR0,值373使用。假设9600波特和一个3.579545 MHz的时钟源,四舍五入到最接近的整数Bitime错误小于0.03%每位。
四、软件开销
固件工程师可能会关切的是使用中UART的硬件/软件系统开销,而不是一个专用的串行端口。UART的功能在本报告所述用途timer_A硬件的功能,最大限度地减少CPU的负担。 Timer_A硬件记录起始位优势和锁存和输出自动位的数据。该软件需要有一个26位的每接收或发送的最大周期包括中断服务程序。开销是CPU的时钟(MCLK)和波特率功能。使用3.58 - MHz的9600波特率例如上面的MCLK,开销计算公式为:
软件开销=(26个CPU周期)×(9600)/ 3 579 545 = 6.9%
五、演示电路
图1的示例电路与调控,从直接供电由一个PC串口3.3 - V的TPS76033低压降稳压器。出于演示的目的,串口接口是通过使用两个TI SN74AHC1G04逆变器。如果一个完全兼容的RS232接口是必需的,如TI的低功耗3 - V的MAX2331集成电路都可以使用。复位拉高和3.58 MHz的陶瓷谐振器用于产生时钟使用。
六、示例代码
所包含的例子11x1_uart1.s43使用图1中的电路,并提供了基本的回声功能。接收到一个字符从PC和回显。在初始化过程中,端口引脚配置和所有时钟都同步到LFXT1晶体振荡器。 LFXT1是配置为在高速运行(高频)模式。如果在这个例子中,MCLK的源是一个外部高频晶体,晶体必须是稳定或振荡器故障安全模式会自动使用FOR MCLK的DCOCLK。该OSCFAULT可以查询,以确保稳定的晶体前选择此MCLK的时钟源。
振荡器故障安全模式中描述的MSP430x1xx系列用户指南(SLAU049)。该主循环调用子程序RX_Ready UART接收准备,然后在低功耗模式0等待(LPM0)与CPU关闭。只有Tmer_A1和ACLK活跃。即使在CPU中关闭主循环中,UART接收中断操作功能在后台驱动。后UART功能接收到RXTXData,UART的中断处理程序的完整的字符返回到主循环活动的CPU。发送子程序被称为未来,又呼应在RXTXData回接收到的字符。循环重复,另一个字符等待收到。该示例使用的编码速度优化技术研究。内CCR0_ISR,BitCnt用于自动递增的间接寻址,直接程序流的确切节ISR的规定办理接收或发送位。软件是不需要投票登记标志或递减,以确定采取何种行动。自动递增寻址使用一个查找表,直接的方案立即流。
该自动递增寻址的优点是速度和CPU的周期计算效率在需要处理为查找表所需的费用在ISR码字。
(1)例如11x1_uart2.s43 -使用DOC产生波特率:
这个例子11x1_uart2.s43演示如何实现高波特率的UART MSP430的功能甚至从超低功耗模式,只使用一个32 768的晶体振荡器。 MSP430的独立片上高速数控振荡器(DCO)可用于波特率产生。DOC是一个100 - kHz至5 – MHz甚至更快,数字可调RC型振荡器启动,是在不到6μs稳定。随着快速DOC启动,高波特率是可能的,甚至从超低功耗模式,要求DOC关闭—— 当DOC不到6us时一个起始位的下降沿被用作中断。
例如11x1_uart2.s43提供了一个9600波特率波特率UART解决方案,使用DOC产生波特率。 32 768用于手表晶振的XTAL,取代了3.58 MHz的谐振器图1。DOC设置为1 228 800赫兹,用来驱动子系统时钟(SMCLK)它被配置作为Timer_A来源。DOC被调整到一个高的速度值使用软件锁频环(FLL)。该软件FLL的整合速度SMCLK(DOC时钟)以上的速度较慢ACLK(32 768 Hz的晶体衍生物)时期。该DCO时钟调整,直到达到目标频率(1 228 800赫兹)。该DCO时钟在设定的频率仍然是稳定的,只要VCC和温度的稳定。该软件FLL可以随时被调用的DOC重新调整。看到目前的数据表,MSP430x11x1混合信号微控制器。在这个例子中,主循环中等待LPM3,通常小于2微安与UART的功能充分准备接收。主循环回声操作与前面的例子一样。这个例子使用BitCnt登记只是为了跟踪字符接收进程,而不是使用自动递增,同前面的例子。
(2)例如11x1_uart3.s43 采用32 kHz晶振产生波特率:
在某些情况下,32 768 Hz的手表晶振用作Timer_A直接时钟源。UART功能仍然是可能的,但在传输速率较慢,以防止位定时误差。范例11x1_uart3.s43提供了一个2400波特率UART的解决方案,假设一个32 768 Hz的手表晶体是用于的XTAL(取代图1中的3.58 - MHz的谐振器)。没有软件FLL的是需要设置DOC的,因为晶振生成UART的位时间。当激活模式下,CPU配置为在执行DCO时钟速度越快,CPU的代码不在32 768赫兹执行代码。此外,在这个例子中,内存的位置用于RXTXData 和BitCnt,相对于CPU寄存器中使用的其他例子。 |