refactor: Update MCAL and ECU layers for UART and synchronize RTE layer
- Fixed the MCAL and ECU layers to handle multiple UART configurations. - Updated the RTE layer to align with changes in UART layers for improved compatibility and functionality.stable
parent
c28008621c
commit
a6d7b58f3d
|
|
@ -74,7 +74,8 @@ typedef enum
|
||||||
{
|
{
|
||||||
mcalUART_PORT1 = 0,
|
mcalUART_PORT1 = 0,
|
||||||
mcalUART_PORT2,
|
mcalUART_PORT2,
|
||||||
mcalUART_PORT3
|
mcalUART_PORT3,
|
||||||
|
mcalUART_PORT_MAX
|
||||||
}McalUartPortNumber_e;
|
}McalUartPortNumber_e;
|
||||||
#define IVEC_MCAL_GNSS_UART mcalUART_PORT3
|
#define IVEC_MCAL_GNSS_UART mcalUART_PORT3
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
@ -90,7 +91,7 @@ typedef struct
|
||||||
McalUartConfig_s xUartConfig;
|
McalUartConfig_s xUartConfig;
|
||||||
char* buffer;
|
char* buffer;
|
||||||
uint16_t u16len;
|
uint16_t u16len;
|
||||||
void (*pvUartRecvCallback)(IVEC_McalUartEvents_e , char *,uint32_t);
|
void (*pvUartRecvCallback)(McalUartPortNumber_e, IVEC_McalUartEvents_e , char *,uint32_t);
|
||||||
}McalUartHandle_s;
|
}McalUartHandle_s;
|
||||||
|
|
||||||
#define IVEC_MCAL_UART_MAX_PORT 3
|
#define IVEC_MCAL_UART_MAX_PORT 3
|
||||||
|
|
|
||||||
|
|
@ -8,70 +8,70 @@
|
||||||
|
|
||||||
McalUartHandle_s* g_pxUartHandles[IVEC_MCAL_UART_MAX_PORT] = { 0 };
|
McalUartHandle_s* g_pxUartHandles[IVEC_MCAL_UART_MAX_PORT] = { 0 };
|
||||||
static uint32_t __gprv_u32DataCount = 0;
|
static uint32_t __gprv_u32DataCount = 0;
|
||||||
static volatile uint8_t u8rxbuffer1=0;
|
static volatile uint8_t u8rxbuffer1 = 0;
|
||||||
|
static McalUartPortNumber_e GetUartPort(UART_Regs* pxUartInstance);
|
||||||
|
|
||||||
|
void UART_ReadCallback(UART_Regs* uart, uint8_t* buf, bool status)
|
||||||
void UART_ReadCallback(UART_Regs *uart, uint8_t *buf, bool status)
|
|
||||||
{
|
{
|
||||||
if(status == true)
|
if (status == true)
|
||||||
{
|
{
|
||||||
__gprv_u32DataCount += 1;
|
__gprv_u32DataCount += 1;
|
||||||
|
|
||||||
IVEC_MCAL_LOG(LOG_STRING, "Uart Recv Callback:%d", ind_type);
|
IVEC_MCAL_LOG(LOG_STRING, "Uart Recv Callback:%d", ind_type);
|
||||||
for (int i = 0;i < IVEC_MCAL_UART_MAX_PORT; i++)
|
for (int i = 0;i < IVEC_MCAL_UART_MAX_PORT; i++)
|
||||||
{
|
{
|
||||||
if (g_pxUartHandles[i] != NULL )
|
if (g_pxUartHandles[i] != NULL)
|
||||||
{
|
{
|
||||||
if (g_pxUartHandles[i]->pvUartRecvCallback != NULL)
|
if (g_pxUartHandles[i]->pvUartRecvCallback != NULL)
|
||||||
g_pxUartHandles[i]->pvUartRecvCallback(IVEC_MCAL_UART_EVENT_RX_ARRIVED, (char *)buf, 1);
|
g_pxUartHandles[i]->pvUartRecvCallback(GetUartPort(uart), IVEC_MCAL_UART_EVENT_RX_ARRIVED, (char*)buf, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _prv_vrxcallback(UART_Regs *pxUartInstance, uint32_t event)
|
void _prv_vrxcallback(UART_Regs* pxUartInstance, uint32_t event)
|
||||||
{
|
{
|
||||||
switch (event)
|
switch (event)
|
||||||
{
|
{
|
||||||
case DL_UART_MAIN_IIDX_RX:
|
case DL_UART_MAIN_IIDX_RX:
|
||||||
{
|
{
|
||||||
uint8_t l_pu8Buffer[64] = {0}; // Adjust size as needed
|
uint8_t l_pu8Buffer[64] = { 0 }; // Adjust size as needed
|
||||||
uint32_t bytesRead;
|
uint32_t bytesRead;
|
||||||
|
|
||||||
// Drain the RX FIFO and store the data in buffer
|
// Drain the RX FIFO and store the data in buffer
|
||||||
bytesRead = DL_UART_drainRXFIFO(pxUartInstance, l_pu8Buffer, sizeof(l_pu8Buffer));
|
bytesRead = DL_UART_drainRXFIFO(pxUartInstance, l_pu8Buffer, sizeof(l_pu8Buffer));
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_RX);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_RX);
|
||||||
for( int ijk = 0; ijk < bytesRead; ijk++ )
|
for (int ijk = 0; ijk < bytesRead; ijk++)
|
||||||
UART_ReadCallback(pxUartInstance, &l_pu8Buffer[ijk], true);
|
UART_ReadCallback(pxUartInstance, &l_pu8Buffer[ijk], true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DL_UART_MAIN_IIDX_OVERRUN_ERROR:
|
case DL_UART_MAIN_IIDX_OVERRUN_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_OVERRUN_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_OVERRUN_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
case DL_UART_MAIN_IIDX_BREAK_ERROR:
|
case DL_UART_MAIN_IIDX_BREAK_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_BREAK_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_BREAK_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
case DL_UART_MAIN_IIDX_PARITY_ERROR:
|
case DL_UART_MAIN_IIDX_PARITY_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_PARITY_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_PARITY_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
case DL_UART_MAIN_IIDX_FRAMING_ERROR:
|
case DL_UART_MAIN_IIDX_FRAMING_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_FRAMING_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_FRAMING_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
case DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR:
|
case DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
case DL_UART_MAIN_IIDX_NOISE_ERROR:
|
case DL_UART_MAIN_IIDX_NOISE_ERROR:
|
||||||
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_NOISE_ERROR);
|
DL_UART_clearInterruptStatus(pxUartInstance, DL_UART_MAIN_IIDX_NOISE_ERROR);
|
||||||
__asm("nop");
|
__asm("nop");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,17 +97,30 @@ static UART_Regs* GetUartInstance(McalUartPortNumber_e eUartPortNumber)
|
||||||
{
|
{
|
||||||
switch (eUartPortNumber)
|
switch (eUartPortNumber)
|
||||||
{
|
{
|
||||||
case mcalUART_PORT1:
|
case mcalUART_PORT1:
|
||||||
return UART0;
|
return UART0;
|
||||||
case mcalUART_PORT2:
|
case mcalUART_PORT2:
|
||||||
return UART1;
|
return UART1;
|
||||||
case mcalUART_PORT3:
|
case mcalUART_PORT3:
|
||||||
return UART2;
|
return UART2;
|
||||||
default:
|
default:
|
||||||
return NULL; // Invalid UART port
|
return NULL; // Invalid UART port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static McalUartPortNumber_e GetUartPort(UART_Regs* pxUartInstance)
|
||||||
|
{
|
||||||
|
switch ((uint32_t)pxUartInstance)
|
||||||
|
{
|
||||||
|
case (uint32_t)UART0:
|
||||||
|
return mcalUART_PORT1;
|
||||||
|
case (uint32_t)UART1:
|
||||||
|
return mcalUART_PORT2;
|
||||||
|
case (uint32_t)UART2:
|
||||||
|
return mcalUART_PORT3;
|
||||||
|
default:
|
||||||
|
return mcalUART_PORT_MAX; // Invalid UART port
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static xCoreStatus_t uart_deinit(McalUartHandle_s* pxUartHandle)
|
static xCoreStatus_t uart_deinit(McalUartHandle_s* pxUartHandle)
|
||||||
{
|
{
|
||||||
|
|
@ -125,13 +138,13 @@ static xCoreStatus_t uart_deinit(McalUartHandle_s* pxUartHandle)
|
||||||
|
|
||||||
// Disable interrupts for the UART instance
|
// Disable interrupts for the UART instance
|
||||||
DL_UART_Main_disableInterrupt(uart_inst,
|
DL_UART_Main_disableInterrupt(uart_inst,
|
||||||
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_RX |
|
DL_UART_MAIN_INTERRUPT_RX |
|
||||||
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
||||||
|
|
||||||
// Clear and disable NVIC interrupt requests based on UART instance
|
// Clear and disable NVIC interrupt requests based on UART instance
|
||||||
if (uart_inst == UART0)
|
if (uart_inst == UART0)
|
||||||
|
|
@ -207,11 +220,11 @@ static xCoreStatus_t uart_read(McalUartHandle_s* pxUartHandle, unsigned char* pu
|
||||||
while (!DL_UART_Main_isRXFIFOEmpty(uart_inst) && ((i32MCAL_getTicks() - l_u32Tick) < 50)) {
|
while (!DL_UART_Main_isRXFIFOEmpty(uart_inst) && ((i32MCAL_getTicks() - l_u32Tick) < 50)) {
|
||||||
*pucData = DL_UART_Main_receiveData(uart_inst);
|
*pucData = DL_UART_Main_receiveData(uart_inst);
|
||||||
status = true;
|
status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//*pucData = DL_UART_receiveData(uart_inst);
|
//*pucData = DL_UART_receiveData(uart_inst);
|
||||||
|
|
||||||
if(status == false)
|
if (status == false)
|
||||||
{
|
{
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -250,25 +263,25 @@ exit:
|
||||||
}
|
}
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
static xCoreStatus_t uart_transmit(McalUartHandle_s* pxUartHandle, uint8_t *u8txdata, uint32_t u32size)
|
static xCoreStatus_t uart_transmit(McalUartHandle_s* pxUartHandle, uint8_t* u8txdata, uint32_t u32size)
|
||||||
{
|
{
|
||||||
// Get the UART instance based on the port number in the handle
|
// Get the UART instance based on the port number in the handle
|
||||||
UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber);
|
UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber);
|
||||||
|
|
||||||
// Check if the UART instance is valid
|
// Check if the UART instance is valid
|
||||||
if (uart_inst == NULL || u32size==0)
|
if (uart_inst == NULL || u32size == 0)
|
||||||
{
|
{
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t l_u32Tick = i32MCAL_getTicks();
|
uint32_t l_u32Tick = i32MCAL_getTicks();
|
||||||
for(int j=0; j<u32size; j++)
|
for (int j = 0; j < u32size; j++)
|
||||||
{
|
{
|
||||||
DL_UART_transmitData(uart_inst,u8txdata[j]);
|
DL_UART_transmitData(uart_inst, u8txdata[j]);
|
||||||
while(DL_UART_isTXFIFOFull(uart_inst) && ((i32MCAL_getTicks() - l_u32Tick) < 100));
|
while (DL_UART_isTXFIFOFull(uart_inst) && ((i32MCAL_getTicks() - l_u32Tick) < 100));
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|
@ -306,21 +319,24 @@ exit:
|
||||||
static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_e xBaud)
|
static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_e xBaud)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if UART_PIN_SELECTION == 1
|
if (pxUartHandle->eUartPortNumber== mcalUART_PORT2)
|
||||||
|
{
|
||||||
|
DL_UART_Main_reset(UART1);
|
||||||
|
DL_UART_Main_enablePower(UART1);
|
||||||
|
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM19, IOMUX_PINCM19_PF_UART1_TX);
|
||||||
|
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM20, IOMUX_PINCM20_PF_UART1_RX);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (pxUartHandle->eUartPortNumber== mcalUART_PORT3)
|
||||||
|
{
|
||||||
|
DL_UART_Main_reset(UART2);
|
||||||
|
DL_UART_Main_enablePower(UART2);
|
||||||
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX);
|
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX);
|
||||||
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX);
|
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX);
|
||||||
|
|
||||||
#elif UART_PIN_SELECTION == 2
|
|
||||||
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM19, IOMUX_PINCM19_PF_UART1_TX);
|
|
||||||
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM20, IOMUX_PINCM20_PF_UART1_RX);
|
|
||||||
|
|
||||||
#elif UART_PIN_SELECTION == 3
|
}
|
||||||
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM19, IOMUX_PINCM19_PF_UART1_TX);
|
|
||||||
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM20, IOMUX_PINCM20_PF_UART1_RX);
|
|
||||||
// DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX);
|
|
||||||
// DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// Get the UART instance based on the port number in the handle
|
// Get the UART instance based on the port number in the handle
|
||||||
UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber);
|
UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber);
|
||||||
|
|
||||||
|
|
@ -336,37 +352,37 @@ static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_
|
||||||
|
|
||||||
//xprvUartConfig.wordLength = pxUartHandle->xUartConfig.eUartDataBit;
|
//xprvUartConfig.wordLength = pxUartHandle->xUartConfig.eUartDataBit;
|
||||||
uint8_t datalength = pxUartHandle->xUartConfig.eUartDataBit;
|
uint8_t datalength = pxUartHandle->xUartConfig.eUartDataBit;
|
||||||
if(datalength == mcalUART_DATABIT_7)
|
if (datalength == mcalUART_DATABIT_7)
|
||||||
{
|
{
|
||||||
xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_7_BITS;
|
xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_7_BITS;
|
||||||
}
|
}
|
||||||
else if(datalength == mcalUART_DATABIT_8)
|
else if (datalength == mcalUART_DATABIT_8)
|
||||||
{
|
{
|
||||||
xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_8_BITS;
|
xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_8_BITS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//xprvUartConfig.stopBits = pxUartHandle->xUartConfig.eUartStopBit;
|
//xprvUartConfig.stopBits = pxUartHandle->xUartConfig.eUartStopBit;
|
||||||
uint8_t stopbit = pxUartHandle->xUartConfig.eUartStopBit;
|
uint8_t stopbit = pxUartHandle->xUartConfig.eUartStopBit;
|
||||||
if(stopbit == mcalUART_STOP_1)
|
if (stopbit == mcalUART_STOP_1)
|
||||||
{
|
{
|
||||||
xprvUartConfig.stopBits = DL_UART_STOP_BITS_ONE;
|
xprvUartConfig.stopBits = DL_UART_STOP_BITS_ONE;
|
||||||
}
|
}
|
||||||
else if(stopbit == mcalUART_STOP_2)
|
else if (stopbit == mcalUART_STOP_2)
|
||||||
{
|
{
|
||||||
xprvUartConfig.stopBits = DL_UART_STOP_BITS_TWO;
|
xprvUartConfig.stopBits = DL_UART_STOP_BITS_TWO;
|
||||||
}
|
}
|
||||||
|
|
||||||
//xprvUartConfig.parity = pxUartHandle->xUartConfig.eUartParityBit;
|
//xprvUartConfig.parity = pxUartHandle->xUartConfig.eUartParityBit;
|
||||||
uint8_t paritybit = pxUartHandle->xUartConfig.eUartParityBit;
|
uint8_t paritybit = pxUartHandle->xUartConfig.eUartParityBit;
|
||||||
if(paritybit == mcalUART_PARITY_NONE)
|
if (paritybit == mcalUART_PARITY_NONE)
|
||||||
{
|
{
|
||||||
xprvUartConfig.parity = DL_UART_PARITY_NONE;
|
xprvUartConfig.parity = DL_UART_PARITY_NONE;
|
||||||
}
|
}
|
||||||
else if(paritybit == mcalUART_PARITY_ODD)
|
else if (paritybit == mcalUART_PARITY_ODD)
|
||||||
{
|
{
|
||||||
xprvUartConfig.parity = DL_UART_PARITY_ODD;
|
xprvUartConfig.parity = DL_UART_PARITY_ODD;
|
||||||
}
|
}
|
||||||
else if(paritybit == mcalUART_PARITY_EVEN)
|
else if (paritybit == mcalUART_PARITY_EVEN)
|
||||||
{
|
{
|
||||||
xprvUartConfig.parity = DL_UART_PARITY_EVEN;
|
xprvUartConfig.parity = DL_UART_PARITY_EVEN;
|
||||||
}
|
}
|
||||||
|
|
@ -374,102 +390,102 @@ static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_
|
||||||
xprvUartConfig.flowControl = DL_UART_FLOW_CONTROL_NONE;
|
xprvUartConfig.flowControl = DL_UART_FLOW_CONTROL_NONE;
|
||||||
|
|
||||||
|
|
||||||
DL_UART_ClockConfig gUART_0ClockConfig ={0};
|
DL_UART_ClockConfig gUART_0ClockConfig = { 0 };
|
||||||
gUART_0ClockConfig.clockSel = DL_UART_CLOCK_BUSCLK;
|
gUART_0ClockConfig.clockSel = DL_UART_CLOCK_BUSCLK;
|
||||||
gUART_0ClockConfig.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1;
|
gUART_0ClockConfig.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1;
|
||||||
|
|
||||||
DL_UART_Main_setClockConfig(uart_inst, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig);
|
DL_UART_Main_setClockConfig(uart_inst, (DL_UART_Main_ClockConfig*)&gUART_0ClockConfig);
|
||||||
DL_UART_Main_init(uart_inst, (DL_UART_Main_Config *) &xprvUartConfig);
|
DL_UART_Main_init(uart_inst, (DL_UART_Main_Config*)&xprvUartConfig);
|
||||||
|
|
||||||
/* Configure baud rate by setting oversampling and baud rate divisors.*/
|
/* Configure baud rate by setting oversampling and baud rate divisors.*/
|
||||||
DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X);
|
DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X);
|
||||||
|
|
||||||
if(xBaud==115200)
|
if (xBaud == 115200)
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Target baud rate: 115200
|
* Target baud rate: 115200
|
||||||
* Actual baud rate: 115211.52
|
* Actual baud rate: 115211.52
|
||||||
*/
|
*/
|
||||||
// DL_UART_Main_setBaudRateDivisor(uart_inst, 13, 1);
|
// DL_UART_Main_setBaudRateDivisor(uart_inst, 13, 1);
|
||||||
//DL_UART_Main_setBaudRateDivisor(uart_inst, 19, 20);
|
//DL_UART_Main_setBaudRateDivisor(uart_inst, 19, 20);
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 19, 34);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 19, 34);
|
||||||
}
|
}
|
||||||
else if(xBaud==9600)
|
else if (xBaud == 9600)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 234, 24);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 234, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(xBaud==2400)
|
else if (xBaud == 2400)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 937, 32);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 937, 32);
|
||||||
}
|
}
|
||||||
else if(xBaud==4800)
|
else if (xBaud == 4800)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 468, 48);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 468, 48);
|
||||||
}
|
}
|
||||||
else if(xBaud==14400)
|
else if (xBaud == 14400)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 156, 16);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 156, 16);
|
||||||
}
|
}
|
||||||
else if(xBaud==19200)
|
else if (xBaud == 19200)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 117, 12);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 117, 12);
|
||||||
}
|
}
|
||||||
else if(xBaud==28800)
|
else if (xBaud == 28800)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 78, 8);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 78, 8);
|
||||||
}
|
}
|
||||||
else if(xBaud==33600)
|
else if (xBaud == 33600)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 66, 62);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 66, 62);
|
||||||
}
|
}
|
||||||
else if(xBaud==38400)
|
else if (xBaud == 38400)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 58, 38);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 58, 38);
|
||||||
}
|
}
|
||||||
else if(xBaud==57600)
|
else if (xBaud == 57600)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 39, 4);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 39, 4);
|
||||||
}
|
}
|
||||||
else if(xBaud==230400)
|
else if (xBaud == 230400)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 9, 49);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 9, 49);
|
||||||
}
|
}
|
||||||
else if(xBaud==460800)
|
else if (xBaud == 460800)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 4, 57);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 4, 57);
|
||||||
}
|
}
|
||||||
else if(xBaud==921600)
|
else if (xBaud == 921600)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 2, 28);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 2, 28);
|
||||||
}
|
}
|
||||||
else if(xBaud==1000000)
|
else if (xBaud == 1000000)
|
||||||
{
|
{
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 2, 16);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 2, 16);
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
/*
|
/*
|
||||||
* Target baud rate: 115200
|
* Target baud rate: 115200
|
||||||
* Actual baud rate: 115211.52
|
* Actual baud rate: 115211.52
|
||||||
*/
|
*/
|
||||||
DL_UART_Main_setBaudRateDivisor(uart_inst, 13, 1);
|
DL_UART_Main_setBaudRateDivisor(uart_inst, 13, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure Interrupts */
|
/* Configure Interrupts */
|
||||||
|
|
||||||
if(uart_inst==UART0)
|
if (uart_inst == UART0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
DL_UART_Main_enableInterrupt(uart_inst,
|
DL_UART_Main_enableInterrupt(uart_inst,
|
||||||
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_RX |
|
DL_UART_MAIN_INTERRUPT_RX |
|
||||||
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
||||||
|
|
||||||
DL_UART_Main_enableFIFOs(UART0);
|
DL_UART_Main_enableFIFOs(UART0);
|
||||||
DL_UART_Main_setRXFIFOThreshold(UART0, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
DL_UART_Main_setRXFIFOThreshold(UART0, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
||||||
|
|
@ -483,16 +499,16 @@ static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_
|
||||||
NVIC_EnableIRQ(UART0_INT_IRQn);
|
NVIC_EnableIRQ(UART0_INT_IRQn);
|
||||||
//b_UART0_init_flag=1;
|
//b_UART0_init_flag=1;
|
||||||
}
|
}
|
||||||
if(uart_inst==UART1)
|
if (uart_inst == UART1)
|
||||||
{
|
{
|
||||||
DL_UART_Main_enableInterrupt(uart_inst,
|
DL_UART_Main_enableInterrupt(uart_inst,
|
||||||
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_RX |
|
DL_UART_MAIN_INTERRUPT_RX |
|
||||||
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
||||||
|
|
||||||
DL_UART_Main_enableFIFOs(UART1);
|
DL_UART_Main_enableFIFOs(UART1);
|
||||||
DL_UART_Main_setRXFIFOThreshold(UART1, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
DL_UART_Main_setRXFIFOThreshold(UART1, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
||||||
|
|
@ -506,24 +522,24 @@ static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_
|
||||||
NVIC_EnableIRQ(UART1_INT_IRQn);
|
NVIC_EnableIRQ(UART1_INT_IRQn);
|
||||||
//b_UART1_init_flag=1;
|
//b_UART1_init_flag=1;
|
||||||
}
|
}
|
||||||
else if(uart_inst==UART2)
|
else if (uart_inst == UART2)
|
||||||
{
|
{
|
||||||
|
|
||||||
DL_UART_Main_enableInterrupt(uart_inst,
|
DL_UART_Main_enableInterrupt(uart_inst,
|
||||||
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
|
||||||
DL_UART_MAIN_INTERRUPT_RX |
|
DL_UART_MAIN_INTERRUPT_RX |
|
||||||
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
|
||||||
|
|
||||||
|
|
||||||
DL_UART_Main_enableFIFOs(UART2);
|
DL_UART_Main_enableFIFOs(UART2);
|
||||||
DL_UART_Main_setRXFIFOThreshold(UART2, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
DL_UART_Main_setRXFIFOThreshold(UART2, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
|
||||||
DL_UART_Main_setTXFIFOThreshold(UART2, DL_UART_TX_FIFO_LEVEL_1_2_EMPTY);
|
DL_UART_Main_setTXFIFOThreshold(UART2, DL_UART_TX_FIFO_LEVEL_1_2_EMPTY);
|
||||||
|
|
||||||
// DL_UART_Main_setRXInterruptTimeout(UART2, 15);
|
// DL_UART_Main_setRXInterruptTimeout(UART2, 15);
|
||||||
|
|
||||||
DL_UART_Main_enable(uart_inst);
|
DL_UART_Main_enable(uart_inst);
|
||||||
/*Clearing and Enabling Interrupt Requests*/
|
/*Clearing and Enabling Interrupt Requests*/
|
||||||
|
|
@ -533,7 +549,7 @@ static xCoreStatus_t uart_init(McalUartHandle_s* pxUartHandle, McalUartBaudRate_
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;//TODO: FIX RETURN BUG
|
return STATUS_SUCCESS;//TODO: FIX RETURN BUG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -554,7 +570,7 @@ static void __prvMCAL_UartNotifyRecvCb(uint32 ind_type, ql_uart_port_number_e po
|
||||||
if (g_pxUartHandles[i] != NULL && port == (ql_uart_port_number_e)g_pxUartHandles[i]->eUartPortNumber)
|
if (g_pxUartHandles[i] != NULL && port == (ql_uart_port_number_e)g_pxUartHandles[i]->eUartPortNumber)
|
||||||
{
|
{
|
||||||
if (g_pxUartHandles[i]->pvUartRecvCallback != NULL)
|
if (g_pxUartHandles[i]->pvUartRecvCallback != NULL)
|
||||||
g_pxUartHandles[i]->pvUartRecvCallback((IVEC_McalUartEvents_e)ind_type&0xffff, NULL, size);
|
g_pxUartHandles[i]->pvUartRecvCallback((IVEC_McalUartEvents_e)ind_type & 0xffff, NULL, size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -601,5 +617,3 @@ exit:
|
||||||
IVEC_MCAL_FUNC_EXIT(LOG_STRING);
|
IVEC_MCAL_FUNC_EXIT(LOG_STRING);
|
||||||
return l_xFuncStatus;
|
return l_xFuncStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,21 +113,21 @@ SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
|
||||||
DL_GPIO_enablePower(GPIOA);
|
DL_GPIO_enablePower(GPIOA);
|
||||||
DL_GPIO_enablePower(GPIOB);
|
DL_GPIO_enablePower(GPIOB);
|
||||||
|
|
||||||
#if UART_PIN_SELECTION == 1
|
// #if UART_PIN_SELECTION == 1
|
||||||
DL_UART_Main_reset(UART2);
|
// DL_UART_Main_reset(UART2);
|
||||||
DL_UART_Main_enablePower(UART2);
|
// DL_UART_Main_enablePower(UART2);
|
||||||
|
//
|
||||||
#elif UART_PIN_SELECTION == 2
|
// #elif UART_PIN_SELECTION == 2
|
||||||
DL_UART_Main_reset(UART1);
|
// DL_UART_Main_reset(UART1);
|
||||||
DL_UART_Main_enablePower(UART1);
|
// DL_UART_Main_enablePower(UART1);
|
||||||
|
//
|
||||||
#elif UART_PIN_SELECTION == 3
|
// #elif UART_PIN_SELECTION == 3
|
||||||
DL_UART_Main_reset(UART1);
|
// DL_UART_Main_reset(UART1);
|
||||||
DL_UART_Main_enablePower(UART1);
|
// DL_UART_Main_enablePower(UART1);
|
||||||
DL_UART_Main_reset(UART2);
|
// DL_UART_Main_reset(UART2);
|
||||||
DL_UART_Main_enablePower(UART2);
|
// DL_UART_Main_enablePower(UART2);
|
||||||
|
//
|
||||||
#endif
|
// #endif
|
||||||
|
|
||||||
// DL_GPIO_enablePower(GPIOA);
|
// DL_GPIO_enablePower(GPIOA);
|
||||||
// DL_GPIO_enablePower(GPIOB);
|
// DL_GPIO_enablePower(GPIOB);
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ IVEC_EcuCommonErr_e xECU_CANDeInit(MCAN_Regs* MCAN)
|
||||||
IVEC_EcuCommonErr_e xECU_GetCanStatus(MCAN_Regs* MCAN, uint16_t speed)
|
IVEC_EcuCommonErr_e xECU_GetCanStatus(MCAN_Regs* MCAN, uint16_t speed)
|
||||||
{
|
{
|
||||||
char l_ucErrorString[32] = {0};
|
char l_ucErrorString[32] = {0};
|
||||||
if( xMCAL_getMCAN_ErrorStatus(&l_ucErrorString) == IVEC_MCAL_STATUS_ERROR )
|
if( xMCAL_getMCAN_ErrorStatus(l_ucErrorString) == IVEC_MCAL_STATUS_ERROR )
|
||||||
{
|
{
|
||||||
xECU_CanReInit(MCAN, speed);
|
xECU_CanReInit(MCAN, speed);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,19 +28,45 @@
|
||||||
typedef int PacketRetCode_t;/*SERVICE_SUCESS or SERVICE_FAIL*/
|
typedef int PacketRetCode_t;/*SERVICE_SUCESS or SERVICE_FAIL*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ecuUART_PORT1 = 0,
|
||||||
|
ecuUART_PORT2,
|
||||||
|
ecuUART_PORT3,
|
||||||
|
ecuUART_PORT_MAX
|
||||||
|
}EcuUartPortNumber_e;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
IVEC_ECU_UART_EVENT_RX_ARRIVED = 1,//(1 << 0), ///< Received new data
|
||||||
|
IVEC_ECU_UART_EVENT_RX_OVERFLOW =2 ,//(1 << 1), ///< Rx fifo overflowed
|
||||||
|
IVEC_ECU_UART_EVENT_TX_COMPLETE = 3//(1 << 2) ///< All data had been sent
|
||||||
|
}IVEC_EcuUartEvents_e;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
McalUartHandle_s __xUartHandle;
|
||||||
|
EcuUartPortNumber_e eUartPortNumber;
|
||||||
|
volatile uint8_t* u8Qbuffer;
|
||||||
|
uint16_t u16QbufSize;
|
||||||
|
uint16_t u16len;
|
||||||
|
void (*pvUartRecvCallback)(EcuUartPortNumber_e, IVEC_EcuUartEvents_e , char *,uint32_t);
|
||||||
|
}EcuUartHandle_s;
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
* Functions declaration
|
* Functions declaration
|
||||||
===========================================================================*/
|
===========================================================================*/
|
||||||
IVEC_EcuCommonErr_e xECU_UARTInit(McalUartHandle_s* prvUartHandle, uint32_t speed);
|
IVEC_EcuCommonErr_e xECU_UARTInit(EcuUartHandle_s* prvUartHandle, uint32_t speed);
|
||||||
IVEC_EcuCommonErr_e xECU_UARTDeInit(McalUartHandle_s *prvUartHandle);
|
IVEC_EcuCommonErr_e xECU_UARTDeInit(EcuUartHandle_s *prvUartHandle);
|
||||||
IVEC_EcuCommonErr_e xECU_UARTReInit(McalUartHandle_s *prvUartHandle, uint32_t speed);
|
IVEC_EcuCommonErr_e xECU_UARTReInit(EcuUartHandle_s *prvUartHandle, uint32_t speed);
|
||||||
IVEC_EcuCommonErr_e xECU_UARTTransmit(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len);
|
IVEC_EcuCommonErr_e xECU_UARTTransmit(EcuUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len);
|
||||||
//Uart_Typedef_e xUartWrite(Uart_PortHandle_s *xportHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
//Uart_Typedef_e xUartWrite(Uart_PortHandle_s *xportHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
||||||
IVEC_EcuCommonErr_e xECU_UARTGetData(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
IVEC_EcuCommonErr_e xECU_UARTGetData(EcuUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
||||||
//Uart_Typedef_e xUartReceive(Uart_PortHandle_s *xportHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
//Uart_Typedef_e xUartReceive(Uart_PortHandle_s *xportHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout);
|
||||||
|
|
||||||
PacketRetCode_t xECU_FormatUartPacket(McalUartHandle_s *prvUartHandle, uint8_t* pucData, uint8_t ucDlc, uint32_t ulId);
|
PacketRetCode_t xECU_FormatUartPacket(EcuUartHandle_s *prvUartHandle, uint8_t* pucData, uint8_t ucDlc, uint32_t ulId);
|
||||||
PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uint8_t* pucBuf, uint32_t *ulId);
|
PacketRetCode_t xECU_ReadCANDataLenOverUART(EcuUartHandle_s *prvUartHandle, uint8_t* pucBuf, uint32_t *ulId);
|
||||||
|
|
||||||
PacketRetCode_t xECU_ReadCANDataOverUART(McalUartHandle_s* prvUartHandle, uint8_t* pucBuf, uint32_t *ulId);
|
PacketRetCode_t xECU_ReadCANDataOverUART(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuf, uint32_t *ulId);
|
||||||
int vECU_InitiateUartToCanTransmit(McalUartHandle_s* prvUartHandle, uint32_t id, uint8_t *pucData, uint8_t ucLen);
|
int vECU_InitiateUartToCanTransmit(EcuUartHandle_s* prvUartHandle, uint32_t id, uint8_t *pucData, uint8_t ucLen);
|
||||||
|
|
|
||||||
|
|
@ -5,26 +5,42 @@
|
||||||
//#include "ivec_mcal_uart.h"
|
//#include "ivec_mcal_uart.h"
|
||||||
|
|
||||||
#define LOG_STRING "ivec-ecu-UART"
|
#define LOG_STRING "ivec-ecu-UART"
|
||||||
#define CAN_UART_BUFFER_MAX_SIZE 4096
|
//#define CAN_UART_BUFFER_MAX_SIZE 4096
|
||||||
|
//#define NFC_UART_BUFFER_MAX_SIZE 256
|
||||||
#define DATA_PACKET_TIMEOUT 300
|
#define DATA_PACKET_TIMEOUT 300
|
||||||
|
|
||||||
CmplxFifoQueueHandle_s __gprv_MyEcuUARTResponseQueue = { 0 };
|
volatile static CmplxFifoQueueHandle_s __gprv_MyEcuUARTResponseQueue[IVEC_MCAL_UART_MAX_PORT] = { 0 };
|
||||||
|
|
||||||
static uint8_t __gprv_u8CANUartDataBuffer[CAN_UART_BUFFER_MAX_SIZE];
|
//static uint8_t __gprv_u8CANUartDataBuffer[CAN_UART_BUFFER_MAX_SIZE];
|
||||||
static uint32_t __gprv_u32CanUartDataAvailable = 0;
|
|
||||||
|
//static uint8_t __gprv_u8NFCUartDataBuffer[NFC_UART_BUFFER_MAX_SIZE];
|
||||||
|
|
||||||
int uartCount = 1;
|
int uartCount = 1;
|
||||||
|
|
||||||
|
|
||||||
static void __prv_vEcu_CANOverUartMsgCallback(IVEC_McalUartEvents_e eIndType, char* pucBuffer, uint32_t u32Size)
|
static void __prv_vEcu_CANOverUartMsgCallback(McalUartPortNumber_e eUartPort, IVEC_McalUartEvents_e eIndType, char* pucBuffer, uint32_t u32Size)
|
||||||
{
|
{
|
||||||
if(eIndType == IVEC_MCAL_UART_EVENT_RX_ARRIVED){
|
switch (eUartPort)
|
||||||
if( u8CMPLX_FifoEnqueue(&__gprv_MyEcuUARTResponseQueue, pucBuffer, u32Size) )
|
{
|
||||||
__gprv_u32CanUartDataAvailable += u32Size;
|
case mcalUART_PORT2:
|
||||||
|
if (eIndType == IVEC_MCAL_UART_EVENT_RX_ARRIVED) {
|
||||||
|
u8CMPLX_FifoEnqueue((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[mcalUART_PORT2], pucBuffer, u32Size);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case mcalUART_PORT3:
|
||||||
|
if (eIndType == IVEC_MCAL_UART_EVENT_RX_ARRIVED) {
|
||||||
|
u8CMPLX_FifoEnqueue((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[mcalUART_PORT3], pucBuffer, u32Size);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void prvChecksumCalculate(uint8_t* pkt, int len, uint8_t *ck) {
|
static void prvChecksumCalculate(uint8_t* pkt, int len, uint8_t* ck) {
|
||||||
uint8_t mck_a = 0, mck_b = 0;
|
uint8_t mck_a = 0, mck_b = 0;
|
||||||
/*Incremented to ignore Sync data*/
|
/*Incremented to ignore Sync data*/
|
||||||
for (int i = 2; i < len - 2; i++) {
|
for (int i = 2; i < len - 2; i++) {
|
||||||
|
|
@ -38,69 +54,69 @@ static void prvChecksumCalculate(uint8_t* pkt, int len, uint8_t *ck) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e xECU_UARTInit(McalUartHandle_s* prvUartHandle, uint32_t speed)
|
IVEC_EcuCommonErr_e xECU_UARTInit(EcuUartHandle_s* prvUartHandle, uint32_t speed)
|
||||||
{
|
{
|
||||||
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
uint8_t l_i32Ret;
|
uint8_t l_i32Ret = 0;
|
||||||
|
|
||||||
IVEC_ECU_LOG(LOG_STRING, "UART Initilising Queue");
|
IVEC_ECU_LOG(LOG_STRING, "UART Initilising Queue");
|
||||||
__gprv_MyEcuUARTResponseQueue.i32ElementSize = sizeof(uint8_t);
|
if (prvUartHandle->eUartPortNumber < IVEC_MCAL_UART_MAX_PORT)
|
||||||
__gprv_MyEcuUARTResponseQueue.i32TotalElements = CAN_UART_BUFFER_MAX_SIZE;
|
{
|
||||||
__gprv_MyEcuUARTResponseQueue.pu8Buffer = (uint8_t*)__gprv_u8CANUartDataBuffer;
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].i32ElementSize = sizeof(uint8_t);
|
||||||
__gprv_MyEcuUARTResponseQueue.i32QueueType = FIXED_ELEMENT_SIZE_QUEUE;
|
|
||||||
l_i32Ret = u8CMPLX_FifoQueueInit(&__gprv_MyEcuUARTResponseQueue);
|
switch (prvUartHandle->eUartPortNumber)
|
||||||
if (l_i32Ret == 0)
|
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_FAIL;
|
case mcalUART_PORT2:
|
||||||
goto exit;
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].i32TotalElements = prvUartHandle->u16QbufSize;
|
||||||
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].pu8Buffer = prvUartHandle->u8Qbuffer;
|
||||||
|
break;
|
||||||
|
case mcalUART_PORT3:
|
||||||
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].i32TotalElements = prvUartHandle->u16QbufSize;
|
||||||
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].pu8Buffer = prvUartHandle->u8Qbuffer;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].pu8Buffer = NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
IVEC_ECU_LOG(LOG_STRING, "Initilising UART");
|
__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber].i32QueueType = FIXED_ELEMENT_SIZE_QUEUE;
|
||||||
#if (UART_PIN_SELECTION == 1)
|
l_i32Ret = u8CMPLX_FifoQueueInit((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber]);
|
||||||
prvUartHandle->eUartPortNumber = mcalUART_PORT3;
|
}
|
||||||
|
|
||||||
#elif (UART_PIN_SELECTION == 2 )
|
if (l_i32Ret == 0)
|
||||||
prvUartHandle->eUartPortNumber = mcalUART_PORT2;
|
{
|
||||||
#elif (UART_PIN_SELECTION == 3)
|
l_xFuncStatus = commonECU_FAIL;
|
||||||
if(uartCount == 1)
|
goto exit;
|
||||||
{
|
}
|
||||||
prvUartHandle->eUartPortNumber = mcalUART_PORT2;
|
|
||||||
uartCount = 2;
|
IVEC_ECU_LOG(LOG_STRING, "Initilising UART");
|
||||||
}
|
prvUartHandle->__xUartHandle.pvUartRecvCallback = __prv_vEcu_CANOverUartMsgCallback;
|
||||||
else
|
|
||||||
{
|
prvUartHandle->__xUartHandle.xUartConfig.eUartBaudrate = speed;
|
||||||
prvUartHandle->eUartPortNumber = mcalUART_PORT3;
|
prvUartHandle->__xUartHandle.eUartPortNumber = prvUartHandle->eUartPortNumber;
|
||||||
uartCount = 1;
|
prvUartHandle->__xUartHandle.xUartConfig.eUartFlowCtrl = mcalUART_FC_NONE;
|
||||||
}
|
prvUartHandle->__xUartHandle.xUartConfig.eUartDataBit = mcalUART_DATABIT_8;
|
||||||
|
prvUartHandle->__xUartHandle.xUartConfig.eUartStopBit = mcalUART_STOP_1;
|
||||||
|
prvUartHandle->__xUartHandle.xUartConfig.eUartParityBit = mcalUART_PARITY_NONE;
|
||||||
|
l_i32Ret = xMCAL_UartInit(&prvUartHandle->__xUartHandle);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
if (l_i32Ret != 0)
|
||||||
|
{
|
||||||
prvUartHandle->pvUartRecvCallback = __prv_vEcu_CANOverUartMsgCallback;
|
l_xFuncStatus = commonECU_INIT_FAIL;
|
||||||
prvUartHandle->xUartConfig.eUartBaudrate = speed;
|
goto exit;
|
||||||
prvUartHandle->xUartConfig.eUartFlowCtrl = mcalUART_FC_NONE;
|
}
|
||||||
prvUartHandle->xUartConfig.eUartDataBit = mcalUART_DATABIT_8;
|
|
||||||
prvUartHandle->xUartConfig.eUartStopBit = mcalUART_STOP_1;
|
|
||||||
prvUartHandle->xUartConfig.eUartParityBit = mcalUART_PARITY_NONE;
|
|
||||||
l_i32Ret = xMCAL_UartInit(prvUartHandle);
|
|
||||||
|
|
||||||
|
|
||||||
if (l_i32Ret != 0)
|
exit:
|
||||||
{
|
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
l_xFuncStatus = commonECU_INIT_FAIL;
|
return l_xFuncStatus;
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
exit:
|
|
||||||
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
|
||||||
return l_xFuncStatus;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e xECU_UARTDeInit(McalUartHandle_s* prvUartHandle)
|
IVEC_EcuCommonErr_e xECU_UARTDeInit(EcuUartHandle_s* prvUartHandle)
|
||||||
{
|
{
|
||||||
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
uint8_t l_i32Ret;
|
uint8_t l_i32Ret;
|
||||||
|
|
@ -111,32 +127,33 @@ IVEC_EcuCommonErr_e xECU_UARTDeInit(McalUartHandle_s* prvUartHandle)
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
IVEC_ECU_LOG(LOG_STRING, "DeInitilising CAN");
|
IVEC_ECU_LOG(LOG_STRING, "DeInitilising CAN");
|
||||||
l_i32Ret = xMCAL_UartDeInit(prvUartHandle);
|
l_i32Ret = xMCAL_UartDeInit(&prvUartHandle->__xUartHandle);
|
||||||
if (l_i32Ret != 0)
|
if (l_i32Ret != 0)
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_DEINIT_FAIL;
|
l_xFuncStatus = commonECU_DEINIT_FAIL;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
memset((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue, 0, sizeof(__gprv_MyEcuUARTResponseQueue));
|
if (prvUartHandle->eUartPortNumber < IVEC_MCAL_UART_MAX_PORT)
|
||||||
exit:
|
vCMPLX_FifoQueueFlush((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber]);
|
||||||
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
exit:
|
||||||
return l_xFuncStatus;
|
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
|
return l_xFuncStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e xECU_UARTReInit(McalUartHandle_s *prvUartHandle, uint32_t speed)
|
IVEC_EcuCommonErr_e xECU_UARTReInit(EcuUartHandle_s* prvUartHandle, uint32_t speed)
|
||||||
{
|
{
|
||||||
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
uint8_t l_i32Ret;
|
uint8_t l_i32Ret;
|
||||||
l_i32Ret = xECU_UARTDeInit(prvUartHandle);
|
l_i32Ret = xECU_UARTDeInit(prvUartHandle);
|
||||||
if(l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
if (l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_DEINIT_FAIL;
|
l_xFuncStatus = commonECU_DEINIT_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
l_i32Ret = xECU_UARTInit(prvUartHandle, speed);
|
l_i32Ret = xECU_UARTInit(prvUartHandle, speed);
|
||||||
|
|
||||||
if(l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
if (l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_INIT_FAIL;
|
l_xFuncStatus = commonECU_INIT_FAIL;
|
||||||
}
|
}
|
||||||
|
|
@ -145,18 +162,23 @@ IVEC_EcuCommonErr_e xECU_UARTReInit(McalUartHandle_s *prvUartHandle, uint32_t sp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e xECU_UARTTransmit(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
IVEC_EcuCommonErr_e xECU_UARTTransmit(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
||||||
{
|
{
|
||||||
return commonECU_SUCCESS;
|
return commonECU_SUCCESS;
|
||||||
}
|
}
|
||||||
|
IVEC_EcuCommonErr_e xECU_UARTFlush(McalUartHandle_s* prvUartHandle)
|
||||||
|
{
|
||||||
|
if(prvUartHandle ==NULL || prvUartHandle->eUartPortNumber>=IVEC_MCAL_UART_MAX_PORT)
|
||||||
|
vCMPLX_FifoQueueFlush((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber]);
|
||||||
|
return commonECU_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
IVEC_EcuCommonErr_e xECU_UARTGetData(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout)
|
||||||
IVEC_EcuCommonErr_e xECU_UARTGetData(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout)
|
|
||||||
{
|
{
|
||||||
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
if (prvUartHandle == NULL)
|
if (prvUartHandle == NULL || prvUartHandle->eUartPortNumber>=IVEC_MCAL_UART_MAX_PORT)
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_INVALID_PARAM;
|
l_xFuncStatus = commonECU_INVALID_PARAM;
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
@ -166,11 +188,11 @@ IVEC_EcuCommonErr_e xECU_UARTGetData(McalUartHandle_s *prvUartHandle, uint8_t* p
|
||||||
int l_u32Len = 0;
|
int l_u32Len = 0;
|
||||||
uint32_t u32CommTimestamp = i32MCAL_getTicks();
|
uint32_t u32CommTimestamp = i32MCAL_getTicks();
|
||||||
|
|
||||||
while(((i32MCAL_getTicks()-u32CommTimestamp) <= timeout+1) && (ijk < len))
|
while (((i32MCAL_getTicks() - u32CommTimestamp) <= timeout + 1) && (ijk < len))
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!u8CMPLX_FifoQueueEmpty(&__gprv_MyEcuUARTResponseQueue)){
|
if (!u8CMPLX_FifoQueueEmpty((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber])) {
|
||||||
if( u8CMPLX_FifoDequeue(&__gprv_MyEcuUARTResponseQueue, &pucBuffer[ijk], &l_u32Len, 0) == 1 )
|
if (u8CMPLX_FifoDequeue((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue[prvUartHandle->eUartPortNumber], &pucBuffer[ijk], &l_u32Len, 0) == 1)
|
||||||
ijk++;
|
ijk++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -181,22 +203,22 @@ IVEC_EcuCommonErr_e xECU_UARTGetData(McalUartHandle_s *prvUartHandle, uint8_t* p
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
return l_xFuncStatus;
|
return l_xFuncStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uint8_t* pucBuf, uint32_t *ulId)
|
PacketRetCode_t xECU_ReadCANDataLenOverUART(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuf, uint32_t* ulId)
|
||||||
{
|
{
|
||||||
int PktLen = PACKET_FAIL;
|
int PktLen = PACKET_FAIL;
|
||||||
if ((xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[0], 1, 0) == commonECU_SUCCESS))
|
if ((xECU_UARTGetData(prvUartHandle, (uint8_t*)&pucBuf[0], 1, 0) == commonECU_SUCCESS))
|
||||||
{
|
{
|
||||||
if (pucBuf[0] == 0xB5)
|
if (pucBuf[0] == 0xB5)
|
||||||
{
|
{
|
||||||
if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[1], 1, 5) == commonECU_SUCCESS){
|
if (xECU_UARTGetData(prvUartHandle, (uint8_t*)&pucBuf[1], 1, 5) == commonECU_SUCCESS) {
|
||||||
if (pucBuf[1] != 0x62){
|
if (pucBuf[1] != 0x62) {
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
goto EXIT; //0x62 not found [OUT OF SYNC]
|
goto EXIT; //0x62 not found [OUT OF SYNC]
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +228,7 @@ PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uin
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[2], 5, DATA_PACKET_TIMEOUT) != commonECU_SUCCESS){
|
if (xECU_UARTGetData(prvUartHandle, (uint8_t*)&pucBuf[2], 5, DATA_PACKET_TIMEOUT) != commonECU_SUCCESS) {
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
|
@ -214,7 +236,7 @@ PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uin
|
||||||
*(ulId) = (uint32_t)((pucBuf[6] << 24) | (pucBuf[5] << 16) | (pucBuf[4] << 8) | (pucBuf[3] << 0));
|
*(ulId) = (uint32_t)((pucBuf[6] << 24) | (pucBuf[5] << 16) | (pucBuf[4] << 8) | (pucBuf[3] << 0));
|
||||||
uint8_t l_ucTempLen = pucBuf[2];
|
uint8_t l_ucTempLen = pucBuf[2];
|
||||||
PktLen = PKT_HEADER_FOOTER + l_ucTempLen;
|
PktLen = PKT_HEADER_FOOTER + l_ucTempLen;
|
||||||
if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[PKT_HEADER], (uint32_t)(PktLen - PKT_HEADER), DATA_PACKET_TIMEOUT) != commonECU_SUCCESS)
|
if (xECU_UARTGetData(prvUartHandle, (uint8_t*)&pucBuf[PKT_HEADER], (uint32_t)(PktLen - PKT_HEADER), DATA_PACKET_TIMEOUT) != commonECU_SUCCESS)
|
||||||
{
|
{
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
|
|
@ -225,14 +247,16 @@ PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uin
|
||||||
/*TODO: (Python Script)Some Times Fails due to Bad Checksum*/
|
/*TODO: (Python Script)Some Times Fails due to Bad Checksum*/
|
||||||
if ((checksum[0] == pucBuf[PktLen - 2]) && (checksum[1] == pucBuf[PktLen - 1])) {
|
if ((checksum[0] == pucBuf[PktLen - 2]) && (checksum[1] == pucBuf[PktLen - 1])) {
|
||||||
PktLen -= PKT_HEADER_FOOTER;
|
PktLen -= PKT_HEADER_FOOTER;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
IVEC_ECU_LOG(LOG_STRING, "Packet Checksum Failed\n");
|
IVEC_ECU_LOG(LOG_STRING, "Packet Checksum Failed\n");
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// COM_FlushBuffer();
|
// COM_FlushBuffer();
|
||||||
PktLen = PACKET_FAIL;
|
PktLen = PACKET_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -240,7 +264,7 @@ EXIT:
|
||||||
return PktLen;
|
return PktLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketRetCode_t xECU_ReadCANDataOverUART(McalUartHandle_s* prvUartHandle ,uint8_t* pucBuf, uint32_t *ulId)
|
PacketRetCode_t xECU_ReadCANDataOverUART(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuf, uint32_t* ulId)
|
||||||
{
|
{
|
||||||
PacketRetCode_t retCode = PACKET_FAIL;
|
PacketRetCode_t retCode = PACKET_FAIL;
|
||||||
retCode = xECU_ReadCANDataLenOverUART(prvUartHandle, pucBuf, ulId);
|
retCode = xECU_ReadCANDataLenOverUART(prvUartHandle, pucBuf, ulId);
|
||||||
|
|
@ -248,7 +272,7 @@ PacketRetCode_t xECU_ReadCANDataOverUART(McalUartHandle_s* prvUartHandle ,uint8_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e xECU_UartWrite(McalUartHandle_s* prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
IVEC_EcuCommonErr_e xECU_UartWrite(EcuUartHandle_s* prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
||||||
{
|
{
|
||||||
|
|
||||||
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_WRITE_FAIL;
|
IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_WRITE_FAIL;
|
||||||
|
|
@ -259,9 +283,9 @@ IVEC_EcuCommonErr_e xECU_UartWrite(McalUartHandle_s* prvUartHandle, uint8_t* puc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
l_i32Ret = xMCAL_UartWrite(prvUartHandle, pucBuffer, len);
|
l_i32Ret = xMCAL_UartWrite(&prvUartHandle->__xUartHandle, pucBuffer, len);
|
||||||
|
|
||||||
if(l_i32Ret == commonMCAL_SUCCESS)
|
if (l_i32Ret == commonMCAL_SUCCESS)
|
||||||
{
|
{
|
||||||
l_xFuncStatus = commonECU_SUCCESS;
|
l_xFuncStatus = commonECU_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -270,14 +294,14 @@ IVEC_EcuCommonErr_e xECU_UartWrite(McalUartHandle_s* prvUartHandle, uint8_t* puc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PacketRetCode_t xECU_FormatUartPacket(McalUartHandle_s* prvUartHandle, uint8_t* pucData, uint8_t ucDlc, uint32_t ulId)
|
PacketRetCode_t xECU_FormatUartPacket(EcuUartHandle_s* prvUartHandle, uint8_t* pucData, uint8_t ucDlc, uint32_t ulId)
|
||||||
{
|
{
|
||||||
pucData[0] = 0xb5; //SYNC_CHAR[0];
|
pucData[0] = 0xb5; //SYNC_CHAR[0];
|
||||||
pucData[1] = 0x62; //SYNC_CHAR[1];
|
pucData[1] = 0x62; //SYNC_CHAR[1];
|
||||||
pucData[2] = ucDlc;
|
pucData[2] = ucDlc;
|
||||||
memcpy(&pucData[3], &ulId, sizeof(uint32_t));
|
memcpy(&pucData[3], &ulId, sizeof(uint32_t));
|
||||||
unsigned char checksum[2] = { 0 };
|
unsigned char checksum[2] = { 0 };
|
||||||
prvChecksumCalculate(pucData, (ucDlc+PKT_HEADER_FOOTER), checksum);
|
prvChecksumCalculate(pucData, (ucDlc + PKT_HEADER_FOOTER), checksum);
|
||||||
pucData[(ucDlc + PKT_HEADER_FOOTER) - 2] = checksum[0];
|
pucData[(ucDlc + PKT_HEADER_FOOTER) - 2] = checksum[0];
|
||||||
pucData[(ucDlc + PKT_HEADER_FOOTER) - 1] = checksum[1];
|
pucData[(ucDlc + PKT_HEADER_FOOTER) - 1] = checksum[1];
|
||||||
if (xECU_UartWrite(prvUartHandle, pucData, (ucDlc + PKT_HEADER_FOOTER)) != commonECU_SUCCESS) {
|
if (xECU_UartWrite(prvUartHandle, pucData, (ucDlc + PKT_HEADER_FOOTER)) != commonECU_SUCCESS) {
|
||||||
|
|
@ -287,9 +311,419 @@ PacketRetCode_t xECU_FormatUartPacket(McalUartHandle_s* prvUartHandle, uint8_t*
|
||||||
return PACKET_SUCCESS;
|
return PACKET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vECU_InitiateUartToCanTransmit(McalUartHandle_s* prvUartHandle, uint32_t id, uint8_t *pucData, uint8_t ucLen)
|
int vECU_InitiateUartToCanTransmit(EcuUartHandle_s* prvUartHandle, uint32_t id, uint8_t* pucData, uint8_t ucLen)
|
||||||
{
|
{
|
||||||
uint8_t pucBuf[MAX_PACKET_LENGTH] = {0};
|
uint8_t pucBuf[MAX_PACKET_LENGTH] = { 0 };
|
||||||
memcpy(&pucBuf[PKT_HEADER], pucData, ucLen);
|
memcpy(&pucBuf[PKT_HEADER], pucData, ucLen);
|
||||||
return ( xECU_FormatUartPacket(prvUartHandle, pucBuf, ucLen, id) == PACKET_SUCCESS ) ? 0 : -1;
|
return (xECU_FormatUartPacket(prvUartHandle, pucBuf, ucLen, id) == PACKET_SUCCESS) ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#include "../ivec_ECU/ivec_ecu_uart/inc/ivec_ecu_uart.h"
|
||||||
|
//#include "ivec_cmplx_queue.h"
|
||||||
|
//#include "../Core/Include/ivec_mcal_uart.h"
|
||||||
|
////#include <..\Core\Include\ivec_mcal_timer.h>
|
||||||
|
////#include "ivec_mcal_uart.h"
|
||||||
|
//
|
||||||
|
//#define LOG_STRING "ivec-ecu-UART"
|
||||||
|
//#define CAN_UART_BUFFER_MAX_SIZE 4096
|
||||||
|
//#define DATA_PACKET_TIMEOUT 300
|
||||||
|
//
|
||||||
|
//CmplxFifoQueueHandle_s __gprv_MyEcuUARTResponseQueue = { 0 };
|
||||||
|
//
|
||||||
|
//static uint8_t __gprv_u8CANUartDataBuffer[CAN_UART_BUFFER_MAX_SIZE];
|
||||||
|
//static uint32_t __gprv_u32CanUartDataAvailable = 0;
|
||||||
|
//
|
||||||
|
//int uartCount = 1;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//static void __prv_vEcu_CANOverUartMsgCallback(IVEC_McalUartEvents_e eIndType, char* pucBuffer, uint32_t u32Size)
|
||||||
|
//{
|
||||||
|
// if(eIndType == IVEC_MCAL_UART_EVENT_RX_ARRIVED){
|
||||||
|
// if( u8CMPLX_FifoEnqueue(&__gprv_MyEcuUARTResponseQueue, pucBuffer, u32Size) )
|
||||||
|
// __gprv_u32CanUartDataAvailable += u32Size;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//static void prvChecksumCalculate(uint8_t* pkt, int len, uint8_t *ck) {
|
||||||
|
// uint8_t mck_a = 0, mck_b = 0;
|
||||||
|
// /*Incremented to ignore Sync data*/
|
||||||
|
// for (int i = 2; i < len - 2; i++) {
|
||||||
|
// mck_a += pkt[i];
|
||||||
|
// mck_b += mck_a;
|
||||||
|
// }
|
||||||
|
// mck_a &= 0xFF;
|
||||||
|
// mck_b &= 0xFF;
|
||||||
|
// ck[0] = mck_a;
|
||||||
|
// ck[1] = mck_b;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UARTInit(McalUartHandle_s* prvUartHandle, uint32_t speed)
|
||||||
|
//{
|
||||||
|
// IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
|
// IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
|
// uint8_t l_i32Ret;
|
||||||
|
//
|
||||||
|
// IVEC_ECU_LOG(LOG_STRING, "UART Initilising Queue");
|
||||||
|
// __gprv_MyEcuUARTResponseQueue.i32ElementSize = sizeof(uint8_t);
|
||||||
|
// __gprv_MyEcuUARTResponseQueue.i32TotalElements = CAN_UART_BUFFER_MAX_SIZE;
|
||||||
|
// __gprv_MyEcuUARTResponseQueue.pu8Buffer = (uint8_t*)__gprv_u8CANUartDataBuffer;
|
||||||
|
// __gprv_MyEcuUARTResponseQueue.i32QueueType = FIXED_ELEMENT_SIZE_QUEUE;
|
||||||
|
// l_i32Ret = u8CMPLX_FifoQueueInit(&__gprv_MyEcuUARTResponseQueue);
|
||||||
|
// if (l_i32Ret == 0)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_FAIL;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// IVEC_ECU_LOG(LOG_STRING, "Initilising UART");
|
||||||
|
// #if (UART_PIN_SELECTION == 1)
|
||||||
|
// prvUartHandle->eUartPortNumber = mcalUART_PORT3;
|
||||||
|
//
|
||||||
|
// #elif (UART_PIN_SELECTION == 2 )
|
||||||
|
// prvUartHandle->eUartPortNumber = mcalUART_PORT2;
|
||||||
|
// #elif (UART_PIN_SELECTION == 3)
|
||||||
|
// if(uartCount == 1)
|
||||||
|
// {
|
||||||
|
// prvUartHandle->eUartPortNumber = mcalUART_PORT2;
|
||||||
|
// uartCount = 2;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// prvUartHandle->eUartPortNumber = mcalUART_PORT3;
|
||||||
|
// uartCount = 1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// #endif
|
||||||
|
//
|
||||||
|
// prvUartHandle->pvUartRecvCallback = __prv_vEcu_CANOverUartMsgCallback;
|
||||||
|
// prvUartHandle->xUartConfig.eUartBaudrate = speed;
|
||||||
|
// prvUartHandle->xUartConfig.eUartFlowCtrl = mcalUART_FC_NONE;
|
||||||
|
// prvUartHandle->xUartConfig.eUartDataBit = mcalUART_DATABIT_8;
|
||||||
|
// prvUartHandle->xUartConfig.eUartStopBit = mcalUART_STOP_1;
|
||||||
|
// prvUartHandle->xUartConfig.eUartParityBit = mcalUART_PARITY_NONE;
|
||||||
|
// l_i32Ret = xMCAL_UartInit(prvUartHandle);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if (l_i32Ret != 0)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_INIT_FAIL;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// exit:
|
||||||
|
// IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
|
// return l_xFuncStatus;
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UARTDeInit(McalUartHandle_s* prvUartHandle)
|
||||||
|
//{
|
||||||
|
// IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
|
// uint8_t l_i32Ret;
|
||||||
|
// IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
|
// if (prvUartHandle == NULL)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_ALREADY_DEINIT;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
// IVEC_ECU_LOG(LOG_STRING, "DeInitilising CAN");
|
||||||
|
// l_i32Ret = xMCAL_UartDeInit(prvUartHandle);
|
||||||
|
// if (l_i32Ret != 0)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_DEINIT_FAIL;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
// memset((CmplxFifoQueueHandle_s*)&__gprv_MyEcuUARTResponseQueue, 0, sizeof(__gprv_MyEcuUARTResponseQueue));
|
||||||
|
// exit:
|
||||||
|
// IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
|
// return l_xFuncStatus;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UARTReInit(McalUartHandle_s *prvUartHandle, uint32_t speed)
|
||||||
|
//{
|
||||||
|
// IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
|
// uint8_t l_i32Ret;
|
||||||
|
// l_i32Ret = xECU_UARTDeInit(prvUartHandle);
|
||||||
|
// if(l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_DEINIT_FAIL;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// l_i32Ret = xECU_UARTInit(prvUartHandle, speed);
|
||||||
|
//
|
||||||
|
// if(l_i32Ret != IVEC_MCAL_STATUS_SUCCESS)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_INIT_FAIL;
|
||||||
|
// }
|
||||||
|
// return l_xFuncStatus;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UARTTransmit(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
||||||
|
//{
|
||||||
|
// return commonECU_SUCCESS;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UARTGetData(McalUartHandle_s *prvUartHandle, uint8_t* pucBuffer, uint16_t len, uint16_t timeout)
|
||||||
|
//{
|
||||||
|
// IVEC_ECU_FUNC_ENTRY(LOG_STRING);
|
||||||
|
//
|
||||||
|
// IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_SUCCESS;
|
||||||
|
// if (prvUartHandle == NULL)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_INVALID_PARAM;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// uint8_t ijk = 0;
|
||||||
|
// int l_u32Len = 0;
|
||||||
|
// uint32_t u32CommTimestamp = i32MCAL_getTicks();
|
||||||
|
//
|
||||||
|
// while(((i32MCAL_getTicks()-u32CommTimestamp) <= timeout+1) && (ijk < len))
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// if(!u8CMPLX_FifoQueueEmpty(&__gprv_MyEcuUARTResponseQueue)){
|
||||||
|
// if( u8CMPLX_FifoDequeue(&__gprv_MyEcuUARTResponseQueue, &pucBuffer[ijk], &l_u32Len, 0) == 1 )
|
||||||
|
// ijk++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (ijk != len)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_READ_FAIL;
|
||||||
|
// goto exit;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// exit:
|
||||||
|
// IVEC_ECU_FUNC_EXIT(LOG_STRING, 0);
|
||||||
|
// return l_xFuncStatus;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//PacketRetCode_t xECU_ReadCANDataLenOverUART(McalUartHandle_s *prvUartHandle, uint8_t* pucBuf, uint32_t *ulId)
|
||||||
|
//{
|
||||||
|
// int PktLen = PACKET_FAIL;
|
||||||
|
// if ((xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[0], 1, 0) == commonECU_SUCCESS))
|
||||||
|
// {
|
||||||
|
// if (pucBuf[0] == 0xB5)
|
||||||
|
// {
|
||||||
|
// if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[1], 1, 5) == commonECU_SUCCESS){
|
||||||
|
// if (pucBuf[1] != 0x62){
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// goto EXIT; //0x62 not found [OUT OF SYNC]
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// goto EXIT;
|
||||||
|
// }
|
||||||
|
// if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[2], 5, DATA_PACKET_TIMEOUT) != commonECU_SUCCESS){
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// goto EXIT;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *(ulId) = (uint32_t)((pucBuf[6] << 24) | (pucBuf[5] << 16) | (pucBuf[4] << 8) | (pucBuf[3] << 0));
|
||||||
|
// uint8_t l_ucTempLen = pucBuf[2];
|
||||||
|
// PktLen = PKT_HEADER_FOOTER + l_ucTempLen;
|
||||||
|
// if (xECU_UARTGetData(prvUartHandle, (uint8_t*) &pucBuf[PKT_HEADER], (uint32_t)(PktLen - PKT_HEADER), DATA_PACKET_TIMEOUT) != commonECU_SUCCESS)
|
||||||
|
// {
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// goto EXIT;
|
||||||
|
// }
|
||||||
|
// uint8_t checksum[2];
|
||||||
|
// prvChecksumCalculate(pucBuf, PktLen, checksum);
|
||||||
|
//
|
||||||
|
// /*TODO: (Python Script)Some Times Fails due to Bad Checksum*/
|
||||||
|
// if ((checksum[0] == pucBuf[PktLen - 2]) && (checksum[1] == pucBuf[PktLen - 1])) {
|
||||||
|
// PktLen -= PKT_HEADER_FOOTER;
|
||||||
|
// } else
|
||||||
|
// {
|
||||||
|
// IVEC_ECU_LOG(LOG_STRING, "Packet Checksum Failed\n");
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// }
|
||||||
|
// } else
|
||||||
|
// {
|
||||||
|
//// COM_FlushBuffer();
|
||||||
|
// PktLen = PACKET_FAIL;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//EXIT:
|
||||||
|
// return PktLen;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//PacketRetCode_t xECU_ReadCANDataOverUART(McalUartHandle_s* prvUartHandle ,uint8_t* pucBuf, uint32_t *ulId)
|
||||||
|
//{
|
||||||
|
// PacketRetCode_t retCode = PACKET_FAIL;
|
||||||
|
// retCode = xECU_ReadCANDataLenOverUART(prvUartHandle, pucBuf, ulId);
|
||||||
|
// return retCode;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//IVEC_EcuCommonErr_e xECU_UartWrite(McalUartHandle_s* prvUartHandle, uint8_t* pucBuffer, uint16_t len)
|
||||||
|
//{
|
||||||
|
//
|
||||||
|
// IVEC_EcuCommonErr_e l_xFuncStatus = commonECU_WRITE_FAIL;
|
||||||
|
// uint8_t l_i32Ret;
|
||||||
|
// if (prvUartHandle == NULL)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_INVALID_PARAM;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// l_i32Ret = xMCAL_UartWrite(prvUartHandle, pucBuffer, len);
|
||||||
|
//
|
||||||
|
// if(l_i32Ret == commonMCAL_SUCCESS)
|
||||||
|
// {
|
||||||
|
// l_xFuncStatus = commonECU_SUCCESS;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return l_xFuncStatus;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//PacketRetCode_t xECU_FormatUartPacket(McalUartHandle_s* prvUartHandle, uint8_t* pucData, uint8_t ucDlc, uint32_t ulId)
|
||||||
|
//{
|
||||||
|
// pucData[0] = 0xb5; //SYNC_CHAR[0];
|
||||||
|
// pucData[1] = 0x62; //SYNC_CHAR[1];
|
||||||
|
// pucData[2] = ucDlc;
|
||||||
|
// memcpy(&pucData[3], &ulId, sizeof(uint32_t));
|
||||||
|
// unsigned char checksum[2] = { 0 };
|
||||||
|
// prvChecksumCalculate(pucData, (ucDlc+PKT_HEADER_FOOTER), checksum);
|
||||||
|
// pucData[(ucDlc + PKT_HEADER_FOOTER) - 2] = checksum[0];
|
||||||
|
// pucData[(ucDlc + PKT_HEADER_FOOTER) - 1] = checksum[1];
|
||||||
|
// if (xECU_UartWrite(prvUartHandle, pucData, (ucDlc + PKT_HEADER_FOOTER)) != commonECU_SUCCESS) {
|
||||||
|
//
|
||||||
|
// return PACKET_FAIL;
|
||||||
|
// }
|
||||||
|
// return PACKET_SUCCESS;
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//int vECU_InitiateUartToCanTransmit(McalUartHandle_s* prvUartHandle, uint32_t id, uint8_t *pucData, uint8_t ucLen)
|
||||||
|
//{
|
||||||
|
// uint8_t pucBuf[MAX_PACKET_LENGTH] = {0};
|
||||||
|
// memcpy(&pucBuf[PKT_HEADER], pucData, ucLen);
|
||||||
|
// return ( xECU_FormatUartPacket(prvUartHandle, pucBuf, ucLen, id) == PACKET_SUCCESS ) ? 0 : -1;
|
||||||
|
//}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
void vRTE_MatlabInit(void);
|
void vRTE_MatlabInit(void);
|
||||||
void vRTE_MatlabRun(void);
|
void vRTE_MatlabRun(void);
|
||||||
|
void vApp_Init(void);
|
||||||
|
void vApp_RunInit(void);
|
||||||
void vRTE_InitUARTCANEcho(void);
|
void vRTE_InitUARTCANEcho(void);
|
||||||
void vRTE_UARTDataProcess(void);
|
void vRTE_UARTDataProcess(void);
|
||||||
void vRTE_CANDataProcess(void);
|
void vRTE_CANDataProcess(void);
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,23 @@
|
||||||
#include "../../TM1650_SDK/inc/ivec_TM1650.h"
|
#include "../../TM1650_SDK/inc/ivec_TM1650.h"
|
||||||
|
|
||||||
|
|
||||||
McalUartHandle_s g_xUartHandle;
|
EcuUartHandle_s g_xUartHandle;
|
||||||
McalUartHandle_s g_xUart2Handle;
|
EcuUartHandle_s g_xUart2Handle;
|
||||||
|
|
||||||
|
// UART_PIN_SELECTION values:
|
||||||
|
// 1 - Basil Battery Smart
|
||||||
|
// 2 - Basil
|
||||||
|
#define CONFIG_BASIL_BATTERY_SMART 1
|
||||||
|
#define CONFIG_BASIL 2
|
||||||
|
|
||||||
|
#define UART_PIN_SELECTION CONFIG_BASIL // Set the desired UART configuration here
|
||||||
|
|
||||||
uint32_t g_u32UartSpeed = 0;
|
uint32_t g_u32UartSpeed = 0;
|
||||||
xCAN_baud_t g_u16CanSpeed = 0;
|
xCAN_baud_t g_u16CanSpeed = 0;
|
||||||
uint8_t g_pu8Buf[MAX_PACKET_LENGTH] = {0};
|
uint8_t g_pu8Buf[MAX_PACKET_LENGTH] = {0};
|
||||||
volatile uint32_t g_u32CanId = 0x1fffffff;
|
volatile uint32_t g_u32CanId = 0x1fffffff;
|
||||||
|
#define CAN_UART_BUFFER_MAX_SIZE 4096
|
||||||
|
volatile uint8_t __gprv_u8CANUartDataBuffer[CAN_UART_BUFFER_MAX_SIZE];
|
||||||
|
|
||||||
#define MAX_FILTERS 10
|
#define MAX_FILTERS 10
|
||||||
uint32_t maskValues[MAX_FILTERS];
|
uint32_t maskValues[MAX_FILTERS];
|
||||||
|
|
@ -227,12 +238,33 @@ void vRTE_MatlabRun(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vApp_Init(void)
|
||||||
|
{
|
||||||
|
#if UART_PIN_SELECTION == 1
|
||||||
|
vRTE_MatlabInit();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vRTE_InitUARTCANEcho();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void vRTE_InitUARTCANEcho(void)
|
void vRTE_InitUARTCANEcho(void)
|
||||||
{
|
{
|
||||||
g_u32UartSpeed = mcalUART_BAUD_115200;
|
g_u32UartSpeed = mcalUART_BAUD_115200;
|
||||||
g_u16CanSpeed = BAUD_500;
|
g_u16CanSpeed = BAUD_500;
|
||||||
|
g_xUartHandle.u8Qbuffer = __gprv_u8CANUartDataBuffer;
|
||||||
|
g_xUartHandle.u16QbufSize = CAN_UART_BUFFER_MAX_SIZE;
|
||||||
|
|
||||||
|
#if (UART_PIN_SELECTION == 1)
|
||||||
|
g_xUartHandle.eUartPortNumber = ecuUART_PORT3;
|
||||||
|
#elif (UART_PIN_SELECTION == 2)
|
||||||
|
g_xUartHandle.eUartPortNumber = ecuUART_PORT2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
xECU_UARTInit(&g_xUartHandle, g_u32UartSpeed);
|
xECU_UARTInit(&g_xUartHandle, g_u32UartSpeed);
|
||||||
|
|
||||||
|
|
||||||
// #if UART_PIN_SELECTION == 3
|
// #if UART_PIN_SELECTION == 3
|
||||||
// xECU_UARTInit(&g_xUart2Handle, g_u32UartSpeed);
|
// xECU_UARTInit(&g_xUart2Handle, g_u32UartSpeed);
|
||||||
// #endif
|
// #endif
|
||||||
|
|
@ -240,6 +272,20 @@ void vRTE_InitUARTCANEcho(void)
|
||||||
xECU_CANInit(CANFD0,g_u16CanSpeed);
|
xECU_CANInit(CANFD0,g_u16CanSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vApp_RunInit(void)
|
||||||
|
{
|
||||||
|
vRTE_UARTDataProcess();
|
||||||
|
vRTE_CANDataProcess();
|
||||||
|
}
|
||||||
|
|
||||||
|
void vMCAL_TimerCallback(void)
|
||||||
|
{
|
||||||
|
#if UART_PIN_SELECTION == 1
|
||||||
|
vRTE_MatlabRun();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DL_TimerA_clearInterruptStatus(TIMER_1_INST, GPTIMER_CPU_INT_IMASK_Z_SET);
|
||||||
|
}
|
||||||
void vCanFilterMaskSaveVal(uint8_t ucIdx, uint32_t mask, bool isExtended)
|
void vCanFilterMaskSaveVal(uint8_t ucIdx, uint32_t mask, bool isExtended)
|
||||||
{
|
{
|
||||||
maskCount = ucIdx;
|
maskCount = ucIdx;
|
||||||
|
|
@ -322,7 +368,7 @@ void vCanConfigFilter() {
|
||||||
extFilterElement.efid2 = maskValues[i];
|
extFilterElement.efid2 = maskValues[i];
|
||||||
extFilterElement.efec = 001;
|
extFilterElement.efec = 001;
|
||||||
extFilterElement.eft = 10;
|
extFilterElement.eft = 10;
|
||||||
DL_MCAN_addExtMsgIDFilter(CANFD0, extendedFilterNumber, (DL_MCAN_StdMsgIDFilterElement *) &extFilterElement);
|
DL_MCAN_addExtMsgIDFilter(CANFD0, extendedFilterNumber, &extFilterElement);
|
||||||
// filterValues[i] = 0;
|
// filterValues[i] = 0;
|
||||||
// maskValues[i] = 0;
|
// maskValues[i] = 0;
|
||||||
extendedFilterNumber++;
|
extendedFilterNumber++;
|
||||||
|
|
@ -335,7 +381,7 @@ void vCanConfigFilter() {
|
||||||
stdFilterElement.sfid2 = maskValues[i];
|
stdFilterElement.sfid2 = maskValues[i];
|
||||||
stdFilterElement.sfec = 001;
|
stdFilterElement.sfec = 001;
|
||||||
stdFilterElement.sft = 10;
|
stdFilterElement.sft = 10;
|
||||||
DL_MCAN_addStdMsgIDFilter(CANFD0, stadardFilterNumber,(DL_MCAN_StdMsgIDFilterElement *) &stdFilterElement);
|
DL_MCAN_addStdMsgIDFilter(CANFD0, stadardFilterNumber, &stdFilterElement);
|
||||||
// filterValues[i] = 0;
|
// filterValues[i] = 0;
|
||||||
// maskValues[i] = 0;
|
// maskValues[i] = 0;
|
||||||
stadardFilterNumber++;
|
stadardFilterNumber++;
|
||||||
|
|
|
||||||
22
main.c
22
main.c
|
|
@ -16,15 +16,10 @@
|
||||||
#include "../Core/Include/ivec_mcal_uart.h"
|
#include "../Core/Include/ivec_mcal_uart.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "ivec_rte.h"
|
#include "ivec_rte.h"
|
||||||
extern McalUartHandle_s g_xUartHandle;
|
|
||||||
void vMCAL_TimerCallback(void)
|
|
||||||
{
|
|
||||||
#if UART_PIN_SELECTION == 1
|
|
||||||
vRTE_MatlabRun();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DL_TimerA_clearInterruptStatus(TIMER_1_INST, GPTIMER_CPU_INT_IMASK_Z_SET);
|
//extern McalUartHandle_s g_xUartHandle;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void __prv_TimerConfig(void)
|
static void __prv_TimerConfig(void)
|
||||||
{
|
{
|
||||||
|
|
@ -44,16 +39,13 @@ int main(void)
|
||||||
xMCAL_SYSTICK_INIT(Period_1ms);
|
xMCAL_SYSTICK_INIT(Period_1ms);
|
||||||
__prv_TimerConfig();
|
__prv_TimerConfig();
|
||||||
|
|
||||||
#if UART_PIN_SELECTION == 1
|
|
||||||
vRTE_MatlabInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
vRTE_InitUARTCANEcho();
|
|
||||||
vECU_InitiateUartToCanTransmit(&g_xUartHandle, 0x6, NULL, 0);
|
vApp_Init();
|
||||||
|
// vECU_InitiateUartToCanTransmit(&g_xUartHandle, 0x6, NULL, 0);
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
vRTE_UARTDataProcess();
|
vApp_RunInit();
|
||||||
vRTE_CANDataProcess();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,7 @@ typedef enum
|
||||||
#define SYSOSC 4
|
#define SYSOSC 4
|
||||||
#define SLEEP0 6
|
#define SLEEP0 6
|
||||||
|
|
||||||
// UART_PIN_SELECTION values:
|
|
||||||
// 1 - Basil Battery Smart
|
|
||||||
// 2 - Basil
|
|
||||||
// 3 - Battery Swapping Station
|
|
||||||
#define UART_PIN_SELECTION 1 // Set the desired UART configuration here
|
|
||||||
|
|
||||||
|
|
||||||
volatile int i32TickCnt;
|
volatile int i32TickCnt;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue