diff options
| author | wdfk-prog <[email protected]> | 2022-11-22 10:45:51 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-21 21:45:51 -0500 |
| commit | 569e2ae1e8671bdb17b3fa7b4197fdff6ad5cf1d (patch) | |
| tree | 14b7f9aa35e3ec0ae5c21396a88fafd7b874cc67 /components | |
| parent | 84eab69604df689716b54e1e6c38877f05d03b9f (diff) | |
[CAN]update struct can_filter_item and rt_can_msg (#6556)
* 修改ry命令,已便于自定义保存路径
* modified: components/utilities/ymodem/ry_sy.c
* 修复从被动错误恢复后发送返回异常
* 修复在自动重传模式下,ACK异常阻塞线程
- 删除TX中断函数else分支。仅当RQCP位 置一才进入该中断
- 添加SCE中断函数中关于ACK_ERR的else判断。自动重传模式下会进入该判断,打断自动重传释放完成量。
* 增加对于CAN1与CAN2的SCE中断和TX中断的公共处理函数
* formatting格式化代码
* update struct can_filter_item and rt_can_msg
1. 对过滤器号和索引号结构体定义中同一名称hdr进行重命名hdr_bank和hdr_index,
以便准确区分.采用宏定义兼容以前变量名.
2. 添加接收标识rxfifo,已指明是哪个RXFIFO.
* 更正42M下的波特率
* 修复接收获取索引号错误
* 添加接收标识
* 更新注释
* 取消CANFD限制
* update struct can_filter_item and rt_can_msg
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/can/can.c | 30 | ||||
| -rw-r--r-- | components/drivers/include/drivers/can.h | 23 |
2 files changed, 32 insertions, 21 deletions
diff --git a/components/drivers/can/can.c b/components/drivers/can/can.c index eee78da9ec..a3d81f6081 100644 --- a/components/drivers/can/can.c +++ b/components/drivers/can/can.c @@ -65,7 +65,7 @@ rt_inline int _can_int_rx(struct rt_can_device *can, struct rt_can_msg *data, in /* disable interrupt */ level = rt_hw_interrupt_disable(); #ifdef RT_CAN_USING_HDR - hdr = data->hdr; + hdr = data->hdr_index; if (hdr >= 0 && can->hdr && hdr < can->config.maxhdr && !rt_list_isempty(&can->hdr[hdr].list)) { @@ -581,7 +581,7 @@ static rt_err_t rt_can_control(struct rt_device *dev, { while (count) { - if (pitem->hdr >= can->config.maxhdr || pitem->hdr < 0) + if (pitem->hdr_bank >= can->config.maxhdr || pitem->hdr_bank < 0) { count--; pitem++; @@ -589,15 +589,15 @@ static rt_err_t rt_can_control(struct rt_device *dev, } level = rt_hw_interrupt_disable(); - if (!can->hdr[pitem->hdr].connected) + if (!can->hdr[pitem->hdr_bank].connected) { rt_hw_interrupt_enable(level); - rt_memcpy(&can->hdr[pitem->hdr].filter, pitem, + rt_memcpy(&can->hdr[pitem->hdr_bank].filter, pitem, sizeof(struct rt_can_filter_item)); level = rt_hw_interrupt_disable(); - can->hdr[pitem->hdr].connected = 1; - can->hdr[pitem->hdr].msgs = 0; - rt_list_init(&can->hdr[pitem->hdr].list); + can->hdr[pitem->hdr_bank].connected = 1; + can->hdr[pitem->hdr_bank].msgs = 0; + rt_list_init(&can->hdr[pitem->hdr_bank].list); } rt_hw_interrupt_enable(level); @@ -609,7 +609,7 @@ static rt_err_t rt_can_control(struct rt_device *dev, { while (count) { - if (pitem->hdr >= can->config.maxhdr || pitem->hdr < 0) + if (pitem->hdr_bank >= can->config.maxhdr || pitem->hdr_bank < 0) { count--; pitem++; @@ -617,16 +617,16 @@ static rt_err_t rt_can_control(struct rt_device *dev, } level = rt_hw_interrupt_disable(); - if (can->hdr[pitem->hdr].connected) + if (can->hdr[pitem->hdr_bank].connected) { - can->hdr[pitem->hdr].connected = 0; - can->hdr[pitem->hdr].msgs = 0; - if (!rt_list_isempty(&can->hdr[pitem->hdr].list)) + can->hdr[pitem->hdr_bank].connected = 0; + can->hdr[pitem->hdr_bank].msgs = 0; + if (!rt_list_isempty(&can->hdr[pitem->hdr_bank].list)) { - rt_list_remove(can->hdr[pitem->hdr].list.next); + rt_list_remove(can->hdr[pitem->hdr_bank].list.next); } rt_hw_interrupt_enable(level); - rt_memset(&can->hdr[pitem->hdr].filter, 0, + rt_memset(&can->hdr[pitem->hdr_bank].filter, 0, sizeof(struct rt_can_filter_item)); } else @@ -829,7 +829,7 @@ void rt_hw_can_isr(struct rt_can_device *can, int event) level = rt_hw_interrupt_disable(); rt_list_insert_before(&rx_fifo->uselist, &listmsg->list); #ifdef RT_CAN_USING_HDR - hdr = tmpmsg.hdr; + hdr = tmpmsg.hdr_index; if (can->hdr != RT_NULL) { RT_ASSERT(hdr < can->config.maxhdr && hdr >= 0); diff --git a/components/drivers/include/drivers/can.h b/components/drivers/include/drivers/can.h index 553e145e92..4bae9fcb16 100644 --- a/components/drivers/include/drivers/can.h +++ b/components/drivers/include/drivers/can.h @@ -63,6 +63,12 @@ enum CANBAUD #define RT_CAN_MODE_PRIV 0x01 #define RT_CAN_MODE_NOPRIV 0x00 +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number + * @{ + */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ + struct rt_can_filter_item { rt_uint32_t id : 29; @@ -70,16 +76,18 @@ struct rt_can_filter_item rt_uint32_t rtr : 1; rt_uint32_t mode : 1; rt_uint32_t mask; - rt_int32_t hdr; + rt_int32_t hdr_bank;/*Should be defined as:rx.FilterBank,which should be changed to rt_int32_t hdr_bank*/ + rt_uint32_t rxfifo;/*Add a configuration item that CAN_RX_FIFO0/CAN_RX_FIFO1*/ #ifdef RT_CAN_USING_HDR rt_err_t (*ind)(rt_device_t dev, void *args , rt_int32_t hdr, rt_size_t size); void *args; #endif /*RT_CAN_USING_HDR*/ }; + #ifdef RT_CAN_USING_HDR #define RT_CAN_FILTER_ITEM_INIT(id,ide,rtr,mode,mask,ind,args) \ - {(id), (ide), (rtr), (mode), (mask), -1, (ind), (args)} + {(id), (ide), (rtr), (mode),(mask), -1, CAN_RX_FIFO0,(ind), (args)}/*0:CAN_RX_FIFO0*/ #define RT_CAN_FILTER_STD_INIT(id,ind,args) \ RT_CAN_FILTER_ITEM_INIT(id,0,0,0,0xFFFFFFFF,ind,args) #define RT_CAN_FILTER_EXT_INIT(id,ind,args) \ @@ -95,7 +103,7 @@ struct rt_can_filter_item #else #define RT_CAN_FILTER_ITEM_INIT(id,ide,rtr,mode,mask) \ - {(id), (ide), (rtr), (mode), (mask), -1, } + {(id), (ide), (rtr), (mode), (mask), -1, CAN_RX_FIFO0 }/*0:CAN_RX_FIFO0*/ #define RT_CAN_FILTER_STD_INIT(id) \ RT_CAN_FILTER_ITEM_INIT(id,0,0,0,0xFFFFFFFF) #define RT_CAN_FILTER_EXT_INIT(id) \ @@ -269,6 +277,7 @@ typedef struct rt_can_device *rt_can_t; #define RT_CAN_RTR 1 typedef struct rt_can_status *rt_can_status_t; + struct rt_can_msg { rt_uint32_t id : 29; @@ -277,12 +286,14 @@ struct rt_can_msg rt_uint32_t rsv : 1; rt_uint32_t len : 8; rt_uint32_t priv : 8; - rt_int32_t hdr : 8; + rt_int32_t hdr_index : 8;/*Should be defined as:rx.FilterMatchIndex,which should be changed to rt_int32_t hdr_index : 8*/ #ifdef RT_CAN_USING_CANFD rt_uint32_t fd_frame : 1; - rt_uint32_t reserved : 7; + rt_uint32_t rxfifo : 2;/*Redefined to return :CAN RX FIFO0/CAN RX FIFO1*/ + rt_uint32_t reserved : 5; #else - rt_uint32_t reserved : 8; + rt_uint32_t rxfifo : 2;/*Redefined to return :CAN RX FIFO0/CAN RX FIFO1*/ + rt_uint32_t reserved : 6; #endif #ifdef RT_CAN_USING_CANFD rt_uint8_t data[64]; |
