⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 ARM下加一个硬件驱动比较复杂
💻 TXT
字号:
	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






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -