File tree 2 files changed +6
-4
lines changed
targets/TARGET_RASPBERRYPI/TARGET_RP2040
pico-sdk/rp2_common/hardware_pwm/include/hardware
2 files changed +6
-4
lines changed Original file line number Diff line number Diff line change @@ -177,6 +177,8 @@ static inline void pwm_config_set_wrap(pwm_config *c, uint16_t wrap) {
177
177
c -> top = wrap ;
178
178
}
179
179
180
+ static inline void pwm_set_chan_level (uint slice_num , uint chan , uint16_t level );
181
+
180
182
/** \brief Initialise a PWM with settings from a configuration object
181
183
* \ingroup hardware_pwm
182
184
*
@@ -188,12 +190,12 @@ static inline void pwm_config_set_wrap(pwm_config *c, uint16_t wrap) {
188
190
* \param start If true the PWM will be started running once configured. If false you will need to start
189
191
* manually using \ref pwm_set_enabled() or \ref pwm_set_mask_enabled()
190
192
*/
191
- static inline void pwm_init (uint slice_num , pwm_config * c , bool start ) {
193
+ static inline void pwm_init (uint slice_num , uint chan , pwm_config * c , bool start ) {
192
194
check_slice_num_param (slice_num );
193
195
pwm_hw -> slice [slice_num ].csr = 0 ;
194
196
195
197
pwm_hw -> slice [slice_num ].ctr = PWM_CH0_CTR_RESET ;
196
- pwm_hw -> slice [ slice_num ]. cc = PWM_CH0_CC_RESET ;
198
+ pwm_set_chan_level ( slice_num , chan , PWM_CH0_CC_A_RESET ) ;
197
199
pwm_hw -> slice [slice_num ].top = c -> top ;
198
200
pwm_hw -> slice [slice_num ].div = c -> div ;
199
201
pwm_hw -> slice [slice_num ].csr = c -> csr | (bool_to_bit (start ) << PWM_CH0_CSR_EN_LSB );
Original file line number Diff line number Diff line change @@ -66,7 +66,7 @@ void pwmout_init(pwmout_t *obj, PinName pin)
66
66
obj -> cfg = pwm_get_default_config ();
67
67
pwm_config_set_wrap (& (obj -> cfg ), count_top );
68
68
69
- pwm_init (obj -> slice , & (obj -> cfg ), false);
69
+ pwm_init (obj -> slice , obj -> channel , & (obj -> cfg ), false);
70
70
gpio_set_function (pin , GPIO_FUNC_PWM );
71
71
}
72
72
@@ -142,7 +142,7 @@ void pwmout_period_us(pwmout_t *obj, int period)
142
142
uint32_t min_period = 1000000 * count_top / clock_get_hz (clk_sys );
143
143
144
144
pwm_config_set_clkdiv (& (obj -> cfg ), (float )period / (float )min_period );
145
- pwm_init (obj -> slice , & (obj -> cfg ), false);
145
+ pwm_init (obj -> slice , obj -> channel , & (obj -> cfg ), false);
146
146
}
147
147
148
148
int pwmout_read_period_us (pwmout_t * obj )
You can’t perform that action at this time.
0 commit comments