基于FPGA的UART扩展总线设备逻辑设计

发布者:温暖阳光最新更新时间:2013-09-13 来源: eefocus关键字:自动抄表系统  AT91ARM9200  UART 手机看文章 扫描二维码
随时随地手机看文章
1 引言

在嵌入式领域,由于UART 具有操作简单、工作可靠、抗干扰强、传输距离远(组成 485 网络可以传输1,200 米以上),设计人员普遍认为UART 是从CPU 或微控制器向系统的其他部分传输数据的最佳方式,因此它们被大量地应用在工业、通信和家电控制等嵌入式领 域。而通常处理器都会自带一个UART 串口,实际应用中一个串口往往不够用,需要进行 UART 串口扩展。而本文在分析了片内总线技术和UART 的工作原理的基础上了实现UART 总线设备的设计,使主控芯片可以控制4~6 个外围设备。

本文中的嵌入式系统由AT91ARM9200 处理器、Linux 操作系统和ALTERA 公司的 ACEX 系列的EP1K 所组成。

2 EP1K 的逻辑设计

设计所要实现的功能是 AT91ARM9200 处理器通过EP1K 控制多个带有UART 接口的 外设。EP1K 中包含了多个逻辑模块如图1 所示,为了实现多个模块间的互联就需要片内总 线的支持,而本文采用的是WISHBONE 片内总线规范。


2.1 WISHBONE 总线设计


WISHBONE采用主从结构,也称之为SLAVE/MASTER 结构。主单元MASTER 是发起 与从单元SLAVE 之间的数据传输,MASTER 和SLAVE 通过握手协议来实现可靠通信的。

WISHBONE 总线架构提供了四种不同的互联方式:点对点(Point-to-point)、数据流(Data flow)、共享总线(Shared bus)和交叉开关(Crossbar switch)。为了实现单个MASTER 和多个SLAVE 的设计要求,同时要求总线结构占用较少的逻辑单元,所以采用了共享总线 的互联方式。

共享总线应包括 MASTER、SLAVE、INTERCON 和SYSCON 四个部分。MASTER 和 SLAVE 是实现总线信号与IP 核的信号转换,INTERCON 用于MATER 和Slave 的信号互联, 而SYSCON 则提供稳定的时钟信号和复位信号。总线逻辑结构如图2 所示,因为只有一个 MASTER,设计时就省略了对总线使用权的总裁。MASTER 的地址和数据总线分别与四个 SLAVE 相联,其它的控制信号也都是直接相连,而SLAVE 的选通是通过stb 信号实现。 SLAVE 的stb 信号是由地址译码产生SLAVE 选择信号s_sel、m_cyc 和m_stb 三个信号相与 的结果。所选通的SLAVE 将ack 信号置1 表明一个数据传输周期的正常结束并将数据锁存 或发送到总线上,而err 信号置1 表示非正常结束,rty 信号置1 表示要求数据重发。

图 2 WISHBONE 总线的逻辑结构图

总线的详细设计过程请参考 WISHBONE SoC Architecture Specification, Revision B.3,而 MASTER 和SLAVE 的设计可以参考OpenCores 的网站上相关设计。

2.2 UART 的逻辑设计

UART 的通信协议十分简单,以低电平作为起始位,高电平作为停止位,中间可传输 5~8 比特数据和1 比特奇偶校验位,奇偶校验位的有无和数据比特的长度由通信双方约定。一帧数据传输完毕后可以继续传输下一帧数据,也可以继续保持为高电平,两帧之间 保持高电平,持续时间可以任意长。

UART模块由SLAVE接口、波特率控制器、UART接收器和UART发送器构成。SLAVE 接口是为了实现WISHBONE 总线和功能模块之间的数据传输;UART 发送器的用途是将准备输出的并行数据按照基本UART 帧格式转为TXD 信号串行输出;UART 接收器接收RXD 串行信号,并将其转化为并行数据,但串并转换的时钟同发送器一样处理,收发设备间的时钟是会累计的,会导致接收数据不正确,波特率控制器就是专门产生一个远远高于波特率的 本地时钟信号对输入RXD 不断采样,以不断地让接收器与发送器保持同步。[page]

波特率控制器实际上就是一个简单的分频器。可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子。已算出的波特率分频因子作为分频器的分频数。 对于波特率发生器中的系数一般在FPGA 实现时往往是固定的,但对于不同的实现,这个 系数需要更改。波特率控制器产生的分频时钟,不是波特率时钟,而是波特率时钟的16 倍,目的是为了在接收事实进行精确地采样,以提出异步的串行数据。

UART 发送器由16 个字节FIFO 和信号发送器组成。FIFO 主要是起到数据缓存的作用,信号发送器的核心部分由有限状态机实现的,实现伪代码如下:
case (状态机状态)
空闲状态:if ( FIFO 中有数据 )
状态机跳转到 FIFO 读取状态;
else
状态机保持空闲状态;
FIFO 读取状态:读取FIFO 数据,保存到移位寄存器;状态机跳转到开始位状态;
开始位状态:时钟计数,发送开始位;计数结束后状态机跳转到数据位状态;
数据位状态:时钟计数,发送数据,移位寄存器移位;计数结束后
if(移位寄存器内数据发送完毕)
状态机跳转到停止位状态;
else
状态机跳转到数据位状态;
停止位状态:时钟计数,发送停止位;计数结束后状态机跳转到 s_idle;
default:状态机复位到空闲状态;
endcase

