tCANBitClkParms CANBitClk;
tCANMsgObject sMsgObjectRx;
tCANMsgObject sMsgObjectTx;
unsigned char ucBufferIn[8];
unsigned char ucBufferOut[8];
//
// 把全部报文对象的状态和 CAN 模块的状态复位为一个已知状态
//
CANInit(CAN0_BASE);
CANInit(CAN1_BASE);
//
// 把控制器配置为具有 1 Mbit 的操作速率
//
CANBitClk.uSyncPropPhase1Seg = 5;
CANBitClk.uPhase2Seg = 2;
CANBitClk.uQuantumPrescaler = 1;
CANBitClk.uSJW = 2;
CANSetBitTiming(CAN0_BASE, &CANBitClk);
CANSetBitTiming(CAN1_BASE, &CANBitClk);
//
// 使 CAN0 器件不处于 INIT 状态
//
CANEnable(CAN0_BASE);
CANEnable(CAN1_BASE);
//
// 配置一个接收对象
//
sMsgObjectRx.ulMsgID = (0x400);
sMsgObjectRx.ulMsgIDMask = 0x7f8;
sMsgObjectRx.ulFlags = MSG_OBJ_USE_ID_FILTER;
sMsgObjectRx.ulMsgLen = 8;
sMsgObjectRx.pucMsgData = ucBufferIn;
CANMessageSet(CAN1_BASE, 1, &sMsgObjectRx, MSG_OBJ_TYPE_RX);
//
// 配置并启动报文对象发送
//
sMsgObjectTx.ulMsgID = 0x400;
sMsgObjectTx.ulFlags = 0;
sMsgObjectTx.ulMsgLen = 8;
sMsgObjectTx.pucMsgData = ucBufferOut;
CANMessageSet(CAN0_BASE, 2, &sMsgObjectTx, MSG_OBJ_TYPE_TX);
//
// 等待新数据变为可用
//
while((CANStatusGet(CAN1_BASE, CAN_STS_NEWDAT) & 1) == 0)
{
//
// 把报文对象的报文读出
//
CANMessageGet(CAN1_BASE, 1, &sMsgObjectRx, true);
}
//
// 处理在 sMsgObjectRx.pucMsgData 中的数据
//
...
|