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

时间:2014-01-17来源:网络

  getc函数:unsigned char (*getc)(can_bus *priv)该函数从设备接口读取一个字符,它只用于非中断方式,通过查询设备是否处于准备(ready)状态来等待一个字符。

  set_config函数:bool (*set_config)(can_bus *priv,cyg_can_info_t *config)该函数用于对指定的端口配置。如果对硬件配置成功,则返回true;如果端口不支持给定的配置参数,则返回false。

  start_xmit函数:void (*start_xmit)can_bus *priv)在中断方式下,该函数使能发送端,允许发送中断的产生。

  stop_xmit函数:void (*stop_xmit)(can_bus *priv)在中断方式下,当数据发送结束后,该函数进制发送端,进制发送中断产生。

  start_recv函数:void (*stop_xmit)(can_bus *priv)

  stop_recv函数:void (*stop_xmit)(can_bus *priv)

  4.3 发送中断处理函数

  CAN总线在中断方式下的负责对中断进行处理函数是中断服务程序ISR和中断滞后服务程序DSR。对中断的处理主要有三种模式,第一种模式是在中断服务程序ISR内完成所有设备处理工作,第二种是在中断滞后服务程序DSR内实现,第三中是将对设备的处理推迟到中断线程内进行。在驱动程序的设计中采用的是第二种模式。

  在这种模式中,中断处理程序ISR只是简单的通过对设备进行编程或者直接调用cyg_drv_interrupt_mask()函数防止新中断的产生,然后将调用DSR作进一步的处理。DSR完成大部分的硬件处理工作,并有可能对某个条件变量产生一个信号来唤醒新的中断。最后,DSR调用cyg_drv_interrupt_unmask(),重新使能中断。中断处理过程如图所示:

  44.jpg

  4.4 绑定设备中断

  设备驱动程序的初始化函数在系统初始化过程或者设备初始使用时被调用,初始化函数不仅要设置设备的参数,还要为设备分配相应的数据结构:例如输入输出缓冲区等,最后还将设备中断进行绑定。

  每一个设备在初始化时会产生一个对应的中断对象,所有的中断对象存储在系统的中断向量链表中。当某个中断发生时,系统根据中断码到中断向量链表中寻找相应的中断对象,再跳转到中断对象记录的中断处理程序的位置执行。

  宏cyg_drv_interrupt_create(vector,priority,data,isr,dsr,handle,intr)用于产生设备的中断对象。其中,vector是中断向量,priority中断优先级,data是数据指针,isr是中断处理程序ISR的地址,dsr是中断滞后处理程序DSR的地址,handle是返回句柄,intr是中断对象存放的位置。

  宏cyg_drv_interrupt_attach(interrupt)用于将中断向量加入到中断向量链表。参数interrupt是将要连接的中断的句柄。

  设备中断绑定后,当设备产生中断时系统会找到相应的中断向量,然后把控制权交给中断处理程序,进行中断的处理。

  5、两种扩展方式比较

  对于两种不同的CAN与ARM9连接方式,IO口连接直观简单;而利用数据信号线连接能节省IO口,给CPU更多开发空间。两者在驱动程序上差异不大,主要体现在底层数据读写时序实现上。前者简单易于编写和理解,后者只是在对时序的理解上略有难度,并不会使代码更加冗长。

  6、结束语

  本文通过在现场总线控制系统上扩展CAN总线模块,详细讲解了如何在ARM9上扩展CAN总线模块,给出了全IO口扩展和利用数据信号线扩展两种方式;并详细说明如何在高实时性操作系统eCos上开发CAN驱动程序;最后对两种扩展方式做了简单的比较。该现场总线控制系统在国家十一五某国防项目中得到了很好的应用。同时也为大中型国有企业自动化生产线的建设和改造,电力系统自动化的实现提供很好的借鉴。

1 2 3

关键词: ARM920T 现场总线 控制系统

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版