cyz331 发表于 2011-4-26 11:04:24

TE2440-II CAN驱动问题,向斑竹求解。

TE2440-II中CANBUS部分,mcpcan.c中连续读取TEC,REC以及EFLG寄存器的值,但是得到的结果很让人意外,偶尔会出现不一样的情况,且差别很大(一次是0,一次是255)。在如此短的时间内TEC和REC应该不会一下子就加到255了吧,请斑竹关注一下。部分代码如下:
                        temp = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->EFLG)), ARG_UNUSED, ARG_UNUSED );
                        temp1 = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->EFLG)), ARG_UNUSED, ARG_UNUSED );
                        if(temp!=temp1)
                        {
                                printk("EFLG0 = %d\n",temp);
                                printk("EFLG1 = %d\n",temp1);
                        }
                        put_user(temp,(unsigned int *)arg);   

                        temp = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->TEC)), ARG_UNUSED, ARG_UNUSED );
                        temp1 = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->TEC)), ARG_UNUSED, ARG_UNUSED );
                        if(temp!=temp1)
                        {
                                printk("TEC0 = %d\n",temp);
                                printk("TEC1 = %d\n",temp1);
                        }
                        temp = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->REC)), ARG_UNUSED, ARG_UNUSED );
                        temp1 = CAN_SPI_CMD( SPI_CMD_READ, TOLONG(&(MCP2510_MAP->REC)), ARG_UNUSED, ARG_UNUSED );
                        if(temp!=temp1)
                        {
                                printk("REC0 = %d\n",temp);
                                printk("REC1 = %d\n",temp1);
                        }


结果如下:
EFLG0 = 0
EFLG1 = 255
TEC0 = 0
TEC1 = 255
REC0 = 0
REC1 = 255

cyz331 发表于 2011-4-27 09:10:10

回复 1# cyz331


    请斑竹关注一下,谢谢!另请高人指点,也请有遇到过类似问题的兄弟帮忙看看。

cyz331 发表于 2011-4-27 14:37:25

自己顶一下,因为上述三个寄存器都是可变的。因此我又做了一个实验,这次是读CNF2寄存器的值。我在初始化的时候写死的是222,但是按照上面的方法来做偶尔连续两次读出来还是不相等,有时候是0和222,有时候是222和255.请帮助关注下,谢谢!

cyz331 发表于 2011-4-29 12:09:13

飞凌客服都放假了吗???????????????????????????????

cyz331 发表于 2011-5-10 10:51:00

飞凌这个客服到底是怎么回事。能不能解决,是不是问题总得给个回复嘛。这样不闻不问是什么意思????????????????

飞凌-vxworks 发表于 2011-5-10 13:38:14

是在wince上面的吗?用提供的例程测试是什么结果呢

cyz331 发表于 2011-7-11 09:50:30

飞凌-vxworks :偶的环境是TE2440-II,linux-2.6.12内核。文件系统是qte_touch.yaffs(qtopia部分被我删除了)。
页: [1]
查看完整版本: TE2440-II CAN驱动问题,向斑竹求解。