// // Boost_HW_SetInterrupts() // void Boost_HW_SetInterrupts(void) { //Desliga o HRTIM1 e ADC1 como fonte de interrupcao: NVIC_DisableIRQ(HRTIM1_TIMB_IRQn); NVIC_DisableIRQ(ADC1_2_IRQn); //Aciona interupcao por reset (ela que sera o trigger para disparar //a conversao A/D) HRTIM_ITConfig(HRTIM1, 0x01, HRTIM_TIM_IT_RST, ENABLE); //Aciona a interrupcao do ADC: ADC_ITConfig(ADC1, ADC_IT_EOC,ENABLE); }
//MOD_A: PA8 HRTIM1_CHA1 //MOD_B: PA9 HRTIM1_CHA2 void SMPS_config(){ HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure; HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure; HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure; HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure; HRTIM_CompareCfgTypeDef HRTIM_CompareStructure; HRTIM_DeadTimeCfgTypeDef HRTIM_TIM_DeadTimeStructure; HRTIM_ADCTriggerCfgTypeDef HRTIM_ADCTrigStructure; NVIC_InitTypeDef NVIC_InitStructure; /* --------------------------------------------------- */ /* TIMERA initialization: timer mode and PWM frequency */ /* --------------------------------------------------- */ //intilize timer HRTIM_TimerInitStructure.HalfModeEnable = HRTIM_HALFMODE_DISABLED; HRTIM_TimerInitStructure.StartOnSync = HRTIM_SYNCSTART_DISABLED; HRTIM_TimerInitStructure.ResetOnSync = HRTIM_SYNCRESET_DISABLED; HRTIM_TimerInitStructure.DACSynchro = HRTIM_DACSYNC_NONE; HRTIM_TimerInitStructure.PreloadEnable = HRTIM_PRELOAD_ENABLED; HRTIM_TimerInitStructure.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT; HRTIM_TimerInitStructure.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK; HRTIM_TimerInitStructure.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED; //sets counter for timer HRTIM_BaseInitStructure.Period = BUCK_PWM_PERIOD; /* 400kHz switching frequency */ HRTIM_BaseInitStructure.RepetitionCounter = MOD_UPDATE_RATE; /* ISR rate */ HRTIM_BaseInitStructure.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL32; HRTIM_BaseInitStructure.Mode = HRTIM_MODE_CONTINOUS; HRTIM_Waveform_Init(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, &HRTIM_BaseInitStructure, &HRTIM_TimerInitStructure); /* ------------------------------------------------ */ /* TIMERA output and registers update configuration */ /* ------------------------------------------------ */ //sets more timer things HRTIM_TimerWaveStructure.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_ENABLED; HRTIM_TimerWaveStructure.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED; HRTIM_TimerWaveStructure.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;//no stopping this HRTIM_TimerWaveStructure.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE; HRTIM_TimerWaveStructure.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED; HRTIM_TimerWaveStructure.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE; HRTIM_TimerWaveStructure.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED; HRTIM_TimerWaveStructure.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE; HRTIM_WaveformTimerConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, &HRTIM_TimerWaveStructure); /* -------------------------------- */ /* TA1 and TA2 waveform description */ /* -------------------------------- */ /* PWM on TA1 */ //set up outputs TA1 and TA2 HRTIM_TIM_OutputStructure.Polarity = HRTIM_OUTPUTPOLARITY_HIGH; HRTIM_TIM_OutputStructure.SetSource = HRTIM_OUTPUTSET_TIMPER; HRTIM_TIM_OutputStructure.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1; HRTIM_TIM_OutputStructure.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE; HRTIM_TIM_OutputStructure.IdleState = HRTIM_OUTPUTIDLESTATE_INACTIVE; HRTIM_TIM_OutputStructure.FaultState = HRTIM_OUTPUTFAULTSTATE_INACTIVE; HRTIM_TIM_OutputStructure.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED; HRTIM_TIM_OutputStructure.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR; HRTIM_WaveformOutputConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1, &HRTIM_TIM_OutputStructure); HRTIM_WaveformOutputConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA2, &HRTIM_TIM_OutputStructure); /* Set compare registers for duty cycle on TA1 */ //this sets the compare for the switching of TA1/TA2 HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR; HRTIM_CompareStructure.AutoDelayedTimeout = 0; HRTIM_CompareStructure.CompareValue = BUCK_PWM_PERIOD/5; //starting value HRTIM_WaveformCompareConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &HRTIM_CompareStructure); //this sets up the deadtime value HRTIM_TIM_DeadTimeStructure.FallingLock = HRTIM_TIMDEADTIME_FALLINGLOCK_WRITE; HRTIM_TIM_DeadTimeStructure.FallingSign = HRTIM_TIMDEADTIME_FALLINGSIGN_POSITIVE; HRTIM_TIM_DeadTimeStructure.FallingSignLock = HRTIM_TIMDEADTIME_FALLINGSIGNLOCK_WRITE; HRTIM_TIM_DeadTimeStructure.FallingValue = DT_FALLING; HRTIM_TIM_DeadTimeStructure.Prescaler = 0x0; HRTIM_TIM_DeadTimeStructure.RisingLock = HRTIM_TIMDEADTIME_RISINGLOCK_WRITE; HRTIM_TIM_DeadTimeStructure.RisingSign = HRTIM_TIMDEADTIME_RISINGSIGN_POSITIVE; HRTIM_TIM_DeadTimeStructure.RisingSignLock = HRTIM_TIMDEADTIME_RISINGSIGNLOCK_WRITE; HRTIM_TIM_DeadTimeStructure.RisingValue = DT_RISING; HRTIM_DeadTimeConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, &HRTIM_TIM_DeadTimeStructure); /* --------------------------*/ /* ADC trigger initialization */ /* --------------------------*/ /* Set compare 2 registers for ADC trigger */ HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR; HRTIM_CompareStructure.AutoDelayedTimeout = 0; HRTIM_CompareStructure.CompareValue = BUCK_PWM_PERIOD/10; //samples in middle of duty cycle HRTIM_WaveformCompareConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, &HRTIM_CompareStructure); HRTIM_ADCTrigStructure.Trigger = HRTIM_ADCTRIGGEREVENT24_TIMERA_CMP2; HRTIM_ADCTrigStructure.UpdateSource = HRTIM_ADCTRIGGERUPDATE_TIMER_A; //this was D in example, switched to A? HRTIM_ADCTriggerConfig(HRTIM1, HRTIM_ADCTRIGGER_2, &HRTIM_ADCTrigStructure); /* */ /* -------------------------*/ /* Interrupt initialization */ /* -------------------------*/ /* Configure and enable HRTIM TIMERA interrupt channel in NVIC */ NVIC_InitStructure.NVIC_IRQChannel = HRTIM1_TIMA_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* TIMER A issues an interrupt on each repetition event */ HRTIM_ITConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_TIM_IT_REP, ENABLE); /* ---------------*/ /* HRTIM start-up */ /* ---------------*/ /* Enable HRTIM's outputs TA1 and TA2 */ /* Note: it is necessary to enable also GPIOs to have outputs functional */ HRTIM_WaveformOutputStart(HRTIM1, HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2); /* Start HRTIM's TIMER A */ HRTIM_WaveformCounterStart(HRTIM1, HRTIM_TIMERID_TIMER_A); HRTIM_SlaveSetCompare(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, BUCK_PWM_PERIOD/3); //initial PWM period HRTIM_SlaveSetCompare(HRTIM1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, (uint32_t)ADC_SAMPLE_TIME); /* ADC trigger update */ }