打印
[CAN-bus/DeviceNet]

SJA1000 进入不了溢出中断????

[复制链接]
2661|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flyindance8564|  楼主 | 2012-4-19 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口打印输出显示:SR=0xf,IER=0xb     但是没有进入数据溢出中断,这是为什么呢?


uint8 sja1000_init(void)
{
uint8 temp,state;

halDigioConfig(&pinALE);
halDigioConfig(&pinCS);
halDigioConfig(&pinRST);
halDigioConfig(&pinRD);
halDigioConfig(&pinWR);

memset(&canTxBuf,0,sizeof(canTxBuf));
memset(&canRxBuf,0,sizeof(canRxBuf));

halDigioClear(&pinRST);
halMcuWaitMs(100);
halDigioSet(&pinRST);

do
{
can_write_byte(SJA1000_PELI_MOD, SJA1000_PELI_MOD_AFM|SJA1000_PELI_MOD_RM);
can_read_byte(SJA1000_PELI_MOD,&state);
}
while(!(state&0x01));

can_write_byte(SJA1000_PELI_CDR, SJA1000_CDR_PELI_MOD|SJA1000_CDR_CLOCK_OFF);

can_write_byte(SJA1000_PELI_BTR0, 0x05);
can_write_byte(SJA1000_PELI_BTR1, 0x25);

can_write_byte(SJA1000_PELI_IER, SJA1000_PELI_IER_DOIE|SJA1000_PELI_IER_TIE|SJA1000_PELI_IER_RIE);

can_write_byte(SJA1000_PELI_OC, 0x1a);

can_write_byte(SJA1000_PELI_CMR, SJA1000_PELI_CMR_RRB);

can_write_byte(SJA1000_PELI_EWLR, 0xff);


for(temp=0; temp<4; temp++)
{
can_write_byte(SJA1000_PELI_ACC+temp, 0);
can_write_byte(SJA1000_PELI_ACM+temp, 0xff);
}

do
{
can_write_byte(SJA1000_PELI_MOD, SJA1000_PELI_MOD_AFM);
can_read_byte(SJA1000_PELI_MOD,&state);
}
while(state&0x01) ;

halDigioConfig(&pinCanInt);
halDigioIntConnect(&pinCanInt, &isr_can);
halDigioIntSetEdge(&pinCanInt, HAL_DIGIO_INT_FALLING_EDGE);
halDigioIntEnable(&pinCanInt);
asm("NOP");
halDigioIntClear(&pinCanInt);

return OK;
}


void isr_can(void)
{
uint8 temp,com,state_cmr;

can_read_byte(SJA1000_PELI_IR, &temp);

if(temp & 0x08) //数据溢出中断
{

mlib_console_Printf(" !!!!!!!!CAN RXFIFO OVERFLOW_ERR!!!!!!!!!!!! \r\n");
//执行 sja1000 清除数据溢出 命令
can_read_byte(SJA1000_PELI_CMR,&state_cmr); //读出命令寄存器状态
can_write_byte(SJA1000_PELI_CMR,(state_cmr|SJA1000_PELI_CMR_RRB|SJA1000_PELI_CMR_CDO)); //写命令寄存器,执行 清除数据溢出 命令
can_read_byte(SJA1000_PELI_ALC, &com);
can_read_byte(SJA1000_PELI_ECC, &com);
}

if(temp & SJA1000_PELI_IR_RI) //接收中断
{
if(DEBUG_OUTPUT_ON)
{
mlib_console_Printf(" isr_can ------Rx------GO \r\n");
}

isr_can_rx();
can_write_byte(SJA1000_PELI_CMR, SJA1000_PELI_CMR_RRB);
can_read_byte(SJA1000_PELI_ALC, &com);
can_read_byte(SJA1000_PELI_ECC, &com);

if(DEBUG_OUTPUT_ON)
{
mlib_console_Printf(" isr_can ------Rx------OK \r\n");
}

}
}

相关帖子

沙发
flyindance8564|  楼主 | 2012-4-20 11:28 | 只看该作者
???

使用特权

评论回复
板凳
flyindance8564|  楼主 | 2012-4-20 16:47 | 只看该作者
如果我关掉接收中断RIE,是可以进数据溢出中断DOIE的,但是都打开就进不去了。。。。

为什么呢???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

52

帖子

1

粉丝