[求助] LM3S9L97 CAN模块

轻轨002   2011-12-13 18:06 楼主

各位大侠!小弟自己搭了一块LM3S9L97板子,现在调到CAN模块遇到了点不懂的问题请教一下,

TX

就是在初始化过后然后设置ID和数据什么的

    g_sCANMsgObject1.ulMsgID = 0x1001;    //CAN报文ID
    g_sCANMsgObject1.ulMsgIDMask = 0;    //报文ID屏蔽码
    g_sCANMsgObject1.ulFlags = MSG_OBJ_TX_INT_ENABLE;  
    g_sCANMsgObject1.ulMsgLen = sizeof(g_ucMsg1);
    g_sCANMsgObject1.pucMsgData = g_ucMsg1;  //预置要发生的数据 ,4byte

然后是不是执行下面这一句就会把数据发送出去啊!?

CANMessageSet(CAN0_BASE, 1, &g_sCANMsgObject1, MSG_OBJ_TYPE_TX);

 

 

还有就是这个中断服务函数里面的这一句话

ulStatus = CANIntStatus(CAN0_BASE, CAN_INT_STS_CAUSE);

ulStatus的值在什么情况下会是状态中断(CAN_INT_INTID_STATUS),在什么情况下又会是挂起中断(1.2.3....)?

我在用我的一块板子(没有连接接收端)调试TX程序时,终端始终进不到else if(ulStatus == 1)里面!

希望哪位大侠能说下CAN这一点的详细工作步骤!非常感谢

void
CANIntHandler(void)
{
    unsigned long ulStatus;

ulStatus = CANIntStatus(CAN0_BASE, CAN_INT_STS_CAUSE);

if(ulStatus == CAN_INT_INTID_STATUS)
    {
               ulStatus = CANStatusGet(CAN0_BASE, CAN_STS_CONTROL);

               g_bErrFlag = 1;
    }

        else if(ulStatus == 1)
    {
                CANIntClear(CAN0_BASE, 1);

                g_ulMsg1Count++;

                g_bErrFlag = 0;
    }     

 else
    {
    }
}

 

另外小弟只有一块板子有没有办法测试我的CAN通讯啊?

回复评论 (2)

g_sCANMsgObject1.ulMsgLen = sizeof(g_ucMsg1);
MsgLen指的是数据域的长度,最长8字节.而不是msg结构体的size
    g_sCANMsgObject1.pucMsgData = g_ucMsg1;  //预置要发生的数据 ,4byte
pucMsgData是指向Msg数据域的指针。
点赞  2011-12-14 11:00

回复 楼主 轻轨002 的帖子

楼主: ”终端始终进不到else if(ulStatus == 1)里面!“这个问题怎么解决的啊?我也碰到了这个问题。。。。
点赞  2013-3-2 00:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复