mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
171:89b338f31ef1
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 15:a81a8d6c1dfe 1 /* mbed Microcontroller Library
mbed_official 15:a81a8d6c1dfe 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 15:a81a8d6c1dfe 3 *
mbed_official 15:a81a8d6c1dfe 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 15:a81a8d6c1dfe 5 * you may not use this file except in compliance with the License.
mbed_official 15:a81a8d6c1dfe 6 * You may obtain a copy of the License at
mbed_official 15:a81a8d6c1dfe 7 *
mbed_official 15:a81a8d6c1dfe 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 15:a81a8d6c1dfe 9 *
mbed_official 15:a81a8d6c1dfe 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 15:a81a8d6c1dfe 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 15:a81a8d6c1dfe 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 15:a81a8d6c1dfe 13 * See the License for the specific language governing permissions and
mbed_official 15:a81a8d6c1dfe 14 * limitations under the License.
mbed_official 15:a81a8d6c1dfe 15 */
mbed_official 15:a81a8d6c1dfe 16 #include "mbed_assert.h"
mbed_official 15:a81a8d6c1dfe 17 #include "pwmout_api.h"
mbed_official 15:a81a8d6c1dfe 18
mbed_official 15:a81a8d6c1dfe 19 #include "cmsis.h"
mbed_official 15:a81a8d6c1dfe 20
mbed_official 15:a81a8d6c1dfe 21 #include "pinmap_function.h"
mbed_official 15:a81a8d6c1dfe 22
mbed_official 15:a81a8d6c1dfe 23 /* Prescaler values for TCC Module */
mbed_official 15:a81a8d6c1dfe 24 const uint32_t tcc_prescaler[] = {
mbed_official 15:a81a8d6c1dfe 25 TCC_CLOCK_PRESCALER_DIV1,
mbed_official 15:a81a8d6c1dfe 26 TCC_CLOCK_PRESCALER_DIV2,
mbed_official 15:a81a8d6c1dfe 27 TCC_CLOCK_PRESCALER_DIV4,
mbed_official 15:a81a8d6c1dfe 28 TCC_CLOCK_PRESCALER_DIV8,
mbed_official 15:a81a8d6c1dfe 29 TCC_CLOCK_PRESCALER_DIV16,
mbed_official 15:a81a8d6c1dfe 30 TCC_CLOCK_PRESCALER_DIV64,
mbed_official 15:a81a8d6c1dfe 31 TCC_CLOCK_PRESCALER_DIV256,
mbed_official 15:a81a8d6c1dfe 32 TCC_CLOCK_PRESCALER_DIV1024
mbed_official 15:a81a8d6c1dfe 33 };
mbed_official 15:a81a8d6c1dfe 34
mbed_official 15:a81a8d6c1dfe 35 /* Max count limits of TCC Modules */
mbed_official 15:a81a8d6c1dfe 36 extern const uint32_t _tcc_maxs[TCC_INST_NUM];
mbed_official 15:a81a8d6c1dfe 37
mbed_official 15:a81a8d6c1dfe 38 /** Set the period of PWM object (will not update the waveform)
mbed_official 15:a81a8d6c1dfe 39 *
mbed_official 15:a81a8d6c1dfe 40 * @param[in] obj The PWM object whose period is to be updated
mbed_official 15:a81a8d6c1dfe 41 * @param[in] period_us Period in microseconds
mbed_official 15:a81a8d6c1dfe 42 * @return void
mbed_official 15:a81a8d6c1dfe 43 */
mbed_official 15:a81a8d6c1dfe 44 static void pwmout_set_period(pwmout_t* obj, int period_us)
mbed_official 15:a81a8d6c1dfe 45 {
mbed_official 15:a81a8d6c1dfe 46 uint8_t i;
mbed_official 15:a81a8d6c1dfe 47 uint32_t freq_hz;
mbed_official 15:a81a8d6c1dfe 48 uint32_t div_freq;
mbed_official 15:a81a8d6c1dfe 49 double us_per_cycle;
mbed_official 15:a81a8d6c1dfe 50 uint64_t max_period = 0;
mbed_official 15:a81a8d6c1dfe 51 uint32_t us_period = period_us;
mbed_official 15:a81a8d6c1dfe 52
mbed_official 15:a81a8d6c1dfe 53 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 54 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 55
mbed_official 15:a81a8d6c1dfe 56 /* TCC instance index */
mbed_official 15:a81a8d6c1dfe 57 uint8_t module_index = _tcc_get_inst_index(obj->tcc.hw);
mbed_official 15:a81a8d6c1dfe 58
mbed_official 15:a81a8d6c1dfe 59 uint32_t count_max = _tcc_maxs[module_index];
mbed_official 15:a81a8d6c1dfe 60
mbed_official 15:a81a8d6c1dfe 61 freq_hz = system_gclk_gen_get_hz(obj->clock_source);
mbed_official 15:a81a8d6c1dfe 62
AnnaBridge 171:89b338f31ef1 63 for (i=0; i<sizeof(tcc_prescaler) / sizeof(tcc_prescaler[0]); i++) {
mbed_official 15:a81a8d6c1dfe 64 div_freq = freq_hz >> tcc_prescaler[i];
mbed_official 15:a81a8d6c1dfe 65 if (!div_freq) break;
mbed_official 15:a81a8d6c1dfe 66 us_per_cycle = 1000000.00 / div_freq;
mbed_official 15:a81a8d6c1dfe 67 max_period = us_per_cycle * count_max;
mbed_official 15:a81a8d6c1dfe 68 if (max_period >= us_period) {
mbed_official 64:41a834223ea3 69 obj->clock_prescaler = (enum tc_clock_prescaler)tcc_prescaler[i];
mbed_official 15:a81a8d6c1dfe 70 obj->period = us_period / us_per_cycle;
mbed_official 15:a81a8d6c1dfe 71 obj->us_per_cycle = us_per_cycle;
mbed_official 15:a81a8d6c1dfe 72 break;
mbed_official 15:a81a8d6c1dfe 73 }
mbed_official 15:a81a8d6c1dfe 74 }
mbed_official 15:a81a8d6c1dfe 75 }
mbed_official 15:a81a8d6c1dfe 76
mbed_official 15:a81a8d6c1dfe 77 /** Initialize PWM Module with updated values
mbed_official 15:a81a8d6c1dfe 78 *
mbed_official 15:a81a8d6c1dfe 79 * @param[in][out] obj The PWM object to initialize
mbed_official 15:a81a8d6c1dfe 80 * @return non-zero if success
mbed_official 15:a81a8d6c1dfe 81 */
mbed_official 15:a81a8d6c1dfe 82 bool pwmout_init_hw(pwmout_t* obj)
mbed_official 15:a81a8d6c1dfe 83 {
mbed_official 64:41a834223ea3 84 uint32_t mux_func = (uint32_t)NC;
mbed_official 64:41a834223ea3 85 uint32_t pwm = (uint32_t)NC;
mbed_official 15:a81a8d6c1dfe 86 PinName pin;
mbed_official 64:41a834223ea3 87 uint32_t ch_index = (uint32_t)NC;
mbed_official 15:a81a8d6c1dfe 88 struct tcc_config config_tcc;
mbed_official 64:41a834223ea3 89 uint32_t tcc_channel = (uint32_t)NC;
mbed_official 15:a81a8d6c1dfe 90
mbed_official 15:a81a8d6c1dfe 91 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 92 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 93
mbed_official 15:a81a8d6c1dfe 94 pin = obj->pin;
mbed_official 15:a81a8d6c1dfe 95 pwm = pinmap_peripheral(pin, PinMap_PWM);
mbed_official 15:a81a8d6c1dfe 96 if (pwm == (uint32_t)NC) return 0; /* Pin not supported */
mbed_official 15:a81a8d6c1dfe 97
mbed_official 15:a81a8d6c1dfe 98 mux_func = pinmap_function(pin, PinMap_PWM);
mbed_official 64:41a834223ea3 99 ch_index = pinmap_channel_pwm(pin, (PWMName) pwm);
mbed_official 15:a81a8d6c1dfe 100 if ((mux_func == (uint32_t)NC) || (ch_index == (uint32_t)NC)) {
mbed_official 15:a81a8d6c1dfe 101 /* Pin not supported */
mbed_official 15:a81a8d6c1dfe 102 return 0;
mbed_official 15:a81a8d6c1dfe 103 }
mbed_official 15:a81a8d6c1dfe 104 if ((ch_index == 0) || (ch_index == 4)) {
mbed_official 15:a81a8d6c1dfe 105 tcc_channel = 0;
mbed_official 15:a81a8d6c1dfe 106 } else if ((ch_index == 1) || (ch_index == 5)) {
mbed_official 15:a81a8d6c1dfe 107 tcc_channel = 1;
mbed_official 15:a81a8d6c1dfe 108 } else if ((ch_index == 2) || (ch_index == 6)) {
mbed_official 15:a81a8d6c1dfe 109 tcc_channel = 2;
mbed_official 15:a81a8d6c1dfe 110 } else if ((ch_index == 3) || (ch_index == 7)) {
mbed_official 15:a81a8d6c1dfe 111 tcc_channel = 3;
mbed_official 15:a81a8d6c1dfe 112 }
mbed_official 15:a81a8d6c1dfe 113
mbed_official 15:a81a8d6c1dfe 114 tcc_get_config_defaults(&config_tcc, (Tcc*)pwm);
mbed_official 15:a81a8d6c1dfe 115
mbed_official 15:a81a8d6c1dfe 116 config_tcc.counter.clock_source = obj->clock_source;
mbed_official 64:41a834223ea3 117 config_tcc.counter.clock_prescaler = (enum tcc_clock_prescaler)obj->clock_prescaler;
mbed_official 15:a81a8d6c1dfe 118
mbed_official 15:a81a8d6c1dfe 119 config_tcc.counter.period = obj->period;
mbed_official 15:a81a8d6c1dfe 120 config_tcc.compare.wave_generation = TCC_WAVE_GENERATION_SINGLE_SLOPE_PWM;
mbed_official 15:a81a8d6c1dfe 121 config_tcc.compare.match[tcc_channel] = obj->period * obj->duty_cycle;
mbed_official 15:a81a8d6c1dfe 122
mbed_official 15:a81a8d6c1dfe 123 config_tcc.pins.enable_wave_out_pin[ch_index] = true;
mbed_official 15:a81a8d6c1dfe 124 config_tcc.pins.wave_out_pin[ch_index] = pin;
mbed_official 15:a81a8d6c1dfe 125 config_tcc.pins.wave_out_pin_mux[ch_index] = mux_func;
mbed_official 15:a81a8d6c1dfe 126
mbed_official 15:a81a8d6c1dfe 127 return (STATUS_OK == tcc_init(&obj->tcc, (Tcc*)pwm, &config_tcc));
mbed_official 15:a81a8d6c1dfe 128
mbed_official 15:a81a8d6c1dfe 129 }
mbed_official 15:a81a8d6c1dfe 130
mbed_official 15:a81a8d6c1dfe 131 /** Initialize PWM Module
mbed_official 15:a81a8d6c1dfe 132 *
mbed_official 15:a81a8d6c1dfe 133 * @param[in][out] obj The PWM object to initialize
mbed_official 15:a81a8d6c1dfe 134 * @return void
mbed_official 15:a81a8d6c1dfe 135 */
mbed_official 15:a81a8d6c1dfe 136 void pwmout_init(pwmout_t* obj, PinName pin)
mbed_official 15:a81a8d6c1dfe 137 {
mbed_official 15:a81a8d6c1dfe 138 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 139 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 140
mbed_official 15:a81a8d6c1dfe 141 if ((uint32_t)NC == pinmap_peripheral(pin, PinMap_PWM)) {
mbed_official 15:a81a8d6c1dfe 142 /* Pin not supported */
mbed_official 15:a81a8d6c1dfe 143 return;
mbed_official 15:a81a8d6c1dfe 144 }
mbed_official 15:a81a8d6c1dfe 145
mbed_official 15:a81a8d6c1dfe 146 obj->pin = pin;
mbed_official 15:a81a8d6c1dfe 147 obj->period = 0xFFFF;
mbed_official 15:a81a8d6c1dfe 148 obj->duty_cycle = 1;
mbed_official 15:a81a8d6c1dfe 149 obj->clock_source = GCLK_GENERATOR_0; /* 8Mhz input clock */
mbed_official 64:41a834223ea3 150 obj->clock_prescaler = (enum tc_clock_prescaler)TCC_CLOCK_PRESCALER_DIV8; /* Default to 1MHz for 8Mhz input clock */
mbed_official 15:a81a8d6c1dfe 151
mbed_official 15:a81a8d6c1dfe 152 /* Update the changes */
mbed_official 15:a81a8d6c1dfe 153 if (pwmout_init_hw(obj)) {
mbed_official 15:a81a8d6c1dfe 154 /* Enable PWM Module */
mbed_official 15:a81a8d6c1dfe 155 tcc_enable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 156 }
mbed_official 15:a81a8d6c1dfe 157
mbed_official 15:a81a8d6c1dfe 158 }
mbed_official 15:a81a8d6c1dfe 159
mbed_official 15:a81a8d6c1dfe 160 /** Free the PWM Module
mbed_official 15:a81a8d6c1dfe 161 *
mbed_official 15:a81a8d6c1dfe 162 * @param[in] obj The PWM object to free
mbed_official 15:a81a8d6c1dfe 163 * @return void
mbed_official 15:a81a8d6c1dfe 164 */
mbed_official 15:a81a8d6c1dfe 165 void pwmout_free(pwmout_t* obj)
mbed_official 15:a81a8d6c1dfe 166 {
mbed_official 15:a81a8d6c1dfe 167 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 168 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 169
mbed_official 15:a81a8d6c1dfe 170 tcc_disable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 171 }
mbed_official 15:a81a8d6c1dfe 172
mbed_official 15:a81a8d6c1dfe 173 /** Set the duty cycle of PWM Waveform
mbed_official 15:a81a8d6c1dfe 174 *
mbed_official 15:a81a8d6c1dfe 175 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 176 * @param[in] value New duty cycle to be set
mbed_official 15:a81a8d6c1dfe 177 * @return void
mbed_official 15:a81a8d6c1dfe 178 */
mbed_official 15:a81a8d6c1dfe 179 void pwmout_write(pwmout_t* obj, float value)
mbed_official 15:a81a8d6c1dfe 180 {
mbed_official 15:a81a8d6c1dfe 181 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 182 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 183
mbed_official 15:a81a8d6c1dfe 184 if (value < 0.0f) {
mbed_official 15:a81a8d6c1dfe 185 value = 0;
mbed_official 15:a81a8d6c1dfe 186 } else if (value > 1.0f) {
mbed_official 15:a81a8d6c1dfe 187 value = 1;
mbed_official 15:a81a8d6c1dfe 188 }
mbed_official 15:a81a8d6c1dfe 189
mbed_official 15:a81a8d6c1dfe 190 /* Modify the pulse width keeping period same */
mbed_official 15:a81a8d6c1dfe 191 obj->duty_cycle = value;
mbed_official 15:a81a8d6c1dfe 192
mbed_official 15:a81a8d6c1dfe 193 /* Disable PWM Module */
mbed_official 15:a81a8d6c1dfe 194 tcc_disable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 195
mbed_official 15:a81a8d6c1dfe 196 /* Update the changes */
mbed_official 15:a81a8d6c1dfe 197 if (pwmout_init_hw(obj)) {
mbed_official 15:a81a8d6c1dfe 198 /* Enable PWM Module */
mbed_official 15:a81a8d6c1dfe 199 tcc_enable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 200 }
mbed_official 15:a81a8d6c1dfe 201 }
mbed_official 15:a81a8d6c1dfe 202
mbed_official 15:a81a8d6c1dfe 203 /** Get the duty cycle of PWM Waveform
mbed_official 15:a81a8d6c1dfe 204 *
mbed_official 15:a81a8d6c1dfe 205 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 206 * @return Current duty cycle
mbed_official 15:a81a8d6c1dfe 207 */
mbed_official 15:a81a8d6c1dfe 208 float pwmout_read(pwmout_t* obj)
mbed_official 15:a81a8d6c1dfe 209 {
mbed_official 15:a81a8d6c1dfe 210 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 211 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 212
mbed_official 15:a81a8d6c1dfe 213 return obj->duty_cycle;
mbed_official 15:a81a8d6c1dfe 214 }
mbed_official 15:a81a8d6c1dfe 215
mbed_official 15:a81a8d6c1dfe 216 /** Set the period of PWM Waveform
mbed_official 15:a81a8d6c1dfe 217 *
mbed_official 15:a81a8d6c1dfe 218 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 219 * @param[in] seconds New period in seconds
mbed_official 15:a81a8d6c1dfe 220 * @return void
mbed_official 15:a81a8d6c1dfe 221 */
mbed_official 15:a81a8d6c1dfe 222 void pwmout_period(pwmout_t* obj, float seconds)
mbed_official 15:a81a8d6c1dfe 223 {
mbed_official 15:a81a8d6c1dfe 224 pwmout_period_us(obj, seconds * 1000000.0f);
mbed_official 15:a81a8d6c1dfe 225 }
mbed_official 15:a81a8d6c1dfe 226
mbed_official 15:a81a8d6c1dfe 227 /** Set the period of PWM Waveform
mbed_official 15:a81a8d6c1dfe 228 *
mbed_official 15:a81a8d6c1dfe 229 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 230 * @param[in] value New period in milliseconds
mbed_official 15:a81a8d6c1dfe 231 * @return void
mbed_official 15:a81a8d6c1dfe 232 */
mbed_official 15:a81a8d6c1dfe 233 void pwmout_period_ms(pwmout_t* obj, int ms)
mbed_official 15:a81a8d6c1dfe 234 {
mbed_official 15:a81a8d6c1dfe 235 pwmout_period_us(obj, ms * 1000);
mbed_official 15:a81a8d6c1dfe 236 }
mbed_official 15:a81a8d6c1dfe 237
mbed_official 15:a81a8d6c1dfe 238 /** Set the period of PWM Waveform
mbed_official 15:a81a8d6c1dfe 239 *
mbed_official 15:a81a8d6c1dfe 240 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 241 * @param[in] us New period in microseconds
mbed_official 15:a81a8d6c1dfe 242 * @return void
mbed_official 15:a81a8d6c1dfe 243 */
mbed_official 15:a81a8d6c1dfe 244 void pwmout_period_us(pwmout_t* obj, int us)
mbed_official 15:a81a8d6c1dfe 245 {
mbed_official 15:a81a8d6c1dfe 246 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 247 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 248
mbed_official 15:a81a8d6c1dfe 249 /* Disable PWM Module */
mbed_official 15:a81a8d6c1dfe 250 tcc_disable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 251
mbed_official 15:a81a8d6c1dfe 252 /* TODO: Find and set the period */
mbed_official 15:a81a8d6c1dfe 253 pwmout_set_period(obj, us);
mbed_official 15:a81a8d6c1dfe 254
mbed_official 15:a81a8d6c1dfe 255 /* Update the changes */
mbed_official 15:a81a8d6c1dfe 256 if (pwmout_init_hw(obj)) {
mbed_official 15:a81a8d6c1dfe 257 /* Enable PWM Module */
mbed_official 15:a81a8d6c1dfe 258 tcc_enable(&obj->tcc);
mbed_official 15:a81a8d6c1dfe 259 }
mbed_official 15:a81a8d6c1dfe 260 }
mbed_official 15:a81a8d6c1dfe 261
mbed_official 15:a81a8d6c1dfe 262 /** Set the pulse width of PWM Waveform
mbed_official 15:a81a8d6c1dfe 263 *
mbed_official 15:a81a8d6c1dfe 264 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 265 * @param[in] seconds New pulse width in seconds
mbed_official 15:a81a8d6c1dfe 266 * @return void
mbed_official 15:a81a8d6c1dfe 267 */
mbed_official 15:a81a8d6c1dfe 268 void pwmout_pulsewidth(pwmout_t* obj, float seconds)
mbed_official 15:a81a8d6c1dfe 269 {
mbed_official 15:a81a8d6c1dfe 270 pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
mbed_official 15:a81a8d6c1dfe 271 }
mbed_official 15:a81a8d6c1dfe 272
mbed_official 15:a81a8d6c1dfe 273 /** Set the pulse width of PWM Waveform
mbed_official 15:a81a8d6c1dfe 274 *
mbed_official 15:a81a8d6c1dfe 275 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 276 * @param[in] ms New pulse width in milliseconds
mbed_official 15:a81a8d6c1dfe 277 * @return void
mbed_official 15:a81a8d6c1dfe 278 */
mbed_official 15:a81a8d6c1dfe 279 void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
mbed_official 15:a81a8d6c1dfe 280 {
mbed_official 15:a81a8d6c1dfe 281 pwmout_pulsewidth_us(obj, ms * 1000);
mbed_official 15:a81a8d6c1dfe 282 }
mbed_official 15:a81a8d6c1dfe 283
mbed_official 15:a81a8d6c1dfe 284 /** Set the pulse width of PWM Waveform
mbed_official 15:a81a8d6c1dfe 285 *
mbed_official 15:a81a8d6c1dfe 286 * @param[in] obj The PWM object
mbed_official 15:a81a8d6c1dfe 287 * @param[in] us New pulse width in microseconds
mbed_official 15:a81a8d6c1dfe 288 * @return void
mbed_official 15:a81a8d6c1dfe 289 */
mbed_official 15:a81a8d6c1dfe 290 void pwmout_pulsewidth_us(pwmout_t* obj, int us)
mbed_official 15:a81a8d6c1dfe 291 {
mbed_official 15:a81a8d6c1dfe 292 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 293 MBED_ASSERT(obj);
mbed_official 15:a81a8d6c1dfe 294
mbed_official 15:a81a8d6c1dfe 295 uint32_t us_pulse = us;
mbed_official 15:a81a8d6c1dfe 296
mbed_official 15:a81a8d6c1dfe 297 /* Find the new duty cycle */
mbed_official 15:a81a8d6c1dfe 298 double duty_cycle = us_pulse / ((double)obj->period * obj->us_per_cycle);
mbed_official 15:a81a8d6c1dfe 299
mbed_official 15:a81a8d6c1dfe 300 /* This call updates pulse width as well as period */
mbed_official 15:a81a8d6c1dfe 301 pwmout_write(obj, duty_cycle);
mbed_official 15:a81a8d6c1dfe 302 }