Обновление
This commit is contained in:
parent
fe7e93fa2a
commit
2abb70ff24
|
|
@ -67,6 +67,10 @@ typedef struct {
|
|||
|
||||
osMessageQueueId_t txAccessQueue;
|
||||
|
||||
FLEXCAN_InitType tInitCfg;
|
||||
FLEXCAN_MBConfigType tMbCfg;
|
||||
FLEXCAN_InterruptType tIntCfg;
|
||||
|
||||
} tCanSerialPortFrameFlagchip;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -89,13 +89,9 @@ void vCanSerialPortFrameInit(
|
|||
|
||||
) {
|
||||
|
||||
|
||||
FLEXCAN_ErrorType tRetVal;
|
||||
FLEXCAN_InitType tInitCfg;
|
||||
FLEXCAN_MBConfigType tMbCfg = {0};
|
||||
uint32_t u32FuncClk;
|
||||
PCC_CtrlType bSP_PCC_Config;
|
||||
FLEXCAN_InterruptType tIntCfg = {0};
|
||||
|
||||
env->can = CANx;
|
||||
env->CAN_INDEX = CAN_INDEX;
|
||||
|
|
@ -108,26 +104,26 @@ void vCanSerialPortFrameInit(
|
|||
PCC_SetPcc(&bSP_PCC_Config);
|
||||
|
||||
|
||||
BSP_CAN_INIT_CFG(&tInitCfg);
|
||||
BSP_CAN_INIT_MBConfig(&tMbCfg);
|
||||
BSP_CAN_INIT_CFG(&env->tInitCfg);
|
||||
BSP_CAN_INIT_MBConfig(&env->tMbCfg);
|
||||
|
||||
tInitCfg.eBaudrate = canBaudRate;
|
||||
tInitCfg.bEnRxFifo = TRUE;
|
||||
tInitCfg.bEnDma = FALSE;
|
||||
env->tInitCfg.eBaudrate = canBaudRate;
|
||||
env->tInitCfg.bEnRxFifo = TRUE;
|
||||
env->tInitCfg.bEnDma = FALSE;
|
||||
|
||||
tInitCfg.bEnFd = FALSE;
|
||||
tInitCfg.bEnBrs = FALSE;
|
||||
tInitCfg.eMbDataWidth = FLEXCAN_DATAWIDTH_8;
|
||||
env->tInitCfg.bEnFd = FALSE;
|
||||
env->tInitCfg.bEnBrs = FALSE;
|
||||
env->tInitCfg.eMbDataWidth = FLEXCAN_DATAWIDTH_8;
|
||||
|
||||
u32FuncClk = PCC_GetPccFunctionClock(s_ePccCanTable[CAN_INDEX]);
|
||||
|
||||
tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; /* functional clock */
|
||||
tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; /* function clock frequency */
|
||||
env->tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; /* functional clock */
|
||||
env->tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; /* function clock frequency */
|
||||
|
||||
tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
env->tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
|
||||
|
||||
tRetVal = FLEXCAN_Init(CAN_INDEX, &tInitCfg);
|
||||
tRetVal = FLEXCAN_Init(CAN_INDEX, &env->tInitCfg);
|
||||
|
||||
if (tRetVal == FLEXCAN_ERROR_OK) {
|
||||
/* +++++++++++ can mb initial ++++++++++++ */
|
||||
|
|
@ -155,54 +151,54 @@ void vCanSerialPortFrameInit(
|
|||
env->pRxFilterFifoList[1].u32RxCanId = 0U;
|
||||
env->pRxFilterFifoList[1].u32RxCanIdMask = 0U;
|
||||
|
||||
tMbCfg.pRxFilterMBList = env->pRxFilterFifoList;
|
||||
tMbCfg.u8RxFilterMBCnt = sizeof(env->pRxFilterFifoList) / sizeof(env->pRxFilterFifoList[0]);
|
||||
env->tMbCfg.pRxFilterMBList = env->pRxFilterFifoList;
|
||||
env->tMbCfg.u8RxFilterMBCnt = sizeof(env->pRxFilterFifoList) / sizeof(env->pRxFilterFifoList[0]);
|
||||
|
||||
tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||
|
||||
/* tx config */
|
||||
|
||||
tMbCfg.u8TxMsgCnt = 3U; /* tx occupy 3 mb */
|
||||
env->tMbCfg.u8TxMsgCnt = 3U; /* tx occupy 3 mb */
|
||||
|
||||
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &tMbCfg);
|
||||
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &env->tMbCfg);
|
||||
|
||||
if (CAN_ErrorInterrupt_CallBack == NULL) {
|
||||
tIntCfg.bEnErrorInterrupt = 0U;
|
||||
tIntCfg.pErrorNotify = NULL;
|
||||
env->tIntCfg.bEnErrorInterrupt = 0U;
|
||||
env->tIntCfg.pErrorNotify = NULL;
|
||||
|
||||
tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
tIntCfg.pRxMBNotify = NULL;
|
||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxMBNotify = NULL;
|
||||
|
||||
tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
tIntCfg.pRxFifoNotify = NULL;
|
||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxFifoNotify = NULL;
|
||||
|
||||
tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||
tIntCfg.pTxMBNotify = NULL;
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||
env->tIntCfg.pTxMBNotify = NULL;
|
||||
|
||||
} else {
|
||||
tIntCfg.bEnErrorInterrupt = 1U;
|
||||
tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||
env->tIntCfg.bEnErrorInterrupt = 1U;
|
||||
env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnTxMBInterrupt = 1U;
|
||||
tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||
env->tIntCfg.bEnTxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnRxMBInterrupt = 1U;
|
||||
tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
env->tIntCfg.bEnRxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||
tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack;
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||
env->tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack;
|
||||
|
||||
}
|
||||
|
||||
if ((tIntCfg.bEnErrorInterrupt) ||
|
||||
(tIntCfg.bEnTxMBInterrupt) ||
|
||||
(tIntCfg.bEnRxMBInterrupt) ||
|
||||
(tIntCfg.bEnRxFifoInterrupt)) {
|
||||
if ((env->tIntCfg.bEnErrorInterrupt) ||
|
||||
(env->tIntCfg.bEnTxMBInterrupt) ||
|
||||
(env->tIntCfg.bEnRxMBInterrupt) ||
|
||||
(env->tIntCfg.bEnRxFifoInterrupt)) {
|
||||
|
||||
NVIC_SetPriority(IRQ_CAN, CAN_PRIORITY);
|
||||
NVIC_EnableIRQ(IRQ_CAN);
|
||||
|
||||
FLEXCAN_SetInterrupt(CAN_INDEX, &tIntCfg);
|
||||
FLEXCAN_SetInterrupt(CAN_INDEX, &env->tIntCfg);
|
||||
}
|
||||
|
||||
FLEXCAN_Start(CAN_INDEX); /* Start CAN */
|
||||
|
|
@ -254,11 +250,9 @@ void vCanSerialPortFrameDMAInit(
|
|||
|
||||
|
||||
FLEXCAN_ErrorType tRetVal;
|
||||
FLEXCAN_InitType tInitCfg;
|
||||
FLEXCAN_MBConfigType tMbCfg = {0};
|
||||
uint32_t u32FuncClk;
|
||||
PCC_CtrlType bSP_PCC_Config;
|
||||
FLEXCAN_InterruptType tIntCfg = {0};
|
||||
|
||||
|
||||
env->g_u32RxDataIndex = 0;
|
||||
|
||||
|
|
@ -273,26 +267,26 @@ void vCanSerialPortFrameDMAInit(
|
|||
PCC_SetPcc(&bSP_PCC_Config);
|
||||
|
||||
|
||||
BSP_CAN_INIT_CFG(&tInitCfg);
|
||||
BSP_CAN_INIT_MBConfig(&tMbCfg);
|
||||
BSP_CAN_INIT_CFG(&env->tInitCfg);
|
||||
BSP_CAN_INIT_MBConfig(&env->tMbCfg);
|
||||
|
||||
tInitCfg.eBaudrate = canBaudRate;
|
||||
tInitCfg.bEnRxFifo = TRUE;
|
||||
tInitCfg.bEnDma = TRUE;
|
||||
env->tInitCfg.eBaudrate = canBaudRate;
|
||||
env->tInitCfg.bEnRxFifo = TRUE;
|
||||
env->tInitCfg.bEnDma = TRUE;
|
||||
|
||||
tInitCfg.bEnFd = FALSE;
|
||||
tInitCfg.bEnBrs = FALSE;
|
||||
tInitCfg.eMbDataWidth = FLEXCAN_DATAWIDTH_8;
|
||||
env->tInitCfg.bEnFd = FALSE;
|
||||
env->tInitCfg.bEnBrs = FALSE;
|
||||
env->tInitCfg.eMbDataWidth = FLEXCAN_DATAWIDTH_8;
|
||||
|
||||
u32FuncClk = PCC_GetPccFunctionClock(s_ePccCanTable[CAN_INDEX]);
|
||||
|
||||
tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; /* functional clock */
|
||||
tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; /* function clock frequency */
|
||||
env->tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; /* functional clock */
|
||||
env->tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; /* function clock frequency */
|
||||
|
||||
tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
env->tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
|
||||
|
||||
tRetVal = FLEXCAN_Init(CAN_INDEX, &tInitCfg);
|
||||
tRetVal = FLEXCAN_Init(CAN_INDEX, &env->tInitCfg);
|
||||
|
||||
if (tRetVal == FLEXCAN_ERROR_OK) {
|
||||
/* +++++++++++ can mb initial ++++++++++++ */
|
||||
|
|
@ -305,42 +299,42 @@ void vCanSerialPortFrameDMAInit(
|
|||
env->pRxFilterFifoList[1].u32RxCanId = 0U;
|
||||
env->pRxFilterFifoList[1].u32RxCanIdMask = 0U;
|
||||
|
||||
tMbCfg.pRxFilterMBList = env->pRxFilterFifoList;
|
||||
tMbCfg.u8RxFilterMBCnt = sizeof(env->pRxFilterFifoList) / sizeof(env->pRxFilterFifoList[0]);
|
||||
env->tMbCfg.pRxFilterMBList = env->pRxFilterFifoList;
|
||||
env->tMbCfg.u8RxFilterMBCnt = sizeof(env->pRxFilterFifoList) / sizeof(env->pRxFilterFifoList[0]);
|
||||
|
||||
tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||
|
||||
/* tx config */
|
||||
|
||||
tMbCfg.u8TxMsgCnt = 3U; /* tx occupy 3 mb */
|
||||
env->tMbCfg.u8TxMsgCnt = 3U; /* tx occupy 3 mb */
|
||||
|
||||
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &tMbCfg);
|
||||
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &env->tMbCfg);
|
||||
|
||||
if (CAN_ErrorInterrupt_CallBack == NULL) {
|
||||
tIntCfg.bEnErrorInterrupt = 0U;
|
||||
tIntCfg.pErrorNotify = NULL;
|
||||
env->tIntCfg.bEnErrorInterrupt = 0U;
|
||||
env->tIntCfg.pErrorNotify = NULL;
|
||||
|
||||
tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
tIntCfg.pRxMBNotify = NULL;
|
||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxMBNotify = NULL;
|
||||
|
||||
tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
tIntCfg.pRxFifoNotify = NULL;
|
||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxFifoNotify = NULL;
|
||||
|
||||
tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||
tIntCfg.pTxMBNotify = NULL;
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||
env->tIntCfg.pTxMBNotify = NULL;
|
||||
|
||||
} else {
|
||||
tIntCfg.bEnErrorInterrupt = 1U;
|
||||
tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||
env->tIntCfg.bEnErrorInterrupt = 1U;
|
||||
env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnTxMBInterrupt = 1U;
|
||||
tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||
env->tIntCfg.bEnTxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnRxMBInterrupt = 1U;
|
||||
tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
env->tIntCfg.bEnRxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
|
||||
tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||
tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack;
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||
env->tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -398,15 +392,15 @@ void vCanSerialPortFrameDMAInit(
|
|||
|
||||
DMA_StartChannel(DMA_INSTANCE_0, (DMA_ChannelType) RX_DMA_CHANNEL);
|
||||
|
||||
if ((tIntCfg.bEnErrorInterrupt) ||
|
||||
(tIntCfg.bEnTxMBInterrupt) ||
|
||||
(tIntCfg.bEnRxMBInterrupt) ||
|
||||
(tIntCfg.bEnRxFifoInterrupt)) {
|
||||
if ((env->tIntCfg.bEnErrorInterrupt) ||
|
||||
(env->tIntCfg.bEnTxMBInterrupt) ||
|
||||
(env->tIntCfg.bEnRxMBInterrupt) ||
|
||||
(env->tIntCfg.bEnRxFifoInterrupt)) {
|
||||
|
||||
NVIC_SetPriority(IRQ_CAN, CAN_PRIORITY);
|
||||
NVIC_EnableIRQ(IRQ_CAN);
|
||||
|
||||
FLEXCAN_SetInterrupt(CAN_INDEX, &tIntCfg);
|
||||
FLEXCAN_SetInterrupt(CAN_INDEX, &env->tIntCfg);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -436,6 +430,7 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_
|
|||
|
||||
rx_message_struct.id_type = FLEXCAN_MB_IDE_GET(u32TempAddr);
|
||||
|
||||
|
||||
if (rx_message_struct.id_type == FLEXCAN_ID_STD) {
|
||||
rx_message_struct.standard_id = FLEXCAN_MB_STDID_GET(u32TempAddr);
|
||||
} else {
|
||||
|
|
@ -451,6 +446,28 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_
|
|||
REV_BYTES_32(pSrc[u8Index], pDest[u8Index]);
|
||||
}
|
||||
|
||||
rx_message_struct.filter_index = 0xFF;
|
||||
|
||||
for (uint8_t i = 0; i < COUNT_QUEUE; ++i) {
|
||||
|
||||
if ((rx_message_struct.id_type == FLEXCAN_ID_STD) &&
|
||||
(env->pRxFilterFifoList[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
||||
|
||||
if (rx_message_struct.standard_id == env->pRxFilterFifoList[i].u32RxCanId) {
|
||||
rx_message_struct.filter_index = i;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (rx_message_struct.extended_id == env->pRxFilterFifoList[i].u32RxCanId) {
|
||||
rx_message_struct.filter_index = i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
osMessageQueuePut(env->rxDataQueue, &rx_message_struct, 0x0, 0U);
|
||||
|
||||
if (env->rxDataSnifferQueue) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue