資源簡介
這是一個(gè)關(guān)于PCI-CAN卡的驅(qū)動(dòng)程序,針對(duì)VxWorks的

代碼片段和文件信息
/*----------------------------------------------------------------------------
?*?PeliCAN.c??-
?*
?*?Author???????:?redsea_li
?*?Version??????:?1.1
?*?Created??????:?2009-03-03?20:50:36
?*?Last?Modified:?2009-03-18?22:03:54
?*?Copyright?ECI
?*----------------------------------------------------------------------------*/
#include?“PeliCAN.h“
int?int_lvl;
UINT32_T?iobase_adr;
UINT8_T?UrgBuf[13];
UINT8_T?BTR0BTR1;
UINT8_T?ACR0ACR1ACR2ACR3;
UINT8_T?AMR0AMR1AMR2AMR3;
?
#define?INT_NUM_IRQ 0X20 /*?vector?number?for?PIC?IRQ0?*/
#define?INUM_TO_IVEC(intNum) ((VOIDFUNCPTR?*)?((intNum)?<3))
#define?INT_NUM_COM (INT_NUM_IRQ?+?int_lvl)
PFUNC?p?=?NULL;
/*interrupt?register?function*/
void?registerFunc(PFUNC?func)
{
p?=?func;
}
/*time-lapse?function*/
void?delay(UINT32_T?t)
{
UINT32_T?td;
for(td?=?0;?td? ;
return;
}
/*interrupt?ID?setup?function*/
void?can_set_urg(UINT8_T?channel?char?*ACK)
{
int?i;
UINT8_T?BegWrtEndWrtBegRd;
char?rdbck;
switch(channel)?{
case?0:
BegWrt?=?0x01;
EndWrt?=?0x00;
BegRd?=?0x02;
break;
case?1:
BegWrt?=?0x04;
EndWrt?=?0x00;
BegRd?=?0x08;
break;
case?2:
BegWrt?=?0x10;
EndWrt?=?0x00;
BegRd?=?0x20;
break;
case?3:
BegWrt?=?0x40;
EndWrt?=?0x00;
BegRd?=?0x80;
break;
default:
break;
}
sysOutByte(iobase_adr?+?0x13?BegWrt);
for(i?=?0;?i?4;?i++)?{
sysOutByte(iobase_adr?+?0x14?ACK[i]);
printf(“\nACK?%d?=?%2x\n“i(UINT8_T)ACK[i]);
}
sysOutByte(iobase_adr?+?0x13?EndWrt);
sysOutByte(iobase_adr?+?0x13?BegRd);
for(i?=?0;?i?4;?i++)?{
rdbck?=?sysInByte(iobase_adr?+?0x14);
printf(“\n?rdbck?=?%2x\n“(UINT8_T)rdbck);
}
sysOutByte(iobase_adr?+?0x13?EndWrt);
return;
}
/*readback?interrupt?ID?set?before*/
can_rdurg(UINT8_T?channel)
{
int?i;
UINT8_T?EndRdBegRd;
char?rdbck;
switch(channel)?{
case?0:
EndRd?=?0x00;
BegRd?=?0x02;
break;
case?1:
EndRd?=?0x00;
BegRd?=?0x08;
break;
case?2:
EndRd?=?0x00;
BegRd?=?0x20;
break;
case?3:
EndRd?=?0x00;
BegRd?=?0x80;
break;
default:
break;
}
sysOutByte(iobase_adr?+?0x13?BegRd);
for(i?=?0;?i?4;?i++)?{
rdbck?=?sysInByte(iobase_adr?+?0x14);
printf(“\n?rdbck?=?%2x\n“(UINT8_T)rdbck);
}
sysOutByte(iobase_adr?+?0x13?EndRd);
return;
}
/*write?registers?of?sja1000?not?have?to?fill?iobase_adr?+?0x10?with?0x0f*/
void?can_write(UINT8_T?channel?UINT8_T?sja_reg?char?data)
{
UINT32_T?sja_adr;
sja_adr?=?iobase_adr?+?4?*?channel;
sysOutByte(sja_adr??sja_reg);
sysOutByte(sja_adr?+?1data);
return;
}
/*read?registers?of?sja1000?not?have?to?fill?iobase_adr?+?0x10?with?0x0f*/
char?can_read(UINT8_T?channel?UINT8_T?sja_reg)
{
char?data;
UINT32_T?sja_adr;
sja_adr?=?iobase_adr?+?4?*?channel;
sysOutByte(sja_adr??sja_reg);
data
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????25562??2009-03-24?09:23??PCI-CAN卡的VxWorks驅(qū)動(dòng)\CAN卡的VxWorks驅(qū)動(dòng)\CAN.c
?????文件???????3047??2009-03-24?09:22??PCI-CAN卡的VxWorks驅(qū)動(dòng)\CAN卡的VxWorks驅(qū)動(dòng)\CAN.h
?????目錄??????????0??2009-08-03?19:40??PCI-CAN卡的VxWorks驅(qū)動(dòng)\CAN卡的VxWorks驅(qū)動(dòng)
?????目錄??????????0??2009-08-03?19:40??PCI-CAN卡的VxWorks驅(qū)動(dòng)
-----------?---------??----------?-----??----
????????????????28609????????????????????4
評(píng)論
共有 條評(píng)論