Merge pull request 'dev-tej-TI_BLE_smd_stable' (#1) from dev-tej-TI_BLE_smd_stable into stable

Reviewed-on: Vecmocon_Technologies/cantouart_ti#1
stable
vibhu.rastogi 2025-07-28 13:43:33 +00:00
commit 92508d2556
22 changed files with 997 additions and 13 deletions

View File

@ -114,6 +114,60 @@ encoding//Debug/ivec_ESDK/ivec_esdk_nfc_pn532/src/subdir_rules.mk=UTF-8
encoding//Debug/ivec_ESDK/ivec_esdk_nfc_pn532/src/subdir_vars.mk=UTF-8
encoding//Debug/ivec_RTE/src/subdir_rules.mk=UTF-8
encoding//Debug/ivec_RTE/src/subdir_vars.mk=UTF-8
encoding//Debug/ivec_cmplx_vframe/src/subdir_rules.mk=UTF-8
encoding//Debug/ivec_cmplx_vframe/src/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Debug/lib/gcc/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Debug/lib/iar/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Debug/lib/keil/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Debug/lib/ticlang/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Debug/m0p/subdir_rules.mk=UTF-8
encoding//Debug/m0p/subdir_vars.mk=UTF-8
encoding//Debug/m0p/sysctl/subdir_rules.mk=UTF-8
encoding//Debug/m0p/sysctl/subdir_vars.mk=UTF-8
encoding//Debug/makefile=UTF-8
encoding//Debug/objects.mk=UTF-8
encoding//Debug/sources.mk=UTF-8
@ -127,48 +181,64 @@ encoding//Test__GNU/Generated\ Codes/subdir_rules.mk=UTF-8
encoding//Test__GNU/Generated\ Codes/subdir_vars.mk=UTF-8
encoding//Test__GNU/TM1650_SDK/src/subdir_rules.mk=UTF-8
encoding//Test__GNU/TM1650_SDK/src/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0c1105_c1106/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0c1105_c1106/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0h321x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0h321x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/gcc/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0c1105_c1106/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0c1105_c1106/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0h321x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0h321x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/iar/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0c1105_c1106/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0c1105_c1106/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0h321x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0h321x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l11xx_l13xx/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l122x_l222x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/keil/m0p/mspm0l122x_l222x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0c1105_c1106/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0c1105_c1106/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0g1x0x_g3x0x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0gx51x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0gx51x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0h321x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0h321x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0l111x/subdir_rules.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0l111x/subdir_vars.mk=UTF-8
encoding//Test__GNU/driverlib/lib/ticlang/m0p/mspm0l11xx_l13xx/subdir_rules.mk=UTF-8
@ -201,6 +271,8 @@ encoding//Test__GNU/ivec_ESDK/ivec_esdk_nfc_pn532/src/subdir_rules.mk=UTF-8
encoding//Test__GNU/ivec_ESDK/ivec_esdk_nfc_pn532/src/subdir_vars.mk=UTF-8
encoding//Test__GNU/ivec_RTE/src/subdir_rules.mk=UTF-8
encoding//Test__GNU/ivec_RTE/src/subdir_vars.mk=UTF-8
encoding//Test__GNU/ivec_cmplx_vframe/src/subdir_rules.mk=UTF-8
encoding//Test__GNU/ivec_cmplx_vframe/src/subdir_vars.mk=UTF-8
encoding//Test__GNU/lib/gcc/m0p/mspm0c110x/subdir_rules.mk=UTF-8
encoding//Test__GNU/lib/gcc/m0p/mspm0c110x/subdir_vars.mk=UTF-8
encoding//Test__GNU/lib/gcc/m0p/mspm0g1x0x_g3x0x/subdir_rules.mk=UTF-8

View File

@ -55,6 +55,7 @@ typedef enum{
IVEC_MCAL_UART_PORT_1=0,
IVEC_MCAL_UART_PORT_2,
IVEC_MCAL_UART_PORT_3,
IVEC_MCAL_UART_PORT_4,
IVEC_MCAL_UART_PORT_MAX
}IVEC_McalUartPort_e;

View File

@ -0,0 +1,12 @@
#ifndef CORE_INCLUDE_IVEC_MCAL_WDT_H_
#define CORE_INCLUDE_IVEC_MCAL_WDT_H_
#include "../utils/utils.h"
IVEC_McalStatus_e xMCAL_WatchdogInit(MCAL_WWDT_TIMER timer);
IVEC_McalStatus_e xMCAL_WatchdogDeInit(void);
IVEC_McalStatus_e xMCAL_WatchdogReset(void);
#endif /* CORE_INCLUDE_IVEC_MCAL_WDT_H_ */

View File

@ -676,9 +676,13 @@ IVEC_McalCommonErr_e xMCAL_MCANGetErrorStatus(IVEC_McalCanHandle_s* pxCanHandle,
DL_MCAN_getErrCounters(CANFD0, &l_xCounter);
/* Return the status based on various error conditions */
if((g_xHeaderStat.lastErrCode == DL_MCAN_ERR_CODE_ACK_ERROR) || (g_xHeaderStat.busOffStatus))
DL_MCAN_setOpMode(CANFD0, DL_MCAN_OPERATION_MODE_NORMAL);
return commonMCAL_SUCCESS;
/*
return ( (g_xHeaderStat.lastErrCode == DL_MCAN_ERR_CODE_ACK_ERROR) || \
(g_xHeaderStat.busOffStatus) ) ? IVEC_MCAL_STATUS_ERROR : IVEC_MCAL_STATUS_SUCCESS;
(g_xHeaderStat.busOffStatus) ) ? commonMCAL_FAIL : commonMCAL_SUCCESS;
*/
}

View File

@ -139,6 +139,11 @@ void UART2_IRQHandler()
prv_vRxCallback(UART2, DL_UART_Main_getPendingInterrupt(UART2));
}
void UART3_IRQHandler()
{
prv_vRxCallback(UART3, DL_UART_Main_getPendingInterrupt(UART3));
}
/**
* @brief Retrieves the UART instance for the specified port number.
*
@ -158,6 +163,8 @@ static UART_Regs* __prv_McalGetUartInstance(IVEC_McalUartPort_e eUartPortNumber)
return UART1;
case IVEC_MCAL_UART_PORT_3:
return UART2;
case IVEC_MCAL_UART_PORT_4:
return UART3;
default:
return NULL; // Invalid UART port
}
@ -183,6 +190,8 @@ static IVEC_McalUartPort_e __prv_McalGetUartPort(UART_Regs* pxUartInstance)
return IVEC_MCAL_UART_PORT_2;
case (uint32_t)UART2:
return IVEC_MCAL_UART_PORT_3;
case (uint32_t)UART3:
return IVEC_MCAL_UART_PORT_4;
default:
return IVEC_MCAL_UART_PORT_MAX; // Invalid UART port
}
@ -242,7 +251,12 @@ static IVEC_McalCommonErr_e _prvMCAL_UartDeInitInstance(IVEC_McalUartHandle_s* p
NVIC_ClearPendingIRQ(UART2_INT_IRQn);
// Reset the UART2 init flag if needed (b_UART2_init_flag = 0)
}
else if (pxUartInstance == UART3)
{
NVIC_DisableIRQ(UART3_INT_IRQn);
NVIC_ClearPendingIRQ(UART3_INT_IRQn);
// Reset the UART2 init flag if needed (b_UART2_init_flag = 0)
}
// Optionally, reset the UART clock configuration if needed
DL_UART_Main_setClockConfig(pxUartInstance, NULL);
@ -528,6 +542,15 @@ static IVEC_McalCommonErr_e __prv_McalUartInitInstance(IVEC_McalUartHandle_s* px
DL_UART_Main_enablePower(UART2);
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX);
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX);
}
else if (pxUartHandle->eUartPortNumber == IVEC_MCAL_UART_PORT_4)
{
DL_UART_Main_reset(UART3);
DL_UART_Main_enablePower(UART3);
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM36, IOMUX_PINCM36_PF_UART3_TX);
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM35, IOMUX_PINCM35_PF_UART3_RX);
}
UART_Regs* pxUartInstance = __prv_McalGetUartInstance(pxUartHandle->eUartPortNumber);
@ -579,7 +602,14 @@ static IVEC_McalCommonErr_e __prv_McalUartInitInstance(IVEC_McalUartHandle_s* px
DL_UART_ClockConfig xUartClockConfig = { 0 };
xUartClockConfig.clockSel = DL_UART_CLOCK_BUSCLK;
if(pxUartHandle->eUartPortNumber == IVEC_MCAL_UART_PORT_4)
{
xUartClockConfig.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_2;
}
else
{
xUartClockConfig.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1;
}
DL_UART_Main_setClockConfig(pxUartInstance, (DL_UART_Main_ClockConfig*) &xUartClockConfig);
DL_UART_Main_init(pxUartInstance, (DL_UART_Main_Config*) &xUartConfig);
@ -705,6 +735,26 @@ static IVEC_McalCommonErr_e __prv_McalUartInitInstance(IVEC_McalUartHandle_s* px
NVIC_ClearPendingIRQ(UART2_INT_IRQn);
NVIC_EnableIRQ(UART2_INT_IRQn);
}
else if (pxUartInstance == UART3)
{
DL_UART_Main_enableInterrupt(pxUartInstance,
DL_UART_MAIN_INTERRUPT_BREAK_ERROR |
DL_UART_MAIN_INTERRUPT_FRAMING_ERROR |
DL_UART_MAIN_INTERRUPT_NOISE_ERROR |
DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR |
DL_UART_MAIN_INTERRUPT_PARITY_ERROR |
DL_UART_MAIN_INTERRUPT_RX |
DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR);
DL_UART_Main_enableFIFOs(UART3);
DL_UART_Main_setRXFIFOThreshold(UART3, DL_UART_RX_FIFO_LEVEL_ONE_ENTRY);
DL_UART_Main_setTXFIFOThreshold(UART3, DL_UART_TX_FIFO_LEVEL_1_2_EMPTY);
DL_UART_Main_enable(pxUartInstance);
NVIC_ClearPendingIRQ(UART3_INT_IRQn);
NVIC_EnableIRQ(UART3_INT_IRQn);
}
return commonMCAL_SUCCESS;
}

133
Core/Source/ivec_mcal_wdt.c Normal file
View File

@ -0,0 +1,133 @@
#include "ivec_mcal_wdt.h"
static volatile bool b_WDInitFlag;
IVEC_McalStatus_e xMCAL_WatchdogInit(MCAL_WWDT_TIMER timer)
{
DL_WWDT_CLOCK_DIVIDE Clk_Div;
DL_WWDT_TIMER_PERIOD Tmr_Per;
assert(WATCHDOG_TIMER != NULL);
switch(timer)
{
case MCAL_WDT_1_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_1;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_2_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_2;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_3_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_3;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_4_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_4;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_5_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_5;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_6_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_6;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_7_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_7;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_8_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_8;
Tmr_Per = DL_WWDT_TIMER_PERIOD_15_BITS;
break;
case MCAL_WDT_16_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_2;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_24_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_3;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_32_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_4;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_40_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_5;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_48_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_6;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_56_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_7;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
case MCAL_WDT_64_SEC_TIMER:
Clk_Div = DL_WWDT_CLOCK_DIVIDE_8;
Tmr_Per = DL_WWDT_TIMER_PERIOD_18_BITS;
break;
default: return IVEC_MCAL_STATUS_INIT_FAIL;
}
if(b_WDInitFlag == false)
{
/* Set Window0 as active window */
DL_WWDT_setActiveWindow(WATCHDOG_TIMER, DL_WWDT_WINDOW0);
DL_WWDT_initWatchdogMode(WATCHDOG_TIMER, Clk_Div,Tmr_Per, DL_WWDT_RUN_IN_SLEEP, DL_WWDT_WINDOW_PERIOD_0, DL_WWDT_WINDOW_PERIOD_0); // DL_WWDT_WINDOW_PERIOD_0 is for selecting the closed percentage of the watchdog
if(DL_WWDT_isPowerEnabled(WATCHDOG_TIMER))
{
while ((DL_SYSCTL_getClockStatus() & (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD))!= (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD));
}
else
{
return IVEC_MCAL_STATUS_TIMEOUT;
}
b_WDInitFlag = true;
return IVEC_MCAL_STATUS_SUCCESS;
}
else
{
return IVEC_MCAL_STATUS_INIT_FAIL;
}
}
IVEC_McalStatus_e xMCAL_WatchdogDeInit(void)
{
assert(WATCHDOG_TIMER != NULL);
if(b_WDInitFlag == true)
{
DL_WWDT_disablePower(WATCHDOG_TIMER);
b_WDInitFlag = false;
return IVEC_MCAL_STATUS_SUCCESS;
}
else
{
return IVEC_MCAL_STATUS_INIT_FAIL;
}
}
IVEC_McalStatus_e xMCAL_WatchdogReset(void)
{
if(DL_WWDT_isRunning(WATCHDOG_TIMER) == true)
{
DL_WWDT_restart(WATCHDOG_TIMER);
return IVEC_MCAL_STATUS_SUCCESS;
}
else
{
return IVEC_MCAL_STATUS_ERROR;
}
}

