英创信息技术EM9170工控主板ISA总线数据介绍

描述

EM9170工控主板的精简ISA总线包括8位数据总线、5位地址总线、片选控制线、读写控制线以及中断请求线。所提供的评估开发底板将这些信号线制定了一个接口标准,采用双排20芯 IDC插针,用户可利用精简ISA总线进行系统功能的扩展。本文着重从软件开发使用的角度来介绍ISA总线读写操作的使用方法。

EM9170预装WinCE 6.0,WinCE 6.0和WinCE 5.0一个比较大的区别就是用户数据区和内核数据区完全分开,应用程序无法进行指定地址的读写操作,因此在EM9170上ISA总线的是以流式驱动程序的方式来实现对其读写的操作,ISA总线设备的名称为: _T(“ISA1:”),通过标准的CreateFile()函数打开该设备,对ISA总线数据的读写,EM9170的ISA驱动程序提供了两种方式。一种是单个字节的数据读写,一种是基于同一ISA地址的连续读写操作。针对这两种方式分别定义以下两种数据结构:

typedef struct
{
        DWORD dwCmd; // = 0: ISA读操作, = 1: ISA写操作
        DWORD dwSeg; // = 0: ISA_CS0#, = 1: ISA_CS1#
        DWORD dwOffset; // ISA地址偏移量:0 – 31
        DWORD dwValue; // 数据值,只有低8位有效
} ISA_BUS_ACCESS, *PISA_BUS_ACCESS;
typedef struct
{
        DWORD dwCmd; // 保留,恒为0
        DWORD dwSeg; // = 0: ISA_CS0#, = 1: ISA_CS1#
        DWORD dwOffset; // ISA地址偏移量:0 – 31
        PBYTE pBuf; // 数据
        DWORD dwLength; // 数据长度,以字节为单位
} ISA_BUS_BLOCK_ACCESS, *PISA_BUS_BLOCK_ACCESS;
        第一种是单个字节的数据读写操作。应用程序通过调用相应的DeviceIoControl( )函数进行ISA数据读写操作,所带参类型为ISA_BUS_ACCESS。如:

BOOL ISA_Read( HANDLE hISA_DIO, int nSeg, unsigned int nOffset, unsigned char *pRdValue )
{
        ISA_BUS_ACCESS isabus;
        isabus.dwCmd = 0;
        isabus.dwSeg = nSeg;
        isabus.dwOffset = nOffset;
        isabus.dwValue = 0;
        if (!DeviceIoControl(hISA_DIO, // file handle to the driver
                ISA_IOCTL_READ_WRITE, // I/O control code
                &isabus, // in buffer
                sizeof(ISA_BUS_ACCESS), // in buffer size
                pRdValue, // out buffer
                sizeof(UCHAR), // out buffer size
                NULL, // pointer to number of bytes returned 
                NULL)) // ignored (=NULL)
        {
                return FALSE;
        }
        return TRUE;
}
        第二种是基于相同ISA地址的连续读写操作。应用程序通过调用标准的函数ReadFile() 、WriteFile( ),所带参类型为ISA_BUS_BLOCK_ACCESS,如:

ISA_BUS_BLOCK_ACCESS isa_block;
isa_block.dwCmd = 0; // 恒为0
isa_block.dwLength = 16; // 读写数据块长度,以字节为单位
isa_block.dwSeg = 1; // 使用ISA_CS1#
isa_block.pBuf = Buf; // 读写数据buffer指针
bRet = ReadFile( hISA, (LPVOID)&isa_block, sizeof(ISA_BUS_BLOCK_ACCESS), &dwLen, NULL );
bRet = WriteFile( hISA, (LPVOID)&isa_block, sizeof(ISA_BUS_BLOCK_ACCESS), &dwLen, NULL );
        经过测试在EM9170板卡上,第一种单个字节ISA数据读写周期为12us;第二种连续读写方式其周期为380ns。用户可根据实际情况进行选择,相关的测试参考代码可参考英创提供开发光盘中的相关资料。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分