微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 基于ARM9和CPLD的输入输出系统设计

基于ARM9和CPLD的输入输出系统设计

时间:04-09 来源:互联网 点击:
2 系统软件设计

2.1驱动程序设计思想

输入输出模块驱动程序基于流接口驱动程序类型进行设计。驱动程序的设计一方面应根据实现功能考虑到物理地址的合理分配,另一方面应考虑到与应用程序的接口。下面就围绕这两个方面具体论述驱动程序的设计思想。

2.1.1物理地址的合理分配

对输入模块,包含有如下两种操作。(1)读lD码;(2)读取输入端口数据。对输出模块,包含有如下两种操作。(1)读ID码;(2)写数据至输出端口。

为了保证驱动程序的通用行,即是说,对插入某个插槽的模块,无论是是输入模块,还是输出模块,驱动程序结构是一样的。可对每个插槽分配三个物理地址,包括读取ID码地址(简称“ID地址”)、读取输人模块数据地址(简称“读地址”)、写数据至输出模块地址(简称“写地址”)。应用程序通过“ID地址”读取的ID码数据判断模块的类型,进而通过“读地址”对输入模块进行读操作,或是通过“写地址”对输出模块进行写操作。对输入输出模块的读写操作包含字操作、字节操作、位操作三种方式,可在驱动程序中通过“与运算和移位运算”变换实现。对每一插槽,三个物理地址可如表1分配:

表1应用模块物理地址分配


在初始化函数(IO_Init)中,通过函数VirtualAlloc()和VirtualCopy()把EP9315针对输入输I叶J模块的物理地址和操作系统的虚拟空间联系起来,实现地址映射。

2.1.2输入输出模块读写操作实现

操作输入输出模块的应用程序流程可简述如下[3]:发送“读模块ID命令码”->接收驱动程序返回数据(即模块ID码)->根据模块ID码判断模块类型(输入模块还是输出模块)->根据模块具备功能发相关命令码进行模块读操作或写操作(包括字操作、字节操作和位操作三种情况)。

驱动程序设计思路如下:在写函数(IO_WRITE)中实现功能为:接受命令码,并将命令码存入某指定变量一判断命令码是否是写命令码一若是就执行写操作(包括字操作、字节操作和位操作三种情况)。在读函数(IO_READ)中实现功能为:判断命令码是否是读命令码一若是就执行读操作并返回读取的数据(包括字操作、字节操作和位操作三种情况)。

2.1.3输入输出模块读写脉宽的调整

EP9315在WinCE操作系统下主频达到200MHz,总线频率为100MHz,外设时钟为50MHz,因而,EP9315发出的读写及使能信号脉宽不足50ns。可以通过改变EP9315的BANK3上的读写时序.使其能和CPLD交互。具体可通过设置应用模块地址空间存储空问读写特性寄存器SMCBCR3中等待时间位WST1和WST2实现。

若SMCBCR3的代码设置为:SMCBCR3=2000ffef实现功能为:设置nCS3数据宽度为32bits,读写脉宽为320ns。这种设置使得CPLD拥有较低的总线频率,满足对CPLD的读写时序要求。

3 小结

本文作者创新点是基于MAX2_EPM240进行了输入输出模块的硬件软件设计,在Windows CE.net操作系统下,实现了EP9315嵌入式系统对输入输出模块的控制,且可根据实际需要,灵活选用各类模块。该系统功耗低、稳定性好,适合工业控制中的运用。

作者:许弟建      来源:《微计算机信息》(嵌入式与SOC)2009年第3-2期

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

网站地图

Top