summaryrefslogtreecommitdiff
path: root/components/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'components/drivers')
-rw-r--r--components/drivers/can/can.c30
-rw-r--r--components/drivers/include/drivers/can.h23
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];