嵌入式UART接口模块的设计
嵌入式系统的软硬件接口设计要点

嵌入式系统的软硬件接口设计要点嵌入式系统是一种专门设计用于控制特定设备或系统的计算机系统。
软硬件接口是嵌入式系统中软件和硬件进行通信的关键部分。
一个良好设计的软硬件接口可以提高系统的可靠性、性能和可维护性。
以下是嵌入式系统软硬件接口设计的要点。
1. 规范化接口设计一个好的软硬件接口设计需要符合标准化的原则。
这包括使用标准的通信协议和接口标准,以便软件和硬件之间可以进行有效的通信和交互。
常见的接口标准包括UART、SPI、I2C和CAN等。
选择和应用标准接口可以提高系统的互操作性,方便硬件和软件的开发和维护。
2. 设计合理的接口传输速率嵌入式系统中的软硬件接口往往需要传输大量的数据,因此传输速率非常重要。
接口的传输速率应该与系统的需求相匹配,既不能过慢导致性能下降,也不能过快导致硬件资源的浪费。
在设计接口时,需要考虑传输速率的平衡,以确保数据传输的高效和稳定。
3. 硬件引脚的合理分配嵌入式系统的硬件接口通常需要使用多个引脚进行通信。
在设计接口时,需要合理分配硬件引脚,以便满足系统的需求。
引脚的数量和布局应该考虑到硬件资源的限制和尺寸的限制。
合理布局引脚可以提高系统的可靠性和可维护性。
4. 考虑功耗和电源管理功耗和电源管理是嵌入式系统中重要的考虑因素之一。
在设计软硬件接口时,需要考虑如何最大限度地减少功耗,并有效管理电源。
这可以通过设计低功耗的接口协议、优化硬件和软件的交互过程以及合理选择低功耗的硬件组件来实现。
5. 进行适当的错误处理嵌入式系统中的软硬件接口设计需要充分考虑错误处理机制。
在接口通信过程中,可能出现数据传输错误、通信中断等情况。
为了确保系统的稳定性和可靠性,需要设计适应错误处理机制。
这可以包括数据校验、错误检测和纠正、异常处理等。
适当的错误处理可以减少系统故障和数据损失的可能性。
6. 软硬件协同设计软硬件接口设计需要软硬件协同工作。
软件和硬件之间的接口应该清楚地定义,并有明确的规范和通信协议。
嵌入式基于stm32串口通信课程设计

嵌入式基于stm32串口通信课程设计嵌入式系统是近年来发展迅速的一种新型计算机系统,其特点是硬件与软件紧密结合,功能强大,具有体积小、功耗低、性能高等优点,广泛应用于工业控制、汽车电子、医疗设备等领域。
在嵌入式系统中,串口通信是一种常见且重要的通信方式,其通过串行传输数据,可以与其他设备进行数据交换。
在嵌入式系统的开发过程中,串口通信的设计是一项非常关键的工作。
本文将以基于STM32的串口通信课程设计为例,详细介绍串口通信的实现原理和相关技术。
首先,我们需要了解串口通信的基本原理。
串口通信一般包括发送端和接收端两个部分。
发送端将需要传输的数据转化为串行数据,并通过串口发送出去;接收端接收串口传输过来的数据,并将其转化为需要的格式。
串口通信需要通过一定的协议进行数据的传输,常见的协议有UART、USART、SPI等。
在基于STM32的串口通信课程设计中,我们可以使用STM32开发板作为嵌入式系统的硬件平台。
STM32是一款由ST公司推出的基于ARM Cortex-M内核的系列单片机,具有高性能、低功耗等特点。
在STM32中,有多个通用串行接口(USART)可用于实现串口通信功能。
我们可以通过编程控制STM32的USART模块,实现串口通信的发送和接收功能。
首先,我们需要初始化STM32的USART模块。
在初始化过程中,需要设置波特率、数据位数、校验位等参数,以适应不同的通信需求。
然后,我们需要编写发送函数和接收函数。
发送函数将需要传输的数据转化为串行数据,并通过USART发送出去;接收函数则负责接收USART传输过来的数据,并将其转化为需要的格式。
在接收函数中,我们还可以添加一些错误检测和容错机制,以确保数据的准确性。
在完成了USART的初始化工作后,我们还需要编写主程序来调用发送函数和接收函数,实现数据的发送和接收。
在主程序中,我们可以通过外部中断、定时器或其他触发方式来触发数据的发送和接收操作。
串口通信UART模块基本介绍

串口通信UART模块基本介绍串口通信(UART)是一种通过串行接口进行数据传输的通信协议和硬件实现方式。
它是计算机和外设之间最常用的通信方式之一,也是嵌入式系统和单片机等小型设备中常用的通信方式。
UART通过串行方式传输数据,即通过单一的数据线一次只能传输一个bit位。
在串口通信中,通常需要两条线,一条用于发送数据(TX),一条用于接收数据(RX)。
UART通常通过一对相互连接的芯片实现,称为UART芯片或UART模块。
它包含一个发送器和一个接收器。
发送器将要发送的数据从并行格式转换为串行格式,并通过发送线路发送出去。
接收器则接收到的串行数据转换为并行格式以供系统使用。
UART芯片通常由硬件设计工程师在集成电路中设计和实现。
UART通信具有以下特点和优势:1.简单易用:UART通信是一种非常简单和易用的通信协议。
它的实现简单,适用于各种不同的应用场景。
2.可靠性高:UART通信使用的是硬件实现,不受软件的控制和干扰。
它具有较高的可靠性和稳定性。
3. 速度灵活可调:UART通信可以根据不同的应用需求进行速度调整。
通常,UART通信支持的波特率范围很大,可以从几十bps到多Mbps。
4.支持半双工和全双工通信:UART通信可以支持半双工和全双工两种通信方式。
在半双工模式下,发送和接收不能同时进行;而在全双工模式下,可以同时进行发送和接收。
5.通信距离远:UART通信使用串行线路进行数据传输,因此可以通过扩展串行线路的长度来实现较远距离的通信。
6.多种应用:UART通信广泛应用于各种设备和领域,如计算机、嵌入式系统、单片机、电子设备、通信设备等。
值得注意的是,UART通信只是一个物理层的通信协议,它只负责数据的传输,而不负责数据的解码和处理。
因此,在使用UART通信时,通常需要配合其他协议或编码方式,如RS-232、RS-485、Modbus等,来完成完整的通信过程。
总结来说,UART通信是一种简单、可靠、灵活的串行通信协议和硬件实现方式。
uart串口通信电路设计 -回复

uart串口通信电路设计-回复UART(通用异步收发传输)是一种常用的串口通信协议,可以实现设备之间的数据传输和通信。
在本文中,将详细介绍UART串口通信电路的设计步骤。
一、什么是UART串口通信电路?UART串口通信电路是一种数字电路,用于将串行数据转换为并行数据,实现设备之间的数据传输和通信。
UART串口通信电路通常由发送电路和接收电路两部分组成。
发送电路:发送电路将并行数据转换为串行数据,并对数据进行格式化。
它通常由一个发送缓冲器、一个发送时钟和控制逻辑组成。
接收电路:接收电路将串行数据转换为并行数据,并对数据进行解码和处理。
它通常由一个接收缓冲器、一个接收时钟和控制逻辑组成。
二、UART串口通信电路的设计步骤1. 确定通信参数在设计UART串口通信电路之前,首先需要确定通信参数,包括波特率、数据位数、校验位数和停止位数等。
这些参数将决定串口通信的速率和精度。
2. 设计发送电路发送电路的主要任务是将并行数据转换为串行数据,并将数据发送到接收设备。
设计发送电路时,需要考虑以下几点:(1)发送缓冲器:发送缓冲器用于存储待发送的数据。
它通常由一个FIFO (先进先出)缓冲器实现,可以提高通信的效率。
(2)时钟和控制逻辑:发送电路需要一个时钟信号来同步数据传输,并且需要控制逻辑来控制数据的发送和处理。
(3)格式化:发送电路需要对数据进行格式化,包括数据位、校验位和停止位的配置。
格式化的目的是提高数据的准确性和可靠性。
3. 设计接收电路接收电路的主要任务是将串行数据转换为并行数据,并将数据传输到接收设备。
设计接收电路时,需要考虑以下几点:(1)接收缓冲器:接收缓冲器用于存储接收到的数据。
它通常由一个FIFO 缓冲器实现,可以提高数据的接收效率。
(2)时钟和控制逻辑:接收电路需要一个时钟信号来同步数据传输,并且需要控制逻辑来控制数据的接收和处理。
(3)解码和处理:接收电路需要对接收到的数据进行解码和处理,包括校验数据的正确性和提取有效数据。
嵌入式系统中的接口设计与标准选择

