|
@@ -26,11 +26,8 @@ typedef struct hc32_mcan_config_struct
|
|
|
|
|
|
uint32_t int0_sel;
|
|
|
struct hc32_irq_config int0_cfg; /* MCAN interrupt line 0 configuration */
|
|
|
- uint32_t int1_sel;
|
|
|
- struct hc32_irq_config int1_cfg; /* MCAN interrupt line 1 configuration */
|
|
|
#if defined(HC32F4A8)
|
|
|
func_ptr_t irq_callback0;
|
|
|
- func_ptr_t irq_callback1;
|
|
|
#endif
|
|
|
} hc32_mcan_config_t;
|
|
|
|
|
@@ -85,13 +82,12 @@ typedef struct mcan_baud_rate_struct
|
|
|
#define MCAN_TX_INT (MCAN_INT_TX_CPLT)
|
|
|
#define MCAN_ERR_INT (MCAN_INT_ARB_PHASE_ERROR | MCAN_INT_DATA_PHASE_ERROR | MCAN_INT_ERR_LOG_OVF | \
|
|
|
MCAN_INT_ERR_PASSIVE | MCAN_INT_ERR_WARNING | MCAN_INT_BUS_OFF)
|
|
|
-#define MCAN_INT0_SEL (MCAN_RX_INT)
|
|
|
-#define MCAN_INT1_SEL (MCAN_TX_INT | MCAN_ERR_INT)
|
|
|
+#define MCAN_INT0_SEL (MCAN_RX_INT | MCAN_TX_INT | MCAN_ERR_INT)
|
|
|
|
|
|
/****************************************************************************************
|
|
|
* Baud rate(bit timing) configuration based on 80MHz clock
|
|
|
****************************************************************************************/
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
static const mcan_baud_rate_t m_mcan_fd_baud_rate[] =
|
|
|
{
|
|
|
{CAN500kBaud, CANFD_DATA_BAUD_1M, MCAN_FD_CFG_500K_1M},
|
|
@@ -127,9 +123,9 @@ static const uint8_t m_mcan_data_size[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20
|
|
|
|
|
|
static const rt_uint32_t m_mcan_tx_priv_mode[] = {MCAN_TX_FIFO_MD, MCAN_TX_QUEUE_MD};
|
|
|
|
|
|
-static const rt_uint32_t m_mcan_work_mode[] = {MCAN_MD_NORMAL, MCAN_MD_BUS_MON, MCAN_MD_EXTERN_LOOPBACK, MCAN_MD_RESTRICTED_OP};
|
|
|
+static const rt_uint32_t m_mcan_work_mode[] = {MCAN_MD_NORMAL, MCAN_MD_BUS_MON, MCAN_MD_EXTERN_LOOPBACK, MCAN_MD_INTERN_LOOPBACK};
|
|
|
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
static const rt_uint32_t m_mcan_fd_mode[] = {MCAN_FRAME_CLASSIC, MCAN_FRAME_ISO_FD_NO_BRS, MCAN_FRAME_ISO_FD_BRS, \
|
|
|
MCAN_FRAME_NON_ISO_FD_NO_BRS, MCAN_FRAME_NON_ISO_FD_BRS
|
|
|
};
|
|
@@ -140,10 +136,10 @@ static const rt_uint32_t m_mcan_fd_mode[] = {MCAN_FRAME_CLASSIC, MCAN_FRAME_ISO_
|
|
|
****************************************************************************************/
|
|
|
enum
|
|
|
{
|
|
|
-#ifdef BSP_USING_MCAN1
|
|
|
+#if defined(BSP_USING_MCAN1)
|
|
|
MCAN1_INDEX,
|
|
|
#endif
|
|
|
-#ifdef BSP_USING_MCAN2
|
|
|
+#if defined(BSP_USING_MCAN2)
|
|
|
MCAN2_INDEX,
|
|
|
#endif
|
|
|
MCAN_DEV_CNT,
|
|
@@ -151,7 +147,7 @@ enum
|
|
|
|
|
|
static hc32_mcan_driver_t m_mcan_driver_list[] =
|
|
|
{
|
|
|
-#ifdef BSP_USING_MCAN1
|
|
|
+#if defined(BSP_USING_MCAN1)
|
|
|
{
|
|
|
{
|
|
|
.name = MCAN1_NAME,
|
|
@@ -159,12 +155,10 @@ static hc32_mcan_driver_t m_mcan_driver_list[] =
|
|
|
.init_para = {.stcBitTime = MCAN1_BAUD_RATE_CFG},
|
|
|
.int0_sel = MCAN_INT0_SEL,
|
|
|
.int0_cfg = {BSP_MCAN1_INT0_IRQ_NUM, BSP_MCAN1_INT0_IRQ_PRIO, INT_SRC_MCAN1_INT0},
|
|
|
- .int1_sel = MCAN_INT1_SEL,
|
|
|
- .int1_cfg = {BSP_MCAN1_INT1_IRQ_NUM, BSP_MCAN1_INT0_IRQ_PRIO, INT_SRC_MCAN1_INT1},
|
|
|
}
|
|
|
},
|
|
|
#endif
|
|
|
-#ifdef BSP_USING_MCAN2
|
|
|
+#if defined(BSP_USING_MCAN2)
|
|
|
{
|
|
|
{
|
|
|
.name = MCAN2_NAME,
|
|
@@ -172,19 +166,17 @@ static hc32_mcan_driver_t m_mcan_driver_list[] =
|
|
|
.init_para = {.stcBitTime = MCAN2_BAUD_RATE_CFG},
|
|
|
.int0_sel = MCAN_INT0_SEL,
|
|
|
.int0_cfg = {BSP_MCAN2_INT0_IRQ_NUM, BSP_MCAN2_INT0_IRQ_PRIO, INT_SRC_MCAN2_INT0},
|
|
|
- .int1_sel = MCAN_INT1_SEL,
|
|
|
- .int1_cfg = {BSP_MCAN2_INT1_IRQ_NUM, BSP_MCAN2_INT1_IRQ_PRIO, INT_SRC_MCAN2_INT1},
|
|
|
}
|
|
|
},
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
-#ifdef BSP_USING_MCAN1
|
|
|
+#if defined(BSP_USING_MCAN1)
|
|
|
static stc_mcan_filter_t m_mcan1_std_filters[MCAN1_STD_FILTER_NUM];
|
|
|
static stc_mcan_filter_t m_mcan1_ext_filters[MCAN1_EXT_FILTER_NUM];
|
|
|
#endif
|
|
|
|
|
|
-#ifdef BSP_USING_MCAN2
|
|
|
+#if defined(BSP_USING_MCAN2)
|
|
|
static stc_mcan_filter_t m_mcan2_std_filters[MCAN2_STD_FILTER_NUM];
|
|
|
static stc_mcan_filter_t m_mcan2_ext_filters[MCAN2_EXT_FILTER_NUM];
|
|
|
#endif
|
|
@@ -234,7 +226,7 @@ static rt_ssize_t mcan_sendmsg(struct rt_can_device *device, const void *buf, rt
|
|
|
*/
|
|
|
static rt_ssize_t mcan_recvmsg(struct rt_can_device *device, void *buf, rt_uint32_t boxno);
|
|
|
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
static void mcan_copy_bt_to_cfg(struct can_configure *cfg, const stc_mcan_bit_time_config_t *ll_bt);
|
|
|
#endif
|
|
|
|
|
@@ -269,7 +261,7 @@ static rt_err_t mcan_configure(struct rt_can_device *device, struct can_configur
|
|
|
hard->init_para.u32Mode = m_mcan_work_mode[cfg->mode];
|
|
|
hard->init_para.u32FrameFormat = MCAN_FRAME_CLASSIC;
|
|
|
hard->init_para.stcMsgRam.u32TxFifoQueueMode = m_mcan_tx_priv_mode[cfg->privmode];
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
RT_ASSERT(IS_MCAN_FD_MODE(cfg->enable_canfd));
|
|
|
hard->init_para.u32FrameFormat = m_mcan_fd_mode[cfg->enable_canfd];
|
|
|
if (cfg->use_bit_timing)
|
|
@@ -365,7 +357,7 @@ static rt_err_t mcan_configure(struct rt_can_device *device, struct can_configur
|
|
|
driver->can_device.config.msgboxsz = pre_config.msgboxsz;
|
|
|
driver->can_device.config.ticks = pre_config.ticks;
|
|
|
}
|
|
|
-#ifdef RT_CAN_USING_HDR
|
|
|
+#if defined(RT_CAN_USING_HDR)
|
|
|
driver->can_device.config.maxhdr = pre_config.maxhdr;
|
|
|
#endif
|
|
|
driver->can_device.config.sndboxnumber = pre_config.sndboxnumber;
|
|
@@ -396,10 +388,6 @@ static void mcan_control_set_int(hc32_mcan_driver_t *driver, int cmd, void *arg)
|
|
|
{
|
|
|
MCAN_IntCmd(hard->instance, MCAN_RX_INT & hard->int0_sel, MCAN_INT_LINE0, new_state);
|
|
|
}
|
|
|
- if (MCAN_RX_INT & hard->int1_sel)
|
|
|
- {
|
|
|
- MCAN_IntCmd(hard->instance, MCAN_RX_INT & hard->int1_sel, MCAN_INT_LINE1, new_state);
|
|
|
- }
|
|
|
break;
|
|
|
case RT_DEVICE_FLAG_INT_TX:
|
|
|
tmp = hard->init_para.stcMsgRam.u32TxBufferNum + hard->init_para.stcMsgRam.u32TxFifoQueueNum;
|
|
@@ -417,20 +405,12 @@ static void mcan_control_set_int(hc32_mcan_driver_t *driver, int cmd, void *arg)
|
|
|
{
|
|
|
MCAN_IntCmd(hard->instance, MCAN_TX_INT & hard->int0_sel, MCAN_INT_LINE0, new_state);
|
|
|
}
|
|
|
- if (MCAN_TX_INT & hard->int1_sel)
|
|
|
- {
|
|
|
- MCAN_IntCmd(hard->instance, MCAN_TX_INT & hard->int1_sel, MCAN_INT_LINE1, new_state);
|
|
|
- }
|
|
|
break;
|
|
|
case RT_DEVICE_CAN_INT_ERR:
|
|
|
if (MCAN_ERR_INT & hard->int0_sel)
|
|
|
{
|
|
|
MCAN_IntCmd(hard->instance, MCAN_ERR_INT & hard->int0_sel, MCAN_INT_LINE0, new_state);
|
|
|
}
|
|
|
- if (MCAN_ERR_INT & hard->int1_sel)
|
|
|
- {
|
|
|
- MCAN_IntCmd(hard->instance, MCAN_ERR_INT & hard->int1_sel, MCAN_INT_LINE1, new_state);
|
|
|
- }
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -536,7 +516,7 @@ static rt_err_t mcan_control_set_priv(hc32_mcan_driver_t *driver, int cmd, void
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
static void mcan_copy_bt_to_cfg(struct can_configure *cfg, const stc_mcan_bit_time_config_t *ll_bt)
|
|
|
{
|
|
|
cfg->can_timing.prescaler = ll_bt->u32NominalPrescaler;
|
|
@@ -556,12 +536,12 @@ static rt_err_t mcan_control_set_fd(hc32_mcan_driver_t *driver, int cmd, void *a
|
|
|
{
|
|
|
rt_uint32_t i, len;
|
|
|
rt_uint32_t argval = (rt_uint32_t)arg;
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
struct rt_can_bit_timing_config *timing_configs = NULL;
|
|
|
#endif
|
|
|
switch (cmd)
|
|
|
{
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
case RT_CAN_CMD_SET_BAUD:
|
|
|
default:
|
|
|
RT_ASSERT(IS_MCAN_NOMINAL_BAUD_RATE(argval));
|
|
@@ -713,7 +693,7 @@ static rt_err_t mcan_control(struct rt_can_device *device, int cmd, void *arg)
|
|
|
break;
|
|
|
|
|
|
case RT_CAN_CMD_SET_BAUD:
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
case RT_CAN_CMD_SET_CANFD:
|
|
|
case RT_CAN_CMD_SET_BAUD_FD:
|
|
|
case RT_CAN_CMD_SET_BITTIMING:
|
|
@@ -759,7 +739,7 @@ static rt_ssize_t mcan_sendmsg(struct rt_can_device *device, const void *buf, rt
|
|
|
|
|
|
/* Parameter validity check */
|
|
|
RT_ASSERT(IS_CAN_VALID_ID(tx_msg->ide, tx_msg->id));
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
RT_ASSERT(tx_msg->len <= MCAN_DLC64);
|
|
|
#else
|
|
|
RT_ASSERT(tx_msg->len <= MCAN_DLC8);
|
|
@@ -770,7 +750,7 @@ static rt_ssize_t mcan_sendmsg(struct rt_can_device *device, const void *buf, rt
|
|
|
ll_tx_msg.IDE = tx_msg->ide;
|
|
|
ll_tx_msg.RTR = tx_msg->rtr;
|
|
|
ll_tx_msg.DLC = tx_msg->len;
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
ll_tx_msg.FDF = tx_msg->fd_frame;
|
|
|
ll_tx_msg.BRS = tx_msg->brs;
|
|
|
#endif
|
|
@@ -824,22 +804,22 @@ static rt_ssize_t mcan_recvmsg(struct rt_can_device *device, void *buf, rt_uint3
|
|
|
rx_msg->id = ll_rx_msg.ID;
|
|
|
rx_msg->ide = ll_rx_msg.IDE;
|
|
|
rx_msg->rtr = ll_rx_msg.RTR;
|
|
|
- rx_msg->len = ll_rx_msg.u32DataSize;
|
|
|
+ rx_msg->len = ll_rx_msg.DLC;
|
|
|
rx_msg->priv = 0;
|
|
|
-#ifdef RT_CAN_USING_HDR
|
|
|
+#if defined(RT_CAN_USING_HDR)
|
|
|
/* Hardware filter messages are valid */
|
|
|
rx_msg->hdr_index = ll_rx_msg.u32FilterIndex;
|
|
|
device->hdr[rx_msg->hdr_index].connected = 1;
|
|
|
#endif
|
|
|
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
rx_msg->fd_frame = ll_rx_msg.FDF;
|
|
|
rx_msg->brs = ll_rx_msg.BRS;
|
|
|
#endif
|
|
|
|
|
|
if (rx_msg->len > 0)
|
|
|
{
|
|
|
- rt_memcpy(&rx_msg->data[0], &ll_rx_msg.au8Data[0], rx_msg->len);
|
|
|
+ rt_memcpy(&rx_msg->data[0], &ll_rx_msg.au8Data[0], m_mcan_data_size[ll_rx_msg.DLC]);
|
|
|
}
|
|
|
|
|
|
return RT_EOK;
|
|
@@ -869,7 +849,11 @@ rt_inline void mcan_isr(hc32_mcan_driver_t *driver, uint32_t int_sel)
|
|
|
uint32_t ndat2 = MCANx->NDAT2;
|
|
|
int rx_buf_index;
|
|
|
|
|
|
- MCAN_ClearStatus(MCANx, ir_status & int_sel);
|
|
|
+ int_sel &= ~(MCAN_FLAG_RX_FIFO0_NEW_MSG | MCAN_FLAG_RX_FIFO1_NEW_MSG | MCAN_FLAG_RX_BUF_NEW_MSG);
|
|
|
+ if (0U != (ir_status & int_sel))
|
|
|
+ {
|
|
|
+ MCAN_ClearStatus(MCANx, ir_status & int_sel);
|
|
|
+ }
|
|
|
|
|
|
/* Check normal status flag */
|
|
|
/* Transmission completed */
|
|
@@ -967,7 +951,7 @@ rt_inline void mcan_isr(hc32_mcan_driver_t *driver, uint32_t int_sel)
|
|
|
/****************************************************************************************
|
|
|
* mcan irq handler
|
|
|
****************************************************************************************/
|
|
|
-#if defined(HC32F448) || defined(HC32F4A8)
|
|
|
+#if defined(HC32F448) || defined(HC32F4A8) || defined(HC32F334)
|
|
|
#if defined(BSP_USING_MCAN1)
|
|
|
void MCAN1_INT0_Handler(void)
|
|
|
{
|
|
@@ -979,18 +963,7 @@ void MCAN1_INT0_Handler(void)
|
|
|
/* leave interrupt */
|
|
|
rt_interrupt_leave();
|
|
|
}
|
|
|
-
|
|
|
-void MCAN1_INT1_Handler(void)
|
|
|
-{
|
|
|
- /* enter interrupt */
|
|
|
- rt_interrupt_enter();
|
|
|
-
|
|
|
- mcan_isr(&m_mcan_driver_list[MCAN1_INDEX], m_mcan_driver_list[MCAN1_INDEX].mcan.int1_sel);
|
|
|
-
|
|
|
- /* leave interrupt */
|
|
|
- rt_interrupt_leave();
|
|
|
-}
|
|
|
-#endif /* #if defined(BSP_USING_MCAN1) */
|
|
|
+#endif /* BSP_USING_MCAN1 */
|
|
|
|
|
|
#if defined(BSP_USING_MCAN2)
|
|
|
void MCAN2_INT0_Handler(void)
|
|
@@ -1003,18 +976,7 @@ void MCAN2_INT0_Handler(void)
|
|
|
/* leave interrupt */
|
|
|
rt_interrupt_leave();
|
|
|
}
|
|
|
-
|
|
|
-void MCAN2_INT1_Handler(void)
|
|
|
-{
|
|
|
- /* enter interrupt */
|
|
|
- rt_interrupt_enter();
|
|
|
-
|
|
|
- mcan_isr(&m_mcan_driver_list[MCAN2_INDEX], m_mcan_driver_list[MCAN2_INDEX].mcan.int1_sel);
|
|
|
-
|
|
|
- /* leave interrupt */
|
|
|
- rt_interrupt_leave();
|
|
|
-}
|
|
|
-#endif /* #if defined(BSP_USING_MCAN2) */
|
|
|
+#endif /* BSP_USING_MCAN2 */
|
|
|
#endif
|
|
|
|
|
|
/****************************************************************************************
|
|
@@ -1022,33 +984,16 @@ void MCAN2_INT1_Handler(void)
|
|
|
****************************************************************************************/
|
|
|
static void mcan_irq_config(hc32_mcan_config_t *hard)
|
|
|
{
|
|
|
-#if defined(HC32F448)
|
|
|
+#if defined(HC32F448) || defined(HC32F334)
|
|
|
if (hard->int0_sel != 0)
|
|
|
{
|
|
|
- INTC_IntSrcCmd(hard->int0_cfg.int_src, ENABLE);
|
|
|
-
|
|
|
- NVIC_ClearPendingIRQ(hard->int0_cfg.irq_num);
|
|
|
- NVIC_SetPriority(hard->int0_cfg.irq_num, hard->int0_cfg.irq_prio);
|
|
|
- NVIC_EnableIRQ(hard->int0_cfg.irq_num);
|
|
|
- }
|
|
|
-
|
|
|
- if (hard->int1_sel != 0)
|
|
|
- {
|
|
|
- INTC_IntSrcCmd(hard->int1_cfg.int_src, ENABLE);
|
|
|
-
|
|
|
- NVIC_ClearPendingIRQ(hard->int1_cfg.irq_num);
|
|
|
- NVIC_SetPriority(hard->int1_cfg.irq_num, hard->int1_cfg.irq_prio);
|
|
|
- NVIC_EnableIRQ(hard->int1_cfg.irq_num);
|
|
|
+ hc32_install_irq_handler(&hard->int0_cfg, RT_NULL, RT_TRUE);
|
|
|
}
|
|
|
#elif defined(HC32F4A8)
|
|
|
if (hard->int0_sel != 0)
|
|
|
{
|
|
|
hc32_install_irq_handler(&hard->int0_cfg, hard->irq_callback0, RT_TRUE);
|
|
|
}
|
|
|
- if (hard->int1_sel != 0)
|
|
|
- {
|
|
|
- hc32_install_irq_handler(&hard->int1_cfg, hard->irq_callback1, RT_TRUE);
|
|
|
- }
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -1061,9 +1006,7 @@ static void mcan_enable_periph_clock(void)
|
|
|
#if defined(BSP_USING_MCAN2)
|
|
|
FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_MCAN2, ENABLE);
|
|
|
#endif
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(HC32F334)
|
|
|
+#elif defined(HC32F334)
|
|
|
#if defined(BSP_USING_MCAN1) || defined(BSP_USING_MCAN2)
|
|
|
FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_MCAN1 | FCG1_PERIPH_MCAN2, ENABLE);
|
|
|
#endif
|
|
@@ -1166,10 +1109,10 @@ static void init_can_cfg(hc32_mcan_driver_t *driver)
|
|
|
|
|
|
can_cfg.privmode = RT_CAN_MODE_NOPRIV;
|
|
|
can_cfg.ticks = 50;
|
|
|
-#ifdef RT_CAN_USING_HDR
|
|
|
+#if defined(RT_CAN_USING_HDR)
|
|
|
can_cfg.maxhdr = MCAN_TOTAL_FILTER_NUM;
|
|
|
#endif
|
|
|
-#ifdef RT_CAN_USING_CANFD
|
|
|
+#if defined(RT_CAN_USING_CANFD)
|
|
|
can_cfg.baud_rate_fd = CANFD_DATA_BAUD_4M;
|
|
|
can_cfg.enable_canfd = MCAN_FD_SEL;
|
|
|
#endif
|
|
@@ -1185,20 +1128,18 @@ static void init_can_cfg(hc32_mcan_driver_t *driver)
|
|
|
*/
|
|
|
static void mcan_get_irq_callback(void)
|
|
|
{
|
|
|
-#ifdef BSP_USING_MCAN1
|
|
|
+#if defined(BSP_USING_MCAN1)
|
|
|
m_mcan_driver_list[MCAN1_INDEX].mcan.irq_callback0 = MCAN1_INT0_Handler;
|
|
|
- m_mcan_driver_list[MCAN1_INDEX].mcan.irq_callback1 = MCAN1_INT1_Handler;
|
|
|
#endif
|
|
|
-#ifdef BSP_USING_MCAN2
|
|
|
+#if defined(BSP_USING_MCAN2)
|
|
|
m_mcan_driver_list[MCAN2_INDEX].mcan.irq_callback0 = MCAN2_INT0_Handler;
|
|
|
- m_mcan_driver_list[MCAN2_INDEX].mcan.irq_callback1 = MCAN2_INT1_Handler;
|
|
|
#endif
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
extern rt_err_t rt_hw_board_mcan_init(CM_MCAN_TypeDef *MCANx);
|
|
|
extern void CanPhyEnable(void);
|
|
|
-static rt_err_t rt_hw_mcan_init(void)
|
|
|
+static int rt_hw_mcan_init(void)
|
|
|
{
|
|
|
rt_uint32_t i, filter;
|
|
|
rt_uint32_t tx_boxnum;
|
|
@@ -1239,7 +1180,6 @@ static rt_err_t rt_hw_mcan_init(void)
|
|
|
|
|
|
MCAN_TxBufferNotificationCmd(hard->instance, tx_boxnum, MCAN_INT_TX_CPLT, ENABLE);
|
|
|
MCAN_IntCmd(hard->instance, hard->int0_sel, MCAN_INT_LINE0, ENABLE);
|
|
|
- MCAN_IntCmd(hard->instance, hard->int1_sel, MCAN_INT_LINE1, ENABLE);
|
|
|
|
|
|
if (i > 0)
|
|
|
{
|