View File

@ -162,6 +162,13 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
DL_GPIO_initPeripheralInputFunction(
GPIO_MCAN0_IOMUX_CAN_RX, GPIO_MCAN0_IOMUX_CAN_RX_FUNC);
DL_GPIO_initDigitalInput(GPIO_GRP_0_soc_IOMUX);
// DL_GPIO_initDigitalInputFeatures(GPIO_GRP_0_soc_IOMUX,
// DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_DOWN,
// DL_GPIO_INVERSION_DISABLE, DL_GPIO_WAKEUP_DISABLE);
// DL_GPIO_initDigitalOutput(IOMUX_PINCM31);
//
// DL_GPIO_clearPins(GPIOB, tick_PIN_0_PIN);

View File

@ -92,6 +92,10 @@ extern "C" {
#define GPIO_CAPTURE_0_C0_IOMUX (IOMUX_PINCM21)
#define GPIO_CAPTURE_0_C0_IOMUX_FUNC IOMUX_PINCM21_PF_TIMA1_CCP0
/* Defines for soc: GPIOB.17 with pinCMx 43 on package pin 36 */
#define GPIO_GRP_0_soc_PIN (DL_GPIO_PIN_17)
#define GPIO_GRP_0_soc_IOMUX (IOMUX_PINCM43)

View File

@ -286,7 +286,7 @@ IVEC_EcuCommonErr_e xECU_CANGetStatus(IVEC_EcuCANHandle_s *xCanHandle)
IVEC_EcuCommonErr_e l_eFuncStatus = commonECU_SUCCESS;
if (xCanHandle->__xCanHandle.__u8Init == 0)
{
l_eFuncStatus = commonMCAL_FAIL;
l_eFuncStatus = commonECU_FAIL;
return l_eFuncStatus;
}
int8_t l_i8ErrorString[32] = {0};
@ -295,7 +295,8 @@ IVEC_EcuCommonErr_e xECU_CANGetStatus(IVEC_EcuCANHandle_s *xCanHandle)
if (xMCAL_MCANGetErrorStatus(&xCanHandle->__xCanHandle, l_i8ErrorString) == commonMCAL_FAIL)
{
/* Reinitialize CAN if an error is detected */
l_eFuncStatus = xECU_CANReInit(xCanHandle);
//l_eFuncStatus = xECU_CANReInit(xCanHandle);
l_eFuncStatus = commonECU_FAIL;
}
return l_eFuncStatus;
}

