Thread 中讨论的其他器件:EK-TM4C1294XL
工具/软件:Code Composer Studio
您好!
我们使用的是硬件 EK-TM4C194XL Launch Pad 、IDE 是 CCS 6.1、
2.我已将 PA0和 PA1连接到 CAN 收发器 TJA1042。 JP4和 JP5仅在 CAN 模式下连接。
3、CANH、CANL 连接到 CAN 总线。
4.从 TIVAware 库(TivaWare_C_Series-2.1.4.178)中的 simple_rx.c 获取的参考。
5. CAN 总线其它节点正在接收报文,节点中无错误。
但在我的板上、我们会得到中断。 但是在 ISR 中 、 我们会遇到如下错误:CANStatusGet (CAN0_BASE、CAN_STS_CONTROL)=0x00000062。 我们没有收到任何消息、而是收到错误消息。
7.什么是仅出现错误的原因。
初始化代码:
CAN_Init()
{
while (!SysCtlPeripheralReady (SYSCTL_Periph_CAN0))
{
;
}
CANInit (CAN0_BASE);
CANBitRateSet (CAN0_BASE、120000000、50000);
CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable (INT_CAN0);
CANEnable (CAN0_BASE);
memset (A_CANMessageData_U8R、0、sizeof (A_CANMessageData_U8R));
S_CANObject_DXR.ui32MsgID = 0;
S_CANObject_DXR.ui32MsgIDMask = 0;
S_CANObject_DXR.ui32MsgLen = 8;
S_CANObject_DXR.ui32Flags =(MSG_OBJ_RX_INT_ENABLE|MSG_OBJ_USE_ID_FILTER);
S_CANObject_DXR.pui8MsgData = A_CANMessageData_U8R;
CANMessageSet (CAN0_BASE、1、&S_CANObject_DXR、MSG_OBJ_TYPE_RX);
}
中断例程:
空 CAN0IntHandler (空)
{
uint32 CANIntstatus=0;
uint32 CANSTATUS=0;
uint32 MsgIndex=0;
//
//读取 CAN 中断状态以查找中断原因
//
CANIntstatus = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);
CANIntClear (CAN0_BASE、CANIntstatus);
//
//如果原因是控制器状态中断,则获取状态
//
if (CANIntstatus = CAN_INT_INTID_STATUS)
{
CANSTATUS=CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);
//检查总线错误导致的天气状态
if ((CANSTATUS&0xE0)>0)
{
E_CANBusError_EXR= E_True;
}
}
否则((CANIntStatus&0x0000000F)>0)
{
MsgIndex=(CANIntstatus&0x0000000f);
CANMessageGet (CAN0_BASE、1、&S_CANObject_DXR、0);
CANIntClear (CAN0_BASE、1);
if (S_CANObject_DXR.ui32Flags=MSG_OBJ_DATA_LOST)
{
E_CANBusError_EXR=E_True;
}
其他
{
E_CANBusError_EXR=E_False;
}
}
}