ST / HiBrightLED

Dependents:   DISCO-F334C8_HiBrightLED_demo

Committer:
bcostm
Date:
Wed Jun 17 06:30:59 2015 +0000
Revision:
0:c95c484b95a9
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:c95c484b95a9 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
bcostm 0:c95c484b95a9 2 *
bcostm 0:c95c484b95a9 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
bcostm 0:c95c484b95a9 4 * and associated documentation files (the "Software"), to deal in the Software without
bcostm 0:c95c484b95a9 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
bcostm 0:c95c484b95a9 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
bcostm 0:c95c484b95a9 7 * Software is furnished to do so, subject to the following conditions:
bcostm 0:c95c484b95a9 8 *
bcostm 0:c95c484b95a9 9 * The above copyright notice and this permission notice shall be included in all copies or
bcostm 0:c95c484b95a9 10 * substantial portions of the Software.
bcostm 0:c95c484b95a9 11 *
bcostm 0:c95c484b95a9 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
bcostm 0:c95c484b95a9 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
bcostm 0:c95c484b95a9 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
bcostm 0:c95c484b95a9 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bcostm 0:c95c484b95a9 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
bcostm 0:c95c484b95a9 17 */
bcostm 0:c95c484b95a9 18
bcostm 0:c95c484b95a9 19 #if !defined(TARGET_DISCO_F334C8)
bcostm 0:c95c484b95a9 20 #error "This library must be used on DISCO_F334C8 board only."
bcostm 0:c95c484b95a9 21 #endif
bcostm 0:c95c484b95a9 22
bcostm 0:c95c484b95a9 23 #include "HiBrightLED.h"
bcostm 0:c95c484b95a9 24
bcostm 0:c95c484b95a9 25 /**
bcostm 0:c95c484b95a9 26 * @brief LED intensity
bcostm 0:c95c484b95a9 27 */
bcostm 0:c95c484b95a9 28 #define MIN_INTENSITY (625)
bcostm 0:c95c484b95a9 29 #define MAX_INTENSITY (0)
bcostm 0:c95c484b95a9 30
bcostm 0:c95c484b95a9 31
bcostm 0:c95c484b95a9 32 // Constructor
bcostm 0:c95c484b95a9 33 HiBrightLED::HiBrightLED()
bcostm 0:c95c484b95a9 34 {
bcostm 0:c95c484b95a9 35 // Current table centered around ~250mA in the Power LED
bcostm 0:c95c484b95a9 36 CurrentSenseTab[0] = 280;
bcostm 0:c95c484b95a9 37 CurrentSenseTab[1] = 240;
bcostm 0:c95c484b95a9 38 CurrentSenseTab[2] = 200;
bcostm 0:c95c484b95a9 39 CurrentSenseTab[3] = 360;
bcostm 0:c95c484b95a9 40 CurrentSenseTab[4] = 320;
bcostm 0:c95c484b95a9 41 CurrentSenseTabInit();
bcostm 0:c95c484b95a9 42
bcostm 0:c95c484b95a9 43 DMA_Config();
bcostm 0:c95c484b95a9 44 DAC_Config();
bcostm 0:c95c484b95a9 45 COMP_Config();
bcostm 0:c95c484b95a9 46 HRTIM_Config();
bcostm 0:c95c484b95a9 47 }
bcostm 0:c95c484b95a9 48
bcostm 0:c95c484b95a9 49
bcostm 0:c95c484b95a9 50 // Destructor
bcostm 0:c95c484b95a9 51 HiBrightLED::~HiBrightLED()
bcostm 0:c95c484b95a9 52 {
bcostm 0:c95c484b95a9 53 // DMA
bcostm 0:c95c484b95a9 54 DmaHandle.Instance = DMA1_Channel5;
bcostm 0:c95c484b95a9 55 HAL_DMA_DeInit(&DmaHandle);
bcostm 0:c95c484b95a9 56 __DMA1_CLK_DISABLE();
bcostm 0:c95c484b95a9 57
bcostm 0:c95c484b95a9 58 // DAC
bcostm 0:c95c484b95a9 59 DacHandle.Instance = DAC1;
bcostm 0:c95c484b95a9 60 HAL_DAC_DeInit(&DacHandle);
bcostm 0:c95c484b95a9 61 __DAC1_CLK_DISABLE();
bcostm 0:c95c484b95a9 62
bcostm 0:c95c484b95a9 63 // COMP
bcostm 0:c95c484b95a9 64 CompHandle.Instance = COMP4;
bcostm 0:c95c484b95a9 65 HAL_COMP_DeInit(&CompHandle);
bcostm 0:c95c484b95a9 66
bcostm 0:c95c484b95a9 67 // HRTIM
bcostm 0:c95c484b95a9 68 HrtimHandle.Instance = HRTIM1;
bcostm 0:c95c484b95a9 69 HAL_HRTIM_DeInit(&HrtimHandle);
bcostm 0:c95c484b95a9 70 __HRTIM1_CLK_DISABLE();
bcostm 0:c95c484b95a9 71 }
bcostm 0:c95c484b95a9 72
bcostm 0:c95c484b95a9 73
bcostm 0:c95c484b95a9 74 //=================================================================================================================
bcostm 0:c95c484b95a9 75 // Public methods
bcostm 0:c95c484b95a9 76 //=================================================================================================================
bcostm 0:c95c484b95a9 77
bcostm 0:c95c484b95a9 78 void HiBrightLED::write(float value)
bcostm 0:c95c484b95a9 79 {
bcostm 0:c95c484b95a9 80 uint16_t val;
bcostm 0:c95c484b95a9 81 _value = value; // Save current value
bcostm 0:c95c484b95a9 82
bcostm 0:c95c484b95a9 83 if (value < 0.0f) {
bcostm 0:c95c484b95a9 84 val = MIN_INTENSITY;
bcostm 0:c95c484b95a9 85 } else if (value > 1.0f) {
bcostm 0:c95c484b95a9 86 val = MAX_INTENSITY;
bcostm 0:c95c484b95a9 87 } else {
bcostm 0:c95c484b95a9 88 val = (uint16_t)((1.0f - value) * (float)MIN_INTENSITY);
bcostm 0:c95c484b95a9 89 }
bcostm 0:c95c484b95a9 90
bcostm 0:c95c484b95a9 91 HRTIM_SetBurstCompare(val);
bcostm 0:c95c484b95a9 92 }
bcostm 0:c95c484b95a9 93
bcostm 0:c95c484b95a9 94 float HiBrightLED::read()
bcostm 0:c95c484b95a9 95 {
bcostm 0:c95c484b95a9 96 return _value;
bcostm 0:c95c484b95a9 97 }
bcostm 0:c95c484b95a9 98
bcostm 0:c95c484b95a9 99 //=================================================================================================================
bcostm 0:c95c484b95a9 100 // Private methods
bcostm 0:c95c484b95a9 101 //=================================================================================================================
bcostm 0:c95c484b95a9 102
bcostm 0:c95c484b95a9 103 void HiBrightLED::CurrentSenseTabInit(void)
bcostm 0:c95c484b95a9 104 {
bcostm 0:c95c484b95a9 105 uint8_t index;
bcostm 0:c95c484b95a9 106 for (index =0; index < 5; index++)
bcostm 0:c95c484b95a9 107 {
bcostm 0:c95c484b95a9 108 CurrentSenseTab[index] = (CurrentSenseTab[index] * 4096) / 3300;
bcostm 0:c95c484b95a9 109 }
bcostm 0:c95c484b95a9 110 }
bcostm 0:c95c484b95a9 111
bcostm 0:c95c484b95a9 112
bcostm 0:c95c484b95a9 113 void HiBrightLED::DMA_Config(void)
bcostm 0:c95c484b95a9 114 {
bcostm 0:c95c484b95a9 115 /* Enable DMA1 clock -------------------------------------------------------*/
bcostm 0:c95c484b95a9 116 __DMA1_CLK_ENABLE();
bcostm 0:c95c484b95a9 117
bcostm 0:c95c484b95a9 118 /* Configure the DMA1 CH5 IRQ Channel */
bcostm 0:c95c484b95a9 119 DmaHandle.Init.Direction = DMA_MEMORY_TO_PERIPH; /* M2P transfer mode */
bcostm 0:c95c484b95a9 120 DmaHandle.Init.PeriphInc = DMA_PINC_DISABLE; /* Peripheral increment mode Disable */
bcostm 0:c95c484b95a9 121 DmaHandle.Init.MemInc = DMA_MINC_ENABLE; /* Memory increment mode Enable */
bcostm 0:c95c484b95a9 122 DmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; /* Peripheral data alignment : Word */
bcostm 0:c95c484b95a9 123 DmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; /* memory data alignment : Word */
bcostm 0:c95c484b95a9 124 DmaHandle.Init.Mode = DMA_CIRCULAR; /* Circular Normal DMA mode */
bcostm 0:c95c484b95a9 125 DmaHandle.Init.Priority = DMA_PRIORITY_HIGH; /* priority level : high */
bcostm 0:c95c484b95a9 126
bcostm 0:c95c484b95a9 127 DmaHandle.Instance = DMA1_Channel5;
bcostm 0:c95c484b95a9 128
bcostm 0:c95c484b95a9 129 if (HAL_DMA_Init(&DmaHandle) != HAL_OK)
bcostm 0:c95c484b95a9 130 {
bcostm 0:c95c484b95a9 131 error("HAL_DMA_Init failed");
bcostm 0:c95c484b95a9 132 }
bcostm 0:c95c484b95a9 133 }
bcostm 0:c95c484b95a9 134
bcostm 0:c95c484b95a9 135
bcostm 0:c95c484b95a9 136 void HiBrightLED::DAC_Config(void)
bcostm 0:c95c484b95a9 137 {
bcostm 0:c95c484b95a9 138 DAC_ChannelConfTypeDef DAC_ConfigStructure;
bcostm 0:c95c484b95a9 139
bcostm 0:c95c484b95a9 140 #ifdef DEBUG_HIBRIGHT_LED
bcostm 0:c95c484b95a9 141 GPIO_InitTypeDef GPIO_InitStructure;
bcostm 0:c95c484b95a9 142
bcostm 0:c95c484b95a9 143 /* Configure DAC1 OUT1 */
bcostm 0:c95c484b95a9 144 /* GPIO Periph clock enable */
bcostm 0:c95c484b95a9 145 __GPIOA_CLK_ENABLE();
bcostm 0:c95c484b95a9 146
bcostm 0:c95c484b95a9 147 /* Configure PA4 (DAC1_OUT1) as analog */
bcostm 0:c95c484b95a9 148 GPIO_InitStructure.Pin = GPIO_PIN_4;
bcostm 0:c95c484b95a9 149 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
bcostm 0:c95c484b95a9 150 GPIO_InitStructure.Pull = GPIO_NOPULL;
bcostm 0:c95c484b95a9 151 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
bcostm 0:c95c484b95a9 152 #endif
bcostm 0:c95c484b95a9 153
bcostm 0:c95c484b95a9 154 /* DAC1 Periph clock enable */
bcostm 0:c95c484b95a9 155 __DAC1_CLK_ENABLE();
bcostm 0:c95c484b95a9 156
bcostm 0:c95c484b95a9 157 /* DAC1 deinitialize */
bcostm 0:c95c484b95a9 158 DacHandle.Instance = DAC1;
bcostm 0:c95c484b95a9 159 if(HAL_DAC_DeInit(&DacHandle) != HAL_OK)
bcostm 0:c95c484b95a9 160 {
bcostm 0:c95c484b95a9 161 error("HAL_DAC_DeInit failed");
bcostm 0:c95c484b95a9 162 }
bcostm 0:c95c484b95a9 163
bcostm 0:c95c484b95a9 164 /* DAC Channel1 Init */
bcostm 0:c95c484b95a9 165 if(HAL_DAC_Init(&DacHandle) != HAL_OK)
bcostm 0:c95c484b95a9 166 {
bcostm 0:c95c484b95a9 167 error("HAL_DAC_Init failed");
bcostm 0:c95c484b95a9 168 }
bcostm 0:c95c484b95a9 169
bcostm 0:c95c484b95a9 170 /* Fill DAC ConfigStructure */
bcostm 0:c95c484b95a9 171 DAC_ConfigStructure.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
bcostm 0:c95c484b95a9 172 DAC_ConfigStructure.DAC_Trigger = DAC_TRIGGER_NONE;
bcostm 0:c95c484b95a9 173 if(HAL_DAC_ConfigChannel(&DacHandle, &DAC_ConfigStructure, DAC1_CHANNEL_1) != HAL_OK)
bcostm 0:c95c484b95a9 174 {
bcostm 0:c95c484b95a9 175 error("HAL_DAC_ConfigChannel failed");
bcostm 0:c95c484b95a9 176 }
bcostm 0:c95c484b95a9 177
bcostm 0:c95c484b95a9 178 /* Enable DAC Channel1 */
bcostm 0:c95c484b95a9 179 if(HAL_DAC_Start(&DacHandle, DAC1_CHANNEL_1) != HAL_OK)
bcostm 0:c95c484b95a9 180 {
bcostm 0:c95c484b95a9 181 error("HAL_DAC_Start failed");
bcostm 0:c95c484b95a9 182 }
bcostm 0:c95c484b95a9 183
bcostm 0:c95c484b95a9 184 /* Set DAC Channel1 DHR register: DAC1_OUT */
bcostm 0:c95c484b95a9 185 if(HAL_DAC_SetValue(&DacHandle, DAC1_CHANNEL_1, DAC_ALIGN_12B_R, CurrentSenseTab[0]) != HAL_OK)
bcostm 0:c95c484b95a9 186 {
bcostm 0:c95c484b95a9 187 error("HAL_DAC_SetValue failed");
bcostm 0:c95c484b95a9 188 }
bcostm 0:c95c484b95a9 189 }
bcostm 0:c95c484b95a9 190
bcostm 0:c95c484b95a9 191
bcostm 0:c95c484b95a9 192 void HiBrightLED::COMP_Config(void)
bcostm 0:c95c484b95a9 193 {
bcostm 0:c95c484b95a9 194 GPIO_InitTypeDef GPIO_InitStructure;
bcostm 0:c95c484b95a9 195
bcostm 0:c95c484b95a9 196 /* Enable SYSCFG clock */
bcostm 0:c95c484b95a9 197 //__SYSCFG_CLK_ENABLE();
bcostm 0:c95c484b95a9 198
bcostm 0:c95c484b95a9 199 /* GPIOB Peripheral clock enable */
bcostm 0:c95c484b95a9 200 __GPIOB_CLK_ENABLE();
bcostm 0:c95c484b95a9 201
bcostm 0:c95c484b95a9 202 /* Configure PB0 in analog mode: PB0 is connected to COMP4 non inverting input */
bcostm 0:c95c484b95a9 203 GPIO_InitStructure.Pin = GPIO_PIN_0;
bcostm 0:c95c484b95a9 204 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
bcostm 0:c95c484b95a9 205 GPIO_InitStructure.Pull = GPIO_NOPULL;
bcostm 0:c95c484b95a9 206 HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
bcostm 0:c95c484b95a9 207
bcostm 0:c95c484b95a9 208 #ifdef DEBUG_HIBRIGHT_LED
bcostm 0:c95c484b95a9 209 /* COMP4 output config: PB1 for debug */
bcostm 0:c95c484b95a9 210 GPIO_InitStructure.Pin = GPIO_PIN_1;
bcostm 0:c95c484b95a9 211 GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
bcostm 0:c95c484b95a9 212 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
bcostm 0:c95c484b95a9 213 GPIO_InitStructure.Pull = GPIO_NOPULL;
bcostm 0:c95c484b95a9 214 /* Alternate function configuration : Comparator4 Out2 / PB1 */
bcostm 0:c95c484b95a9 215 GPIO_InitStructure.Alternate = GPIO_AF8_GPCOMP4;
bcostm 0:c95c484b95a9 216 HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
bcostm 0:c95c484b95a9 217 #endif
bcostm 0:c95c484b95a9 218
bcostm 0:c95c484b95a9 219 /* COMP4 deinitialize */
bcostm 0:c95c484b95a9 220 CompHandle.Instance = COMP4;
bcostm 0:c95c484b95a9 221 if(HAL_COMP_DeInit(&CompHandle) != HAL_OK)
bcostm 0:c95c484b95a9 222 {
bcostm 0:c95c484b95a9 223 error("HAL_COMP_DeInit failed");
bcostm 0:c95c484b95a9 224 }
bcostm 0:c95c484b95a9 225
bcostm 0:c95c484b95a9 226 /* COMP4 config */
bcostm 0:c95c484b95a9 227 CompHandle.Init.InvertingInput = COMP_INVERTINGINPUT_DAC1;
bcostm 0:c95c484b95a9 228 CompHandle.Init.NonInvertingInput = 0;
bcostm 0:c95c484b95a9 229 CompHandle.Init.Output = COMP_OUTPUT_NONE;
bcostm 0:c95c484b95a9 230 CompHandle.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
bcostm 0:c95c484b95a9 231 CompHandle.Init.Hysteresis = COMP_HYSTERESIS_NONE;
bcostm 0:c95c484b95a9 232 CompHandle.Init.Mode = 0;
bcostm 0:c95c484b95a9 233 CompHandle.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;
bcostm 0:c95c484b95a9 234 CompHandle.Init.WindowMode = COMP_WINDOWMODE_DISABLED;
bcostm 0:c95c484b95a9 235 CompHandle.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
bcostm 0:c95c484b95a9 236 if(HAL_COMP_Init(&CompHandle) != HAL_OK)
bcostm 0:c95c484b95a9 237 {
bcostm 0:c95c484b95a9 238 error("HAL_COMP_Init failed");
bcostm 0:c95c484b95a9 239 }
bcostm 0:c95c484b95a9 240
bcostm 0:c95c484b95a9 241 /* Enable COMP4 */
bcostm 0:c95c484b95a9 242 if(HAL_COMP_Start(&CompHandle) != HAL_OK)
bcostm 0:c95c484b95a9 243 {
bcostm 0:c95c484b95a9 244 error("HAL_COMP_Start failed");
bcostm 0:c95c484b95a9 245 }
bcostm 0:c95c484b95a9 246 }
bcostm 0:c95c484b95a9 247
bcostm 0:c95c484b95a9 248
bcostm 0:c95c484b95a9 249 void HiBrightLED::HRTIM_Config(void)
bcostm 0:c95c484b95a9 250 {
bcostm 0:c95c484b95a9 251 GPIO_InitTypeDef GPIO_InitStructure;
bcostm 0:c95c484b95a9 252 HRTIM_BurstModeCfgTypeDef HRTIM_BurstStructure;
bcostm 0:c95c484b95a9 253 HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;
bcostm 0:c95c484b95a9 254 HRTIM_EventCfgTypeDef HRTIM_ExternalEventStructure;
bcostm 0:c95c484b95a9 255 HRTIM_OutputCfgTypeDef HRTIM_OutputStructure;
bcostm 0:c95c484b95a9 256 HRTIM_TimeBaseCfgTypeDef HRTIM_TimeBaseStructure;
bcostm 0:c95c484b95a9 257 HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;
bcostm 0:c95c484b95a9 258
bcostm 0:c95c484b95a9 259 /* Configure HRTIM TIM C ****************************************************/
bcostm 0:c95c484b95a9 260 /* HRTIM output channel configuration : HRTIM_CHC1 (Buck drive) / PB12 */
bcostm 0:c95c484b95a9 261 GPIO_InitStructure.Pin = GPIO_PIN_12;
bcostm 0:c95c484b95a9 262 GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
bcostm 0:c95c484b95a9 263 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
bcostm 0:c95c484b95a9 264 GPIO_InitStructure.Pull = GPIO_NOPULL;
bcostm 0:c95c484b95a9 265 /* Alternate function configuration : HRTIM_CHC1 / PB12 */
bcostm 0:c95c484b95a9 266 GPIO_InitStructure.Alternate = GPIO_AF13_HRTIM1;
bcostm 0:c95c484b95a9 267 HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
bcostm 0:c95c484b95a9 268
bcostm 0:c95c484b95a9 269 /* Use the PLLx2 clock for HRTIM */
bcostm 0:c95c484b95a9 270 __HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
bcostm 0:c95c484b95a9 271 __HRTIM1_CLK_ENABLE();
bcostm 0:c95c484b95a9 272
bcostm 0:c95c484b95a9 273 HrtimHandle.Instance = HRTIM1;
bcostm 0:c95c484b95a9 274 HAL_HRTIM_Init(&HrtimHandle);
bcostm 0:c95c484b95a9 275
bcostm 0:c95c484b95a9 276 /* DMA Configuration */
bcostm 0:c95c484b95a9 277 __HAL_LINKDMA(&HrtimHandle, hdmaTimerC, DmaHandle);
bcostm 0:c95c484b95a9 278
bcostm 0:c95c484b95a9 279 /* HRTIM initialization startup */
bcostm 0:c95c484b95a9 280 if(HAL_HRTIM_DLLCalibrationStart(&HrtimHandle, HRTIM_CALIBRATIONRATE_14) != HAL_OK)
bcostm 0:c95c484b95a9 281 {
bcostm 0:c95c484b95a9 282 error("HAL_HRTIM_DLLCalibrationStart failed");
bcostm 0:c95c484b95a9 283 }
bcostm 0:c95c484b95a9 284
bcostm 0:c95c484b95a9 285 if(HAL_HRTIM_PollForDLLCalibration(&HrtimHandle, HAL_MAX_DELAY) != HAL_OK)
bcostm 0:c95c484b95a9 286 {
bcostm 0:c95c484b95a9 287 error("HAL_HRTIM_PollForDLLCalibration failed");
bcostm 0:c95c484b95a9 288 }
bcostm 0:c95c484b95a9 289
bcostm 0:c95c484b95a9 290 /* Configure the output features */
bcostm 0:c95c484b95a9 291 HRTIM_OutputStructure.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
bcostm 0:c95c484b95a9 292 HRTIM_OutputStructure.SetSource = HRTIM_OUTPUTSET_TIMPER;
bcostm 0:c95c484b95a9 293 HRTIM_OutputStructure.ResetSource = HRTIM_OUTPUTRESET_EEV_2;
bcostm 0:c95c484b95a9 294 HRTIM_OutputStructure.IdleMode = HRTIM_OUTPUTIDLEMODE_IDLE;
bcostm 0:c95c484b95a9 295 HRTIM_OutputStructure.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
bcostm 0:c95c484b95a9 296 HRTIM_OutputStructure.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
bcostm 0:c95c484b95a9 297 HRTIM_OutputStructure.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
bcostm 0:c95c484b95a9 298 HRTIM_OutputStructure.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
bcostm 0:c95c484b95a9 299
bcostm 0:c95c484b95a9 300 if(HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
bcostm 0:c95c484b95a9 301 HRTIM_OUTPUT_TC1, &HRTIM_OutputStructure) != HAL_OK)
bcostm 0:c95c484b95a9 302 {
bcostm 0:c95c484b95a9 303 error("HAL_HRTIM_WaveformOutputConfig failed");
bcostm 0:c95c484b95a9 304 }
bcostm 0:c95c484b95a9 305
bcostm 0:c95c484b95a9 306 /* Configure HRTIM1_TIMC Deadtime */
bcostm 0:c95c484b95a9 307 HRTIM_TimerWaveStructure.InterruptRequests = (HRTIM_MASTER_IT_NONE | HRTIM_TIM_IT_NONE);
bcostm 0:c95c484b95a9 308 HRTIM_TimerWaveStructure.DMARequests = (HRTIM_TIM_DMA_REP | HRTIM_TIM_DMA_CMP1 | HRTIM_TIM_DMA_CMP2 |
bcostm 0:c95c484b95a9 309 HRTIM_TIM_DMA_CMP3 | HRTIM_TIM_DMA_CMP4);
bcostm 0:c95c484b95a9 310 HRTIM_TimerWaveStructure.DMASrcAddress = (uint32_t)CurrentSenseTab;
bcostm 0:c95c484b95a9 311 HRTIM_TimerWaveStructure.DMADstAddress = (uint32_t)(&((&DacHandle)->Instance->DHR12R1));
bcostm 0:c95c484b95a9 312 HRTIM_TimerWaveStructure.DMASize = 5;
bcostm 0:c95c484b95a9 313 HRTIM_TimerWaveStructure.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
bcostm 0:c95c484b95a9 314 HRTIM_TimerWaveStructure.StartOnSync = HRTIM_SYNCSTART_DISABLED;
bcostm 0:c95c484b95a9 315 HRTIM_TimerWaveStructure.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
bcostm 0:c95c484b95a9 316 HRTIM_TimerWaveStructure.DACSynchro = HRTIM_DACSYNC_NONE;
bcostm 0:c95c484b95a9 317 HRTIM_TimerWaveStructure.PreloadEnable = HRTIM_PRELOAD_DISABLED;
bcostm 0:c95c484b95a9 318 HRTIM_TimerWaveStructure.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
bcostm 0:c95c484b95a9 319 HRTIM_TimerWaveStructure.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
bcostm 0:c95c484b95a9 320 HRTIM_TimerWaveStructure.RepetitionUpdate = HRTIM_UPDATEONREPETITION_DISABLED;
bcostm 0:c95c484b95a9 321 HRTIM_TimerWaveStructure.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
bcostm 0:c95c484b95a9 322 HRTIM_TimerWaveStructure.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
bcostm 0:c95c484b95a9 323 HRTIM_TimerWaveStructure.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
bcostm 0:c95c484b95a9 324 HRTIM_TimerWaveStructure.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
bcostm 0:c95c484b95a9 325 HRTIM_TimerWaveStructure.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED;
bcostm 0:c95c484b95a9 326 HRTIM_TimerWaveStructure.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_TIMER_C;
bcostm 0:c95c484b95a9 327 HRTIM_TimerWaveStructure.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
bcostm 0:c95c484b95a9 328 HRTIM_TimerWaveStructure.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
bcostm 0:c95c484b95a9 329
bcostm 0:c95c484b95a9 330 if(HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, &HRTIM_TimerWaveStructure) != HAL_OK)
bcostm 0:c95c484b95a9 331 {
bcostm 0:c95c484b95a9 332 error("HAL_HRTIM_WaveformTimerConfig failed");
bcostm 0:c95c484b95a9 333 }
bcostm 0:c95c484b95a9 334
bcostm 0:c95c484b95a9 335 HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
bcostm 0:c95c484b95a9 336 HRTIM_CompareStructure.AutoDelayedTimeout = 0;
bcostm 0:c95c484b95a9 337 HRTIM_CompareStructure.CompareValue = 3686; /* 20% time */
bcostm 0:c95c484b95a9 338
bcostm 0:c95c484b95a9 339 if(HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
bcostm 0:c95c484b95a9 340 HRTIM_COMPAREUNIT_1, &HRTIM_CompareStructure) != HAL_OK)
bcostm 0:c95c484b95a9 341 {
bcostm 0:c95c484b95a9 342 error("HAL_HRTIM_WaveformCompareConfig failed");
bcostm 0:c95c484b95a9 343 }
bcostm 0:c95c484b95a9 344
bcostm 0:c95c484b95a9 345 HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
bcostm 0:c95c484b95a9 346 HRTIM_CompareStructure.AutoDelayedTimeout = 0;
bcostm 0:c95c484b95a9 347 HRTIM_CompareStructure.CompareValue = 7373; /* 40% time */
bcostm 0:c95c484b95a9 348
bcostm 0:c95c484b95a9 349 if(HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
bcostm 0:c95c484b95a9 350 HRTIM_COMPAREUNIT_2, &HRTIM_CompareStructure) != HAL_OK)
bcostm 0:c95c484b95a9 351 {
bcostm 0:c95c484b95a9 352 error("HAL_HRTIM_WaveformCompareConfig failed");
bcostm 0:c95c484b95a9 353 }
bcostm 0:c95c484b95a9 354
bcostm 0:c95c484b95a9 355 HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
bcostm 0:c95c484b95a9 356 HRTIM_CompareStructure.AutoDelayedTimeout = 0;
bcostm 0:c95c484b95a9 357 HRTIM_CompareStructure.CompareValue = 11059; /* 60% time */
bcostm 0:c95c484b95a9 358
bcostm 0:c95c484b95a9 359 if(HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
bcostm 0:c95c484b95a9 360 HRTIM_COMPAREUNIT_3, &HRTIM_CompareStructure) != HAL_OK)
bcostm 0:c95c484b95a9 361 {
bcostm 0:c95c484b95a9 362 error("HAL_HRTIM_WaveformCompareConfig failed");
bcostm 0:c95c484b95a9 363 }
bcostm 0:c95c484b95a9 364
bcostm 0:c95c484b95a9 365 HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
bcostm 0:c95c484b95a9 366 HRTIM_CompareStructure.AutoDelayedTimeout = 0;
bcostm 0:c95c484b95a9 367 HRTIM_CompareStructure.CompareValue = 14746; /* 80% time */
bcostm 0:c95c484b95a9 368
bcostm 0:c95c484b95a9 369 if(HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
bcostm 0:c95c484b95a9 370 HRTIM_COMPAREUNIT_4, &HRTIM_CompareStructure) != HAL_OK)
bcostm 0:c95c484b95a9 371 {
bcostm 0:c95c484b95a9 372 error("HAL_HRTIM_WaveformCompareConfig failed");
bcostm 0:c95c484b95a9 373 }
bcostm 0:c95c484b95a9 374
bcostm 0:c95c484b95a9 375 HRTIM_TimeBaseStructure.Period = 18432; /* 1 period = 4 µs = 100% time */
bcostm 0:c95c484b95a9 376 HRTIM_TimeBaseStructure.RepetitionCounter = 0x00;
bcostm 0:c95c484b95a9 377 HRTIM_TimeBaseStructure.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL32;
bcostm 0:c95c484b95a9 378 HRTIM_TimeBaseStructure.Mode = HRTIM_MODE_CONTINUOUS;
bcostm 0:c95c484b95a9 379
bcostm 0:c95c484b95a9 380 if(HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, &HRTIM_TimeBaseStructure) != HAL_OK)
bcostm 0:c95c484b95a9 381 {
bcostm 0:c95c484b95a9 382 error("HAL_HRTIM_TimeBaseConfig failed");
bcostm 0:c95c484b95a9 383 }
bcostm 0:c95c484b95a9 384
bcostm 0:c95c484b95a9 385 /* Configure External Event Source 2 */
bcostm 0:c95c484b95a9 386 HRTIM_ExternalEventStructure.Source = HRTIM_EVENTSRC_2;
bcostm 0:c95c484b95a9 387 HRTIM_ExternalEventStructure.Polarity = HRTIM_EVENTPOLARITY_HIGH;
bcostm 0:c95c484b95a9 388 HRTIM_ExternalEventStructure.Sensitivity = HRTIM_EVENTSENSITIVITY_LEVEL;
bcostm 0:c95c484b95a9 389 HRTIM_ExternalEventStructure.FastMode = HRTIM_EVENTFASTMODE_ENABLE;
bcostm 0:c95c484b95a9 390 HRTIM_ExternalEventStructure.Filter = HRTIM_EVENTFILTER_NONE;
bcostm 0:c95c484b95a9 391
bcostm 0:c95c484b95a9 392 if(HAL_HRTIM_EventConfig(&HrtimHandle, HRTIM_EVENT_2, &HRTIM_ExternalEventStructure) != HAL_OK)
bcostm 0:c95c484b95a9 393 {
bcostm 0:c95c484b95a9 394 error("HAL_HRTIM_EventConfig failed");
bcostm 0:c95c484b95a9 395 }
bcostm 0:c95c484b95a9 396
bcostm 0:c95c484b95a9 397 /* Burst Mode configuration */
bcostm 0:c95c484b95a9 398 HRTIM_BurstStructure.Mode = HRTIM_BURSTMODE_CONTINOUS;
bcostm 0:c95c484b95a9 399 HRTIM_BurstStructure.ClockSource = HRTIM_BURSTMODECLOCKSOURCE_TIMER_C;
bcostm 0:c95c484b95a9 400 HRTIM_BurstStructure.Prescaler = HRTIM_BURSTMODEPRESCALER_DIV1;
bcostm 0:c95c484b95a9 401 HRTIM_BurstStructure.PreloadEnable = HRIM_BURSTMODEPRELOAD_ENABLED;
bcostm 0:c95c484b95a9 402 HRTIM_BurstStructure.Trigger = HRTIM_BURSTMODETRIGGER_NONE;
bcostm 0:c95c484b95a9 403 HRTIM_BurstStructure.IdleDuration = MIN_INTENSITY;
bcostm 0:c95c484b95a9 404 HRTIM_BurstStructure.Period = MIN_INTENSITY;
bcostm 0:c95c484b95a9 405
bcostm 0:c95c484b95a9 406 if(HAL_HRTIM_BurstModeConfig(&HrtimHandle, &HRTIM_BurstStructure) != HAL_OK)
bcostm 0:c95c484b95a9 407 {
bcostm 0:c95c484b95a9 408 error("HAL_HRTIM_BurstModeConfig failed");
bcostm 0:c95c484b95a9 409 }
bcostm 0:c95c484b95a9 410
bcostm 0:c95c484b95a9 411 /* Enable the TC1 output */
bcostm 0:c95c484b95a9 412 if(HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TC1) != HAL_OK)
bcostm 0:c95c484b95a9 413 {
bcostm 0:c95c484b95a9 414 error("HAL_HRTIM_WaveformOutputStart failed");
bcostm 0:c95c484b95a9 415 }
bcostm 0:c95c484b95a9 416
bcostm 0:c95c484b95a9 417 if(HAL_HRTIM_BurstModeCtl(&HrtimHandle, HRTIM_BURSTMODECTL_ENABLED) != HAL_OK)
bcostm 0:c95c484b95a9 418 {
bcostm 0:c95c484b95a9 419 error("HAL_HRTIM_BurstModeCtl failed");
bcostm 0:c95c484b95a9 420 }
bcostm 0:c95c484b95a9 421
bcostm 0:c95c484b95a9 422 /* Start slave*/
bcostm 0:c95c484b95a9 423 if(HAL_HRTIM_WaveformCounterStart_DMA(&HrtimHandle, HRTIM_TIMERID_TIMER_C) != HAL_OK)
bcostm 0:c95c484b95a9 424 {
bcostm 0:c95c484b95a9 425 error("HAL_HRTIM_WaveformCounterStart_DMA failed");
bcostm 0:c95c484b95a9 426 }
bcostm 0:c95c484b95a9 427
bcostm 0:c95c484b95a9 428 /* Configure and enable HRTIM interrupt */
bcostm 0:c95c484b95a9 429 HAL_NVIC_SetPriority(HRTIM1_Master_IRQn, 0, 0);
bcostm 0:c95c484b95a9 430 HAL_NVIC_EnableIRQ(HRTIM1_Master_IRQn);
bcostm 0:c95c484b95a9 431
bcostm 0:c95c484b95a9 432 /* Enable Burst mode period completed interrupt */
bcostm 0:c95c484b95a9 433 HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_BMPER;
bcostm 0:c95c484b95a9 434
bcostm 0:c95c484b95a9 435 /* Select Burst Trigger */
bcostm 0:c95c484b95a9 436 if(HAL_HRTIM_BurstModeSoftwareTrigger(&HrtimHandle) != HAL_OK)
bcostm 0:c95c484b95a9 437 {
bcostm 0:c95c484b95a9 438 error("HAL_HRTIM_BurstModeSoftwareTrigger failed");
bcostm 0:c95c484b95a9 439 }
bcostm 0:c95c484b95a9 440 }
bcostm 0:c95c484b95a9 441
bcostm 0:c95c484b95a9 442
bcostm 0:c95c484b95a9 443 void HiBrightLED::HRTIM_SetBurstCompare(uint16_t BurstCompare)
bcostm 0:c95c484b95a9 444 {
bcostm 0:c95c484b95a9 445 /* Set Burst Compare value */
bcostm 0:c95c484b95a9 446 HrtimHandle.Instance->sCommonRegs.BMCMPR = BurstCompare;
bcostm 0:c95c484b95a9 447 }
bcostm 0:c95c484b95a9 448