LPC111X、LPC13XX 软件化的全双工UART
该文档描述了运行在LPC111X/LPC13XX 处理器上的软件如何实现标准的通用异步收发(UART)
1.简介
LPC111X、LPC13XX 系列微控制器提供了丰富的通讯接口。每一个微控制器都包含一 个片上UART(通用异步收发)。而实际上,很多实际应用需要更多的UART。在这种情况 下,可以考虑增加一个外部独立的UART 芯片,软件化的UART 不仅可以减少物料成本, 而且又不占用额外的PCB 空间。这样,设计人员就可以满足小型化的要求,达到降低成本 的目的。该文档描述了全双工UART 软件化的实现方法。
LPC111X/LPC13XX 的软件UART 是从LPC2000 移值而来。软件UART 的实现原理的 细节,请参考AN10689-LPC2000 software UART。该文档使用Artists’ LPCXpresso 1114 Rev A ,LPCXpresso Base Board Rev A evaluation kits 和Code Red LPCXpresso 3.3.4。值得注意 的是,请确保开发板(the Base Board)上的跳线处于正确的位置,特别是热敏元件不是连 接到P1.5,电位计不是连接到P0.11。
须知,示例软件包并不是最优的。当增加软件UART 功能时,可能需要1KB 的额外空间, 在优化代码密度时请注意。在某一特定应用中,如果全双工操作不是必需的,可以裁减没用 的UART 功能达到减小代码体积的目的。
2.实现
该方案依赖一个通用32 位定时器(timer),定时器可以在触发一个指定的pin 的同时, 监听另一个pin 的状态。当启动定时器的捕获和触发功能时,接收程序还要使用定时器的一 个匹配寄存器。每一个定时器都有4 个匹配寄存器,表1 指明了它们的配置。在本文档中, 使用的是Timer32_0。示例代码中的转换格式见表2。
表1 匹配寄存器的使用 | |
Timer MRn | Function |
MR0 | RX |
MR1 | RX |
MR2 | Available to user |
MR3 | TX |
该软件方案采用深度可变的先入先出的形式(variable depth FIFOs)作为发送和接收的缓 冲。请注意,UART 的波特率以及发送器、接收器的FIFO 深度,是在编译过程中配置的,并且 在运行时无法改变。
表2 | |
Parameter | Value |
Start Bits | 1 |
Data Bits | 8 |
Stop Bits | 1 |
Parity | None |
演示源代码利用了LPC111X 和LPC13XX 的引脚兼容性的优点,在目标平台之间只需 要做最少量的修改。表3 列出了源代码使用的引脚功能。本文档中使用的两个目标评估模块 配备了硬件电路以转换外围的UART 信号到RS232 或者USB。软件UART 引脚必须与这些 信号相连接才能与PC 通信。因为LPC111X/LPC13XX 的引脚默认使用上拉电阻,P1.6 和 P1.7 必须设置为闲置模式(inactive mode)避免与软件UART 信号发生冲突。

3.软件环境
本文档中包含了几个版本的示例软件工程。这些工程在表4 所列明的环境中进行测试。示例 工程的默认大小(没有优化)列在表5 中。


4.硬件配置——IAR LPC1114 SK
图1 所示为一个连线的例子。请注意,跳线连接P0.11 和P1.7,使用20pin 标准连接器 进行调试。这样的话不会影响JLink 调试,但是仍然需要一个外部的调试器,例如Keil ULINK2,使用10pin SWD 头。

5.硬件配置——LPC1114 LPCXpresso
图2 所示为软件UART 信号与USB 转换芯片的连接方法。

6.操作
LPC13XX 系列演示代码在以下几种条件下进行测试:1,没有使用系统的PLL,连接 外部12MHz 晶振;2,使用系统的PLL 分别产生24MHz,60MHz,72MHz 系统时钟。LPC111X 系列在以下环境中测试:1,外部12MHz 晶振;2,使用PLL 分别产生24MHz 和48MHz 系统时钟。
请注意,UART 的波特率依赖于系统时钟频率。因此,系统使用一个不同于示例代码中 的48MHz/72MHz 的时钟频率时,必须在工程源代码中更新BIT_LENGTH 的定义。例如, 在12MHz 的系统中传送串行数据的速率为9600bit/s , 则BIT_LENGTH 为: 12000000/9600=1250 。如果系统时钟变为48MHz , BIT_LENGTH 应该改为: 48000000/9600=5000。
演示程序先发出一个用户提示信息,然后进入一个永恒循环,把接收到的字符回传给用户, 如图3 所示。

7.结果
信号线的示波图(The oscilloscope screenshots)在调试过程中很有帮助。这些类似于LPC2000 软件UART,细节请参考AN10689。表6 和表7 所示为,演示程序在不同的系统时钟频率 下,波特率最大的速率。
表6 LPC111X测试结果 | ||
System clock(MHz) | Max.transmit(bit/s) | Max.receive(bit/s) |
12 | 9600 | 4800 |
24 | 38400 | 9600 |
48 | 57600 | 19200 |
表7 LPC13XX测试结果 | ||
System Clock(MHz) | Max.transmit(bit/s) | Max.reveive(bit/s) |
12 | 9600 | 4800 |
24 | 38400 | 9600 |
60 | 115200 | 19200 |
72 | 115200 | 38400 |
8.结论
尽管部分LPC11XX/LPC13XX 只配置了单一的UART,通过这个例程,设计人员使用 额外的软件UART 通道,可以增强产品的性能。采用这种软件化方案,不必在PCB 上增加 额外的IC,这样既节省了空间,又降低了生产的成本。
文档下载:
声明:本站部分内容根据互联网资料整理而成,若侵犯您的权益,请联系我们,我们会尽快处理。