UART 接收器包括了16 个字节FIFO、信号同步器和信号接收器三个部分。其中信号同步器则是为了解决串行数据帧和接收时钟是异步问题,其它两部分和UART 发送器的中的 功能相似,只是数据传送的方向相反。

3 设备接口和驱动设计

3.1 设备接口设计

AT91ARM9200 芯片通过其静态存储控制器 (SMC)控制EP1K,而静态存储控制器 (SMC) 是控制外部静态存储器或外设的访问。 SMC 可编程地址达512M 字节。它有8 个 片选及一个26 位地址总线。16 位数据总线能配置与8 位或16 位外部器件连接。独立的读写控制信号允许存储器与外设直接连接。SMC 支持不同的允许单时钟周期存储器访问的访 问协议。它还提供外部等待请求能力。

因为 EP1K 内部设计使用的是8 位数据总线和8 位地址总线,所以AT91ARM9200 芯片与EP1K 相连的I/O 端口为 A[7:0],D[7:0],NRD 和NWR0。然而EP1K 内部采用 的WISHBONE 总线规范,其读写信号wb_we_o,高电平表示为写操作,低电平表示为 读操作。所以需要将NRD 和NWR0 进行相应的信号转换。而D[7:0]为双向端口IO, 所以在EP1K 的设计中采用三态门的设计。

3.2 设备驱动设计

AT91ARM9200 上运行的是Linux 操作系统,EP1K 作为一个外接设备正常运行,就需 要相应的linux 驱动程序。我们将EP1K 的看作一个普通的字符设备,其关键是如何实现两 个不同工作频率的设备正确通信。而静态存储控制器 (SMC)提供的多等待状态管理,只要 根据具体时序对SMC 片选寄存器进行设置就可以了。此例中的SMC 同时还控制flash 存储器、LCD 液晶显示器和其它外设,所以使用片选寄存器7,EP1K 的内部工作频率是6MHz, 为了使读写同步,设置插入36 个等待周期。具体代码如下:

其中at91_sys_write( )函数在include/arch/hardware.h 中,而且是在linux2.6 内核中才出现的。
Linux 的字符设备驱动分为设备初始化函数和设备卸载函数,并由内核宏module_init() 和module_exit()行进管理。

设备初始化函数首先要做的事情就是获取一个或多个设备编号。linux2.6 内核中提供了静态和动态分配。如果在已知所需设备编号情况下,静态分配不失为一种较好的工作方式,但是所选定的设备号若已分配给其它设备,就会造成冲突和麻烦。因此,建议采用动态分配 方式获取设备号。

同时使用 udev 在/dev/下动态生成设备文件,这样就避免使用命令或脚本创建设备文 件。管理类和类设备的相关内核函数:
struct class * class_create (struct module * owner, const char * name);
void class_destroy (struct class * cls );
struct class_device* class_device_create(structclass * cls, struct
class_device* parent, dev_t devt, struct device * device, const char * fmt, ...);
void class_device_destroy (struct class * cls, dev_t devt);
注意,以上函数是2.6.13 开始有的,在2.6.13 之前,应当使用class_simple 接口。

设备初始化函数随后的工作是建立字符设备,并将与具体字符设备的相关数据结构注册的设备中,如字符设备的文件操作接口file_operations。还有就是调用at91_sys_write( )函数完成静态存储控制器 (SMC)的寄存器配置和ioremap()函数完成设备地址到用户内存的映射。设备卸载函数的工作就恰恰相反,它包括了管理类,类设备和字符设备的销毁,映射内 存和设备号的释放。

4 结束语

本文的设计应用于一个远程自动抄表系统,该系统由用户电能表和抄表基站以及 GSM 模块等部分组成。抄表基站的核心AT91ARM9200 处理器以静态存储控制器(SMC)与EP1K 相连,通过EP1K 实现的UART 扩展总线设备对用户电能计量表进行管理,最后抄表数据由GSM 模块传给远端主机。此设计采用以FPGA 为实现方式试整个系统具有以下优点:1、系统设计具有灵活性,可以根据实际情况添加UART 模块;2、有效的保证了系统的知识产 权;3、在EP1K 内部还可以添加其他通信模块,增强了系统的可扩展性。

关键字:自动抄表系统  AT91ARM9200  UART 引用地址:基于FPGA的UART扩展总线设备逻辑设计

上一篇:基于AT90CAN128的CAN总线设计
下一篇:基于硬件协议栈的以太网远程数据传输系统

推荐阅读最新更新时间:2024-03-16 13:27

