各位大侠!小弟自己搭了一块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通讯啊?
此帖出自
小平头技术问答
MsgLen指的是数据域的长度,最长8字节.而不是msg结构体的size
g_sCANMsgObject1.pucMsgData = g_ucMsg1; //预置要发生的数据 ,4byte
pucMsgData是指向Msg数据域的指针。
一周热门 更多>