微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的UART扩展总线设备逻辑设计

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

时间:06-05 来源:互联网 点击:

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 内部还可以添加其他通信模块,增强了系统的可扩展性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top