Обновление
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 CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg);
|
||||||
|
|
||||||
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf);
|
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf);
|
||||||
|
void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, FLEXCAN_RxMsgType *pRxCfg);
|
||||||
|
|
||||||
void CanSerialPortFrameSetId(tCanSerialPortFrameFlagchip *env, uint32_t id);
|
void CanSerialPortFrameSetId(tCanSerialPortFrameFlagchip *env, uint32_t id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,11 @@
|
||||||
|
|
||||||
|
|
||||||
#define CAN_USED_NUM 2U // Количество CAN
|
#define CAN_USED_NUM 2U // Количество CAN
|
||||||
#define CAN_RECEIVE_MB_NUM 32 //
|
#define CAN_RECEIVE_MB_NUM 128 // Количество mailbox на один CAN
|
||||||
|
|
||||||
static FLEXCAN_RxMsgType s_aaRxDataBuf[CAN_USED_NUM][CAN_RECEIVE_MB_NUM];
|
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[] =
|
static const PCC_ClkSrcType s_ePccCanTable[] =
|
||||||
{
|
{
|
||||||
|
|
@ -110,7 +112,7 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
|
/*
|
||||||
uint32_t u32TargetAddr = (uint32_t) (DMA_BUF_RX);
|
uint32_t u32TargetAddr = (uint32_t) (DMA_BUF_RX);
|
||||||
|
|
||||||
env->chnCfg_RX.pSrcBuffer = &(CANx->RAM[0]);
|
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);
|
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_SetPriority(IRQ_DMA_RX, IRQ_DMA_PRIORITY_RX);
|
||||||
NVIC_EnableIRQ(IRQ_DMA_RX);
|
NVIC_EnableIRQ(IRQ_DMA_RX);
|
||||||
|
|
||||||
DMA_StartChannel(DMA_INSTANCE_0, (DMA_ChannelType) DMA_CHANNEL_RX);
|
DMA_StartChannel(DMA_INSTANCE_0, (DMA_ChannelType) DMA_CHANNEL_RX);
|
||||||
|
*/
|
||||||
|
|
||||||
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
||||||
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
||||||
|
|
@ -169,7 +170,9 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->tInitCfg.eBaudrate = canBaudRate;
|
env->tInitCfg.eBaudrate = canBaudRate;
|
||||||
env->tInitCfg.eDataBaud = canBaudRate;
|
env->tInitCfg.eDataBaud = canBaudRate;
|
||||||
env->tInitCfg.bEnRxFifo = TRUE;
|
env->tInitCfg.bEnRxFifo = TRUE;
|
||||||
env->tInitCfg.bEnDma = TRUE;
|
|
||||||
|
// env->tInitCfg.bEnDma = TRUE;
|
||||||
|
env->tInitCfg.bEnDma = FALSE;
|
||||||
|
|
||||||
env->tInitCfg.bEnFd = FALSE;
|
env->tInitCfg.bEnFd = FALSE;
|
||||||
env->tInitCfg.bEnBrs = FALSE;
|
env->tInitCfg.bEnBrs = FALSE;
|
||||||
|
|
@ -180,7 +183,7 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; // functional clock
|
env->tInitCfg.eClkSrcSel = FLEXCAN_CLOCK_FUNCTION; // functional clock
|
||||||
env->tInitCfg.eClkSrcHz = (FLEXCAN_BaudClkType) u32FuncClk; // function clock frequency
|
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);
|
tRetVal = FLEXCAN_Init(CAN_INDEX, &env->tInitCfg);
|
||||||
|
|
||||||
|
|
@ -211,26 +214,26 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->tIntCfg.pErrorNotify = NULL;
|
env->tIntCfg.pErrorNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||||
env->tIntCfg.pRxMBNotify = NULL;
|
env->tIntCfg.pTxMBNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||||
env->tIntCfg.pRxFifoNotify = NULL;
|
env->tIntCfg.pRxMBNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxFifoInterrupt = 0U;
|
env->tIntCfg.bEnRxFifoInterrupt = 0U;
|
||||||
env->tIntCfg.pTxMBNotify = NULL;
|
env->tIntCfg.pRxFifoNotify = NULL;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
env->tIntCfg.bEnErrorInterrupt = 1U;
|
env->tIntCfg.bEnErrorInterrupt = 1U;
|
||||||
env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack;
|
||||||
|
|
||||||
env->tIntCfg.bEnTxMBInterrupt = 1U;
|
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||||
env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
env->tIntCfg.pTxMBNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxMBInterrupt = 1U;
|
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
||||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
env->tIntCfg.pRxMBNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
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) {
|
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf) {
|
||||||
|
|
||||||
// message buffer 1th word
|
// message buffer 1th word
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue