K86/cva_asw_m0118/src/hwctrl.c

107 lines
3.2 KiB
C
Raw Normal View History

2025-02-03 20:43:43 +08:00
/*******************************************************************************
* the includes
******************************************************************************/
#include "hwctrl.h"
#include "canuser.h"
#include "TLE94x1.h"
/*******************************************************************************
* the defines
******************************************************************************/
/*******************************************************************************
* the typedefs
******************************************************************************/
/*******************************************************************************
* the globals
******************************************************************************/
extern McuType mcu;
uint32_t gCpuClockFrequency = 0;
/*******************************************************************************
* the const
******************************************************************************/
/*******************************************************************************
* the functions
******************************************************************************/
static void hw_clock_init(void);
void hw_init(void)
{
/* Initialize all MCU drivers: flash drv included */
Mcu_Init(&mcu);
WdgDrv_Disable(&mcu.wdgDrv);
//初始化时钟
hw_clock_init();
SBC_SPI_INIT();
/* get CAN controller default configuration */
FlexCanBoot_Init();
SBC_Init();
}
static void hw_clock_init(void)
{
/* Setup the clock */
ClockDrv_ModuleClkConfigType clockConfig;
/* Setup the Pll div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PLL_DIV, &clockConfig);
/* Enable the clock for all port peripheral */
clockConfig.gating = true;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTA, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTB, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTC, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTD, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTE, &clockConfig);
/* Setup the Pll div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PLL_DIV, &clockConfig);
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL;
clockConfig.div = 2;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PLL_DIV, &clockConfig);
/* Setup the SPI clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL_DIV;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_SPI0, &clockConfig);
uint32_t tTcr = SpiReg_GetTcr((const SpiRegType *)&mcu.spiDrv0.reg);
SpiDrv_SetPrescaler(&tTcr,0x02);
/* Set system tick clock, 1ms event */
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_SYS, &gCpuClockFrequency);
SysTick_Config(gCpuClockFrequency / 1000u);
IrqDrv_EnableIrq(SysTick_IRQn);
}