MSP430F169(二)——UART中断(论下)
1. UART中断工作的机制 UART只有一个发送中断向量和一个接收中断向量,通过判断中断向量的标志来控制数据的收发 1.1 发送机制 当用户想发送数据时,UxIFG产生一个中断,表明UxTXBUF已经准备好接收数据。当UxTXBUF接收字符后或中断被执行,URXIFG将会复位。 SWRST = 1或PUC会置位UxIFG (SWRST: 系统复位) SWRST = 1或PUC会复位UxIE 1.2接收机制 UxRXBUF每次接收一个字符并加载时,URXIFGx会产生一个中断标记 UxRXBUF被读取时或中断被执行时,URXIFG被自动复位 当PUC或SWRST = 1时UxRXIE 复位 建议接收中断函数的代码要精简,执
[单片机]
MSP430F249 IIC write and Uart send
//******************************************************************************/ #include msp430.h //注意:两次发送间隔必须要有延时,否则不能再次发送,串口发送格式: unsigned char PTxData ; // Pointer to TX data unsigned char pHead; unsigned char pTail; unsigned char TXByteCtr; const unsigned char TxData = // Table of data to tra
[单片机]
MSP430单片机uart
USART模块分别由波特率部分:波特率发生器,串行通讯接收/发送控制寄存器。接收部分,发送部分,端口IO部分。 利用串口调试软件,向串口发送一个字符,MSP430单片机接收到后从低功耗中唤醒.并将收接缓冲区的字符再发送到软件中.单片机发送完后又进入低功耗状态. #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 停止WDT UCTL0 = CHAR; // 设串口控制寄存器,设为8位字符格式 UTCTL0 = SSEL0; // 设串口控制寄存器所使用的时钟,选择UCLK = ACLK UBR00 = 0x0D; // 波特率设置32k/2400 - 13.65 UBR1
[单片机]
关于UART通信端口上射频干扰的研究
  有客户报告其中心位于840MHz左右的RF干扰影响配置成UART的串行通信端口,该接口位于包含一个AD6903(LeMansLCR+)数字式基带处理器的调制解调器和一台主处理机之间。   出现的问题是连接到AD6903GPIO_1引脚的UARTRX信号中出现噪声,每当射频(RF)干扰源出现时,信号平均电压就会远离其期望值。平均电压的偏移幅度取决于RF源的功率和频率。   图2显示当射频功率放大器接通时,进入AD6903的GPIO_1引脚上的UARTRX信号受到影响的情况。在图2中,进入AD6903的UARTRX用粉红色表示,来自主处理机的UARTTX信号用紫色表示,功率放大器使能用黄色表示,而AD6903VEXT电源用绿色表示。
[网络通信]
UART需要使用DMA发送吗?
DMA一种在嵌入式实时任务处理中常用的功能。 而UART发送数据包,使用DMA方式能大量减轻CPU处理的时间,使其CPU资源不被大量浪费,尤其在UART收发大量数据包(如高频率收发指令)时具有明显优势。 Ⅰ简述DMA DMA:Direct Memory Access,直接内存存取/访问。简单来说就是内存RAM直接和其他设备(外设)进行数据交互,而不需要CPU参与的一种控制器。 DMA它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的数据复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 ⅡDMA优点 DMA在系统
[单片机]
10、STM32的串口(UART)及串口通信原理(内附代码)
一、通信接口介绍 1、处理器与外部设备通信的两种方式: 并行通信 - 传输原理:数据各个位同时传输。 -优点:速度快 -缺点:占用引脚资源多 串行通信 - 传输原理:数据按位顺序传输(一位一位传输)。 -优点:占用引脚资源少 -缺点:速度相对较慢 2、串行通信三种传送方式: 单工: 数据传输只支持数据在一个方向上传输 半双工: 允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切
[单片机]
10、STM32的串口(<font color='red'>UART</font>)及串口通信原理(内附代码)
stm8s uart配置
uart一般配置为1个起始位,8个数据位,1个停止位,无奇偶校验。8s105只有UART2,初始化配置如下: UART2_CR1_M = 0;//一个起始位,8个数据位 UART2_CR1_PCEN = 0;//禁止奇偶校验 UART2_CR3_STOP = 0;//1个停止位 UART2_BRR2 = 0x01; UART2_BRR1 = 0x34; //8000000/9600 = 0x0341 UART2_CR2_TEN = 1;//发送使能 UART2_CR2_REN = 1;//接收使能 UART2_CR2_RIEN = 1;//接收中断使能 说明:初始化没什么可说的,注意一下
[单片机]
MB89P475的UART/SIO结构与应用
摘要:MB89P475是富士通公司生产的八位单片机。该单片机具有丰富的软、硬件资源和良好的EMC性能,可广泛应用于家电控制等产品中。该器件内含两路UART/SIO接口,非常适用于计算机集中控制和管理的多级通信控制系统中。文中介绍了该单片机的特点和UART/SIO结构,给出了MB89P475在LSP300型中央空调的计算机集控系统中的设计应用方法。 关键词:MB89P475;单片机;中央空调;计算机集控系统 MB89P475是富士通公司生产的F2MC-8L MB89470单片机系列产品。该产品具有丰富的软、硬件资源和良好的EMC性能, 而且其程序空间(16k%26;#215;8bits PROM)和数据空间(512%26;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved