chg-stn-motherboard-ti-mcu/utils/utils.c

267 lines
8.7 KiB
C

/*utils.c
* @Created on: 22-Jan-2024
* @Author: Vecmocon Technology
*/
#include <utils/utils.h>
#include "../Generated Codes/ti_msp_config.h"
volatile uint32_t systic_Count;
volatile uint32_t systic_init_flag =0;
static volatile uint32_t g_u32VrefInitFalg = 0;
static const DL_VREF_Config gVREFConfig = {
.vrefEnable = DL_VREF_ENABLE_DISABLE,
.bufConfig = DL_VREF_BUFCONFIG_OUTPUT_2_5V,
.shModeEnable = DL_VREF_SHMODE_DISABLE,
.holdCycleCount = DL_VREF_HOLD_MIN,
.shCycleCount = DL_VREF_SH_MIN,
};
static const DL_VREF_ClockConfig gVREFClockConfig = {
.clockSel = DL_VREF_CLOCK_LFCLK,
.divideRatio = DL_VREF_CLOCK_DIVIDE_1,
};
uint8_t u8SysTick_initFlag=0;
//static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
// .inputFreq = DL_SYSCTL_SYSPLL_INPUT_FREQ_16_32_MHZ,
// .rDivClk2x = 1,
// .rDivClk1 = 1,
// .rDivClk0 = 0,
// .enableCLK2x = DL_SYSCTL_SYSPLL_CLK2X_DISABLE,
// .enableCLK1 = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
// .enableCLK0 = DL_SYSCTL_SYSPLL_CLK0_DISABLE,
// .sysPLLMCLK = DL_SYSCTL_SYSPLL_MCLK_CLK0,
// .sysPLLRef = DL_SYSCTL_SYSPLL_REF_SYSOSC,
// .qDiv = 9,
// .pDiv = DL_SYSCTL_SYSPLL_PDIV_2
//};
//static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
// .inputFreq = DL_SYSCTL_SYSPLL_INPUT_FREQ_8_16_MHZ,
// .rDivClk2x = 1,
// .rDivClk1 = 0,
// .rDivClk0 = 0,
// .enableCLK2x = DL_SYSCTL_SYSPLL_CLK2X_DISABLE,
// .enableCLK1 = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
// .enableCLK0 = DL_SYSCTL_SYSPLL_CLK0_DISABLE,
// .sysPLLMCLK = DL_SYSCTL_SYSPLL_MCLK_CLK0,
// .sysPLLRef = DL_SYSCTL_SYSPLL_REF_SYSOSC,
// .qDiv = 9,
// .pDiv = DL_SYSCTL_SYSPLL_PDIV_4
//};
void mcuInit(void)
{
SYSCFG_DL_initPower();
/* Module-Specific Initializations*/
}
xCoreStatus_t xMCAL_SYSTICK_INIT(xTicks_t tick)
{
// if(u8SysTick_initFlag==1)
// {
// return STATUS_ERROR;
// }
//
// if(tick!=Period_1ms)
// {
// return STATUS_INIT_FAIL;
// }
SysTick_Config(tick);
NVIC_SetPriority(SysTick_IRQn, 0);
u8SysTick_initFlag=1;
return STATUS_SUCCESS;
}
static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
.inputFreq = DL_SYSCTL_SYSPLL_INPUT_FREQ_16_32_MHZ,
.rDivClk2x = 1,
.rDivClk1 = 0,
.rDivClk0 = 0,
.enableCLK2x = DL_SYSCTL_SYSPLL_CLK2X_DISABLE,
.enableCLK1 = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
.enableCLK0 = DL_SYSCTL_SYSPLL_CLK0_ENABLE,
.sysPLLMCLK = DL_SYSCTL_SYSPLL_MCLK_CLK0,
.sysPLLRef = DL_SYSCTL_SYSPLL_REF_HFCLK,
.qDiv = 3,
.pDiv = DL_SYSCTL_SYSPLL_PDIV_1
};
xCoreStatus_t xMCAL_SYSCTL_INIT(uint8_t u8CLK_SRC,uint8_t u8LP_MODE)
{
if((u8LP_MODE!=STANDBY0)&&(u8LP_MODE!=SLEEP0))
return STATUS_INIT_FAIL;
if((u8CLK_SRC!=HFXT)&&(u8CLK_SRC!=SYSOSC))
return STATUS_INIT_FAIL;
if(u8LP_MODE==STANDBY0)
{
//Low Power Mode is configured to be STANDBY0
DL_SYSCTL_setPowerPolicySTANDBY0();
DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);
}
else if(u8LP_MODE==SLEEP0)
{
DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);
}
if(u8CLK_SRC==HFXT)
{
//Low Power Mode is configured to be SLEEP0
// DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
// DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
/* Set default configuration */
// DL_SYSCTL_disableHFXT();
// DL_SYSCTL_disableSYSPLL();
// DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,30, true);
// DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1);
//DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_HFCLK);
//Low Power Mode is configured to be SLEEP0
DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);
DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
/* Set default configuration */
DL_SYSCTL_disableHFXT();
DL_SYSCTL_disableSYSPLL();
DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,10, true);
DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_2);
DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_SYSPLL);
}
else if(u8CLK_SRC==SYSOSC)
{
DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
DL_SYSCTL_disableHFXT();
DL_SYSCTL_disableSYSPLL();
DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,50, true);
DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
DL_SYSCTL_setHFCLKDividerForMFPCLK(DL_SYSCTL_HFCLK_MFPCLK_DIVIDER_6);
DL_SYSCTL_enableMFCLK();
DL_SYSCTL_enableMFPCLK();
DL_SYSCTL_setMFPCLKSource(DL_SYSCTL_MFPCLK_SOURCE_SYSOSC);
}
// if(u8CLK_SRC==HFXT)
// {
//
//
//
// DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
// /* Set default configuration */
// DL_SYSCTL_disableHFXT();
// DL_SYSCTL_disableSYSPLL();
// DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,10, true);
// DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
// DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1);
// DL_SYSCTL_setHFCLKDividerForMFPCLK(DL_SYSCTL_HFCLK_MFPCLK_DIVIDER_6);
// DL_SYSCTL_enableMFCLK();
// DL_SYSCTL_enableMFPCLK();
// DL_SYSCTL_setMFPCLKSource(DL_SYSCTL_MFPCLK_SOURCE_HFCLK);
// DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_HFCLK);
//// DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,0, false);
//// DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1);
//// DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_HFCLK);
//
//
// //DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_32_48_MHZ,0, false);
//// DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_16_32_MHZ,0, false);
//// DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1);
//// DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_HFCLK);
// }
//
// else if(u8CLK_SRC==SYSOSC)
// {
//// DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
//// /* Set default configuration */
//// DL_SYSCTL_disableHFXT();
//// DL_SYSCTL_disableSYSPLL();
//// DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
// DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
// DL_SYSCTL_disableHFXT();
// DL_SYSCTL_disableSYSPLL();
// DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
// DL_SYSCTL_setHFCLKDividerForMFPCLK(DL_SYSCTL_HFCLK_MFPCLK_DIVIDER_6);
// DL_SYSCTL_enableMFCLK();
// DL_SYSCTL_enableMFPCLK();
// DL_SYSCTL_setMFPCLKSource(DL_SYSCTL_MFPCLK_SOURCE_SYSOSC);
// }
return STATUS_SUCCESS;
}
void SysTick_Handler(void)
{
i32TickCnt++;
}
int i32MCAL_getTicks()
{
return i32TickCnt;
}
void vMCAL_DelayTicks(int i32Delay_ms)
{
int curr_tick;
curr_tick=i32MCAL_getTicks();
while((i32MCAL_getTicks()-curr_tick)<i32Delay_ms);
return;
}
void xMCAL_McuInit()
{
SYSCFG_DL_initPower();
// DL_UART_Main_reset(UART1);
// DL_UART_Main_enablePower(UART1);
SYSCFG_DL_GPIO_init();
}
void delay(uint32_t us)
{
delay_cycles((32*us));
}
IVEC_McalStatus_e xMCAL_VrefInit(void)
{
if(g_u32VrefInitFalg == 0)
{
DL_VREF_setClockConfig(VREF, (DL_VREF_ClockConfig *) &gVREFClockConfig);
DL_VREF_configReference(VREF,(DL_VREF_Config *) &gVREFConfig);
delay_cycles(320);
g_u32VrefInitFalg =1;
return IVEC_MCAL_STATUS_SUCCESS;
}
else
return IVEC_MCAL_STATUS_INIT_FAIL;
}
void xMCAL_SoftReset(void)
{
DL_SYSCTL_resetDevice(DL_SYSCTL_RESET_CPU);
}