嵌入式系统中的接口设计与标准选择在嵌入式系统开发中,接口设计与标准选择是非常重要的。
一个好的接口设计可以提高系统的可靠性、可扩展性和性能;而正确选择适合的标准可以简化开发过程、提高系统的互操作性和可维护性。
本文将从接口设计和标准选择两个方面,对嵌入式系统中的接口设计与标准选择进行探讨。
一、接口设计在嵌入式系统中,接口是不同模块之间进行数据交换和通信的桥梁。
良好的接口设计可以提高系统的稳定性和可靠性。
以下是一些关键的接口设计原则:1. 明确定义接口功能:每个接口都应该有一个明确定义的功能,以便于理解和使用。
接口的输入和输出应该清晰地定义,并遵循一致的命名规则。
2. 尽量简化接口:一个接口应该尽量只包含必要的功能和参数,避免在接口中混入不相关的信息。
这样可以减少系统的复杂度,并提高代码的可读性和可维护性。
3. 考虑数据传输的效率:在设计接口时,需要考虑数据传输的效率。
选择合适的数据传输方式和协议可以提高系统的性能和响应速度。
例如,对于实时性要求较高的系统,可以选择使用DMA(直接内存访问)技术来提高数据传输效率。
4. 异常处理和错误检测:接口设计应该考虑到异常情况和错误检测。
合理的异常处理机制和错误检测方法可以提高系统的可靠性和容错性。
5. 编写清晰的文档和示例代码:为了帮助其他开发人员使用接口,应该编写清晰的文档和提供示例代码。
文档应该描述接口的使用方法、输入输出参数的含义,以及常见问题的解决方法。
示例代码可以帮助其他开发人员更快地理解和使用接口。
二、标准选择在嵌入式系统开发中,选择适合的标准可以极大地简化开发过程,并提高系统的互操作性和可维护性。
以下是一些常见的标准选择:1. 总线标准:总线是多个模块之间进行数据传输和通信的标准化接口。
选择适合的总线标准可以提高系统的可扩展性和互操作性。
常见的总线标准包括I2C、SPI、CAN等。
选择时需要考虑接口的带宽要求、实时性要求以及外部设备的支持情况。
2. 通信标准:嵌入式系统中常常需要与外部设备或其他系统进行通信。
嵌入式_USART 串口通讯

USART_HardwareFlowControl_None;
USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USARTy */
int main(void)
{/* System Clocks Configuration */
RCC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
USART_ART_BaudRate = 230400;
/* Enable the USARTz */
USART_Cmd(USARTz, ENABLE);
while(TxCounter < TxBufferSize)
{
/* Send one byte from USARTy to USARTz */
USART_SendData(USARTy, TxBuffer[TxCounter++]);
LCD_Clear(White);
/* Set the LCD Text Color */
LCD_SetTextColor(Black);
printf(" STM3210C-EVAL \n");
printf("USART with interrupt\n");
/* Check the received data with the send ones */
2.打开示例程序工程
\basic_examples\STM32F10x_StdPeriph_Examples\16-USART\01-Polling\RVMDK,
基于UART Ip核实现嵌入式微处理器扩展多串口电路的设计
Γ
/ 2 . .
Γ Θ
5 Ε
Π5 Κ
Ε
二 Ε 9 Ε Α5
;
二
,
Η
!
Κ
;
4 Ρ=
34
(
)
二 ’
99 9 99 9 99 9
99 9
‘
5 3Φ
=
口扫口 口口 口口 ,
利
()
二
,
Α
5 =
’
5
5Ε
()
9
,
;
Γ ?一 Θ ;4
3
’
Υ 片选, . /
4
图
Δ
) (
为基 于发送
,
工 9
的发送 数据 状态机
电子
科学
从
#字 节的发 送 % &
黔鬓
量 为! 所示
, ,
,
基 于 % &设计 的 发送 数据有 限状 态机如 图
,
。
) (
服 务程 序
,
在中断服 务过 程 中
,
,
处理 器 按 顺序逐 个检查 多个扩 展 口 的 串 口
,
一 开始
,
发送 % & 处于 空 的状态
通 过 使能 % & 写入 信号 将数据 先
<
7.
9
8
9
8
9
7.
8
,
1
,
分 别为 四个,
Φ
9.
(
9 .
的 中断信 号 #
7 =Φ
;/ 1
8
9 2
!二 )
9 : .
1
Φ
嵌入式系统中的硬件模块选型与接口设计
嵌入式系统中的硬件模块选型与接口设计嵌入式系统的设计过程中,硬件模块选型和接口设计是至关重要的步骤。
硬件模块的选型决定了嵌入式系统的功能和性能,而接口设计则决定了模块之间的通信和数据交换方式。
在本文中,我们将探讨嵌入式系统中的硬件模块选型与接口设计的方法和注意事项。
1. 硬件模块选型在选择硬件模块时,需要考虑系统的需求和性能要求。
以下是一些常见的硬件模块及其选型方向。
处理器和微控制器:选择适合项目需求的处理器或微控制器非常重要。
需要考虑处理器的性能、功耗、支持的外设接口等因素。
如果需要高性能计算,可以选择性能强大的处理器。
如果对功耗有严格要求,可以选择低功耗的微控制器。
存储器:存储器的选择主要包括闪存、RAM和EEPROM。
闪存适合用于存储程序代码和数据,RAM适合用于临时存储数据,而EEPROM适合用于存储持久性数据。
根据系统的存储需求,选择合适的存储器容量和类型。
通信模块:根据系统需要进行通信的类型和方式,可以选择不同的通信模块。
常见的通信模块包括Wi-Fi、蓝牙、以太网、CAN总线等。
根据系统的通信需求和通信距离,选择适合的通信模块。
传感器和执行器:根据系统的功能需求,选择合适的传感器和执行器非常重要。
例如,如果需要监测温度和湿度,可以选择温湿度传感器。
如果需要控制电机,可以选择合适的电机驱动器。
2. 硬件接口设计硬件接口设计是模块之间相互连接和通信的基础。
以下是一些常见的硬件接口设计考虑因素。
物理接口:在设计硬件接口时,首先需要考虑物理接口的类型和规范。
例如,常见的物理接口包括USB、UART、SPI和I2C接口等。
选择合适的物理接口是确保模块之间可靠连接和通信的关键。
电源和信号电平:在接口设计中,需要考虑电源和信号电平的匹配。
确保模块之间的电源和信号电平兼容并正确连接。
如果信号电平不匹配,可能导致通信错误或模块损坏。
数据传输速率:根据系统的要求和通信模块的能力,选择合适的数据传输速率。
嵌入式系统的模块化设计
嵌入式系统的模块化设计嵌入式系统的模块化设计是当今技术领域中的一项重要发展趋势。
它能够提高系统的灵活性和可维护性,并减少系统开发周期和成本。
本文将探讨嵌入式系统的模块化设计原理、优势及实践方法。
一、模块化设计原理模块化设计是将一个系统划分为多个功能独立、结构清晰的模块,并通过定义合适的接口进行模块间的通信和协作。
在嵌入式系统中,模块通常对应于硬件或软件的功能单元。
1.1 硬件模块化设计硬件模块化设计是将嵌入式系统的硬件部分划分为多个独立的模块。
每个模块都具有明确的功能和接口,可以独立设计、测试和维护。
例如,将处理器、存储器、输入输出接口等功能模块划分为独立的硬件模块,以实现灵活的硬件配置和扩展。
1.2 软件模块化设计软件模块化设计是将嵌入式系统的软件部分划分为多个独立的模块。
每个模块负责完成系统的一个特定功能,模块之间通过定义良好的接口进行交互。
采用软件模块化设计可以提高系统的可维护性和可重用性。
二、模块化设计的优势嵌入式系统的模块化设计具有以下优势:2.1 灵活性模块化设计使得系统更加灵活,可以根据需求进行模块的增减或替换,而无需对整个系统进行重构。
这样可以快速响应市场变化,降低产品设计的风险。
2.2 可维护性模块化设计简化了系统的维护工作。
当一个模块发生问题时,可以独立排查和修复,无需对整个系统进行检修。
这样可以提高系统的可靠性和可维护性。
2.3 成本效益模块化设计有助于降低系统开发和维护的成本。
模块的可重用性使得开发者能够更加高效地开发新的系统,并利用已有的模块进行快速组装和部署。
三、模块化设计的实践方法为了实现嵌入式系统的模块化设计,我们可以采用以下实践方法:3.1 标准化接口每个模块都应定义清晰的接口,包括输入、输出、参数等。
接口的标准化有助于模块之间的通信和协作,提高模块的可重用性和互操作性。
3.2 模块间通信在嵌入式系统中,模块之间需要进行通信。
可以使用标准的通信协议,如SPI、UART、I2C等,以实现模块之间的数据传输和交互。
USB_UART
USB_UART使用文档RS232串口与桥接USB接口2) .USB接口使用说明实验板V3.0使用USB->UART桥接器CP2102,使得该USB的调试以及开发都相当方便,无需任何USB协议知识和驱动程序的开发,即可方便使用USB接口,其操作方法跟串口一样。
我们的资料光碟附带了该桥接器芯片的驱动程序,以及串口调试助手,安装驱动后,即可用串口调试助手做USB通信实验(如有更新,我们将在网站上公布)。
安装驱动后,PC机会增加一个虚拟的COM口(例如,如果PC机共有2个COM口:COM1和COM2,则COM3或COM4即是该USB芯片的虚拟串口通道,所有的通信都通过这个COM口通道进行)。
随学习套件的光碟中,附带了该芯片的数据手册、驱动程序,以及例子程序。
在实验前需要安装USB至UART桥接器CP2102的驱动程序,下面详细介绍该USB驱动的安装以及使用说明:3.3.1 USB驱动安装方法以下为Windows2000的安装界面,其它操作系统,请类似地根据向导进行。
将USB电缆的一头插到PC机的USB插座,另一头插入实验板V2.0的USB方形插座,出现“欢迎找到新硬件向导”:按“下一步”,在“您期待向导做什么”选择“搜索适合我的设备的驱动程序”,如下图:按下一步,在“可选的搜索位置”选择“指定一个位置”,按“下一步”,在弹出的文件目录对话框中按“浏览”按钮,打开“查找文件对话框”:从驱动程序所在的目录(例如,如果我们将驱动程序的文件夹“CP210x”拷贝在C盘根目录下,则驱动所在目录为:C:\CP210x\WIN)找到“slabw2k.inf”文件,点击“打开”,返回目录浏览对话框:点击“确定”,出现如下信息:按“下一步”,出现提示已经安装驱动的信息:点击“完成”。
此时,驱动还没有完全安装好,因为该芯片的驱动有两部分,因此点击“完成”按钮后自动进入下一部分驱动的安装界面:点击“下一步”,类似以上步骤根据向导进行,直到选择文件时,选择“slabbus.inf”文件,如下图:点击“打开”,余下的步骤顺着向导,一路执行“下一步”,直到提示完成安装驱动程序界面:点击“完成”即可完成CP2102驱动的安装。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式UART接口模块的设计引言在计算机的数据通信中,外设一般不能与计算机直接相连,它们之间的信息交换主要存在以下问题:(1)速度不匹配。
外设的工作速度和计算机的工作速度不一样,而且外设之间的工作速度差异也比较大。
(2)数据格式不匹配。
不同的外设在进行信息存储和处理时的数据格式可能不同,例如最基本的数据格式可分为并行数据和串行数据。
(3)信息类型不匹配。
不同的外设可能采用不同类型的型号,有些是模拟信号,有些是数字信号,因此采用的处理方式也不同。
为了解决外设和计算机之间的信息交换问题,即需要设计一个信息交换的中间环节接口。
UART控制器是最常用的接口。
通用异步收发器(UniversalAsynchrONousReceiv2er/Transmitter,UART)是辅助计算机与串行设备之间的通信,作为RS232通信接口的一个重要的部分,目前大部分的处理器都集成了UART。
1 UART的数据格式UART的数据传输格式。
图1 UART的数据传输格式由于数字图像亚像素在计算机中是用8位二进制表示,因此UART传输的有效数据位为8位。
传输线在空闲时为高电平,因此有效数据流的开始位设为0。
接着传输8位有效数据位,先从最低位开始传送。
奇偶检验位可以设置为奇检验、偶校验或者不设置校验位,由于本系统使用的传输速率不高,为了加快开发进程,减少电路面积,因此没有设计奇偶检验模块,数据流中不设奇偶检验位。
最后停止位为高电平。
2 UART的基本结构设计的UART主要由UART内核、信号检测器、移位寄存器移位寄存器、波特率发生器和计数器组成,。
图2 UART基本结构UART各个功能模块的功能如下文所述。
2.1 信号检测器模块信号检测器用于对RS232的输入信号进行实时监测,一旦发现新的数据则立即通知UART 内核。
信号检测器的仿真波形。
图3 信号检测器仿真波形图其中,RxD第一次为低时,new_data信号阐述输出,之后RxD又变低,但由于信号检测器处于锁定状态,所以new_data信号并没有输出;最后,reset_n信号将信号检测器复位,RxD再次变低时,new_data又有输出。
可见信号检测器的实现完全正确,其功能完全符合设计要求。
2.2 移位寄存器模块移位寄存器模块的作用是存储输入或者输出数据。
当UART接收RS232输入时,移位寄存器在波特率模式下采集RS232输入信号,且保存结果;当进行RS232输出时,UART内核首先将数据加载到移位寄存器内,再使移位寄存器在波特率模式下将数据输出到RS232输出端口上。
移位寄存器的仿真波形图。
关键字:嵌入式嵌入式 UART接口模块UART接口模块图4 移位寄存器仿真波形图,移位寄存器在复位后的每个时钟的上升沿工作。
由于数据发送时是先发送有效数据的最低位,因此移位寄存器是将接收的数据由高位向低位移动,dout输出移位寄存器的最低位。
图中的regs数据用16进制表示。
2.3 波特率发生器模块波特率发生器的功能是产生和RS232通信所采用的波特率同步的时钟,这样才能方便地按照RS232串行通信的时序要求进行数据接收或者发送。
比如,波特率为9600b/s,即每秒传输9600b数据,则同步的波特率时钟频率为9600Hz,周期为1/9600=0.10417。
设计波特率时钟的基本思路就是设计一个计数器,该计数器工作在速度很高的系统时钟下,当计数器计数到某数值时将输出置高,再计数到一定的数值后再将输出置低,如此反复便能够得到所需的波特率时钟。
该系统所用的FPGA系统时钟为50MHz,RS232通信的波特率为9600b/s,则波特率时钟的每个周期相当于5208个系统时钟周期。
假如要得到占空比为50%的波特率时钟,只要使得计数器在计数到1604时将输出置高,之后在计数到5208时将输出置低并且重新计数,就能实现和9600波特率同步的时钟。
为了便于仿真,使计数器计到2时将输出置高,之后计到4时将输出置地并且重新计数。
波特率发生器的仿真波形图。
图5 波特率发生器仿真波形图观察波形可以看到波特率发生器每经过4个时钟周期输出1个完整的波特率时钟周期,占空比为1/2,并且在每次输出波特率时钟周期之后输出1个系统时钟脉宽的提示信号indicator,UART通过此信号来了解波特率发生器已输出的波特率时钟周期个数。
由波形图可见波特率发生器的工作完全满足设计的要求。
2.4 计数器模块计数器模块的功能是可控的,在输入时钟的驱动下进行计数,当达到计数上阈时给UART 内核一个提示信号。
在不同的工作状态下,计数器模块的输入时钟是不同的。
UART在数据发送之前需要进行数据加载(即将串行序列保存在移位寄存器内),在此工程中计数器模块的输入时钟为系统时钟,因为此时移位寄存器也工作在系统时钟下。
除了数据加载,另外2个需要计数器模块的过程是数据接收和数据发送。
由于这两个过程中移位寄存器工作在波特率时钟下,所以计数器模块的时钟就是与波特率时钟同步的波特率发生器提示信号indicator,这样每输出1个完整的波特率时钟周期计数器就能增加1。
计数器的仿真波形图。
图6 计数器仿真波形图计数器在复位后并且ce有效时开始计数,并且在第10个时钟周期输出提示信号overflow。
2.5 发送数据缓冲器模块发送数据缓冲器模块的功能是将要发送的并行数据转换成串行数据,并且在输出的串行数据流中加人起始位和停止位。
缓冲器首先将要发送的8位数据寄存,并在最低位后添加起始位‘0’,在最高位前添加停止位‘1’,组成10位要发送的数据,然后根据UART内核模块的计数值将相应的数据送入移位寄存器输入端。
UART内核模块输出的计数值是从0依次计到9,即先将要发送数据的最低位送入移位寄存器。
发送数据缓冲器的仿真波形图。
图7 发送数据缓冲器仿真波形图由波形图可知,发送数据缓冲器在复位后,在输入的计数值si_count为0时,send_si 输出起始位‘0’。
在输入的计数值si_count为1~8时,send_si分别输出send_bus上相应的数据位。
在输入的计数值si_count为9时,send_si输出停止位‘1’。
2.6 UART内核模块UART内核模块是整个设计的核心。
在数据接收时,UART内核模块负责控制波特率发生器和移位寄存器,使得移位寄存器在波特率时钟的驱动下同步地接收并且保存RS232接收端口上的数据。
在数据发送时,UART内核模块首先根据待发送数据产生完整的发送数据序列(包括起始位、数据位和停止位),之后控制移位寄存器将序列加载到移位寄存器的内部寄存器里,最后再控制波特率发生器驱动移位寄存器将数据串行输出。
UART内核模块的主要功能是控制数据接收、数据加载和数据发送的过程,这可以用状态机来实现,其状态图。
图8 UART内核状态转移图(1)数据加载过程。
数据的接收过程可以定义3个状态:空闲“idle”状态、接收“receive”和接收完成“receive_over”。
UART内核模块在复位后进入空闲状态。
如果信号检测器检测到数据传输,即new_data=‘1’,UART 内核检测到此信号就会进入接收状态。
在UART进入由空闲状态转为接收状态过程中,需要进行一系列的接收预备操作,包括将子模块复位、选择移位寄存器串行输入数据以及选择移位寄存器的输入时钟等。
进入接收状态后,波特率发生器开始工作,其输出波特率时钟驱动移位寄存器同步的存储RS232接收端口上的数据,并且其提示信号“indicator”驱动计数器进行计数。
当所有数据接收完成,计数器也达到了其计数的上阈,此时overflow=‘1’,通知UART内核进入接收状态。
UART内核进入接收完成状态的同时,会检奇偶校验的结果,同时使得子模块使能信号无效,以停止各个子模块。
UART内核的接收完成状态仅保持1个时钟周期,设置这个状态的作用是借用一个时钟周期复位信号检测器,准备接收下次数据传输。
检测器,准备接收下次数据传输。
(2)数据加载和发送过程。
数据加载和发送的过程都是为发送数据而设定的,所以将它们放在一起进行介绍,可以用4个状态来实现上述的过程,即空闲、加载、发送和发送完成。
其中的空闲状态是UART内核复位后的空闲状态,与上面介绍的数据接收过程的空闲状态一致。
数据加载过程在数据发送过程之前进行。
UART内核复位后进入空闲状态,当探测到发送控制信号有效时,即send=‘1’,便会进入加载状态开始数据加载。
在进入加载状态的同时,UART内核会将移位寄存器、计数器复位,并且通过选择信号使得移位寄存器的输入为发送数据缓冲器模块产生的串行数据序列,使得移位寄存器和计数器的工作时钟为系统时钟。
进入加载状态后,在UART内核控制下,发送数据缓冲器模块会将完整的待发送序列加载到移位寄存器的数据输入端,发送的序列是和系统时钟同步的,移位寄存器在系统时钟的驱动下不断读入输入端数据并保存在内部寄存器内。
在移位寄存器加载数据的同时,计数器也在时钟的驱动下进行计数,由于都是工作在系统时钟下,所以当所有数据被加载时,计数器也达到了计数的上阈(即串行数据的总量),此时overflow=‘1’,通知UART内核进入发送状态。
UART内核进入发送状态的同时会改变几个选择信号,比如将移位寄存器的时钟设为波特率时钟,将计数器时钟设为波特率的提示信号,最重要的是将输出信号送到RS232的发送端口TxD上。
发送的过程和接收类似,移位寄存器在波特率时钟的驱动下内部寄存器的数据串行的发送出去,同时计数器在波特率发生器的提示信号驱动下进行计数。
UART内核在计数器到达计数上阈后便进入发送完成模式,并且输出发送完成信号。
3 UART顶层模块的仿真测试将上述各个模块的VHDL代码生成原理图符号,并在原理图编辑工具中将各个模块连接起组成1个完整的UART模块。
为了验证UART模块的正确性,对UART的发送过程和接收过程分别进行了波形仿真。
为便于观察波形,波特率产生器设置为4个系统时钟产生一个完整的波特率时钟。
图9是UART模块接收过程的仿真波形图。
图9 UART数据接收过程的仿真波形图由仿真波形图可以看出,接收端RxD上的数据序列为010*******,起始位‘0’后为数据位“10101010”,最后一位为停止位‘1’。