VxWorks下PC/104-CAN驱动程序设计
DEV_HDR pCANHDR; /*这个数据结构必须放在设备描述符的最初部分*/
/*其余与驱动有关数据*/
}CAN_DEV; /*CAN设备描述符*/
CAN_DEV can_chan_dev;
STATUS CanDrv(void){
完成驱动的一些初始化;
intconnect(); /*连接所选的IRQ与中断处理函数*/
sysIntEnablePIC(); /*486DX允许中断*/
drv_num=iosDrvInstall(CanOpen,NULL,CanOpen,CanClose,CanRead,CanWrite,CanIoctl);/*将设备驱动例程装入设备列表中*/
}
/*iosDrvInstall()将设备的CAN驱动例程加入设备驱动列表中,7个参数为7个驱动例程的进入点(entry point),如果没有某个例程,则传递NULL。*/
STATUS CanDevCreate(){
完成一些设备初始化
iosDevAdd (&Can_chan_dev.pCANHDR,“can0”,drv_num);/*将设备放入设备驱动列表中*/
}
int CanOpen(CAN_DEV *pCan_Dev,UBYTE *remainder,int flags){
CAN卡硬件复位
CAN卡关中断
CAN卡进入软件复位模式
设置CAN卡工作寄存器,如接收码寄存器和屏蔽码寄存器等
CAN卡开中断和进入操作模式
Return((int)pCan_Dev); /*注意必须返回设备描述结构指针*/
}
int CanRead(int CAN_DEV_ID,UBYTE * buf,int nBytes){
等待信号量(该信号量由中断处理例程释放)
从接收缓冲区读取数据
释放接收缓冲
返回接收数据数量
}
int CanWrite(int CAN_DEV_ID,UBYTE* buf,int nbyte){
查询发送缓冲是否可用
向发送缓冲区写数据
命令发送
查询发送完成标志
返回发送数据数量
}
void interrupt_handle_routin(int arg){
处理中断事件
发送(释放)信号量
《VxWorks下PC/104-CAN驱动程序设计(第3页)》