/** * @copyright 2015 Indie Semiconductor. * * This file is proprietary to Indie Semiconductor. * All rights reserved. Reproduction or distribution, in whole * or in part, is forbidden except by express written permission * of Indie Semiconductor. * * @file systemInit.c * @Author: Jack.Pan * @E-mail:jack.pan@indiemicro.com * @Date: 2020/09/10 */ #include #include #include #include #include #include "PINdef.h" void gpios_init(void); void pmu_init(void); void gpios_init(void) { GPIO_Init(IO_KEY3,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_KEY4,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_KEY5,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_KEY6,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_KEY7,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_KEY8,GPIO_DIR_INPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED1,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED2,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED3,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED4,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED5,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); GPIO_Init(IO_LED6,GPIO_DIR_OUTPUT,GPIO_PULL_NONE); } void pmu_init(void) { SYSCTRLA_SFRS->PMU_ACCESS_KEY.PMU_ACCESS_KEY = 0x0A; /* Init set BOR voltage level for cpu low voltage safety*/ PMU_BORInit((Bor1V5Thres_t)HWCFG_Get1P5VBOR_Code(), (Bor3V3Thres_t)HWCFG_Get3P3VBOR_Code()); /* Disable wake up timer */ PMU_WakeTimerInit(WAKEUP_TIMEER_DISABLE, WAKEUP_TIMEER_INTERVAL_32768ms); } void SYS_Init(void) { /* Enable trim revise access enable*/ HWCFG_TrimAccessUnlock(); CRGA_SFRS->MODULERSTREQ = 0xFFU; /* Init system clock */ Clock_SystemMainClockInit(SYS_MAIN_CLOCK_DIV); pmu_init(); /* Init global timer engine for driving soft timer */ SysTick_Init(SOFT_TIMER_INTERVAL *1000U * MAIN_CPU_CLOCK, SoftTimer_ExpireCallback); #if WATCH_DOG_EN == 1U WDTA_Enable(WDTA_INTERVAL_18432MS); /* 8s */ #endif /* Init gpios settings */ gpios_init(); /*HWCFG_TrimAccessLockUntilReset();*/ /* tasks init must be called before use. */ TM_PostTask(TASK_ID_SOFT_TIMER); TM_PostTask(TASK_ID_SAFETY_MONITOR); TM_PostTask(TASK_ID_MOTOR); TM_PostTask(TASK_ID_LINS); TM_PostTask(TASK_ID_PDS); TM_PostTask(TASK_ID_ADC_MEASURE); TM_PostTask(TASK_ID_APPL); }