微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AT91RM9200的CAN通讯程序

基于AT91RM9200的CAN通讯程序

时间:11-13 来源:互联网 点击:

/*清除复位模式位*/
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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top