Ifx_CAN_MO *hwObj = IfxMultican_MsgObj_getPointer(msgObj->node->mcan, msgObj->msgObjId); /* set message as valid, in case of FIFO mSGVAL has to be set before setting it to each slave object */ IfxMultican_MsgObj_setStatusFlag(hwObj, IfxMultican_MsgObjStatusFlag_messageValid);...
CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 500000, 20); CAN_setupMessageObject(CANA_BASE, RX_MSG_OBJ_ID, 0x1, CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0, CAN_MSG_OBJ_FIFO, 0); CAN_startModule(CANA_BASE); while(1) { if(((HWREGH(CANA_BASE + CAN_O...
我翻看了自动代码生成的代码,其中它将messageobject的flag设置为了CAN_MSG_OBJ_RX_INT_ENABLE,我翻看了函数说明这会导致EOB位为1,不启用FIFO。 而CAN去读取messagebox为一个较低等级的中断,会被其他中断进程打断,该中断函数只用运行完成了才会清除CAN中断。 我查看了user guide,发现CAN的中断相应于...
接收函数重要变量包括:(1)接收FIFO:APP_RX_FIFO。(2)接收报文对象:CAN_RX_MSGOBJrxObj。(3)接收报文缓冲区:uint8_tRX_MSG_BUFFER[RX_MSG_BUFFER_SIZE]。 MCP2517FD接收函数实现的功能如下:(1)通过函数DRV_CANFDSPI_ReadWordArray进行读操作(如果得到的spiTransferError为1,则程序返回-1),从中获得相应的寄存器...
CAN Rx Dedicated Buffer 中断:如果对应的CAN Mailbox配置成接收且Mailbox等于1,那么则会触发该类中断,则不会触发Rx FIFO中断; CAN Tx Finish 中断: 每次CAN发送成功之后均会触发此类中断; CAN Busoff中断:当发送CAN Busoff时便会触发此类中断; 这四类中断使能的前提条件有两个: 配置对应CAN Controller的上述4...
4) 在 rxirq 例程中(我使用 16 元素 fifo),我保存了绝对时间戳 timestamp= (canbusData->basetime+rxBufferElement->R1.B.RXTS); 一切似乎都很正常,"basetime" 每 0x10000 us 递增一次,一般来说,信息时间戳是正常的。 但是 有时"basetime" 值与 RXTS 时间戳不一致。 我希望出现这样的序列(正确处理...
// message object (TCAN_SWObj). The data type has the following fields: // // uwMsgCfg: // this byte has the same structure as the message configuration register of a // hardware message object. It contains the "Data Lenght Code" (DLC), the ...
因为我没有进行中断,所以无法读取 FIFO 内的内容。 在我的配置中,我启用了 : "transmissionCompletedEnabled" for TX "rxFifo0NewMessageEnabled" for RX 我在中央处理器寄存器上检查过,确实已启用。 以下是我的 TX 中断配置: g_mcmcan.canNodeConfig.中断配置.transmissionCompletedEnabled= TRUE; g_mcmcan.can...
CANmsg_Buffer receive; CANmsg_Buffer send; INT32U tx_retry_cnt; }can_device,*pcan_device; //2.定义CAN信息帧的数据类型。 typedef struct _VCI_CAN_OBJ{ INT32U ID; INT32U TimeStamp; INT8U TimeFlag; INT8U SendType; INT8U RemoteFlag;//是否是远程帧 ...
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { CAN_RxHeaderTypeDef CAN_RX; uint8_t aData[8]; if(hcan->Instance ==CAN1) { HAL_CAN_GetRxMessage(hcan,CAN_FilterFIFO0,&CAN_RX,aData);//从上位机获取数据 HAL_UART_Transmit(&huart1,aData,CAN_RX.DLC,HAL_MAX_DELAY);...