View File

@ -55,6 +55,7 @@ typedef enum
IVEC_ECU_UART_PORT1 = 0,
IVEC_ECU_UART_PORT2,
IVEC_ECU_UART_PORT3,
IVEC_ECU_UART_PORT4,
IVEC_ECU_UART_PORT_MAX
} IVEC_ECU_UartPortNumber_e;

View File

@ -34,6 +34,10 @@ static void __prv_EcuCanOverUartMsgCallback(IVEC_McalUartPort_e eUartPort, IVEC_
if (eEventType == IVEC_ECU_UART_EVENT_RX_ARRIVED) {
u8CMPLX_FifoEnqueue((CmplxFifoQueueHandle_s*)&__gprv_xUartResponseQueue[IVEC_ECU_UART_PORT3], pu8Buffer, u32Size);
}
case IVEC_MCAL_UART_PORT_4:
if (eEventType == IVEC_ECU_UART_EVENT_RX_ARRIVED) {
u8CMPLX_FifoEnqueue((CmplxFifoQueueHandle_s*)&__gprv_xUartResponseQueue[IVEC_ECU_UART_PORT4], pu8Buffer, u32Size);
}
break;
default:
break;
@ -116,6 +120,10 @@ IVEC_EcuCommonErr_e xECU_UartInit(IVEC_EcuUartHandle_s* pxUartHandle)
__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber].i32TotalElements = pxUartHandle->u16QbufSize;
__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber].pu8Buffer = pxUartHandle->u8Qbuffer;
break;
case IVEC_ECU_UART_PORT4:
__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber].i32TotalElements = pxUartHandle->u16QbufSize;
__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber].pu8Buffer = pxUartHandle->u8Qbuffer;
break;
default:
__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber].pu8Buffer = NULL;
break;
@ -555,3 +563,9 @@ int32_t iECU_UartInitiateTransmit(IVEC_EcuUartHandle_s* pxUartHandle, uint32_t u
memcpy(&l_u8Buf[ecuUART_PKT_HEADER_u8], pu8Data, u8Len);
return (xECU_UartFormatPacket(pxUartHandle, l_u8Buf, u8Len, u32Id) == ecuUART_PACKET_SUCCESS_u8) ? 0 : -1;
}
uint32_t xECU_data_length(IVEC_EcuUartHandle_s* pxUartHandle)
{
uint32_t length = i32CMPLX_FifoCounts((CmplxFifoQueueHandle_s*)&__gprv_xUartResponseQueue[pxUartHandle->eUartPortNumber]);
return(length);
}

View File

@ -7,6 +7,7 @@
#include "ivec_rte.h"
#include "ivec_cmplx_queue.h"
#include "ivec_cmplx_vFrame.h"
#include "../ivec_ECU/ivec_ecu_uart/inc/ivec_ecu_uart.h"
#include "../ivec_ECU/ivec_ecu_can/inc/ivec_ecu_can.h"
#include "../../Core/Include/ivec_mcal_gpio.h"
@ -18,6 +19,7 @@
// UART Handles
IVEC_EcuUartHandle_s g_xUartHandle = {0};
IVEC_EcuUartHandle_s __gprv_UartCcHandle = {0};
IVEC_EcuCANHandle_s g_xCanHandle = {0};
// Configuration Macros
@ -26,7 +28,7 @@ IVEC_EcuCANHandle_s g_xCanHandle = {0};
#define rteCONFIG_MOTHER_BOARD_u8 3
// UART Configuration
#define rteUART_PIN_SELECTION_u8 rteCONFIG_BASIL_u8
#define rteUART_PIN_SELECTION_u8 rteCONFIG_BASIL_BATTERY_SMART_u8
uint8_t g_pu8UartBuffer[ecuUART_MAX_PACKET_LENGTH_u8] = {0};
volatile uint32_t g_u32CanId = 0x1FFFFFFF;
@ -50,6 +52,18 @@ static uint8_t __gprv_U8Index = 0;
extern ExtU_socTouchDisplay_T socTouchDisplay_U;
extern ExtY_socTouchDisplay_T socTouchDisplay_Y;
#define CAN_UART_BUFFER_MAX_SIZE 300
uint8_t g_prv_u8CANUartDataBuffer[CAN_UART_BUFFER_MAX_SIZE];
uint32_t g_prv_u32CanUartDataAvailable = 0;
// CAN UART Buffer
#define eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32 4096
volatile uint8_t __gprv_u8CcUartDataBuffer[eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32];
uint8_t g_u8SmdReceived = 0;
IVEC_EcuCommonCanFrame_s g_xSmdCanMsg = {0};
int32_t g_u32LastSendTick = 0; // Last time we sent over CAN/UART
/**
* @brief Sets the state of the MCU temperature data pin (SDA) for TM1650.
@ -127,7 +141,7 @@ static uint8_t _prv_RteReadMcuTempPin(void) {
void vRTE_MatlabInit(void)
{
u8MCAL_gpioInit();
tm1650_Init(TM_1650_BRIGHT_8, TM_1650_Segment_8, TM_1650_Normal_Mode, TM_1650_Screen_ON, TM_1650_DIG_3, (void*)&vRTE_SetMcuTempDataPin , (void*)&vRTE_McuSetTempClkPin , &_prv_RteReadMcuTempPin);
tm1650_Init(TM_1650_BRIGHT_6, TM_1650_Segment_8, TM_1650_Normal_Mode, TM_1650_Screen_ON, TM_1650_DIG_3, (void*)&vRTE_SetMcuTempDataPin , (void*)&vRTE_McuSetTempClkPin , &_prv_RteReadMcuTempPin);
tm1650_displaySwitch(TM_1650_Screen_OFF);
vMCAL_delayTicks(500);
tm1650_showDot(TM_1650_DIG_1,false);
@ -135,6 +149,17 @@ void vRTE_MatlabInit(void)
tm1650_showDot(TM_1650_DIG_3,false);
socTouchDisplay_initialize();
}
void vRTE_InitUartCc(void)
{
__gprv_UartCcHandle.u8Qbuffer = __gprv_u8CcUartDataBuffer;
__gprv_UartCcHandle.u16QbufSize = eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32;
__gprv_UartCcHandle.eUartPortNumber = IVEC_ECU_UART_PORT4;
__gprv_UartCcHandle.u32BaudRate = IVEC_ECU_UART_BAUD_230400;
xECU_UartInit(&__gprv_UartCcHandle);
}
/**
* @brief Runs the MATLAB interface for MCU and TM1650 during operation.
*
@ -219,6 +244,7 @@ void vRTE_AppInit(void)
{
#if rteUART_PIN_SELECTION_u8 == 1
vRTE_MatlabInit();
vRTE_InitUartCc();
#endif
vRTE_InitUartCanEcho();
@ -386,6 +412,11 @@ void vRTE_AppRun(void)
{
vRTE_ProcessUartData();
vRTE_ProcessCanData();
#if rteUART_PIN_SELECTION_u8 == 1
vRTE_CcUartRxProcess();
#endif
#if rteUART_PIN_SELECTION_u8 == 3
vRTE_UartNfcProcess();
#endif
@ -446,6 +477,266 @@ void vRTE_CanFilterSaveVal(uint8_t u8Idx, uint32_t u32Filter, bool bl_bIsExtende
// Store filter value
g_xCanHandle.u32FilterValues[g_xCanHandle.i32FilterCount] = u32Filter;
}
//IVEC_EcuCommonCanFrame_s g_xSmdCanMsg = {0}; // Global message buffer
//uint8_t g_u8SmdReceived = 0;
uint32_t g_u32LastSmdTick = 0;
void vCcUartRxToCanTx(IVEC_EcuCommonCanFrame_s* pxCanMsg)
{
if( (pxCanMsg->u32CanId == 0x16) && (pxCanMsg->pucCanData[0] == 'V') && \
(pxCanMsg->pucCanData[1] == 'E') && (pxCanMsg->pucCanData[2] == 'C') && \
(pxCanMsg->pucCanData[3] == 'I') && (pxCanMsg->pucCanData[4]== 'O') && \
(pxCanMsg->pucCanData[5] == 'T'))
{
uint32_t l_u32Id = 0x36; // ID to pass
uint8_t pu8Data[1] = {0x79}; // Data array containing 0x79
uint8_t u8Len = sizeof(pu8Data); // Length of data array
int l_i32RetSize = 0;
uint8_t l_u8UartBuffer[30] = { 0 };
int l_i32Status = -1;
l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)l_u32Id, (uint8_t*)&pu8Data[1], u8Len, l_u8UartBuffer, 30);
l_i32Status = IVEC_ECUUartWrite(&__gprv_UartCcHandle, l_u8UartBuffer, l_i32RetSize);
vMCAL_WDG_Refresh();
vMCAL_WatchdogDisablePower();
vMCAL_softReset();
}
if(pxCanMsg->ucCanDlc > 0 && pxCanMsg->u32CanId == 0x00)
{
uint32_t l_u32Baudrate = 0;
uint8_t l_u8Mode = pxCanMsg->pucCanData[0];//g_pu8UartBuffer[ecuUART_PKT_HEADER_u8];
memcpy(&l_u32Baudrate, &pxCanMsg->pucCanData[1], (uint32_t)pxCanMsg->ucCanDlc);
iECU_UartInitiateTransmit(&g_xUartHandle, 0x01,(uint8_t*)&pxCanMsg->pucCanData[0],0);
if( l_u8Mode == 0 )
{
__gprv_UartCcHandle.u32BaudRate = l_u32Baudrate;
xECU_UartReinit(&__gprv_UartCcHandle);
}
else if( l_u8Mode == 1 )
{
g_xCanHandle.u16Speed = (uint16_t)l_u32Baudrate;
xECU_CANReInit(&g_xCanHandle);
}
else if( l_u8Mode == 2 )
{
if( pxCanMsg->pucCanData[1] != 0 ){//22(20+2) rx filter available send each id in a frame
uint32_t l_U32FilterId = 0;
memcpy(&l_U32FilterId, &pxCanMsg->pucCanData[3], sizeof(uint32_t));
bool l_bIsExtended = 0;
l_bIsExtended = (l_U32FilterId > 0x7FF); // Standard IDs are <= 0x7FF
vRTE_CanFilterSaveVal((pxCanMsg->pucCanData[1] - 1), l_U32FilterId, l_bIsExtended);
if( pxCanMsg->pucCanData[2])//All filter received. Trigger Filter Settings
{
xECU_CANReInit(&g_xCanHandle);
}
else
return;
}
else{
xECU_CANReInit(&g_xCanHandle);
}
}
else if ( l_u8Mode == 3 )
{
if( (pxCanMsg->pucCanData[1] < 1) || (pxCanMsg->pucCanData[1] > 8) )//0-7 maximum received pkts
return;
uint32_t l_u32u32MaskId = 0;
memcpy(&l_u32u32MaskId, &pxCanMsg->pucCanData[3], sizeof(uint32_t));
bool l_bIsExtended = 0;
l_bIsExtended = (l_u32u32MaskId > 0x7FF); // Standard IDs are <= 0x7FF
vRTE_CanFilterMaskSaveVal((pxCanMsg->pucCanData[1] - 1), l_u32u32MaskId, l_bIsExtended);
}
else if (l_u8Mode == 100)
{
g_u32CanId = l_u32Baudrate;
return;
}
vMCAL_delayTicks(100);
iECU_UartInitiateTransmit(&g_xUartHandle, 0x01,(uint8_t*)&pxCanMsg->pucCanData[0],0);
}
if(pxCanMsg->u32CanId != 0x00)
{
if (pxCanMsg->u32CanId == 0x1cea6969)
{
iECU_UartInitiateTransmit(&g_xUartHandle, (uint32_t)pxCanMsg->u32CanId,(uint8_t*)&pxCanMsg->pucCanData[0],(uint8_t)pxCanMsg->ucCanDlc);
}
else
{
if(pxCanMsg->u32CanId == 0xabcdef)
{
pxCanMsg->u32CanId = g_u32CanId;
}
if (pxCanMsg->u32CanId == 0x696972)
{
g_xSmdCanMsg = *pxCanMsg; // Store the latest data
g_u8SmdReceived = 1; // Flag to indicate data is fresh
// Add touch info
uint32_t l_u32TouchDetect = DL_GPIO_readPins(GPIOB, GPIO_GRP_0_soc_PIN);
if (g_xSmdCanMsg.pucCanData[0] == 0)
{
g_xSmdCanMsg.pucCanData[0] = 0x2;
}
g_xSmdCanMsg.pucCanData[1] = (uint8_t)((l_u32TouchDetect >> 17) & 0x1);
}
// if(pxCanMsg->u32CanId == 0x696972)
// {
// g_u8SmdReceived = 1;
// IVEC_EcuCommonCanFrame_s xMyCanMsg;
//
// g_u32LastSmdTick = i32MCAL_getTicks(); // Store time of last valid message
//
//// // Copy entire struct in one line
//// g_xSmdCanMsg = *pxCanMsg;
//
// uint32_t l_u32TouchDetect = DL_GPIO_readPins(GPIOB, GPIO_GRP_0_soc_PIN);
// if(pxCanMsg->pucCanData[0] == 0)
// {
// pxCanMsg->pucCanData[0] = 0x2;
// }
//
// pxCanMsg->pucCanData[1] = (uint8_t)((l_u32TouchDetect >> 17) & 0x1);
//
// // Send immediately
// iECU_UartInitiateTransmit(&g_xUartHandle, (uint32_t)pxCanMsg->u32CanId,(uint8_t*)&pxCanMsg->pucCanData[0],(uint8_t)pxCanMsg->ucCanDlc);
// }
if(pxCanMsg->u32CanId != 0x696972)
xECU_WriteDataOverCAN(&g_xCanHandle, &pxCanMsg->pucCanData[0], pxCanMsg->u32CanId, pxCanMsg->ucCanDlc, 0);
}
}
}
void vRTE_CcUartRxProcess(void)
{
static int __prv_i32BfrIdx = 0;
g_prv_u32CanUartDataAvailable = xECU_data_length(&__gprv_UartCcHandle);
//
// uint32_t u32CurrentTick = i32MCAL_getTicks();
//
// // If no message in last 5 sec
// if ((u32CurrentTick - g_u32LastSmdTick) >= 5000)
// {
// uint32_t l_u32TouchDetect = DL_GPIO_readPins(GPIOB, GPIO_GRP_0_soc_PIN);
//
// IVEC_EcuCommonCanFrame_s g_xSmdCanMsg = {0};
// g_xSmdCanMsg.u32CanId = 0x696972;
// g_xSmdCanMsg.ucCanDlc = 8;
// g_xSmdCanMsg.pucCanData[0] = 0;
// g_xSmdCanMsg.pucCanData[1] = (uint8_t)((l_u32TouchDetect >> 17) & 0x1);
// iECU_UartInitiateTransmit(&g_xUartHandle, (uint32_t)g_xSmdCanMsg.u32CanId,(uint8_t*)&g_xSmdCanMsg.pucCanData[0],(uint8_t)g_xSmdCanMsg.ucCanDlc);
// xECU_WriteDataOverCAN(&g_xCanHandle, &g_xSmdCanMsg.pucCanData[0], g_xSmdCanMsg.u32CanId, g_xSmdCanMsg.ucCanDlc, 0);
//
// g_u32LastSmdTick = u32CurrentTick;
// }
uint32_t u32CurrentTick = i32MCAL_getTicks();
if ((u32CurrentTick - g_u32LastSendTick) >= 5000)
{
IVEC_EcuCommonCanFrame_s xMsgToSend = {0};
if (g_u8SmdReceived == 1)
{
xMsgToSend = g_xSmdCanMsg;
g_u8SmdReceived = 0; // Reset flag after sending
}
else
{
xMsgToSend.u32CanId = 0x696972;
xMsgToSend.ucCanDlc = 8;
xMsgToSend.pucCanData[0] = 0;
uint32_t l_u32TouchDetect = DL_GPIO_readPins(GPIOB, GPIO_GRP_0_soc_PIN);
xMsgToSend.pucCanData[1] = (uint8_t)((l_u32TouchDetect >> 17) & 0x1);
}
iECU_UartInitiateTransmit(&g_xUartHandle, xMsgToSend.u32CanId, xMsgToSend.pucCanData, xMsgToSend.ucCanDlc);
xECU_WriteDataOverCAN(&g_xCanHandle, xMsgToSend.pucCanData, xMsgToSend.u32CanId, xMsgToSend.ucCanDlc, 0);
g_u32LastSendTick = u32CurrentTick; // Update last send time
}
int l_u32AvailableData = g_prv_u32CanUartDataAvailable > (CAN_UART_BUFFER_MAX_SIZE - __prv_i32BfrIdx) ? (CAN_UART_BUFFER_MAX_SIZE - __prv_i32BfrIdx) : g_prv_u32CanUartDataAvailable;
if ((l_u32AvailableData <= 10 && g_prv_u32CanUartDataAvailable > 10)|| (__prv_i32BfrIdx+l_u32AvailableData)>=CAN_UART_BUFFER_MAX_SIZE)
{
// printf("Data Overflow detected:%d-%d\n", g_prv_u32CanUartDataAvailable, __prv_i32BfrIdx);
__prv_i32BfrIdx = 0;
l_u32AvailableData = 0;
}
if (1)
{
//record uart recv
uint8_t l_u8Goon=0;
if (l_u32AvailableData && xECU_UartGetData(&__gprv_UartCcHandle, &g_prv_u8CANUartDataBuffer[__prv_i32BfrIdx], l_u32AvailableData, 3000) == commonECU_SUCCESS)
l_u8Goon=1;
if(l_u32AvailableData<=0 && __prv_i32BfrIdx>0)
l_u8Goon=1;
if(l_u8Goon)
{
// g_prv_u32CanUartDataAvailable -= l_u32AvailableData;
__prv_i32BfrIdx += l_u32AvailableData;
uint8_t* l_ucStart = g_prv_u8CANUartDataBuffer;
uint8_t* l_ucFrameStart = NULL;
uint8_t* l_ucFrameEnd = NULL;
IVEC_ECU_LOG(LOG_STRING, "New Data:%d-%d", l_u32AvailableData, __prv_i32BfrIdx);
while (1)
{
// IVEC_ECU_LOG(LOG_STRING, "Current Idx:%d", __prv_i32BfrIdx);
int l_i32Len = __prv_i32BfrIdx;
if (u16CMPLX_vFrameFind(l_ucStart, l_i32Len, &l_ucFrameStart, &l_ucFrameEnd) == 2)//cksum error
{
// xCANhandle->xMyMetrics.u32CANCommFrameErrors++;
}
if (l_ucFrameStart == NULL)
{
__prv_i32BfrIdx = 0;
break;
}
if (l_ucFrameEnd == NULL)
{
if (memmove(g_prv_u8CANUartDataBuffer, l_ucFrameStart, __prv_i32BfrIdx) != g_prv_u8CANUartDataBuffer)
{
__prv_i32BfrIdx = 0;
IVEC_ECU_LOG(LOG_STRING, "Never Print");
}
__prv_i32BfrIdx-=(l_ucFrameStart-g_prv_u8CANUartDataBuffer);
if(__prv_i32BfrIdx<0)
__prv_i32BfrIdx=0;
break;
}
IVEC_EcuCommonCanFrame_s l_xCanFrame = { 0 };
uint8_t l_u8UartFrameLen = l_ucFrameEnd - l_ucFrameStart + 1;
int l_CanDlc=0;
u16CMPLX_vFrameDecode(l_ucFrameStart, l_u8UartFrameLen, &l_xCanFrame.pucCanData,8,&l_CanDlc,&l_xCanFrame.u32CanId);
l_xCanFrame.ucCanDlc = l_CanDlc;
vCcUartRxToCanTx(&l_xCanFrame);
memset(l_ucFrameStart, 0, l_u8UartFrameLen);
l_ucStart = ++l_ucFrameEnd;
__prv_i32BfrIdx -= l_u8UartFrameLen;
if (__prv_i32BfrIdx < 0)
__prv_i32BfrIdx = 0;
}
// printf( "Out Current Idx:%d\n", __prv_i32BfrIdx);
}
}
}
/**
* @brief Processes UART data to manage CAN and UART communication.
*
@ -478,7 +769,10 @@ void vRTE_ProcessUartData(void)
uint8_t u8Len = sizeof(pu8Data); // Length of data array
iECU_UartInitiateTransmit(&g_xUartHandle, u32Id, pu8Data, u8Len);
iECU_UartInitiateTransmit(&g_xUartHandle, 0x8, NULL, 0);
vMCAL_WDG_Refresh();
vMCAL_WatchdogDisablePower();
vMCAL_softReset();
}
if(l_eRetCode > 0 && l_u32Id == 0x00)
@ -542,10 +836,19 @@ void vRTE_ProcessUartData(void)
if ( l_eRetCode >= 0 && (l_u32Id > 0x00 && l_u32Id < 0xffffffff) )
{
//_prvU8Buffer = (_prvU8Buffer + 1) % 2;
if(l_u32Id == 0x1cecff69)
{
int l_i32RetSize = 0;
uint8_t l_u8UartBuffer[30] = { 0 };
int l_i32Status = -1;
l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)l_u32Id, (uint8_t*)&g_pu8UartBuffer[ecuUART_PKT_HEADER_u8], (int32_t)l_eRetCode, l_u8UartBuffer, 30);
l_i32Status = IVEC_ECUUartWrite(&__gprv_UartCcHandle, l_u8UartBuffer, l_i32RetSize);
}
xECU_WriteDataOverCAN(&g_xCanHandle, &g_pu8UartBuffer[ecuUART_PKT_HEADER_u8], l_u32Id, l_eRetCode, 0);
}
}
vMCAL_WDG_Refresh();
}
}
}
/**
* @brief Processes CAN data and handles CAN communication.
@ -571,9 +874,26 @@ void vRTE_ProcessCanData(void)
(l_xCanBuff.u8Data[3] == 'I') && (l_xCanBuff.u8Data[4] == 'O') && \
(l_xCanBuff.u8Data[5] == 'T'))
{
vMCAL_WatchdogDisablePower();
vMCAL_softReset();
}
#if rteUART_PIN_SELECTION_u8 == 1
int l_i32RetSize = 0;
uint8_t l_u8UartBuffer[30] = { 0 };
int l_i32Status = -1;
l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)l_xCanBuff.u32UlId, (uint8_t*)&l_xCanBuff.u8Data[0], (int32_t)l_xCanBuff.u8Length, l_u8UartBuffer, 30);
if(l_xCanBuff.u32UlId == g_u32CanId)
{
l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)0xabcdef, (uint8_t*)&l_xCanBuff.u8Data[0], (int32_t)l_xCanBuff.u8Length, l_u8UartBuffer, 30);
}
l_i32Status = IVEC_ECUUartWrite(&__gprv_UartCcHandle, l_u8UartBuffer, l_i32RetSize);
#endif
iECU_UartInitiateTransmit(&g_xUartHandle, (uint32_t)l_xCanBuff.u32UlId, (uint8_t*)&l_xCanBuff.u8Data[0], (uint8_t)l_xCanBuff.u8Length);
socTouchDisplay_U.Input[__gprv_U8Index].ID = l_xCanBuff.u32UlId;
socTouchDisplay_U.Input[__gprv_U8Index].Length = l_xCanBuff.u8Length;
memcpy(&socTouchDisplay_U.Input[__gprv_U8Index].Data[0], &l_xCanBuff.u8Data[0], 8);
@ -584,5 +904,5 @@ void vRTE_ProcessCanData(void)
break;
}
xECU_CANGetStatus(&g_xCanHandle);
vMCAL_WDG_Refresh();
}

View File

@ -0,0 +1,21 @@
#ifndef IVEC_RTE_INC_IVEC_RTE_H_
#define IVEC_RTE_INC_IVEC_RTE_H_
#include "ivec_bsw_common.h"
#include "stdint.h"
#include "stdio.h"
#define IVEC_VFRAME_MIN_LEN 14
#define IVEC_VFRAME_DLC 2
#define IVEC_VFRAME_DLC_LEN 2
#define IVEC_VFRAME_ID 4
#define IVEC_VFRAME_ID_LEN 4
#define IVEC_VFRAME_DATA_START 12
#define IVEC_VFRAME_SYNC_CHAR_0 0xb5
#define IVEC_VFRAME_SYNC_CHAR_1 0x63
int u16CMPLX_vFrameFind(uint8_t* pcBuffer, int i32Len, uint8_t** pcFrameStartPt, uint8_t** pcFrameEndPt);
uint16_t u16CMPLX_vFrameDecode( const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameData, int u8FrameBufLen ,int *pi32FrameDlc,uint32_t *pu32Id);
uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameBuffer, int pu8FrameBufferLen);
#endif /* IVEC_RTE_INC_IVEC_RTE_H_ */

View File

@ -0,0 +1,112 @@
#include "ivec_cmplx_vFrame.h"
#define LOG_STRING "ivec-cmplx-vframe"
static void __prv_CalculateChecksum(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;
}
uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t *pInData, int i32InLen, uint8_t *pu8FrameBuffer, int pu8FrameBufferLen)
{
if (i32InLen > (pu8FrameBufferLen - IVEC_VFRAME_MIN_LEN) || pu8FrameBuffer == NULL)
return 0;
uint16_t u16Dlc = i32InLen;
pu8FrameBuffer[0] = IVEC_VFRAME_SYNC_CHAR_0;
pu8FrameBuffer[1] = IVEC_VFRAME_SYNC_CHAR_1;
memcpy(&pu8FrameBuffer[IVEC_VFRAME_ID], &u32Id, IVEC_VFRAME_ID_LEN);
if (pInData)
{
memcpy(&pu8FrameBuffer[IVEC_VFRAME_DATA_START], pInData, u16Dlc);
}
else
{
u16Dlc = 0;
}
memcpy(&pu8FrameBuffer[IVEC_VFRAME_DLC], &u16Dlc, IVEC_VFRAME_DLC_LEN);
__prv_CalculateChecksum(pu8FrameBuffer, u16Dlc + IVEC_VFRAME_MIN_LEN, &pu8FrameBuffer[IVEC_VFRAME_MIN_LEN + u16Dlc - 2]);
return u16Dlc + IVEC_VFRAME_MIN_LEN;
}
uint16_t u16CMPLX_vFrameDecode(const uint8_t *pInData, int i32InLen, uint8_t *pu8FrameData, int i32FrameBufLen, int *pi32FrameDlc, uint32_t *pu32Id)
{
if (pInData == NULL || i32InLen < IVEC_VFRAME_MIN_LEN)
return 0;
if (pu32Id)
memcpy(pu32Id, &pInData[IVEC_VFRAME_ID], IVEC_VFRAME_ID_LEN);
if (pu8FrameData && pi32FrameDlc && i32FrameBufLen > 0)
{
memcpy(pi32FrameDlc, &pInData[IVEC_VFRAME_DLC], IVEC_VFRAME_DLC_LEN);
if (*pi32FrameDlc <= i32FrameBufLen)
memcpy(pu8FrameData, &pInData[IVEC_VFRAME_DATA_START], *pi32FrameDlc);
}
return 1;
}
int u16CMPLX_vFrameFind(uint8_t *pcBuffer, int i32Len, uint8_t **pcFrameStartPt, uint8_t **pcFrameEndPt)
{
IVEC_BSW_LOG(LOG_STRING, "Scanning Frame : 0x%x-%d", pcBuffer, i32Len);
uint8_t *l_pcFrameStartPt = NULL;
uint8_t *l_pcFrameEndPt = NULL;
int l_i32Ret = 0;
if (pcBuffer == NULL || i32Len <= 0)
goto exit;
int i32Ijk = 0;
for (; i32Ijk < i32Len; i32Ijk++)
{
if (pcBuffer[i32Ijk] == IVEC_VFRAME_SYNC_CHAR_0)
{
l_pcFrameStartPt = &pcBuffer[i32Ijk];
// i32Ijk++;
break;
}
}
if (l_pcFrameStartPt == NULL)
goto exit;
int i32RemainingLen = i32Len - i32Ijk;
IVEC_BSW_LOG(LOG_STRING, "Remaining len: %d", i32RemainingLen);
if ((i32RemainingLen > 1) && (pcBuffer[i32Ijk+1] != IVEC_VFRAME_SYNC_CHAR_1))
{
l_pcFrameStartPt = NULL;
}
if (l_pcFrameStartPt == NULL || (i32RemainingLen < IVEC_VFRAME_MIN_LEN))
goto exit;
uint16_t u16Dlc = 0;
memcpy(&u16Dlc, l_pcFrameStartPt + IVEC_VFRAME_DLC, IVEC_VFRAME_DLC_LEN);
IVEC_BSW_LOG(LOG_STRING, "DLC Found: %d", u16Dlc);
if (i32RemainingLen < (u16Dlc + IVEC_VFRAME_MIN_LEN))
goto exit;
l_pcFrameEndPt = l_pcFrameStartPt + u16Dlc + IVEC_VFRAME_MIN_LEN - 1;
uint8_t ucCheckSum[2];
__prv_CalculateChecksum(l_pcFrameStartPt, u16Dlc + IVEC_VFRAME_MIN_LEN, ucCheckSum);
IVEC_BSW_LOG(LOG_STRING, "Checksum: %d-%d-%d-%d", *(l_pcFrameEndPt - 1), *(l_pcFrameEndPt), ucCheckSum[0], ucCheckSum[1]);
if (ucCheckSum[0] == *(l_pcFrameEndPt - 1) && ucCheckSum[1] == *(l_pcFrameEndPt))
{
goto exit;
}
l_pcFrameStartPt = l_pcFrameEndPt;
l_pcFrameEndPt = NULL;
l_i32Ret = 2; // cksum failure
exit:
*pcFrameStartPt = l_pcFrameStartPt;
*pcFrameEndPt = l_pcFrameEndPt;
IVEC_BSW_LOG(LOG_STRING, "Frame :[0x%x-0x%x|0x%x-0x%x]", l_pcFrameStartPt, l_pcFrameEndPt, *pcFrameStartPt, *pcFrameEndPt);
if (l_pcFrameStartPt && l_pcFrameEndPt)
return 1;
return l_i32Ret;
}

2
main.c
View File

@ -31,6 +31,7 @@ int main(void)
{
__enable_irq();
volatile DL_SYSCTL_RESET_CAUSE l_xResetCause = DL_SYSCTL_getResetCause();
vMCAL_WDG_Refresh();
vMCAL_mcuInit();
xMCAL_sysctlInit(IVEC_HFXT,IVEC_STANDBY0);
xMCAL_systickInit(IVEC_SYSTICK_PERIOD_1MS);
@ -43,6 +44,7 @@ int main(void)
while(1)
{
vRTE_AppRun();
vMCAL_WDG_Refresh();
}
}

View File

@ -7,7 +7,7 @@ _Min_Stack_Size = 0x000012E8; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00020000
FLASH (RX) : ORIGIN = 0x00008000, LENGTH = 0x00018000
SRAM (RWX) : ORIGIN = 0x20200000, LENGTH = 0x00008000
BCR_CONFIG (R) : ORIGIN = 0x41C00000, LENGTH = 0x00000080
BSL_CONFIG (R) : ORIGIN = 0x41C00100, LENGTH = 0x00000080
@ -33,7 +33,7 @@ SECTIONS
{
/* section for the interrupt vector area */
PROVIDE (_intvecs_base_address =
DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00000000);
DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00008000);
.intvecs (_intvecs_base_address) : AT (_intvecs_base_address) {
KEEP (*(.intvecs))

13
package-lock.json generated Normal file
View File

@ -0,0 +1,13 @@
{
"name": "cantouart_ti",
"version": "1.1.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "cantouart_ti",
"version": "1.1.1",
"license": "ISC"
}
}
}

