[CAN-bus/DeviceNet] SJA1000 进入不了溢出中断????

[复制链接]
3225|2
 楼主| flyindance8564 发表于 2012-4-19 17:21 | 显示全部楼层 |阅读模式
串口打印输出显示:SR=0xf,IER=0xb     但是没有进入数据溢出中断,这是为什么呢?


  1. uint8 sja1000_init(void)
  2. {
  3. uint8 temp,state;

  4. halDigioConfig(&pinALE);
  5. halDigioConfig(&pinCS);
  6. halDigioConfig(&pinRST);
  7. halDigioConfig(&pinRD);
  8. halDigioConfig(&pinWR);

  9. memset(&canTxBuf,0,sizeof(canTxBuf));
  10. memset(&canRxBuf,0,sizeof(canRxBuf));

  11. halDigioClear(&pinRST);
  12. halMcuWaitMs(100);
  13. halDigioSet(&pinRST);

  14. do
  15. {
  16. can_write_byte(SJA1000_PELI_MOD, SJA1000_PELI_MOD_AFM|SJA1000_PELI_MOD_RM);
  17. can_read_byte(SJA1000_PELI_MOD,&state);
  18. }
  19. while(!(state&0x01));

  20. can_write_byte(SJA1000_PELI_CDR, SJA1000_CDR_PELI_MOD|SJA1000_CDR_CLOCK_OFF);

  21. can_write_byte(SJA1000_PELI_BTR0, 0x05);
  22. can_write_byte(SJA1000_PELI_BTR1, 0x25);

  23. can_write_byte(SJA1000_PELI_IER, SJA1000_PELI_IER_DOIE|SJA1000_PELI_IER_TIE|SJA1000_PELI_IER_RIE);

  24. can_write_byte(SJA1000_PELI_OC, 0x1a);

  25. can_write_byte(SJA1000_PELI_CMR, SJA1000_PELI_CMR_RRB);

  26. can_write_byte(SJA1000_PELI_EWLR, 0xff);


  27. for(temp=0; temp<4; temp++)
  28. {
  29. can_write_byte(SJA1000_PELI_ACC+temp, 0);
  30. can_write_byte(SJA1000_PELI_ACM+temp, 0xff);
  31. }

  32. do
  33. {
  34. can_write_byte(SJA1000_PELI_MOD, SJA1000_PELI_MOD_AFM);
  35. can_read_byte(SJA1000_PELI_MOD,&state);
  36. }
  37. while(state&0x01) ;

  38. halDigioConfig(&pinCanInt);
  39. halDigioIntConnect(&pinCanInt, &isr_can);
  40. halDigioIntSetEdge(&pinCanInt, HAL_DIGIO_INT_FALLING_EDGE);
  41. halDigioIntEnable(&pinCanInt);
  42. asm("NOP");
  43. halDigioIntClear(&pinCanInt);

  44. return OK;
  45. }


  1. void isr_can(void)
  2. {
  3. uint8 temp,com,state_cmr;

  4. can_read_byte(SJA1000_PELI_IR, &temp);

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

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

  14. if(temp & SJA1000_PELI_IR_RI) //接收中断
  15. {
  16. if(DEBUG_OUTPUT_ON)
  17. {
  18. mlib_console_Printf(" isr_can ------Rx------GO \r\n");
  19. }

  20. isr_can_rx();
  21. can_write_byte(SJA1000_PELI_CMR, SJA1000_PELI_CMR_RRB);
  22. can_read_byte(SJA1000_PELI_ALC, &com);
  23. can_read_byte(SJA1000_PELI_ECC, &com);

  24. if(DEBUG_OUTPUT_ON)
  25. {
  26. mlib_console_Printf(" isr_can ------Rx------OK \r\n");
  27. }

  28. }
  29. }
 楼主| flyindance8564 发表于 2012-4-20 11:28 | 显示全部楼层
???
 楼主| flyindance8564 发表于 2012-4-20 16:47 | 显示全部楼层
如果我关掉接收中断RIE,是可以进数据溢出中断DOIE的,但是都打开就进不去了。。。。

为什么呢???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

52

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部