WindowsCE.Net下CAN卡的驱动程序设计
态寄存器的变化,当传输缓冲满标志或传输结束标志为1时通出程序,完成一次数据采集。传输缓冲区的寄存器如表1所列。
表1 ID号 10 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 ID.4 ID.3 RTR,数据长度码 11 ID.2 ID.1 ID.0 RTR DLC.3 DLC.2 DLC.1 DLC.0 数据1~8 12~19 数据 数据 数据 数据 数据 数据 数据 数据
本文链接地址:http://www.oyaya.net/fanwen/view/146603.html
表1 ID号 10 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 ID.4 ID.3 RTR,数据长度码 11 ID.2 ID.1 ID.0 RTR DLC.3 DLC.2 DLC.1 DLC.0 数据1~8 12~19 数据 数据 数据 数据 数据 数据 数据 数据
表2
ID号 20 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 ID.4 ID.3 RTR,数据长度码 21 ID.2 ID.1 ID.0 RTR DLC.3 DLC.2 DLC.1 DLC.0 数据1~8 22~29 数据 数据 数据 数据 数据 数据 数据 数据CAN消息发送函数的实现如下:
BOOL CAN_SendMessage(LPCAN_HW_OPEN_INFO hCan,LPCanCardMessageBuflpMsg)
{
BOOL bSuc=FALSE;
ASSERT(hCan && lpMsg && lpMsg->dwMessageLen <=8); /*防错处理*/
if(0= =(hCan->dwAccessCode & GENERIC_WRITE))
return FALSE;
:: EnterCriticalSection(&hCan->lpCanHWInfo->
TransmitCritSec); /*进入临界区*/
BYTE byV=static_cast<BYTE>(1pMsg->dwMsgID>>3);
CANW(hCan,10,byV); /*设置ID值高8位*/
byV=static_cast<BYTE>=((lpMsg->dwMsgID & 7)<<5);
if(lpMsg->bRTR) byV|=0x10;
byV+=static_cast<BYTE>(lpMsg->dwMessageLen);
CANW(hCan,11,byV);/*设置ID值低3位、RTR及数据长度*/
for(UINT i=0;<lpMsg->dwMessageLen;++i)
{
CANW(hCan,12+i,lpMsg->byMsg[i]);
} /*采集数据*/
CANW(hCan,1,1);/*重置传输请求*/
while(TRUE)
《WindowsCE.Net下CAN卡的驱动程序设计(第3页)》