CANdriver

所属分类:驱动编程
开发工具:C/C++
文件大小:727KB
下载次数:22
上传日期:2007-06-01 13:29:03
上 传 者jcxiao2006
说明:  ARM下加一个硬件驱动比较复杂,不象x86下比较标准,需要对bsp包做些改动。can卡驱动的改动主要在中断方面,因为它使用的是共享中断。
(ARM introduction of a more complex hardware-driven, unlike under the x86 standard for comparison. bsp packets need to do alterations. The card can drive major changes in the suspension, because it is the shared use of the interruption.)

文件列表:
CAN卡驱动_加入了can口设置功能\CAN卡驱动\BSP包中需要覆盖的文件\hwdefs.h (84837, 2006-02-15)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\BSP包中需要覆盖的文件\interrupt.c (44759, 2006-03-16)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\BSP包中需要覆盖的文件\oalintr.h (4229, 2006-04-24)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\BSP包中需要覆盖的文件 (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\中断服务程序 (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IDbg (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\CSDDriver.obj (7650, 2006-02-13)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\StdAfx.obj (457, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\test.exe (5632, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\test.exp (727, 2006-02-13)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\test.lib (1978, 2006-02-13)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\test.obj (3795, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel\test.pch (2580912, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CIRRUS_EP931X__ARMV4IRel (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\csddriver.h (6748, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\ISRCSD.h (2209, 2006-03-06)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\StdAfx.cpp (291, 2006-02-13)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\StdAfx.h (795, 2006-02-13)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\test.cpp (3199, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\test.pbp (7495, 2006-03-02)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\test.plg (322, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\用户程序用到的头文件\csddriver.h (6846, 2006-03-10)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\用户程序用到的头文件\ISRCSD.h (2209, 2006-03-06)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\用户程序用到的头文件 (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\驱动程序 (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动 (0, 2006-03-08)
CAN卡驱动_加入了can口设置功能 (0, 2006-09-08)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CSDDriver.lib (2548, 2006-11-15)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\我的测试程序test\CSDDriver.dll (11264, 2006-11-15)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\驱动程序\CSDDriver.dll (11264, 2006-11-20)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\驱动程序\CSDDriver.lib (2548, 2006-11-20)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\驱动程序\CSDDriver.obj (14129, 2006-11-20)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\中断服务程序\isrCSD.dll (6656, 2006-11-17)
CAN卡驱动_加入了can口设置功能\CAN卡驱动\中断服务程序\isrCSD.rel (599, 2006-11-17)
报文格式说明.txt (3375, 2006-12-27)

ARM下加一个硬件驱动比较复杂,不象x86下比较标准,需要对bsp包做些改动。can卡驱动的改动主要在中断方面,因为它使用的是共享中断。只要把文件夹“BSP包中需要覆盖的文件”下的文件复制到bsp包下的相应位置下即可,改动都已完成。 这个驱动没有使用标准的ce驱动模式,做成了一个动态连结库的方式,但是由于使用了ISR中断模式,还是需要把中断服务程序导入CE内核中。 具体步骤是:先把bsp包的相应改动完成,然后重新编译整个操作系统,再把“中断服务程序”下的文件复制到当前的工作区目录下,把isrcsd.dll $(_FLATRELEASEDIR)\isrcsd.dll NK SHK 这一行添加到platform.bib文件的末尾,使它可以被加载到操作系统核心区中。mkae image,使设置生效。 这样,中断服务程序加载完成。 完成上述步骤后,可以开始使用驱动程序,方法比较简单,用户程序包含入文件夹“用户程序用到的头文件”提供的头文件,链接csddriver.lib文件。运行时要把csddriver.dll文件和用户程序一起复制到操作系统中一起运行。 接口函数介绍: pCAN_OPEN_INFO CSDInit(DWORD Index); 硬件初始化函数。 这个函数的参数是1或者2,作用是选择第几个can口,返回值是个数据结构指针,其他的操作函数需要它来作为参数。如果失败返回0 pCAN_OPEN_INFO CSDOpen(pCAN_OPEN_INFO pCSDHead); 打开can口函数,主要做些数据结构的初始化和打开驱动的守护线程。 这个函数的参数是init函数的返回值,它的返回值和参数相同,但是失败返回null。 DWORD CSDClose(pCAN_OPEN_INFO pCSDHead); 关闭can口函数,关闭所有的守护线程和释放数据结构,失败返回FALSE,成功返回TRUE。 DWORD CSDRead( HANDLE pHead, PUCHAR pTargetBuffer, ULONG BufferLength ); 读数据函数,参数pHead是CSDInit函数的返回值,pTargetBuffer是所输出数据存放的缓冲区指针,BufferLength是希望读出的数据数量,返回值是实际读到的数据数量。 DWORD CSDWrite( HANDLE pHead, PUCHAR pSourceBytes, ULONG NumberOfBytes ); 写数据函数,参数pHead是CSDInit函数的返回值,pSourceBytes是希望写入的数据存放的缓冲区指针,NumberOfBytes 是希望写入的数据。返回值是实际写入的数据数量。 由于驱动编写仓促,很多功能未完成,主要是写控制功能。另外,封包部分也未完成,这里的输入输出都是些实际写入写进寄存器的数据,格式是这样的: 要求输入输出的数据量都是13的倍数,驱动也是13个数据13个数据进行操作的,如果不是证书倍,可能出错。 每13个数据的格式如下: typedef struct { unsigned char ff; unsigned char id1; unsigned char id2; unsigned char id3; unsigned char id4; unsigned char data[8]; }CAN_RPACKET; 元素: ff: 报文格式 第7位为1表示扩展格式,报文标识符为4个字节 为0表示标准格式,报文标识符为2个字节 第6位为1表示远程 为0表示数据 第0~3位表示报文数据长度 id1: 报文标识符1 id2: 报文标识符2 id3: 报文标识符3 id4: 报文标识符4 data[8]: 报文数据,报文数据最大长度为8 如有问题,请来电探讨。 增加一个函数: CSDDRIVER_API DWORD CSDConfig( pCAN_OPEN_INFO pHead, CAN_PORTSTRUCT *ptrStruct ); 这个函数是用来设置CAN口的拨特率等设置信息。其参数*ptrStruct是一个数据结构,定义如下: enum fil {SIN,DOU}; enum lis {LON,LOFF}; enum tes {TON,TOFF}; enum sle {SON,SOFF}; enum bau {B1000,B800,B500,B320,B250,B160,B125,B80,B40,B20,B10,B5}; typedef struct _CAN_PORTSTRUCT{ enum fil filter; enum lis lis_on; enum tes test; enum sle sleep; enum bau baud_rate; unsigned char code1; unsigned char code2; unsigned char code3; unsigned char code4; unsigned char mask1; unsigned char mask2; unsigned char mask3; unsigned char mask4; }CAN_PORTSTRUCT; 元素: filter: 报文接收筛选器模式: SIN 一 单筛选器模式 默认 DOU 一 双筛选器模式 lis_on: 是否只听模式 LOFF 一 正常模式 默认 LON 一 只听模式 test: 是否自测模式 TOFF 一 正常模式 默认 TON 一 自测模式 Sleep: 是否睡眠模式 SOFF 一 正常模式 默认 SON 一 睡眠模式 baud_rate: 波特率 B1000 一 1000kbit/s B800 一 800kbit/s B500 一 500kbit/s B320 一 320kbit/s B250 一 250kbit/s 默认 B160 一 160kbit/s B80 一 80kbit/s B40 一 40kbit/s B20 一 20kbit/s B10 一 10kbit/s B5 一 5kbit/s B125 一 125kbit/s code1: 接收码寄存器1 code2: 接收码寄存器2 code3: 接收码寄存器3 code4: 接收码寄存器4 mask1: 接收屏蔽寄存器1 mask2: 接收屏蔽寄存器2 mask3: 接收屏蔽寄存器3 mask4: 接收屏蔽寄存器4

近期下载者

相关文件


收藏者