778 lines
28 KiB
C
778 lines
28 KiB
C
|
|
#include "hwctrl.h"
|
|
#include "clock_drv.h"
|
|
#include "SEGGER_RTT.h"
|
|
#include "appTask.h"
|
|
#include "TLE94x1.h"
|
|
#include "string.h"
|
|
#include "irq_drv.h"
|
|
#include "canuser.h"
|
|
#include "LIN_Master.h"
|
|
|
|
/*******************************************************************************
|
|
* the defines
|
|
******************************************************************************/
|
|
|
|
#define PDB_BB_SEL (0u) //000b : PDB0 and PDB1 operates independently.
|
|
#define DMA_CHANNEL0 0
|
|
#define DMA_CHANNEL1 1
|
|
#define PWM_PERIOD_HZ 100
|
|
/*******************************************************************************
|
|
* the typedefs
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
* the globals
|
|
******************************************************************************/
|
|
static uint32_t adcResult[ADCH_NUM];
|
|
EDmaDrv_StateType dmaController_State;
|
|
EDmaDrv_ChnStateType *pEdmaChnState[16]; /* Runtime state structure for the eDMA driver */
|
|
EDmaDrv_ChnStateType edmaChnState[16];
|
|
static PwmLiteDrv_ModuleConfigType moduleConfig;
|
|
/*******************************************************************************
|
|
* the const
|
|
******************************************************************************/
|
|
/*! \brief The trgmux in out mappings table for trgmux configure
|
|
*/
|
|
const TrgMuxDrv_InOutMappingType c_trgmuxInOutMappings[] = {
|
|
{TRGMUXDRV_TRIGSOURCE_SIM_SW_TRIG, TRGMUXDRV_TARGETMODULE_PDB0_TRG_IN, false}, /* Use SIM_SW_TRIG trigger PDB0 */
|
|
{TRGMUXDRV_TRIGSOURCE_SIM_SW_TRIG, TRGMUXDRV_TARGETMODULE_PDB1_TRG_IN, false}, /* Use SIM_SW_TRIG trigger PDB0 */
|
|
};
|
|
const uint16_t c_numOfTrgmuxInOutMappings = sizeof(c_trgmuxInOutMappings) / sizeof(TrgMuxDrv_InOutMappingType);
|
|
|
|
/*******************************************************************************
|
|
* the function prototypes
|
|
******************************************************************************/
|
|
|
|
static void hw_IO_Init();
|
|
static void ADC_Init();
|
|
|
|
|
|
|
|
static void hw_clock_init()
|
|
{
|
|
/* Setup the clock */
|
|
ClockDrv_ModuleClkConfigType clockConfig;
|
|
uint32_t tTcr = 0;
|
|
WdgDrv_Disable(&mcu.wdgDrv);
|
|
|
|
SEGGER_RTT_printf(0,"-----clock_INIT-----\n");
|
|
|
|
/* Enable the clock for all ports */
|
|
clockConfig.gating = true;
|
|
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_DIV2, &clockConfig);
|
|
|
|
|
|
/* Setup the FIRC2 div2 clock */
|
|
|
|
clockConfig.gating = true;
|
|
clockConfig.source = CLOCKDRV_SOSC;
|
|
clockConfig.div = 1;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_SOSC_DIV2, &clockConfig);
|
|
|
|
/* Setup the SPI clock */
|
|
clockConfig.gating = true;
|
|
clockConfig.source = CLOCKDRV_PLL_DIV2;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_SPI2, &clockConfig);
|
|
|
|
tTcr = SpiReg_GetTcr((const SpiRegType *)&mcu.spiDrv2.reg);
|
|
SpiDrv_SetPrescaler(&tTcr,0x03);
|
|
|
|
//adc功能
|
|
/* Enable the clock for PDB0 */
|
|
clockConfig.gating = true;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PDB0, &clockConfig);
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PDB1, &clockConfig);
|
|
|
|
|
|
/* Enable the clock for ADC */
|
|
clockConfig.gating = true;
|
|
clockConfig.source = CLOCKDRV_PLL;
|
|
clockConfig.div = 4;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_ADC0, &clockConfig);
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_ADC1, &clockConfig);
|
|
|
|
/* Enable the clock for DMAMUX */
|
|
clockConfig.gating = true;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_DMA_MUX, &clockConfig);
|
|
|
|
clockConfig.gating = true;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_DMA, &clockConfig);
|
|
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PWMLITE0, &clockConfig);
|
|
|
|
/* SOSC_DIV2 For Uart2 module clock source */
|
|
clockConfig.gating = true;
|
|
clockConfig.source = CLOCKDRV_SOSC_DIV2;
|
|
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_UART0, &clockConfig);
|
|
}
|
|
|
|
|
|
static void ADC_Init()
|
|
{
|
|
for (uint8_t i = 0; i < ADCH_NUM; i++)
|
|
{
|
|
adcResult[i] = 0;
|
|
}
|
|
|
|
/* TRGMUX */
|
|
TrgMuxDrv_ConfigType trgmuxConfig;
|
|
trgmuxConfig.numOfInOutMappings = c_numOfTrgmuxInOutMappings;
|
|
trgmuxConfig.inOutMapping = c_trgmuxInOutMappings;
|
|
TrgMuxDrv_Configure(&mcu.trgMuxDrv, &trgmuxConfig);
|
|
|
|
pEdmaChnState[0] = &edmaChnState[0];
|
|
pEdmaChnState[1] = &edmaChnState[1];
|
|
|
|
/* Configure EDMA module */
|
|
|
|
EDmaDrv_ModuleConfigType edmaCfg;
|
|
EDmaDrv_GetDefaultConfigure(&edmaCfg);
|
|
EDmaDrv_Configure(&mcu.edmaDrv, &dmaController_State, &edmaCfg);
|
|
|
|
EDmaDrv_ChannelConfigType edmaChannelCfg;
|
|
EDmaDrv_GetDefaultChannelConfigure(&edmaChannelCfg);
|
|
edmaChannelCfg.chnConfig = DMA_CHANNEL0;
|
|
edmaChannelCfg.source = EDMA_REQ_ADC0;
|
|
edmaChannelCfg.channelPriority = EDMADRV_CHN_PRIORITY_0;
|
|
EDmaDrv_ConfigureChannel(&mcu.edmaDrv, &pEdmaChnState[0], &edmaChannelCfg);
|
|
|
|
edmaChannelCfg.chnConfig = DMA_CHANNEL1;
|
|
edmaChannelCfg.source = EDMA_REQ_ADC1;
|
|
edmaChannelCfg.channelPriority = EDMADRV_CHN_PRIORITY_0;
|
|
EDmaDrv_ConfigureChannel(&mcu.edmaDrv, &pEdmaChnState[0], &edmaChannelCfg);
|
|
|
|
|
|
EDmaDrv_TransferConfigType edmaTransferCfg;
|
|
EDmaDrv_LoopTransferConfigType edmaLoopCfg;
|
|
edmaLoopCfg.majorLoopIterationCount = 5;
|
|
edmaLoopCfg.srcOffsetEnable = true;
|
|
edmaLoopCfg.dstOffsetEnable = true;
|
|
edmaLoopCfg.minorLoopOffset = 0;
|
|
edmaLoopCfg.minorLoopChnLinkEnable = false;
|
|
edmaLoopCfg.minorLoopChnLinkNumber = 0;
|
|
edmaLoopCfg.majorLoopChnLinkEnable = false;
|
|
edmaLoopCfg.majorLoopChnLinkNumber = 0;
|
|
|
|
edmaTransferCfg.srcAddr = (uint32_t)&mcu.adc0Drv.adcReg->R[0];
|
|
edmaTransferCfg.destAddr = (uint32_t)&adcResult[0];
|
|
edmaTransferCfg.srcDestTransferSize = EDMADRV_TRANSFER_SIZE_4B;
|
|
edmaTransferCfg.srcOffset = 4;
|
|
edmaTransferCfg.destOffset = 4;
|
|
edmaTransferCfg.srcLastAddrAdjust = -20;
|
|
edmaTransferCfg.destLastAddrAdjust = -20;
|
|
edmaTransferCfg.srcModulo = EDMADRV_MODULO_OFF;
|
|
edmaTransferCfg.destModulo = EDMADRV_MODULO_OFF;
|
|
edmaTransferCfg.minorByteTransferCount = 4;
|
|
edmaTransferCfg.scatterGatherEnable = false;
|
|
edmaTransferCfg.scatterGatherNextDescAddr = false;
|
|
edmaTransferCfg.interruptEnable = false;
|
|
edmaTransferCfg.hardClrDone = true;
|
|
edmaTransferCfg.loopTransferConfig = &edmaLoopCfg;
|
|
|
|
EDmaDrv_ConfigLoopTransfer(&mcu.edmaDrv, DMA_CHANNEL0, &edmaTransferCfg);
|
|
|
|
edmaTransferCfg.srcAddr = (uint32_t)&mcu.adc1Drv.adcReg->R[0];
|
|
edmaTransferCfg.destAddr = (uint32_t)&adcResult[ADCH_RLY1];
|
|
EDmaDrv_ConfigLoopTransfer(&mcu.edmaDrv, DMA_CHANNEL1, &edmaTransferCfg);
|
|
|
|
EDmaDrv_StartChannel(&mcu.edmaDrv, DMA_CHANNEL0);
|
|
EDmaDrv_StartChannel(&mcu.edmaDrv, DMA_CHANNEL1);
|
|
|
|
|
|
/* Configure ADC module */
|
|
AdcDrv_ConfigType adcCfg;
|
|
AdcDrv_GetDefaultConfig(&adcCfg);
|
|
adcCfg.conversionMode = ADCDRV_CONVERSION_12BIT; /* Selects the ADC resolution to 12-bit conversion */
|
|
adcCfg.avgEnable = true; /* Enable hardware average function */
|
|
adcCfg.avgSamplesSel = ADCDRV_AVERAGE_32; /* Select 32 samples average */
|
|
adcCfg.continuousMode = ADCDRV_ONESHOT; /* Select one-shot mode */
|
|
adcCfg.chnCfg[ADCH_Power].chnSel = ADCDRV_INCHN_EXT3;
|
|
adcCfg.chnCfg[ADCH_RLY3].chnSel = ADCDRV_INCHN_EXT0;
|
|
adcCfg.chnCfg[ADCH_RLY5].chnSel = ADCDRV_INCHN_EXT1;
|
|
adcCfg.chnCfg[ADCH_HEAT_C1].chnSel = ADCDRV_INCHN_EXT15;
|
|
adcCfg.chnCfg[ADCH_HEAT_C2].chnSel = ADCDRV_INCHN_EXT7;
|
|
|
|
//adcCfg.chnCfg[ADCH_HEAT_C2].intEnable = true; /* Last channel enable interrupt */
|
|
|
|
adcCfg.trgSrcCfg.trgSrc = ADCDRV_HW_TRIGGER;
|
|
adcCfg.dmaEnable = true;
|
|
/* Enable ADC interrupts */
|
|
//IrqDrv_EnableIrq(ADC0_IRQn);
|
|
AdcDrv_Configure(&mcu.adc0Drv, &adcCfg);
|
|
AdcDrv_EnableAdc(&mcu.adc0Drv);
|
|
|
|
adcCfg.chnCfg[0].chnSel = ADCDRV_INCHN_EXT5;
|
|
adcCfg.chnCfg[1].chnSel = ADCDRV_INCHN_EXT2;
|
|
adcCfg.chnCfg[2].chnSel = ADCDRV_INCHN_EXT7;
|
|
adcCfg.chnCfg[3].chnSel = ADCDRV_INCHN_VBG;
|
|
adcCfg.chnCfg[4].chnSel = ADCDRV_INCHN_LPVBG;
|
|
|
|
AdcDrv_Configure(&mcu.adc1Drv, &adcCfg);
|
|
AdcDrv_EnableAdc(&mcu.adc1Drv);
|
|
|
|
/* Configure PDB module */
|
|
uint32_t pdbFreq;
|
|
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_PDB0, &pdbFreq);
|
|
|
|
PdbDrv_ConfigType pdbCfg;
|
|
PdbDrv_GetDefaultConfig(&pdbCfg);
|
|
pdbCfg.ldmode = PDBDRV_LDMOD_LOAD_VAL_IMMEDIATELY; /* The internal registers are loaded with the values from their buffers, immediately after 1 is written to LDOK */
|
|
pdbCfg.trgInSel = PDBDRV_TRGSEL_TRGGER_IN_0; /* Use hardware trigger source */
|
|
pdbCfg.cMode = PDBDRV_CONT_CONTINUOUS; /* PDB operation in Continuous mode */
|
|
pdbCfg.prescalerFactor = PDBDRV_PRESCALER_128MULT; /* Counting uses the peripheral clock divided by MULT (the multiplication factor) */
|
|
pdbCfg.mult = PDBDRV_MULT_FACTOR_40; /* Multiplication factor is 40 */
|
|
pdbCfg.preTrgCfg.mode[0][0] = PDBDRV_PRETRG_DELAY_MODE; /* The first channel start with other trigger source */
|
|
pdbCfg.preTrgCfg.mode[0][1] = PDBDRV_PRETRG_BB_MODE; /* PDB channel[0][1-7] & channel[1][0-7] with Back-to-Back operation*/
|
|
pdbCfg.preTrgCfg.mode[0][2] = PDBDRV_PRETRG_BB_MODE;
|
|
pdbCfg.preTrgCfg.mode[0][3] = PDBDRV_PRETRG_BB_MODE;
|
|
pdbCfg.preTrgCfg.mode[0][4] = PDBDRV_PRETRG_BB_MODE;
|
|
|
|
pdbCfg.dlyCfg.modCnt = 1*pdbFreq / 128 / 40 /1000; /* Periodic triggering PDB in 1s*/
|
|
pdbCfg.dlyCfg.dlyCnt[0][0] = 0; /* first channel don't need delay time*/
|
|
pdbCfg.bbSel = PDB_BB_SEL; /* Internal channel chaining of PDB0 CH0 and CH1.
|
|
* CH0 and CH1 of PDB0 back-to-back operation with COCO[7:0] and COCO[15:8] of ADC0.
|
|
*/
|
|
PdbDrv_Configure(&mcu.pdb0Drv, &pdbCfg);
|
|
PdbDrv_Configure(&mcu.pdb1Drv, &pdbCfg);
|
|
|
|
|
|
|
|
PdbDrv_EnablePdb(&mcu.pdb0Drv); /* Enable PDB0 */
|
|
PdbDrv_EnablePdb(&mcu.pdb1Drv); /* Enable PDB1 */
|
|
|
|
|
|
|
|
TrgMuxDrv_GenSWTrigger(&mcu.trgMuxDrv, 10); /* Trigger PDB0 */
|
|
}
|
|
|
|
static void PWM_Init(void)
|
|
{
|
|
uint32_t apbClkFreq = 0;
|
|
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_APB, &apbClkFreq);
|
|
/* Configure PWM Module */
|
|
|
|
PwmLiteDrv_GetDefaultModuleConfig(&moduleConfig);
|
|
moduleConfig.period = apbClkFreq / PWM_PERIOD_HZ;
|
|
moduleConfig.syncType = PWMLITEDRV_SYNC_AT_PERIOD;
|
|
PwmLiteDrv_ModuleConfig(&mcu.pwmLiteDrv0, &moduleConfig);
|
|
/* Configure PWM channel 0 */
|
|
PwmLiteDrv_ChannelConfigType channelConfig;
|
|
PwmLiteDrv_GetDefaultChannelConfig(&channelConfig);
|
|
channelConfig.pwmMuxType.channelNumber = PWMLITEDRV_MUX_PWM0_CH0;
|
|
channelConfig.pwmMuxType.padNumber = PWMLITEDRV_MUX_PAD_PWM4;
|
|
channelConfig.behavior0 = PWMLITEDRV_LOW_AT_REACH;
|
|
channelConfig.behavior1 = PWMLITEDRV_HIGH_AT_REACH;
|
|
channelConfig.threshold0 = 0;
|
|
channelConfig.threshold1 = 0;
|
|
PwmLiteDrv_ConfigChannel(&mcu.pwmLiteDrv0, PWMLITEDRV_PWM_CH0, &channelConfig);
|
|
/* Enable PWM Module */
|
|
PwmLiteDrv_EnableModule(&mcu.pwmLiteDrv0);
|
|
}
|
|
static void Watchdog_Init(void)
|
|
{
|
|
/* Refresh wdg */
|
|
WdgDrv_Refresh(&mcu.wdgDrv);
|
|
|
|
/* Initialize WDG drivers */
|
|
WdgDrv_ConfigureType wdgConfigParams;
|
|
WdgDrv_GetDefaultConfig(&wdgConfigParams);
|
|
wdgConfigParams.clkSource = WDGDRV_CLK_SRC_LPO128K;
|
|
wdgConfigParams.winEnable = false;
|
|
wdgConfigParams.prescalerEnable = false;
|
|
wdgConfigParams.enable = true;
|
|
wdgConfigParams.intEnable = false;
|
|
wdgConfigParams.updateEnable = true;
|
|
wdgConfigParams.stopModeEnable = false;
|
|
wdgConfigParams.timeoutValue = 12800;
|
|
wdgConfigParams.windowValue = 1000;
|
|
WdgDrv_Configure(&mcu.wdgDrv, &wdgConfigParams);
|
|
//NVIC_EnableIRQ(WDOG_IRQn);
|
|
}
|
|
|
|
void hw_init(void)
|
|
{
|
|
uint32_t gCpuClockFrequency = 0;
|
|
|
|
Watchdog_Init();
|
|
|
|
hw_clock_init();
|
|
|
|
SEGGER_RTT_printf(0,"-----SPI_INIT-----\n");
|
|
SBC_SPI_INIT();
|
|
|
|
FlexCanBoot_Init();
|
|
|
|
hw_IO_Init();
|
|
|
|
/* Set system tick clock, 1ms event */
|
|
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_CORE, &gCpuClockFrequency);
|
|
SysTick_Config(gCpuClockFrequency / 1000u);
|
|
IrqDrv_EnableIrq(SysTick_IRQn);
|
|
|
|
SBC_Init();
|
|
SEGGER_RTT_printf(0,"-----ADC_Init-----\n");
|
|
ADC_Init();
|
|
|
|
PWM_Init();
|
|
|
|
Uart0_LinMaster_Init();
|
|
|
|
SEGGER_RTT_printf(0,"-----InitFinished-----\n");
|
|
}
|
|
|
|
|
|
#define PINSDRV_DIR_OUTPUT 1
|
|
#define PINSDRV_DIR_INPUT 0
|
|
static void hw_IO_Init(void)
|
|
{
|
|
//1
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 1, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 1, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 1, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 1, PINSDRV_DIR_OUTPUT);
|
|
//2
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 0, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 0, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 0, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 0, PINSDRV_DIR_OUTPUT);
|
|
//3
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 11, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 11, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 11, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 11, PINSDRV_DIR_OUTPUT);
|
|
//4
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 10, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 10, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 10, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 10, PINSDRV_DIR_OUTPUT);
|
|
//5
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 5, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 5, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 5, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 5, PINSDRV_DIR_OUTPUT);
|
|
//6
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 4, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 4, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 4, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 4, PINSDRV_DIR_OUTPUT);
|
|
//7-12电源
|
|
//13
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 3, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 3, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 3, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 3, PINSDRV_DIR_OUTPUT);
|
|
//14
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 16, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 16, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 16, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 16, PINSDRV_DIR_OUTPUT);
|
|
//15
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 15, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 15, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 15, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 15, PINSDRV_DIR_OUTPUT);
|
|
//16
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 9, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 9, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 9, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 9, PINSDRV_DIR_OUTPUT);
|
|
//17
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 8, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 8, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 8, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 8, PINSDRV_DIR_OUTPUT);
|
|
//18
|
|
PinsDrv_SetMuxModeSel(&mcu.ptb, 5, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptb.port, 5, 1);
|
|
PortReg_SetPcrSr(mcu.ptb.port, 5, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptb, 5, PINSDRV_DIR_OUTPUT);
|
|
//19
|
|
PinsDrv_SetMuxModeSel(&mcu.ptb, 4, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptb.port, 4, 1);
|
|
PortReg_SetPcrSr(mcu.ptb.port, 4, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptb, 4, PINSDRV_DIR_OUTPUT);
|
|
//20-22预留
|
|
//23
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 6, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 6, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 6, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 6, PINSDRV_DIR_OUTPUT);
|
|
//24
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 5, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 5, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 5, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 5, PINSDRV_DIR_OUTPUT);
|
|
//25-26 SPI
|
|
//27
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 17, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.ptc.port, 1, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 1, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptc, 1,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.ptc,0);
|
|
//28
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 16, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptc.port, 16, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 16, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptc, 16,PINSDRV_DIR_OUTPUT);
|
|
//29 30 SPI
|
|
//31
|
|
PinsDrv_SetMuxModeSel(&mcu.ptb, 3, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.ptb.port, 3, 1);
|
|
PortReg_SetPcrSr(mcu.ptb.port, 3, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptb, 3,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.ptb,0);
|
|
//32
|
|
PinsDrv_SetMuxModeSel(&mcu.ptb, 2, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptb.port, 2, 1);
|
|
PortReg_SetPcrSr(mcu.ptb.port, 2, 1);
|
|
//33 34 CAN
|
|
//35
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 9, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptc.port, 9, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 9, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptc, 9,PINSDRV_DIR_OUTPUT);
|
|
//36
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 8, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptc.port, 8, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 8, 1);
|
|
//37
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 7, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.pta.port, 7, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 7, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 7,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.pta,0);
|
|
//38
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 6, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 6, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 6, 1);
|
|
//39
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 7, PINSDRV_MUX_AS_GPIO);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 7,0);
|
|
PortReg_SetPcrSr(mcu.pte.port, 7, 1);
|
|
|
|
//40 41 VDD
|
|
//42 NC
|
|
//43
|
|
PinsDrv_SetMuxModeSel(&mcu.ptb, 12, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.ptb.port, 12, 1);
|
|
PortReg_SetPcrSr(mcu.ptb.port, 12, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptb, 12,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.ptb,0);
|
|
//44
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 4, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 4, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 4, 1);
|
|
//45
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 3, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptd.port, 3, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 3, 1);
|
|
//46
|
|
PinsDrv_SetMuxModeSel(&mcu.ptd, 2, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.ptd.port, 2, 1);
|
|
PortReg_SetPcrSr(mcu.ptd.port, 2, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptd, 2,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.ptd,0);
|
|
//47
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 3, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 3, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 3, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 3, PINSDRV_DIR_OUTPUT);
|
|
//48
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 2, PINSDRV_MUX_ALT5);
|
|
//PortReg_SetPcrDrvStr(mcu.pta.port, 2, 1);
|
|
//PortReg_SetPcrSr(mcu.pta.port, 2, 1);
|
|
//PinsDrv_SetPinDirection(&mcu.pta, 2, PINSDRV_DIR_OUTPUT);
|
|
//49
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 1, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.pta.port, 1, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 1, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 1,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.pta,0);
|
|
//50
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 0, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.pta.port, 0, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 0, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 0,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.pta,0);
|
|
//51
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 7, PINSDRV_PIN_DISABLED);
|
|
PortReg_SetPcrAen(mcu.ptc.port, 7, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 7, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptc, 7,0);
|
|
PinsDrv_SetPortInputDisable(&mcu.ptc,0);
|
|
//52
|
|
PinsDrv_SetMuxModeSel(&mcu.ptc, 6, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.ptc.port, 6, 1);
|
|
PortReg_SetPcrSr(mcu.ptc.port, 6, 1);
|
|
PinsDrv_SetPinDirection(&mcu.ptc, 6, PINSDRV_DIR_OUTPUT);
|
|
//53
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 6, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 6, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 6, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 6, PINSDRV_DIR_OUTPUT);
|
|
//54
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 2, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 2, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 2, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 2, PINSDRV_DIR_OUTPUT);
|
|
//55
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 13, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 13, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 13, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 12, PINSDRV_DIR_OUTPUT);
|
|
//56
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 12, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 12, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 12, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 12, PINSDRV_DIR_OUTPUT);
|
|
//57
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 11, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 11, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 11, 1);
|
|
//58
|
|
PinsDrv_SetMuxModeSel(&mcu.pta, 10, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pta.port, 10, 1);
|
|
PortReg_SetPcrSr(mcu.pta.port, 10, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pta, 10, PINSDRV_DIR_OUTPUT);
|
|
//59
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 1, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 1, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 1, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 1, PINSDRV_DIR_OUTPUT);
|
|
//60
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 0, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 0, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 0, 1);
|
|
PinsDrv_SetPinDirection(&mcu.pte, 0, PINSDRV_DIR_OUTPUT);
|
|
//61
|
|
PinsDrv_SetMuxModeSel(&mcu.pte, 5, PINSDRV_MUX_AS_GPIO);
|
|
PortReg_SetPcrDrvStr(mcu.pte.port, 5, 1);
|
|
PortReg_SetPcrSr(mcu.pte.port, 5, 1);
|
|
//62-64 SWD
|
|
}
|
|
|
|
/*************************************motor driver *****************************************/
|
|
void hw_MotorCtrl(Motor_ID_Type motorid,Motor_ACT_Type dir)
|
|
{
|
|
switch(motorid)
|
|
{
|
|
case MotorHG:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.ptd, 0);
|
|
PinsDrv_ClearPin(&mcu.ptd, 1);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.ptd, 0);
|
|
PinsDrv_ClearPin(&mcu.ptd, 1);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.ptd, 1);
|
|
PinsDrv_ClearPin(&mcu.ptd, 0);
|
|
break;
|
|
}
|
|
break;
|
|
case MotorKB:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.pte, 10);
|
|
PinsDrv_ClearPin(&mcu.pte, 11);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.pte, 10);
|
|
PinsDrv_ClearPin(&mcu.pte, 11);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.pte, 11);
|
|
PinsDrv_ClearPin(&mcu.pte, 10);
|
|
break;
|
|
}
|
|
break;
|
|
case MotorTT:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.pte, 4);
|
|
PinsDrv_ClearPin(&mcu.pte, 5);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.pte, 4);
|
|
PinsDrv_ClearPin(&mcu.pte, 5);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.pte, 5);
|
|
PinsDrv_ClearPin(&mcu.pte, 4);
|
|
break;
|
|
}
|
|
break;
|
|
case MotorZY:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.pte, 3);
|
|
PinsDrv_ClearPin(&mcu.ptd, 16);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.pte, 3);
|
|
PinsDrv_ClearPin(&mcu.ptd, 16);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.ptd, 16);
|
|
PinsDrv_ClearPin(&mcu.pte, 3);
|
|
break;
|
|
}
|
|
break;
|
|
case Motor5:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.pte, 9);
|
|
PinsDrv_ClearPin(&mcu.ptd, 15);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.pte, 9);
|
|
PinsDrv_ClearPin(&mcu.ptd, 15);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.ptd, 15);
|
|
PinsDrv_ClearPin(&mcu.pte, 9);
|
|
break;
|
|
}
|
|
break;
|
|
case Motor6:
|
|
switch(dir)
|
|
{
|
|
case Motor_ACT_NOACT:
|
|
PinsDrv_ClearPin(&mcu.pte, 8);
|
|
PinsDrv_ClearPin(&mcu.ptb, 5);
|
|
break;
|
|
case Motor_ACT_CW:
|
|
PinsDrv_SetPin(&mcu.pte, 8);
|
|
PinsDrv_ClearPin(&mcu.ptb, 5);
|
|
break;
|
|
case Motor_ACT_CCW:
|
|
PinsDrv_SetPin(&mcu.pte, 8);
|
|
PinsDrv_ClearPin(&mcu.ptb, 5);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void power_ctrl(uint8_t power)
|
|
{
|
|
if (power>0)
|
|
{
|
|
PinsDrv_SetPin(&mcu.ptc,9);
|
|
}
|
|
else
|
|
{
|
|
PinsDrv_ClearPin(&mcu.ptc,9);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
uint32_t GetAdcRawData(ADCH_ID_type adch)
|
|
{
|
|
if (adch < ADCH_NUM)
|
|
{
|
|
return adcResult[adch];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
uint32_t GetAdcmv(ADCH_ID_type adch)
|
|
{
|
|
uint32_t adcval=0;
|
|
|
|
if (adch < ADCH_NUM)
|
|
{
|
|
adcval = adcResult[adch];
|
|
}
|
|
|
|
|
|
adcval = ( adcval * 3300 )>>12;
|
|
|
|
return adcval;
|
|
}
|
|
|
|
uint8_t GetHallIO(Motor_ID_Type motorid)
|
|
{
|
|
uint8_t ret = 0;
|
|
switch (motorid)
|
|
{
|
|
case MotorHG:
|
|
ret = PinsDrv_ReadPin(&mcu.pta,11);
|
|
break;
|
|
case MotorKB:
|
|
ret = PinsDrv_ReadPin(&mcu.ptd,4);
|
|
break;
|
|
case MotorTT:
|
|
ret = PinsDrv_ReadPin(&mcu.ptc,5);
|
|
break;
|
|
case MotorZY:
|
|
ret = PinsDrv_ReadPin(&mcu.pte,7);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void HeatDrv1Ctrl(uint8_t onoff)
|
|
{
|
|
if (onoff > 0)
|
|
{
|
|
PinsDrv_SetPin(&mcu.ptc, 16);
|
|
PinsDrv_SetPin(&mcu.ptb, 4);
|
|
}
|
|
else
|
|
{
|
|
PinsDrv_ClearPin(&mcu.ptc, 16);
|
|
PinsDrv_ClearPin(&mcu.ptb, 4);
|
|
}
|
|
}
|
|
|
|
void HeatDrv2Ctrl(uint8_t onoff)
|
|
{
|
|
if (onoff > 0)
|
|
{
|
|
PinsDrv_SetPin(&mcu.ptd, 5);
|
|
PinsDrv_SetPin(&mcu.ptd, 6);
|
|
}
|
|
else
|
|
{
|
|
PinsDrv_ClearPin(&mcu.ptd, 5);
|
|
PinsDrv_ClearPin(&mcu.ptd, 6);
|
|
}
|
|
}
|
|
|
|
void FanCtrlDuty(uint8_t duty)
|
|
{
|
|
uint32_t dutydata = 0;
|
|
if (duty > 100)
|
|
{
|
|
duty = 100;
|
|
}
|
|
dutydata = moduleConfig.period * duty / 100;
|
|
PwmLiteDrv_UpdatePwmThresholdAtSync(&mcu.pwmLiteDrv0,PWMLITEDRV_PWM_CH0,0U,dutydata);
|
|
|
|
}
|