File tree Expand file tree Collapse file tree 2 files changed +8
-4
lines changed
mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F Expand file tree Collapse file tree 2 files changed +8
-4
lines changed Original file line number Diff line number Diff line change @@ -116,15 +116,19 @@ void pwmout_free(pwmout_t* obj) {
116
116
}
117
117
118
118
void pwmout_write (pwmout_t * obj , float value ) {
119
+ uint32_t instance = obj -> pwm_name >> TPM_SHIFT ;
119
120
if (value < 0.0f ) {
120
121
value = 0.0f ;
121
122
} else if (value > 1.0f ) {
122
123
value = 1.0f ;
123
124
}
124
- uint16_t mod = ftm_hal_get_mod (obj -> pwm_name >> TPM_SHIFT );
125
+ uint16_t mod = ftm_hal_get_mod (instance );
125
126
uint32_t new_count = (uint32_t )((float )(mod ) * value );
126
- ftm_hal_set_channel_count_value (obj -> pwm_name >> TPM_SHIFT , obj -> pwm_name & 0xF , new_count );
127
- ftm_hal_set_counter (obj -> pwm_name >> TPM_SHIFT , 0 );
127
+ // Stop FTM clock to ensure instant update of MOD register
128
+ ftm_hal_set_clock_source (instance , kClock_source_FTM_None );
129
+ ftm_hal_set_channel_count_value (instance , obj -> pwm_name & 0xF , new_count );
130
+ ftm_hal_set_counter (instance , 0 );
131
+ ftm_hal_set_clock_source (instance , kClock_source_FTM_SystemClk );
128
132
}
129
133
130
134
float pwmout_read (pwmout_t * obj ) {
Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ float value = 0.75;
18
18
19
19
int main () {
20
20
#if defined(TARGET_FF_ARDUINO)
21
- PwmOut pwm (D5 );
21
+ PwmOut pwm (D9 );
22
22
23
23
pwm.period_ms (10 );
24
24
pwm.write (value);
You can’t perform that action at this time.
0 commit comments