基于WinCE环境的CAN适配卡驱动程序的设计与实现
[11-20 17:14:02] 来源:http://www.88dzw.com 嵌入式系统 阅读:8209次
文章摘要:限于篇幅,本文仅对主要的CAN_Write模块、CAN_Read模块和中断服务线程模块的实现作如下详细详细讨论。3.1 CAN_Write模块的实现当CAN适配卡控制器在发送报文时,发送缓冲区对写操作是锁定的,这样CPU必须检查状态寄存器的发送缓冲区状态标志TBS,以确定可以将一个新报文写入发送缓冲区中,当发送缓冲区被锁定(即标志TBS=0)时,CPU周期性地查询状态寄存器,等待发送缓冲区被释放;当发送缓冲区被释放(即标志TBS=1)时,CPU将新报文写入发送缓冲区中,并置命令寄存器的发送请求标志TR,该标志导致发送的启动。一旦发送成功中断产生,表明CAN报文已经发送成功。重复上面的工作就可以
基于WinCE环境的CAN适配卡驱动程序的设计与实现,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.com限于篇幅,本文仅对主要的CAN_Write模块、CAN_Read模块和中断服务线程模块的实现作如下详细详细讨论。
3.1 CAN_Write模块的实现
当CAN适配卡控制器在发送报文时,发送缓冲区对写操作是锁定的,这样CPU必须检查状态寄存器的发送缓冲区状态标志TBS,以确定可以将一个新报文写入发送缓冲区中,当发送缓冲区被锁定(即标志TBS=0)时,CPU周期性地查询状态寄存器,等待发送缓冲区被释放;当发送缓冲区被释放(即标志TBS=1)时,CPU将新报文写入发送缓冲区中,并置命令寄存器的发送请求标志TR,该标志导致发送的启动。一旦发送成功中断产生,表明CAN报文已经发送成功。重复上面的工作就可以完成发送多个CAN报文的工作。CAN_Write模块的流程图如图3所示。
图3 CAN_Write函数的流程图
3.2 CAN_Read模块的实现
如果CAN接收到一个报文,该报文通过验收滤波器验收并放入接收FIFO,则产生一个接收中断。中断服务程序接收到这个中断后,将这个接收到的报文传送到由驱动程序维护的报文存储区中,并置位命令寄存器的释放缓存区标志RRB。CAN_Read函数并不等待来自CAN控制器的接收报文成功中断,而是读取保存在由驱动程序维护的报文存储区中的报文。CAN_Read函数的流程图如图4所示。
图4 CAN_Read函数的流程图
3.3中断服务线程模块的实现
在CAN适配卡的SJA1000控制器中,报文的发送与接受是采用中断方式来完成的。以报文的中断发送为例,在向CAN数据寄存器中写入报文并且向命令寄存器写入发送命令后,系统通过调用WaitForSingleObject函数将当前的发送线程挂起在某个事件的任务队列中,触发该事件将会使系统调度挂起在该事件的任务队列中的任务继续执行,而该事件只有在CAN控制器产生发送成功中断后在中断服务线程中触发。中断服务线程程序流程图如图5所示。
图5 中断服务线程程序流程图
驱动程序中的另外两个模块主要由CAN_Close 、CAN_IoControl函数来完成,前者主要负责在关闭CAN句柄时资源的回收任务,后者主要用于设置CAN的工作参数,如波特率,报文格式等,在此不作过多介绍。
4 结束语
本文的CAN适配卡驱动程序的开发环境:上位机是普通的PC机,下位机的操作系统是WinCE,硬件是深圳蓝天工控有限公司的嵌入式PC/104总线主板PCM3568。驱动程序已经过测试、验收。CAN适配卡驱动程序运行可靠、通信稳定。产品已经被多个产家应用于实际的工业控制领域。
《基于WinCE环境的CAN适配卡驱动程序的设计与实现》相关文章
- › 基于WinCE环境的CAN适配卡驱动程序的设计与实现
- › 基于Windows CE的注册表在线修改及保存
- 在百度中搜索相关文章:基于WinCE环境的CAN适配卡驱动程序的设计与实现
- 在谷歌中搜索相关文章:基于WinCE环境的CAN适配卡驱动程序的设计与实现
- 在soso中搜索相关文章:基于WinCE环境的CAN适配卡驱动程序的设计与实现
- 在搜狗中搜索相关文章:基于WinCE环境的CAN适配卡驱动程序的设计与实现