118 lines
4.4 KiB
C
118 lines
4.4 KiB
C
/**
|
|
* @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 <systemInit.h>
|
|
#include <meta.h>
|
|
#include <linSlaveTask.h>
|
|
#include <linStackTask.h>
|
|
#include <wdt_device.h>
|
|
#include <gpio_device.h>
|
|
#include <pwm_aux_device.h>
|
|
#include <gtimer_device.h>
|
|
#include <motorControlTask.h>
|
|
#include <adc_device.h>
|
|
|
|
void gpios_init(void);
|
|
void pmu_init(void);
|
|
|
|
|
|
|
|
void gpios_init(void)
|
|
{
|
|
#if control_type == Divide_2
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_3, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN); //Downpwm_ACoil Pos side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_2, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_ACoil Pos side down arm: PWM
|
|
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_6, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_ACoil NEG side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_5, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN); //Downpwm_ACoil Neg side down arm: PWM
|
|
|
|
|
|
GPIO_Init(GROUP_GPIOB,GPIO_PORT_2, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_BCoil Pos side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOB,GPIO_PORT_1, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_BCoil Pos side down arm: PWM
|
|
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_4, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN); //Downpwm_BCoil Neg side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOB,GPIO_PORT_0, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_BCoil Neg side down arm: PWM
|
|
|
|
#elif control_type == Divide_6
|
|
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_3, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN); //Downpwm_ACoil Pos side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_6, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_ACoil NEG side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOB,GPIO_PORT_2, GPIO_DIR_OUTPUT,GPIO_PULL_NONE);//Downpwm_BCoil Pos side upper arm: GPIO
|
|
GPIO_Init(GROUP_GPIOA,GPIO_PORT_4, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN); //Downpwm_BCoil Neg side upper arm: GPIO
|
|
|
|
PWMAUX_Init(GROUP_GPIOA,GPIO_PORT_2,PWMAUX_CH5,PWMAUX_BASE_0,PWMAUX_CLK_DIV_1,PWMAUX_Period); //Downpwm_ACoil Pos side down arm: PWMAUX5
|
|
PWMAUX_Init(GROUP_GPIOA,GPIO_PORT_5,PWMAUX_CH0,PWMAUX_BASE_0,PWMAUX_CLK_DIV_1,PWMAUX_Period); //Downpwm_ACoil Neg side down arm: PWMAUX0
|
|
|
|
PWMAUX_Init(GROUP_GPIOB,GPIO_PORT_1,PWMAUX_CH2,PWMAUX_BASE_0,PWMAUX_CLK_DIV_1,PWMAUX_Period); //Downpwm_BCoil Neg side down arm: PWMAUX2
|
|
PWMAUX_Init(GROUP_GPIOB,GPIO_PORT_0,PWMAUX_CH1,PWMAUX_BASE_0,PWMAUX_CLK_DIV_1,PWMAUX_Period); //Downpwm_BCoil Pos side down arm: PWMAUX1
|
|
|
|
// PWM_AUX_SFRS->INVERT = 0X3FU;
|
|
//
|
|
// PWMAUX_SetMatchValue(PWMAUX_CH5, 0, PWMAUX_Period/2);//PWMAUX5:PA2
|
|
// PWMAUX_SetMatchValue(PWMAUX_CH0, 0, PWMAUX_Period/4);//PWMAUX0:PA5
|
|
// PWMAUX_SetMatchValue(PWMAUX_CH2, 0, PWMAUX_Period/6);//PWMAUX2:PB1
|
|
// PWMAUX_SetMatchValue(PWMAUX_CH1, 0, PWMAUX_Period/8);//PWMAUX1:PB0
|
|
|
|
#endif
|
|
|
|
GPIO_Init(GROUP_GPIOB,GPIO_PORT_3, GPIO_DIR_INPUT,GPIO_PULL_NONE);//ADC Postion: Full scale
|
|
GPIO_Init(GROUP_GPIOC,GPIO_PORT_4, GPIO_DIR_INPUT,GPIO_PULL_NONE);//ADC Postion: Resistance partial voltage value
|
|
GPIO_Init(GROUP_GPIOC,GPIO_PORT_3, GPIO_DIR_OUTPUT,GPIO_PULL_DOWN);
|
|
}
|
|
|
|
void pmu_init(void)
|
|
{
|
|
// /* Init set BOR voltage level for cpu low voltage safety*/
|
|
// PMU_BORInit(S_BOR_1P5V, BOR_3V3_THRS_2998mV);
|
|
// /* Disable wake up timer */
|
|
// PMU_WakeTimerInit(WAKEUP_TIMEER_DISABLE, WAKEUP_TIMEER_INTERVAL_32768ms);
|
|
}
|
|
|
|
|
|
void SYS_Init(void)
|
|
{
|
|
/* Enable trim revise access enable*/
|
|
HWCFG_TrimAccessUnlock();
|
|
|
|
TRIMHV_SFRS->PMUTRIM.VDD1V5_LDO_TRIM = 3U;
|
|
|
|
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();*/
|
|
|
|
ADC_GeneralInit();
|
|
|
|
TIMER_Init(TIMER1, HW_TIMER_PERIODIC_MODE, GTIMER_CLK_DIV_1,1000*16, Timer1_INTTest);//Time1_timing
|
|
|
|
/* tasks init must be called before use. */
|
|
TM_PostTask(TASK_ID_SOFT_TIMER);
|
|
TM_PostTask(TASK_ID_SAFETY_MONITOR);
|
|
TM_PostTask(TASK_ID_LINS);
|
|
//TM_PostTask(TASK_ID_PDS);
|
|
TM_PostTask(TASK_ID_ADC_MEASURE);
|
|
TM_PostTask(TASK_ID_APPL);
|
|
}
|
|
|
|
|
|
|