SerialPort_Flagchip_FC7240/Inc/SerialPortFlagchip.h

175 lines
7.7 KiB
C

//
// Created by cfif on 16.09.22.
//
#ifndef SERIALPORT_SERIALPORT_FLAHCHIP_H
#define SERIALPORT_SERIALPORT_FLAHCHIP_H
#include "SerialPort.h"
#include "cmsis_os2.h"
#include "stdbool.h"
#include "interrupt_manager.h"
#include "fc7xxx_driver_fcuart.h"
#include "fc7xxx_driver_pcc.h"
#include "fc7xxx_driver_port.h"
#include "fc7xxx_driver_scg.h"
#include "fc7xxx_driver_gpio.h"
#include "fc7xxx_driver_dma.h"
typedef struct {
uint8_t UART_INDEX;
DMA_ChannelType RX_DMA_CHANNEL;
FCUART_Type *UART;
uint32_t DMA_BUF_LEN;
uint32_t UART_DMA_RECEIVED_LEN_BUF;
uint8 s_SampleTmp[4];
FCUART_DataType s_tFCUART_TxMsg;
FCUART_InitType tInitCfg;
FCUART_InterruptType tInterruptCfg;
DMA_InitType dmaInitCfg;
DMA_ChannelCfgType chnCfg;
DMA_InterruptCfgType interruptCfg;
osMessageQueueId_t txAccessQueue;
osMessageQueueId_t rxDataQueue;
osMessageQueueId_t rxDataSnifferQueue;
osMessageQueueId_t rxDataSnifferSecondQueue;
} tSerialPortFlagchip;
void vSerialPortInitDMA(
tSerialPortFlagchip *env,
FCUART_Type *uart,
PCC_ClkSrcType uartClock,
uint32_t BoundRate,
uint8 UART_INDEX, // UART0 = 0 ... UART7 = 7
IRQn_Type IRQ_UART, // FCUART0_IRQn ... FCUART7_IRQn
uint8 UART_PRIORITY,
DMA_ChannelType RX_DMA_CHANNEL,
DMA_RequestSourceType RX_DMA_CHANNEL_REQ,
uint8_t *DMA_BUF,
uint16_t DMA_BUF_LEN,
IRQn_Type IRQ_DMA,
uint8_t IRQ_DMA_PRIORITY,
uint8_t IRQ_DMA_CHANNEL_PRIORITY,
uint32_t rxBufferLength,
uint32_t rxSnifferLength,
DMA_TransferCompleteCallbackType pTransferCompleteNotify,
DMA_TransferErrorCallbackType pTransferErrorNotify,
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
FCUART_TxRxInterrupt_CallBackType FCUART_TxEmptyInterrupt_CallBack,
FCUART_TxRxInterrupt_CallBackType FCUART_TxCompleteInterrupt_CallBack
);
tSerialPortIO vSerialPortGetIo(tSerialPortFlagchip *env);
void SerialPort_RxDmaBufToQueue(tSerialPortFlagchip *env, const void *pSrcBuffer);
/*
#define vSerialPortInitDMAName(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, PRIORITY, LEN) \
vSerialPortInitDMA(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, 0)
#define vSerialPortInitDMANameWithSniffer(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, PRIORITY, LEN, SNIFFER_LEN) \
vSerialPortInitDMA(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, SNIFFER_LEN)
#define DMANONE_CHANNELNONE NULL
#define DMANONE NULL
#define DMANONEMUX_CHANNELNONE NULL
#define DMANONE_FDTNONE_FLAG (uint32_t)0
#define DMANONE_ChannelNONE_IRQn (IRQn_Type)0
#define vSerialPortInitDmaWithNameAndSniffer(\
ENV, NAME, BOUND_RATE, \
RX_DMA, RX_CH, \
TX_DMA, TX_CH, \
SWAP, PRIORITY, \
RX_DMA_BUF, RX_DMA_BUF_LEN, \
QUEUE_LEN, SNIFFER_LEN \
) \
vSerialPortInitDMA(\
ENV, NAME, DMA##RX_DMA, DMA##TX_DMA, \
DMA##RX_DMA##_CHANNEL##RX_CH, DMA##RX_DMA##MUX_CHANNEL##RX_CH, DMAMUX_DMAREQ_ID_##NAME##_RX, DMA##RX_DMA##_Channel##RX_CH##_IRQn, DMA##RX_DMA##_FDT##RX_CH##_FLAG,\
RX_DMA_BUF, RX_DMA_BUF_LEN, \
DMA##TX_DMA##_CHANNEL##TX_CH, DMA##TX_DMA##MUX_CHANNEL##TX_CH, DMAMUX_DMAREQ_ID_##NAME##_TX, DMA##TX_DMA##_Channel##TX_CH##_IRQn, DMA##TX_DMA##_FDT##TX_CH##_FLAG,\
SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, \
PRIORITY, QUEUE_LEN, SNIFFER_LEN\
)
#define vSerialPortInitDmaExtWithNameAndSniffer(\
ENV, NAME, BOUND_RATE, \
RX_DMA, RX_CH, \
TX_DMA, TX_CH, \
SWAP, FLOW, PRIORITY, \
RX_DMA_BUF, RX_DMA_BUF_LEN, \
QUEUE_LEN, SNIFFER_LEN \
) \
vSerialPortInitDMAExt(\
ENV, NAME, DMA##RX_DMA, DMA##TX_DMA, \
DMA##RX_DMA##_CHANNEL##RX_CH, DMA##RX_DMA##MUX_CHANNEL##RX_CH, DMAMUX_DMAREQ_ID_##NAME##_RX, DMA##RX_DMA##_Channel##RX_CH##_IRQn, DMA##RX_DMA##_FDT##RX_CH##_FLAG,\
RX_DMA_BUF, RX_DMA_BUF_LEN, \
DMA##TX_DMA##_CHANNEL##TX_CH, DMA##TX_DMA##MUX_CHANNEL##TX_CH, DMAMUX_DMAREQ_ID_##NAME##_TX, DMA##TX_DMA##_Channel##TX_CH##_IRQn, DMA##TX_DMA##_FDT##TX_CH##_FLAG,\
SWAP, FLOW, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, \
PRIORITY, QUEUE_LEN, SNIFFER_LEN\
)
#define vSerialPortInitName(ENV, NAME, SWAP, BOUND_RATE, PRIORITY, LEN) \
vSerialPortInit(ENV, NAME, SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, 0)
#define vSerialPortExtInitName(ENV, NAME, SWAP, FLOW, BOUND_RATE, PRIORITY, LEN) \
vSerialPortInit(ENV, NAME, SWAP, FLOW, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, 0)
#define vSerialPortInitNameWithSniffer(ENV, NAME, SWAP, BOUND_RATE, PRIORITY, LEN, SNIFFER_LEN) \
vSerialPortInit(ENV, NAME, SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, SNIFFER_LEN)
#define vSerialPortExtInitNameWithSniffer(ENV, NAME, SWAP, FLOW, BOUND_RATE, PRIORITY, LEN, SNIFFER_LEN) \
vSerialPortInit(ENV, NAME, SWAP, FLOW, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, SNIFFER_LEN)
void vSerialPortIrqProcessing(tSerialPortArtery *env);
void vSerialPortIrqProcessingDMA(tSerialPortArtery *env);
//void vSerialPortIrqProcessingDMAloop(tSerialPortArtery *env, uint32_t len);
void SerialPort_IrqProcessing_UartIdle(tSerialPortArtery *env);
void SerialPort_IrqProcessing_DmaRxLoop(tSerialPortArtery *env);
void SerialPort_IrqProcessingFilter_UartIdle(tSerialPortArtery *env, tSerialPortIO *virtualPort, uint16_t *counterBufFilterStr, uint8_t *bufStrFilter, uint16_t maxBufStrFilter, const char *FilterStr[], uint8_t countFiler);
void SerialPort_IrqProcessingFilter_DmaRxLoop(tSerialPortArtery *env, tSerialPortIO *virtualPort, uint16_t *counterBufFilterStr, uint8_t *bufStrFilter, uint16_t maxBufStrFilter, const char *FilterStr[], uint8_t countFiler);
void SerialPort_IrqProcessing_DmaTx(tSerialPortArtery *env);
tSerialPortIO vSerialPortGetIo(tSerialPortArtery *env);
tSerialPortIO vSerialPortGetSnifferIo(tSerialPortArtery *env);
tSerialPortIO SerialPort_GetSnifferSecondIo(tSerialPortArtery *env);
uint16_t vSerialPortTransmit(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout);
uint16_t vSerialPortBlindTransmit(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout);
void SerialPort_IrqProcessing_DmaTxBlind(tSerialPortArtery *env);
*/
#endif //SERIALPORT_SERIALPORT_FLAHCHIP_H