发表于:2006-02-15 15:15:00
1楼
能帮我看看我的初始化程序错在那里???
/********************************************************
*函数原型: void Sja_1000_Init(void) *
说明:
初始化sja1000为 Peli模式 自测试模式
*********************************************************/
void Sja_1000_Init(void)
{ unsigned char tt;
bit s;
for (tt=0;tt<100;tt++);
//置复位
s=1;
while (s==1)
s=BCAN_ENTER_RETMODEL(); //MOD.0=1
if (s==0)send_string_com(" ENTER ");
//测试SJA1000
s=1;
while (s==1)
s=BCAN_CREATE_COMMUNATION(); //测试寄存器
if (s==0) send_string_com(" CREATE ");
//初始化时分控制器: PeilCAN模式、CLOCKOFF禁止
s=1;
while (s==1)
s=BCAN_SET_CLK(0xC8); //CDR=0xC8;
if (s==0)send_string_com(" SET_CLK ");
// 设置输出控制器
s=1;
while (s==1) s=BCAN_SET_OUT(0xAA); //OCR=0xAA;
if (s==0)send_string_com(" SET_Out ");
//设置总线时序(波特率)
s=1;
while (s==1)
s=BCAN_SET_BANDRATE(0x04); // 100Kbps
if (s==0)send_string_com(" BANDRATE ");
// 设置滤波器,地址为本地的IP前29位,全匹配
s=1;
while (s==1)
s= BCAN_SET_ACR(0xFF,0xFF,0xFF,0xFF);
if (s==0)send_string_com(" SET_ACR ");
s=1;
while (s==1)
s= BCAN_SET_AMR(0xFF,0xFF,0xFF,0xFF);
if (s==0)send_string_com(" SET_AMR ");
// 模式控制器: 单滤波器、正常模式、清除复位请求
s=1;
while (s==1)
s=BCAN_SET_MOD(0xFC); //正常 MOD=0xF8; 自测0xFC
if (s==0)send_string_com(" MOD ");
s=1;
while (s==1)
s=BCAN_QUIT_RETMODEL(); //MOD.0=0
if (s==0)send_string_com(" RETMODEL");
//设置错误报警限制寄存器 为192(0xC0)
s=1;
while (s==1)
s= BCAN_SET_EMLR(0xC0); //EMLR=0xC0
if (s==0)send_string_com(" SET_EMLR ");
// 中断控制: 总线错误中断、发送中断、接收中断
//s=1;
// while (s==1)
s=BCAN_SET_INTENABLE(0x03); //IER=0x03
if (s==0)send_string_com(" INTENABLE ");
}