基于AT91RM9200的CAN通讯程序
/*清除复位模式位*/
do
{
setcanport(chanal, ModeControlReg, 0X06);/*Config MOD&CR register*/
temp = getcanport(chanal, ModeControlReg);
}while(((getcanport(chanal, ModeControlReg)) & RM_RR_Bit)!=ClrByte);
//外部中断使能
if(!chanal)//禁止can0中断
{
__asm
{
str 0x00000000,[0xfffff120]
}
__asm
{
str 0x00000000,[0xfffff124]
}
}
else//禁止can1中断
{
__asm
{
str 0x00000000,[0xfffff120]
}
__asm
{
str 0x00000000,[0xfffff124]
}
}
//?SJA中断使能
}
int main()
{
unsigned char *buf;
int i;
unsigned char d[5][9]={"bbbbbbbb;","12345678","90123456","78787878","abcdefgh"};
unsigned long t;
// init irq1 an irq2 for sja1000 u2 u3
//nIRQ AIC_IECR&AIC_IDCR ENABLE INIT
__asm
{
str 0x00000000,[0xfffff120]
}
__asm
{
str 0x00000000,[0xfffff124]
}
//nIRQ AIC_SMR,&AIC_SVR config int
__asm
{
ldr t,[0xfffff004]
}
__asm
{
orr t,t,#0x03//priority level3,Level Sensitive(interal) Low-level Sensitive(external)
str t,[0xfffff004]
}
__asm
{
ldr t,[0xfffff008]
}
__asm
{
orr t,t,#0x03//priority level3,Level Sensitive(interal) Low-level Sensitive(external)
str t,[0xfffff008]
}
//配置AIC_SVR
__asm
{
str t,[0xfffff084]
}
__asm
{
str t,[0xfffff088]
}
init_sja1000(0);
//
for(i=0;i<5;i++)
{
buf=&d[i][0];
senddata(0,buf);
};
while(1){
getdata(0,buf);
};
}
说明:
系统是测试CAN0接口和CAN卡的通信程序
波特率设置为:
BAR0=0x47=71;
BAR1=0xaf=175;
接口为:
9200的CAN口:3脚为CANL,4脚为CANH
对应CAN卡: 2脚为CANL,4脚为CANH
AT91RM9200CAN通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)