18
package.json Normal file
View File

@ -0,0 +1,18 @@
{
"name": "cantouart_ti",
"version": "1.1.1",
"description": "TI_MCU_firmware",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://gitea.vecmocon.com/Vecmocon_Technologies/cantouart_ti.git"
},
"keywords": [
"TI_MCU_FRIMWARE_VIM"
],
"author": "VIM",
"license": "ISC"
}

View File

@ -231,6 +231,7 @@ void Default_Handler(void)
// // You can use this to trace the fault location in your code
/* Enter an infinite loop. */
DL_SYSCTL_resetDevice(DL_SYSCTL_RESET_CPU);
while(1)
{
}

View File

@ -1,23 +1,173 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configurations XML_version="1.2" id="configurations_0">
<configuration XML_version="1.2" id="Texas Instruments XDS110 USB Debug Probe_0">
<instance XML_version="1.2" desc="Texas Instruments XDS110 USB Debug Probe_0" href="connections/TIXDS110_Connection.xml" id="Texas Instruments XDS110 USB Debug Probe_0" xml="TIXDS110_Connection.xml" xmlpath="connections"/>
<connection XML_version="1.2" id="Texas Instruments XDS110 USB Debug Probe_0">
<instance XML_version="1.2" href="drivers/tixds510cs_dap.xml" id="drivers" xml="tixds510cs_dap.xml" xmlpath="drivers"/>
<instance XML_version="1.2" href="drivers/tixds510cortexM0.xml" id="drivers" xml="tixds510cortexM0.xml" xmlpath="drivers"/>
<instance XML_version="1.2" href="drivers/tixds510sec_ap.xml" id="drivers" xml="tixds510sec_ap.xml" xmlpath="drivers"/>
<property Type="choicelist" Value="1" id="The JTAG TCLK Frequency (MHz)">
<choice Name="Fixed with user specified value" value="SPECIFIC">
<property Type="stringfield" Value="1MHz" id="-- Enter a value from 100.0kHz to 2.5MHz"/>
</choice>
</property>
<property Type="choicelist" Value="2" id="SWD Mode Settings">
<choice Name="SWD Mode - Aux COM port is target TDO pin" value="nothing"/>
</property>
<property Type="choicelist" Value="1" id="Debug Probe Selection">
<choice Name="Select by serial number" value="0">
<property Type="stringfield" Value="LS4103EZ" id="-- Enter the serial number"/>
</choice>
</property>
<platform XML_version="1.2" id="platform_0">
<instance XML_version="1.2" desc="MSPM0G3507_0" href="devices/MSPM0G3507.xml" id="MSPM0G3507_0" xml="MSPM0G3507.xml" xmlpath="devices"/>
</platform>
</connection>
</configuration>
</configurations>

