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 回复 1# cyz331
请斑竹关注一下,谢谢!另请高人指点,也请有遇到过类似问题的兄弟帮忙看看。 自己顶一下,因为上述三个寄存器都是可变的。因此我又做了一个实验,这次是读CNF2寄存器的值。我在初始化的时候写死的是222,但是按照上面的方法来做偶尔连续两次读出来还是不相等,有时候是0和222,有时候是222和255.请帮助关注下,谢谢! 飞凌客服都放假了吗??????????????????????????????? 飞凌这个客服到底是怎么回事。能不能解决,是不是问题总得给个回复嘛。这样不闻不问是什么意思???????????????? 是在wince上面的吗?用提供的例程测试是什么结果呢 飞凌-vxworks :偶的环境是TE2440-II,linux-2.6.12内核。文件系统是qte_touch.yaffs(qtopia部分被我删除了)。
页:
[1]