新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种基于ARM920T的现场总线控制系统

一种基于ARM920T的现场总线控制系统

作者:时间:2014-01-17来源:网络收藏

  3.2.1 IO接口连接

  微处理器的通用IO口可以提供一个简便的方法来控制SJA100T。EP9315的GPIO信号提供了很大的灵活度来满足SJA1000T时间上的要求。将SJA1000T数据地址复用总线全部与EP9315的通用IO接口连接。其它信号线WR、RD、ALE……也与IO接口连接。具体连接方式参考图2。

  22.jpg

  3.2.2 数据信号线连接

  除了全部由IO端口来控制CAN模块,还可利用ARM9的数据线和信号线来实现CAN模块的扩展。连接电路如图3所示,凡SJA1000T以外的信号均为EP9315芯片上的信号管脚,SJA1000T数据地址复用总线与EP9315数据线相连,GPIOx、GPIOy、GPIOz可以是EP9315任意GPIO引脚,但选择同一个通道的GPIO口将使编程更容易。注意SJA100T的INT可以连接CPU的INT也可以连接到带有中断的通用IO上。在EP9315中,GPIO的通道A,B,F有中断功能。

  33.jpg

  图2和图3是示意图,具体的由于EP9315信号高电平为3.3V,而SJA1000T高电平为5V,故需要通过74LVC245这类电平匹配芯片进行电平匹配后再连接。

  4、驱动开发

  由于在许多场合具有实时性的要求,本采用实时性高的eCos作为操作系统,CAN驱动程序也在eCos操作系统 上进行扩展。

  对eCos系统的设备驱动程序的设计主要围绕着DEVTAB_ENTRY和DEVIO_TAB进行,添加新设备的工作就是对这两个表项的各个域进行实现,并且编写与硬件相关的底层函数。通过对驱动程序结构层次的剖析,CAN总线驱动的开发分为四步:

  第一步:向内核注册新设备;

  第二步:开发驱动程序基本IO函数;

  第三步:实现中断处理函数;

  第四步:绑定设备中断并进行验证。

  具体实现过程如下:

  4.1 向内核注册新设备

  在向内核注册新设备时,原有的驱动程序中和硬件无关的部分仍然可以使用,例如设备I/O函数表,硬件相关的部分需要自行设计,包括设备描述符、设备名、设备初始化程序init、查找程序lookup和拓展CAN总线的数据结构。

  拓展CAN总线的数据结构Can_bus时一组用于描述对设备进行的全部操作的数据结构。通过宏Can_bus产生can总线的数据结构,宏Can_bus的原型为:

  Can_bus(1,funs,modereg,intrenreg,bustime,outpctr,clkdiv,acptcode,acptmask,flag)

  参数说明如下:

  l-该数据结构的语言标识符

  funs接口函数组,即硬件接口函数。

  flags驱动程序初始表示值。

  modereg工作模式初始值

  intrenreg中断允许初始值

  bustime总线时钟1,和总线时钟2初始值

  outpctr输出控制

  clkdiv分时

  acptcode验收代码

  acptmask验收屏蔽

  在产生CAN总线的设备表入口时首先要创建can总线的数据对象Can_bus,并且初始化以上所有参数。拓展CAN总线的Can_bus数据对象标识符为EP9315_can_bus。

  拓展CAN总线的设备表入口对象实现如下:

  DEVTAB_ENTRY(EP9315_can_io0,

  CYGDAT_IO_CAN_EP9315_CAN0_NAME,

  0,

  cyg_io_can_devio,

  EP9315_can_init, //拓展CAN的初始化函数

  EP9315_can_lookup, //拓展CAN的查找函数

  EP9315_can_bus //CAN数据结构Can_bus

  );

  4.2 开发驱动程序基本IO函数

  这部分函数指的是驱动程序接口函数中与硬件相关的部分,也就是Can_bus数据结构中的funs接口函数表。funs函数表通过以下宏进行定义:

  CAN_FUNS(l,putc,getc,set_config,start_xmit,stop_xmit)

  参数说明如下:

  l是该funs函数表的C语言标实符。

  putc函数:bool (*putc)(can_bus *priv,unsigned char c)该函数发送一个字符到串口。如果发送成功,则返回true,否则返回false。

陀螺仪相关文章:陀螺仪原理




评论


相关推荐

技术专区

关闭