mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-03-02 08:55:27 +08:00
[DeviceDriver] Add CANFD support and correct typos (#5912)
* Add CANFD support and correct typos - Added CANFD required fields to can.h - Fixed typos in can.h and can.c - Corrected all the projects affected by the typo - Fixed wrong line-ending in some affected can driver files Signed-off-by: Fan YANG <fan.yang@hpmicro.com> * update Signed-off-by: Fan YANG <fan.yang@hpmicro.com> Co-authored-by: Meco Man <920369182@qq.com>
This commit is contained in:
parent
0189987d91
commit
666af5e29d
@ -192,13 +192,13 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
can_instance->config.base_init_struct.mode_selection = CAN_MODE_COMMUNICATE;
|
can_instance->config.base_init_struct.mode_selection = CAN_MODE_COMMUNICATE;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LISTENONLY;
|
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LISTENONLY;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LOOPBACK;
|
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LISTENONLY_LOOPBACK;
|
can_instance->config.base_init_struct.mode_selection = CAN_MODE_LISTENONLY_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -432,9 +432,9 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -108,13 +108,13 @@ static rt_err_t _can_config(struct rt_can_device *can_device, struct can_configu
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_NORMAL;
|
drv_can->CanHandle.init.mode = CAN_MODE_NORMAL;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_SILENT;
|
drv_can->CanHandle.init.mode = CAN_MODE_SILENT;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_LOOPBACK;
|
drv_can->CanHandle.init.mode = CAN_MODE_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_SILENT_LOOPBACK;
|
drv_can->CanHandle.init.mode = CAN_MODE_SILENT_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -295,9 +295,9 @@ static rt_err_t _can_control(struct rt_can_device *can_device, int cmd, void *ar
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -107,13 +107,13 @@ static rt_err_t _can_config(struct rt_can_device *can_device, struct can_configu
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_NORMAL;
|
drv_can->CanHandle.init.mode = CAN_MODE_NORMAL;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_SILENT;
|
drv_can->CanHandle.init.mode = CAN_MODE_SILENT;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_LOOPBACK;
|
drv_can->CanHandle.init.mode = CAN_MODE_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
drv_can->CanHandle.init.mode = CAN_MODE_SILENT_LOOPBACK;
|
drv_can->CanHandle.init.mode = CAN_MODE_SILENT_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -289,9 +289,9 @@ static rt_err_t _can_control(struct rt_can_device *can_device, int cmd, void *ar
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -124,13 +124,13 @@ static rt_uint32_t _get_can_work_mode(rt_uint32_t mode)
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
work_mode = CAN_WORK_MD_NORMAL;
|
work_mode = CAN_WORK_MD_NORMAL;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
work_mode = CAN_WORK_MD_SILENT;
|
work_mode = CAN_WORK_MD_SILENT;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
work_mode = CAN_WORK_MD_ELB;
|
work_mode = CAN_WORK_MD_ELB;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
work_mode = CAN_WORK_MD_ELB_SILENT;
|
work_mode = CAN_WORK_MD_ELB_SILENT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -298,9 +298,9 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -135,12 +135,12 @@ static rt_err_t can_cfg(struct rt_can_device *can_dev, struct can_configure *cfg
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
/* default mode */
|
/* default mode */
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
config.enableLoopBack = true;
|
config.enableLoopBack = true;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
FLEXCAN_Init(can->base, &config, GetCanSrcFreq());
|
FLEXCAN_Init(can->base, &config, GetCanSrcFreq());
|
||||||
|
@ -156,14 +156,14 @@ static void bxcan_init(CAN_TypeDef *pcan, rt_uint32_t baud, rt_uint32_t mode)
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
CAN_InitStructure.CAN_Mode = 0x00;
|
CAN_InitStructure.CAN_Mode = 0x00;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
CAN_InitStructure.CAN_Mode = CAN_Mode_LOM;
|
CAN_InitStructure.CAN_Mode = CAN_Mode_LOM;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
CAN_InitStructure.CAN_Mode = CAN_Mode_STM;
|
CAN_InitStructure.CAN_Mode = CAN_Mode_STM;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
CAN_InitStructure.CAN_Mode = CAN_Mode_STM|CAN_Mode_LOM;
|
CAN_InitStructure.CAN_Mode = CAN_Mode_STM|CAN_Mode_LOM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -272,9 +272,9 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL ||
|
if (argval != RT_CAN_MODE_NORMAL ||
|
||||||
argval != RT_CAN_MODE_LISEN ||
|
argval != RT_CAN_MODE_LISTEN ||
|
||||||
argval != RT_CAN_MODE_LOOPBACK ||
|
argval != RT_CAN_MODE_LOOPBACK ||
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return RT_ERROR;
|
return RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Change Logs: (Pelican Mode)
|
* Change Logs: (Pelican Mode)
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2018-01-06 sundm75 first version
|
* 2018-01-06 sundm75 first version
|
||||||
*/
|
*/
|
||||||
@ -54,9 +54,9 @@
|
|||||||
#define CAN_RTR_Remote 1
|
#define CAN_RTR_Remote 1
|
||||||
|
|
||||||
#define CAN_MODE_NORMAL 0
|
#define CAN_MODE_NORMAL 0
|
||||||
#define CAN_MODE_LISEN 1
|
#define CAN_MODE_LISTEN 1
|
||||||
#define CAN_MODE_LOOPBACK 2
|
#define CAN_MODE_LOOPBACK 2
|
||||||
#define CAN_MODE_LOOPBACKANLISEN 3
|
#define CAN_MODE_LOOPBACKANLISTEN 3
|
||||||
|
|
||||||
/*!< CAN 控制状态寄存器 */
|
/*!< CAN 控制状态寄存器 */
|
||||||
/************************** CAN_MOD 寄存器位定义*******************************/
|
/************************** CAN_MOD 寄存器位定义*******************************/
|
||||||
@ -84,7 +84,7 @@
|
|||||||
#define CAN_SR_TS ((unsigned char)0x20) /*!< 发送状态1: 发送 0: 空闲*/
|
#define CAN_SR_TS ((unsigned char)0x20) /*!< 发送状态1: 发送 0: 空闲*/
|
||||||
#define CAN_SR_ES ((unsigned char)0x40) /*!< 出错状态1:出错 0: 正常 */
|
#define CAN_SR_ES ((unsigned char)0x40) /*!< 出错状态1:出错 0: 正常 */
|
||||||
#define CAN_SR_BS ((unsigned char)0x80) /*!< 总线状态1: 关闭 0: 开启 */
|
#define CAN_SR_BS ((unsigned char)0x80) /*!< 总线状态1: 关闭 0: 开启 */
|
||||||
|
|
||||||
/************************** CAN_IR 中断寄存器位定义****************************/
|
/************************** CAN_IR 中断寄存器位定义****************************/
|
||||||
#define CAN_IR_RI ((unsigned char)0x01) /*!< 接收中断 */
|
#define CAN_IR_RI ((unsigned char)0x01) /*!< 接收中断 */
|
||||||
#define CAN_IR_TI ((unsigned char)0x02) /*!< 发送中断 */
|
#define CAN_IR_TI ((unsigned char)0x02) /*!< 发送中断 */
|
||||||
@ -94,7 +94,7 @@
|
|||||||
#define CAN_IR_EPI ((unsigned char)0x20) /*!< 错误消极中断 */
|
#define CAN_IR_EPI ((unsigned char)0x20) /*!< 错误消极中断 */
|
||||||
#define CAN_IR_ALI ((unsigned char)0x40) /*!< 仲裁丢失中断 */
|
#define CAN_IR_ALI ((unsigned char)0x40) /*!< 仲裁丢失中断 */
|
||||||
#define CAN_IR_BEI ((unsigned char)0x80) /*!< 总线错误中断 */
|
#define CAN_IR_BEI ((unsigned char)0x80) /*!< 总线错误中断 */
|
||||||
|
|
||||||
/************************* CAN_IER 中断使能寄存器位定义************************/
|
/************************* CAN_IER 中断使能寄存器位定义************************/
|
||||||
#define CAN_IER_RIE ((unsigned char)0x01) /*!< 接收中断使能 */
|
#define CAN_IER_RIE ((unsigned char)0x01) /*!< 接收中断使能 */
|
||||||
#define CAN_IER_TIE ((unsigned char)0x02) /*!< 发送中断使能 */
|
#define CAN_IER_TIE ((unsigned char)0x02) /*!< 发送中断使能 */
|
||||||
@ -104,17 +104,17 @@
|
|||||||
#define CAN_IER_EPIE ((unsigned char)0x20) /*!< 错误消极中断使能 */
|
#define CAN_IER_EPIE ((unsigned char)0x20) /*!< 错误消极中断使能 */
|
||||||
#define CAN_IER_ALIE ((unsigned char)0x40) /*!< 仲裁丢失中断使能 */
|
#define CAN_IER_ALIE ((unsigned char)0x40) /*!< 仲裁丢失中断使能 */
|
||||||
#define CAN_IER_BEIE ((unsigned char)0x80) /*!< 总线错误中断使能 */
|
#define CAN_IER_BEIE ((unsigned char)0x80) /*!< 总线错误中断使能 */
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
LS1C_CAN1MBaud=0, // 1 MBit/sec
|
LS1C_CAN1MBaud=0, // 1 MBit/sec
|
||||||
LS1C_CAN800kBaud, // 800 kBit/sec
|
LS1C_CAN800kBaud, // 800 kBit/sec
|
||||||
LS1C_CAN500kBaud, // 500 kBit/sec
|
LS1C_CAN500kBaud, // 500 kBit/sec
|
||||||
LS1C_CAN250kBaud, // 250 kBit/sec
|
LS1C_CAN250kBaud, // 250 kBit/sec
|
||||||
LS1C_CAN125kBaud, // 125 kBit/sec
|
LS1C_CAN125kBaud, // 125 kBit/sec
|
||||||
LS1C_CAN100kBaud, // 100 kBit/sec
|
LS1C_CAN100kBaud, // 100 kBit/sec
|
||||||
LS1C_CAN50kBaud, // 50 kBit/sec
|
LS1C_CAN50kBaud, // 50 kBit/sec
|
||||||
LS1C_CAN40kBaud, // 40 kBit/sec
|
LS1C_CAN40kBaud, // 40 kBit/sec
|
||||||
}Ls1c_CanBPS_t;
|
}Ls1c_CanBPS_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -143,12 +143,12 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned char CAN_Prescaler; /* 波特率分频系数1 to 31. */
|
unsigned char CAN_Prescaler; /* 波特率分频系数1 to 31. */
|
||||||
unsigned char CAN_Mode; /*0x10:睡眠0x08:单,双滤波 0x40:正常工作0x20:只听 0x01:复位*/
|
unsigned char CAN_Mode; /*0x10:睡眠0x08:单,双滤波 0x40:正常工作0x20:只听 0x01:复位*/
|
||||||
unsigned char CAN_SJW; /*同步跳转宽度 */
|
unsigned char CAN_SJW; /*同步跳转宽度 */
|
||||||
unsigned char CAN_BS1; /*时间段1计数值*/
|
unsigned char CAN_BS1; /*时间段1计数值*/
|
||||||
unsigned char CAN_BS2; /*时间段2计数值*/
|
unsigned char CAN_BS2; /*时间段2计数值*/
|
||||||
|
|
||||||
} CAN_InitTypeDef;
|
} CAN_InitTypeDef;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -104,13 +104,13 @@ static uint8_t get_can_mode_rtt2n32(uint8_t rtt_can_mode)
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
mode = CAN_Normal_Mode;
|
mode = CAN_Normal_Mode;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
mode = CAN_Silent_Mode;
|
mode = CAN_Silent_Mode;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
mode = CAN_LoopBack_Mode;
|
mode = CAN_LoopBack_Mode;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
mode = CAN_Silent_LoopBack_Mode;
|
mode = CAN_Silent_LoopBack_Mode;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -413,9 +413,9 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t)arg;
|
argval = (rt_uint32_t)arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -256,13 +256,13 @@ static rt_err_t nu_can_configure(struct rt_can_device *can, struct can_configure
|
|||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -328,9 +328,9 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
|
|
||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
if ((argval == RT_CAN_MODE_NORMAL) ||
|
if ((argval == RT_CAN_MODE_NORMAL) ||
|
||||||
(argval == RT_CAN_MODE_LISEN) ||
|
(argval == RT_CAN_MODE_LISTEN) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACK) ||
|
(argval == RT_CAN_MODE_LOOPBACK) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACKANLISEN))
|
(argval == RT_CAN_MODE_LOOPBACKANLISTEN))
|
||||||
{
|
{
|
||||||
if (argval != can->config.mode)
|
if (argval != can->config.mode)
|
||||||
{
|
{
|
||||||
|
@ -307,13 +307,13 @@ static rt_err_t nu_can_configure(struct rt_can_device *can, struct can_configure
|
|||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -379,9 +379,9 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
|
|
||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
if ((argval == RT_CAN_MODE_NORMAL) ||
|
if ((argval == RT_CAN_MODE_NORMAL) ||
|
||||||
(argval == RT_CAN_MODE_LISEN) ||
|
(argval == RT_CAN_MODE_LISTEN) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACK) ||
|
(argval == RT_CAN_MODE_LOOPBACK) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACKANLISEN))
|
(argval == RT_CAN_MODE_LOOPBACKANLISTEN))
|
||||||
{
|
{
|
||||||
if (argval != can->config.mode)
|
if (argval != can->config.mode)
|
||||||
{
|
{
|
||||||
|
@ -256,13 +256,13 @@ static rt_err_t nu_can_configure(struct rt_can_device *can, struct can_configure
|
|||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -328,9 +328,9 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
|
|
||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
if ((argval == RT_CAN_MODE_NORMAL) ||
|
if ((argval == RT_CAN_MODE_NORMAL) ||
|
||||||
(argval == RT_CAN_MODE_LISEN) ||
|
(argval == RT_CAN_MODE_LISTEN) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACK) ||
|
(argval == RT_CAN_MODE_LOOPBACK) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACKANLISEN))
|
(argval == RT_CAN_MODE_LOOPBACKANLISTEN))
|
||||||
{
|
{
|
||||||
if (argval != can->config.mode)
|
if (argval != can->config.mode)
|
||||||
{
|
{
|
||||||
|
@ -280,13 +280,13 @@ static rt_err_t nu_can_configure(struct rt_can_device *can, struct can_configure
|
|||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
CAN_EnterTestMode(base, CAN_TEST_BASIC_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -352,9 +352,9 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
|
|
||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
if ((argval == RT_CAN_MODE_NORMAL) ||
|
if ((argval == RT_CAN_MODE_NORMAL) ||
|
||||||
(argval == RT_CAN_MODE_LISEN) ||
|
(argval == RT_CAN_MODE_LISTEN) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACK) ||
|
(argval == RT_CAN_MODE_LOOPBACK) ||
|
||||||
(argval == RT_CAN_MODE_LOOPBACKANLISEN))
|
(argval == RT_CAN_MODE_LOOPBACKANLISTEN))
|
||||||
{
|
{
|
||||||
if (argval != can->config.mode)
|
if (argval != can->config.mode)
|
||||||
{
|
{
|
||||||
|
@ -134,7 +134,7 @@ rt_err_t ra_can_control(struct rt_can_device *can_dev, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK)
|
argval != RT_CAN_MODE_LOOPBACK)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
@ -147,7 +147,7 @@ rt_err_t ra_can_control(struct rt_can_device *can_dev, int cmd, void *arg)
|
|||||||
{
|
{
|
||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
mode_to_set = CAN_TEST_MODE_DISABLED;
|
mode_to_set = CAN_TEST_MODE_DISABLED;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
mode_to_set = CAN_TEST_MODE_LISTEN;
|
mode_to_set = CAN_TEST_MODE_LISTEN;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
mode_to_set = CAN_TEST_MODE_LOOPBACK_INTERNAL;
|
mode_to_set = CAN_TEST_MODE_LOOPBACK_INTERNAL;
|
||||||
|
@ -149,13 +149,13 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg
|
|||||||
case RT_CAN_MODE_NORMAL:
|
case RT_CAN_MODE_NORMAL:
|
||||||
drv_can->CanHandle.Init.Mode = CAN_MODE_NORMAL;
|
drv_can->CanHandle.Init.Mode = CAN_MODE_NORMAL;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LISEN:
|
case RT_CAN_MODE_LISTEN:
|
||||||
drv_can->CanHandle.Init.Mode = CAN_MODE_SILENT;
|
drv_can->CanHandle.Init.Mode = CAN_MODE_SILENT;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACK:
|
case RT_CAN_MODE_LOOPBACK:
|
||||||
drv_can->CanHandle.Init.Mode = CAN_MODE_LOOPBACK;
|
drv_can->CanHandle.Init.Mode = CAN_MODE_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
case RT_CAN_MODE_LOOPBACKANLISEN:
|
case RT_CAN_MODE_LOOPBACKANLISTEN:
|
||||||
drv_can->CanHandle.Init.Mode = CAN_MODE_SILENT_LOOPBACK;
|
drv_can->CanHandle.Init.Mode = CAN_MODE_SILENT_LOOPBACK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -410,9 +410,9 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
|
|||||||
case RT_CAN_CMD_SET_MODE:
|
case RT_CAN_CMD_SET_MODE:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if (argval != RT_CAN_MODE_NORMAL &&
|
if (argval != RT_CAN_MODE_NORMAL &&
|
||||||
argval != RT_CAN_MODE_LISEN &&
|
argval != RT_CAN_MODE_LISTEN &&
|
||||||
argval != RT_CAN_MODE_LOOPBACK &&
|
argval != RT_CAN_MODE_LOOPBACK &&
|
||||||
argval != RT_CAN_MODE_LOOPBACKANLISEN)
|
argval != RT_CAN_MODE_LOOPBACKANLISTEN)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,9 @@ if RT_USING_CAN
|
|||||||
config RT_CAN_USING_HDR
|
config RT_CAN_USING_HDR
|
||||||
bool "Enable CAN hardware filter"
|
bool "Enable CAN hardware filter"
|
||||||
default n
|
default n
|
||||||
|
config RT_CAN_USING_CANFD
|
||||||
|
bool "Enable CANFD support"
|
||||||
|
default n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
config RT_USING_HWTIMER
|
config RT_USING_HWTIMER
|
||||||
|
@ -924,7 +924,7 @@ int cmd_canstat(int argc, void **argv)
|
|||||||
rt_kprintf(" Can't find can device %s\n", argv[1]);
|
rt_kprintf(" Can't find can device %s\n", argv[1]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
rt_kprintf(" Finded can device: %s...", argv[1]);
|
rt_kprintf(" Found can device: %s...", argv[1]);
|
||||||
|
|
||||||
rt_device_control(candev, RT_CAN_CMD_GET_STATUS, &status);
|
rt_device_control(candev, RT_CAN_CMD_GET_STATUS, &status);
|
||||||
rt_kprintf("\n Receive...error..count: %010ld. Send.....error....count: %010ld.",
|
rt_kprintf("\n Receive...error..count: %010ld. Send.....error....count: %010ld.",
|
||||||
@ -954,9 +954,9 @@ int cmd_canstat(int argc, void **argv)
|
|||||||
rt_kprintf("%s.", ErrCode[3]);
|
rt_kprintf("%s.", ErrCode[3]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rt_kprintf("\n Total.receive.packages: %010ld. Droped.receive.packages: %010ld.",
|
rt_kprintf("\n Total.receive.packages: %010ld. Dropped.receive.packages: %010ld.",
|
||||||
status.rcvpkg, status.dropedrcvpkg);
|
status.rcvpkg, status.dropedrcvpkg);
|
||||||
rt_kprintf("\n Total..send...packages: %010ld. Droped...send..packages: %010ld.\n",
|
rt_kprintf("\n Total..send...packages: %010ld. Dropped...send..packages: %010ld.\n",
|
||||||
status.sndpkg + status.dropedsndpkg, status.dropedsndpkg);
|
status.sndpkg + status.dropedsndpkg, status.dropedsndpkg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2021, RT-Thread Development Team
|
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
@ -7,6 +7,7 @@
|
|||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2015-05-14 aubrcool@qq.com first version
|
* 2015-05-14 aubrcool@qq.com first version
|
||||||
* 2015-07-06 Bernard remove RT_CAN_USING_LED.
|
* 2015-07-06 Bernard remove RT_CAN_USING_LED.
|
||||||
|
* 2022-05-08 hpmicro add CANFD support, fixed typos
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CAN_H_
|
#ifndef CAN_H_
|
||||||
@ -21,6 +22,26 @@
|
|||||||
#define RT_CANSND_BOX_NUM 1
|
#define RT_CANSND_BOX_NUM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum CAN_DLC
|
||||||
|
{
|
||||||
|
CAN_MSG_0BYTE = 0,
|
||||||
|
CAN_MSG_1BYTE,
|
||||||
|
CAN_MSG_2BYTES,
|
||||||
|
CAN_MSG_3BYTES,
|
||||||
|
CAN_MSG_4BYTES,
|
||||||
|
CAN_MSG_5BYTES,
|
||||||
|
CAN_MSG_6BYTES,
|
||||||
|
CAN_MSG_7BYTES,
|
||||||
|
CAN_MSG_8BYTES,
|
||||||
|
CAN_MSG_12BYTES,
|
||||||
|
CAN_MSG_16BYTES,
|
||||||
|
CAN_MSG_20BYTES,
|
||||||
|
CAN_MSG_24BYTES,
|
||||||
|
CAN_MSG_32BYTES,
|
||||||
|
CAN_MSG_48BYTES,
|
||||||
|
CAN_MSG_64BYTES,
|
||||||
|
};
|
||||||
|
|
||||||
enum CANBAUD
|
enum CANBAUD
|
||||||
{
|
{
|
||||||
CAN1MBaud = 1000UL * 1000,/* 1 MBit/sec */
|
CAN1MBaud = 1000UL * 1000,/* 1 MBit/sec */
|
||||||
@ -35,9 +56,9 @@ enum CANBAUD
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define RT_CAN_MODE_NORMAL 0
|
#define RT_CAN_MODE_NORMAL 0
|
||||||
#define RT_CAN_MODE_LISEN 1
|
#define RT_CAN_MODE_LISTEN 1
|
||||||
#define RT_CAN_MODE_LOOPBACK 2
|
#define RT_CAN_MODE_LOOPBACK 2
|
||||||
#define RT_CAN_MODE_LOOPBACKANLISEN 3
|
#define RT_CAN_MODE_LOOPBACKANLISTEN 3
|
||||||
|
|
||||||
#define RT_CAN_MODE_PRIV 0x01
|
#define RT_CAN_MODE_PRIV 0x01
|
||||||
#define RT_CAN_MODE_NOPRIV 0x00
|
#define RT_CAN_MODE_NOPRIV 0x00
|
||||||
@ -96,6 +117,27 @@ struct rt_can_filter_config
|
|||||||
struct rt_can_filter_item *items;
|
struct rt_can_filter_item *items;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct rt_can_bit_timing
|
||||||
|
{
|
||||||
|
rt_uint16_t prescaler; /* Pre-scaler */
|
||||||
|
rt_uint16_t num_seg1; /* Bit Timing Segment 1, in terms of Tq */
|
||||||
|
rt_uint16_t num_seg2; /* Bit Timing Segment 2, in terms of Tq */
|
||||||
|
rt_uint8_t num_sjw; /* Synchronization Jump Width, in terms of Tq */
|
||||||
|
rt_uint8_t num_sspoff; /* Secondary Sample Point Offset, in terms of Tq */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CAN bit timing configuration list
|
||||||
|
* NOTE:
|
||||||
|
* items[0] always for CAN2.0/CANFD Arbitration Phase
|
||||||
|
* items[1] always for CANFD (if it exists)
|
||||||
|
*/
|
||||||
|
struct rt_can_bit_timing_config
|
||||||
|
{
|
||||||
|
rt_uint32_t count;
|
||||||
|
struct rt_can_bit_timing *items;
|
||||||
|
};
|
||||||
|
|
||||||
struct can_configure
|
struct can_configure
|
||||||
{
|
{
|
||||||
rt_uint32_t baud_rate;
|
rt_uint32_t baud_rate;
|
||||||
@ -108,6 +150,17 @@ struct can_configure
|
|||||||
#ifdef RT_CAN_USING_HDR
|
#ifdef RT_CAN_USING_HDR
|
||||||
rt_uint32_t maxhdr;
|
rt_uint32_t maxhdr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef RT_CAN_USING_CANFD
|
||||||
|
rt_uint32_t baud_rate_fd; /* CANFD data bit rate*/
|
||||||
|
rt_uint32_t use_bit_timing: 8; /* Use the bit timing for CAN timing configuration */
|
||||||
|
rt_uint32_t enable_canfd : 8; /* Enable CAN-FD mode */
|
||||||
|
rt_uint32_t reserved1 : 16;
|
||||||
|
|
||||||
|
/* The below fields take effect only if use_bit_timing is non-zero */
|
||||||
|
struct rt_can_bit_timing can_timing; /* CAN bit-timing /CANFD bit-timing for arbitration phase */
|
||||||
|
struct rt_can_bit_timing canfd_timing; /* CANFD bit-timing for datat phase */
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CANDEFAULTCONFIG \
|
#define CANDEFAULTCONFIG \
|
||||||
@ -126,6 +179,9 @@ struct rt_can_ops;
|
|||||||
#define RT_CAN_CMD_GET_STATUS 0x17
|
#define RT_CAN_CMD_GET_STATUS 0x17
|
||||||
#define RT_CAN_CMD_SET_STATUS_IND 0x18
|
#define RT_CAN_CMD_SET_STATUS_IND 0x18
|
||||||
#define RT_CAN_CMD_SET_BUS_HOOK 0x19
|
#define RT_CAN_CMD_SET_BUS_HOOK 0x19
|
||||||
|
#define RT_CAN_CMD_SET_CANFD 0x1A
|
||||||
|
#define RT_CAN_CMD_SET_BAUD_FD 0x1B
|
||||||
|
#define RT_CAN_CMD_SET_BITTIMING 0x1C
|
||||||
|
|
||||||
#define RT_DEVICE_CAN_INT_ERR 0x1000
|
#define RT_DEVICE_CAN_INT_ERR 0x1000
|
||||||
|
|
||||||
@ -222,8 +278,17 @@ struct rt_can_msg
|
|||||||
rt_uint32_t len : 8;
|
rt_uint32_t len : 8;
|
||||||
rt_uint32_t priv : 8;
|
rt_uint32_t priv : 8;
|
||||||
rt_int32_t hdr : 8;
|
rt_int32_t hdr : 8;
|
||||||
|
#ifdef RT_CAN_USING_CANFD
|
||||||
|
rt_uint32_t fd_frame : 1;
|
||||||
|
rt_uint32_t reserved : 7;
|
||||||
|
#else
|
||||||
rt_uint32_t reserved : 8;
|
rt_uint32_t reserved : 8;
|
||||||
|
#endif
|
||||||
|
#ifdef RT_CAN_USING_CANFD
|
||||||
|
rt_uint8_t data[64];
|
||||||
|
#else
|
||||||
rt_uint8_t data[8];
|
rt_uint8_t data[8];
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
typedef struct rt_can_msg *rt_can_msg_t;
|
typedef struct rt_can_msg *rt_can_msg_t;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user