From 49cb9a271f60fd8713c8650ce76582456fee8280 Mon Sep 17 00:00:00 2001 From: maruolang Date: Mon, 11 Mar 2024 11:18:55 +0800 Subject: [PATCH] Update CAN driver Rx message object configuration 1. Remove incorrect UMask bit setting in CAN_IFn_MCON within CAN_SetRxMsgObj. 2. Align CAN_IFn_MASK setting logic with CAN_IFn_ARB in CAN_SetRxMsgObjAndMsk. --- Library/StdDriver/src/can.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Library/StdDriver/src/can.c b/Library/StdDriver/src/can.c index aa90087c..5dfd8c40 100644 --- a/Library/StdDriver/src/can.c +++ b/Library/StdDriver/src/can.c @@ -574,18 +574,19 @@ int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, u if(u8idType == CAN_STD_ID) /* According STD/EXT ID format,Configure Mask and Arbitration register */ { + tCAN->IF[u32MsgIfNum].MASK1 = 0ul; + tCAN->IF[u32MsgIfNum].MASK2 = (u32idmask & 0x7FFul) << 2; tCAN->IF[u32MsgIfNum].ARB1 = 0ul; tCAN->IF[u32MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | (u32id & 0x7FFul) << 2; } else { + tCAN->IF[u32MsgIfNum].MASK1 = u32idmask & 0xFFFFul; + tCAN->IF[u32MsgIfNum].MASK2 = CAN_IF_MASK2_MXTD_Msk | (u32idmask & 0x1FFF0000ul) >> 16; tCAN->IF[u32MsgIfNum].ARB1 = u32id & 0xFFFFul; tCAN->IF[u32MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | CAN_IF_ARB2_XTD_Msk | (u32id & 0x1FFF0000ul) >> 16; } - tCAN->IF[u32MsgIfNum].MASK1 = (u32idmask & 0xFFFFul); - tCAN->IF[u32MsgIfNum].MASK2 = (u32idmask >> 16) & 0xFFFFul; - /* tCAN->IF[u32MsgIfNum].MCON |= CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; */ tCAN->IF[u32MsgIfNum].MCON = CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; if(u8singleOrFifoLast) @@ -653,8 +654,8 @@ int32_t CAN_SetRxMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_ tCAN->IF[u32MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | CAN_IF_ARB2_XTD_Msk | (u32id & 0x1FFF0000ul) >> 16; } - /* tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; */ - tCAN->IF[u32MsgIfNum].MCON = CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; + /* tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_RXIE_Msk; */ + tCAN->IF[u32MsgIfNum].MCON = CAN_IF_MCON_RXIE_Msk; if(u8singleOrFifoLast) { tCAN->IF[u32MsgIfNum].MCON |= CAN_IF_MCON_EOB_Msk;