打印

C8051F040单片机的CAN中断问题

[复制链接]
4167|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
阿多|  楼主 | 2009-3-3 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个疑问想请教一下,该单片机的CAN中断的产生是不是不依赖于接收滤波的结果?就是说无论报文是否符合该节点的滤波要求,CAN中断都会发生?非常感谢您的帮助

/************************************************************************
** 函数名称:ISRname
** 函数功能:CAN中断服务程序
** 输入参数:
** 输出参数:
*************************************************************************/
void ISRname(void)   interrupt 19
{
    char SFRPAGE_SAVE = SFRPAGE;
 SFRPAGE = CAN0_PAGE;
 status = CAN0STA;
 if((status & 0x10) != 0)
 {
    //Rxok位为1,则是由于接收引起的中断
    CAN0STA = (CAN0STA & 0xef) | 0x07;     //复位Txok,设置LEC无变化
    /*read message number from CAN INTREG*/
    RX_FLAG = 1;
 }
 if((status & 0x08) != 0)
 {
    //Txok位为1,则是由于发送引起的中断
    CAN0STA = (CAN0STA & 0xf7) | 0x07;        //复位Txok,设置LEC无变化
    TX_FLAG = 0;  //发送完成
 }
 if(((status & 0x07) != 0) && ((status & 0x07) != 7))
 {
    //错误中断,改变LEC
    CAN0STA = CAN0STA | 0x07;         //设置LEC无变化
 }
 SFRPAGE = SFRPAGE_SAVE;
}

这是CAN中断服务子程序,我发现只要收到数据就进入中断,不管接收滤波什么要求,

相关帖子

沙发
救火车| | 2009-3-3 14:59 | 只看该作者

我没用过C8051F040,凭经验说两句

1、接收完成才引起中断。滤波条件不符合是不会产生接收的,更不会发生接收中断。
2、发送完成中断。
3、错误中断。发生错误后,引起的中断。

凭感觉,还应该有一个寄存器来设置中断的允许和禁止。

使用特权

评论回复
板凳
georgekin203| | 2009-3-3 15:30 | 只看该作者

u r right

你说的对,C8051f系列内置CAN的单片机就是有这个问题
我问过新华龙的技术支持,只有判断有个pending寄存器看是否与初始化的接收CAN口能对上。

使用特权

评论回复
地板
阿多|  楼主 | 2009-3-3 16:09 | 只看该作者

我问了一下他们的技术支持

他们说情况是这样的,感觉很不合理啊,如果040CAN接点比较多,通讯比较频繁,那040要频繁的进入中断,这样消耗了单片机大量资源啊,我现在就碰到了这个问题,对于其它需要实时检测的功能来说是个灾难,楼上的兄弟,能不能说的详细的一点,数据手册说的很简单,那本C8051的书上也说的语焉不详,非常感谢啊!!!

使用特权

评论回复
5
georgekin203| | 2009-3-4 09:33 | 只看该作者

不会的

不会占用很多资源的,在中断入口判断INTPEND1里的数据是否和你初始化接收的邮箱号对应,如果不是则退出中断,以040在22.1184M的情况下只消耗不到500ns,你去网上找一份博世的 can user manual 2.0看看吧,会有帮助的

使用特权

评论回复
6
xlsbz| | 2010-1-8 13:43 | 只看该作者
本帖最后由 xlsbz 于 2010-1-8 14:49 编辑

你可以把状态中断关闭

使用特权

评论回复
7
yj19871231| | 2012-4-26 22:14 | 只看该作者
你判断中断判断错了,这里的中断是状态中断,只要有message 能够被正确接收到移位寄存器中 就会产生中断,如果你要 判断是哪个消息对象的 需要读中断寄存器。interrupt register

使用特权

评论回复
8
xlsbz| | 2012-4-27 12:34 | 只看该作者
1# 阿多

这是CAN中断服务子程序,我发现只要收到数据就进入中断,不管接收滤波什么要求,




我认为你这种认识是错误的。

3楼的所谓的新华龙的说法也错误  可见新华龙水平。

2楼救火车版主说的很对。



你发现的

使用特权

评论回复
9
arm菜鸟人| | 2013-3-24 11:05 | 只看该作者
问一下 C8051F 的CAN 是不是只能通过中断收发数据呢?
怎么找到的例程都是中断模式的。不能通过查询吗?
比如
查询 CAN接收
if  命令1
  {
       填数据
    CAN 发送
  }
if 命令 2
{
  填 数据
CAN 发送
}

不使用中断 可否?

使用特权

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

本版积分规则

56

主题

153

帖子

0

粉丝