EM9560工控主板是以EM9460工控主板为基础,并针对客户应用的需求,增加了更多通用数字IO,于2012年初推出的一款低成本嵌入式主板产品。该产品保持了Linux操作系统作为客户应用程序的软件平台,其基本接口功能API函数上也与前期产品EM9460完全兼容,从而保证了客户的应用程序可不加修改的直接运行于EM9560。
为了充分利用主板宝贵的管脚资源,我们为EM9560的精简ISA总线配置了更加灵活的使用方法,其中一种典型应用是保持精简ISA总线的LCD接口,而精简ISA总线的高位地址和扩展控制线共6位则作为数字输出DOUT0–DOUT5,其具体的对应关系如下:
精简ISA总线 | 专用数字输出 | 简要说明 |
ISA_SA3 | DOUT0 | 上电初始状态为高电平 |
ISA_SA4 | DOUT1 | 上电初始状态为高电平 |
ISA_CS0n | DOUT2 | 上电初始状态为高电平 |
ISA_CS1n | DOUT3 | 上电初始状态为高电平 |
ISA_WEn | DOUT4 | 上电初始状态为高电平 |
ISA_RDn | DOUT5 | 上电初始状态为高电平 |
在上述方案中,由于不再使用精简ISA总线扩展功能,这时系统的IO资源就只有GPIO0-GPIO15、GPIOX0–GPIOX29、以及DOUT0–DOUT5。如果IO资源仍然不够,可通过在精简ISA总线的数据总线上挂接一片简单的总线驱动芯片(如74HCT245),就可获得额外的8路专用的数字输入DIN0–DIN7。具体的电路如下:
上图中,SD0–SD7为精简ISA的数据总线,DIN0–DIN7为外部需要监测的数字输入,而DIN_EN#信号则由ISA_SA2充当。当应用程序进行相应的读操作时,ISA_SA2(即DIN_EN#)将输出低电平脉冲把DIN0–DIN7导入EM9560。
应用程序通过打开“/dev/em9x60_isa”设备驱动文件,通过标准的读写操作就可实现对专用数字IO的读写。具体代码如下:
打开设备驱动程序文件
int fd;
fd = open('/dev/em9x60_isa', O_RDWR); // 打开ISA驱动程序
设置数字输出DOUT
unsigned int uDout = 0x3F; // 设置DOUT全高,低6位有效
rc = write(fd, &uDout, sizeof(unsigned int));
uDout = 0; // 设置DOUT全低,低6位有效
rc = write(fd, &uDout, sizeof(unsigned int));
读取数字输入DIN的当前状态
unsigned int uDin; // 注意,读取的数据只有低8位有效
rc = read(fd, &uDin, sizeof(unsigned int));
在上述的数据访问中,read / write函数的缓冲区长度必须是unsigned int类型的,否则函数将返回出错。
全部0条评论
快来发表一下你的评论吧 !