View File

@ -158,11 +158,15 @@ void vMCAL_delayTicks(int32_t i32DelayMs)
*
* Calls the necessary functions to initialize power and GPIO configurations for the MCU.
*/
void vMCAL_mcuInit(void)
{
SYSCFG_DL_initPower();
vMCAL_WatchdogEnablePower();
// if watchDog is not initilized previoulsy in bootloader code then only initilize watchdog with 4sec timer
if(bMCAL_IsWatchdogRunning()==false)
xMCAL_WatchdogInit(MCAL_WDT_4_SEC_TIMER); // Timer Inputs can be : 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 in seconds
SYSCFG_DL_GPIO_init();
}
/**
* @brief Delays execution for a specified number of microseconds.
@ -211,3 +215,23 @@ void vMCAL_softReset(void)
{
DL_SYSCTL_resetDevice(DL_SYSCTL_RESET_CPU);
}
void vMCAL_WDG_Refresh(void)
{
xMCAL_WatchdogReset();
}
void vMCAL_WatchdogDisablePower(void)
{
DL_WWDT_disablePower(WATCHDOG_TIMER);
}
void vMCAL_WatchdogEnablePower(void)
{
DL_WWDT_enablePower(WATCHDOG_TIMER);
}
bool bMCAL_IsWatchdogRunning(void)
{
return DL_WWDT_isRunning(WATCHDOG_TIMER);
}

View File

@ -12,6 +12,26 @@
#include <assert.h>
#include "ti_msp_dl_config.h"
#define WATCHDOG_TIMER WWDT1
typedef enum
{
MCAL_WDT_1_SEC_TIMER = 1,
MCAL_WDT_2_SEC_TIMER,
MCAL_WDT_3_SEC_TIMER,
MCAL_WDT_4_SEC_TIMER,
MCAL_WDT_5_SEC_TIMER,
MCAL_WDT_6_SEC_TIMER,
MCAL_WDT_7_SEC_TIMER,
MCAL_WDT_8_SEC_TIMER,
MCAL_WDT_16_SEC_TIMER = 16,
MCAL_WDT_24_SEC_TIMER = 24,
MCAL_WDT_32_SEC_TIMER = 32,
MCAL_WDT_40_SEC_TIMER = 40,
MCAL_WDT_48_SEC_TIMER = 48,
MCAL_WDT_56_SEC_TIMER = 56,
MCAL_WDT_64_SEC_TIMER = 64
}MCAL_WWDT_TIMER;
/* Generic Status Codes */
typedef enum
{
@ -86,5 +106,9 @@ void vMCAL_delayTicks(int32_t i32DelayMs);
void vMCAL_softReset(void);
void vMCAL_delayUs(uint32_t u32Us);
IVEC_McalStatus_e xMCAL_vrefInit(void);
void vMCAL_WDG_Refresh(void);
void vMCAL_WatchdogDisablePower(void);
void vMCAL_WatchdogEnablePower(void);
bool bMCAL_IsWatchdogRunning(void);
#endif /* UTILS_IVEC_UTILS_H_ */