Обновление
This commit is contained in:
parent
6a429ecd78
commit
bf6303a3ef
|
|
@ -129,6 +129,7 @@ bool vCanSerialPortFrameDMAInit(
|
|||
void CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg);
|
||||
|
||||
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf);
|
||||
void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, FLEXCAN_RxMsgType *pRxCfg);
|
||||
|
||||
void CanSerialPortFrameSetId(tCanSerialPortFrameFlagchip *env, uint32_t id);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,12 @@
|
|||
#include "memory.h"
|
||||
|
||||
|
||||
#define CAN_USED_NUM 2U // Количество CAN
|
||||
#define CAN_RECEIVE_MB_NUM 32 //
|
||||
#define CAN_USED_NUM 2U // Количество CAN
|
||||
#define CAN_RECEIVE_MB_NUM 128 // Количество mailbox на один CAN
|
||||
|
||||
static FLEXCAN_RxMsgType s_aaRxDataBuf[CAN_USED_NUM][CAN_RECEIVE_MB_NUM];
|
||||
#define CAN_GET_BUFFER(index) s_aaRxDataBuf[index/2]
|
||||
|
||||
#define CAN_GET_BUFFER(index) (FLEXCAN_RxMsgType*)s_aaRxDataBuf[index]
|
||||
|
||||
static const PCC_ClkSrcType s_ePccCanTable[] =
|
||||
{
|
||||
|
|
@ -110,7 +112,7 @@ bool vCanSerialPortFrameDMAInit(
|
|||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
uint32_t u32TargetAddr = (uint32_t) (DMA_BUF_RX);
|
||||
|
||||
env->chnCfg_RX.pSrcBuffer = &(CANx->RAM[0]);
|
||||
|
|
@ -142,12 +144,11 @@ bool vCanSerialPortFrameDMAInit(
|
|||
|
||||
DMA_InitChannelInterrupt(DMA_INSTANCE_0, (DMA_ChannelType) DMA_CHANNEL_RX, &env->interruptCfg_RX);
|
||||
|
||||
// NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY_RX);
|
||||
NVIC_SetPriority(IRQ_DMA_RX, IRQ_DMA_PRIORITY_RX);
|
||||
NVIC_EnableIRQ(IRQ_DMA_RX);
|
||||
|
||||
DMA_StartChannel(DMA_INSTANCE_0, (DMA_ChannelType) DMA_CHANNEL_RX);
|
||||
|
||||
*/
|
||||
|
||||
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
||||
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
||||
|
|
@ -169,7 +170,9 @@ bool vCanSerialPortFrameDMAInit(
|
|||
env->tInitCfg.eBaudrate = canBaudRate;
|
||||
env->tInitCfg.eDataBaud = canBaudRate;
|
||||
env->tInitCfg.bEnRxFifo = TRUE;
|
||||
env->tInitCfg.bEnDma = TRUE;
|
||||
|
||||
// env->tInitCfg.bEnDma = TRUE;
|
||||
env->tInitCfg.bEnDma = FALSE;
|
||||
|
||||
env->tInitCfg.bEnFd = FALSE;
|
||||
env->tInitCfg.bEnBrs = FALSE;
|
||||
|
|
@ -180,7 +183,7 @@ bool vCanSerialPortFrameDMAInit(
|
|||
env->tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; // functional clock
|
||||
env->tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; // function clock frequency
|
||||
|
||||
env->tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
// env->tInitCfg.eDirect = FLEXCAN_DIR_ENABLE_WITHOUT_TRIG;
|
||||
|
||||
tRetVal = FLEXCAN_Init(CAN_INDEX, &env->tInitCfg);
|
||||
|
||||
|
|
@ -211,26 +214,26 @@ bool vCanSerialPortFrameDMAInit(
|
|||
env->tIntCfg.pErrorNotify = NULL;
|
||||
|
||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxMBNotify = NULL;
|
||||
env->tIntCfg.pTxMBNotify = NULL;
|
||||
|
||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxFifoNotify = NULL;
|
||||
env->tIntCfg.pRxMBNotify = NULL;
|
||||
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||
env->tIntCfg.pTxMBNotify = NULL;
|
||||
env->tIntCfg.pRxFifoNotify = NULL;
|
||||
|
||||
} else {
|
||||
env->tIntCfg.bEnErrorInterrupt = 1U;
|
||||
env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||
|
||||
env->tIntCfg.bEnTxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||
env->tIntCfg.pTxMBNotify = NULL;
|
||||
|
||||
env->tIntCfg.bEnRxMBInterrupt = 1U;
|
||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||
env->tIntCfg.pRxMBNotify = NULL;
|
||||
|
||||
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||
env->tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack;
|
||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -283,6 +286,62 @@ static void CanSerialPortFrameAddDataQueue(tCanSerialPortFrameFlagchip *env, can
|
|||
}
|
||||
}
|
||||
|
||||
void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, FLEXCAN_RxMsgType *pRxCfg) {
|
||||
if (pRxCfg->eDataType == FLEXCAN_FRAME_DATA) {
|
||||
|
||||
env->rx_message_struct.dlc = pRxCfg->u32DataLen;
|
||||
|
||||
if (env->rx_message_struct.id_type == FLEXCAN_ID_STD) {
|
||||
env->rx_message_struct.standard_id = pRxCfg->u32CanId;
|
||||
} else {
|
||||
env->rx_message_struct.extended_id = pRxCfg->u32CanId;
|
||||
}
|
||||
|
||||
uint8_t index = 0xFF;
|
||||
|
||||
for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) {
|
||||
|
||||
if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && (env->IdSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
||||
|
||||
if (env->rx_message_struct.standard_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
||||
|
||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (index != 0xFF) {
|
||||
memcpy(env->rx_message_struct.data, pRxCfg->aData, pRxCfg->u32DataLen);
|
||||
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdSoftFilter_RX[index].filter);
|
||||
}
|
||||
|
||||
if (env->CountSoftFilter_RX == 0) {
|
||||
memcpy(env->rx_message_struct.data, pRxCfg->aData, pRxCfg->u32DataLen);
|
||||
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf) {
|
||||
|
||||
// message buffer 1th word
|
||||
|
|
|
|||
Loading…
Reference in New Issue