@@ -32,7 +32,7 @@ static PWM_Type *const pwm_addrs[] = PWM_BASE_PTRS;
32
32
extern void pwm_setup ();
33
33
extern uint32_t pwm_get_clock ();
34
34
35
- void pwmout_init (pwmout_t * obj , PinName pin )
35
+ void pwmout_init (pwmout_t * obj , PinName pin )
36
36
{
37
37
PWMName pwm = (PWMName )pinmap_peripheral (pin , PinMap_PWM );
38
38
MBED_ASSERT (pwm != (PWMName )NC );
@@ -93,15 +93,15 @@ void pwmout_init(pwmout_t* obj, PinName pin)
93
93
pinmap_pinout (pin , PinMap_PWM );
94
94
}
95
95
96
- void pwmout_free (pwmout_t * obj )
96
+ void pwmout_free (pwmout_t * obj )
97
97
{
98
98
uint32_t instance = (obj -> pwm_name >> PWM_SHIFT ) & 0x7 ;
99
99
uint32_t module = (obj -> pwm_name >> PWM_MODULE_SHIFT ) & 0x3 ;
100
100
101
101
PWM_StopTimer (pwm_addrs [instance ], (1 << module ));
102
102
}
103
103
104
- void pwmout_write (pwmout_t * obj , float value )
104
+ void pwmout_write (pwmout_t * obj , float value )
105
105
{
106
106
if (value < 0.0f ) {
107
107
value = 0.0f ;
@@ -130,7 +130,7 @@ void pwmout_write(pwmout_t* obj, float value)
130
130
PWM_SetPwmLdok (base , (1 << module ), true);
131
131
}
132
132
133
- float pwmout_read (pwmout_t * obj )
133
+ float pwmout_read (pwmout_t * obj )
134
134
{
135
135
PWM_Type * base = pwm_addrs [(obj -> pwm_name >> PWM_SHIFT ) & 0x7 ];
136
136
uint32_t module = (obj -> pwm_name >> PWM_MODULE_SHIFT ) & 0x3 ;
@@ -153,18 +153,18 @@ float pwmout_read(pwmout_t* obj)
153
153
return (v > 1.0f ) ? (1.0f ) : (v );
154
154
}
155
155
156
- void pwmout_period (pwmout_t * obj , float seconds )
156
+ void pwmout_period (pwmout_t * obj , float seconds )
157
157
{
158
158
pwmout_period_us (obj , seconds * 1000000.0f );
159
159
}
160
160
161
- void pwmout_period_ms (pwmout_t * obj , int ms )
161
+ void pwmout_period_ms (pwmout_t * obj , int ms )
162
162
{
163
163
pwmout_period_us (obj , ms * 1000 );
164
164
}
165
165
166
166
// Set the PWM period, keeping the duty cycle the same.
167
- void pwmout_period_us (pwmout_t * obj , int us )
167
+ void pwmout_period_us (pwmout_t * obj , int us )
168
168
{
169
169
PWM_Type * base = pwm_addrs [(obj -> pwm_name >> PWM_SHIFT ) & 0x7 ];
170
170
uint32_t module = (obj -> pwm_name >> PWM_MODULE_SHIFT ) & 0x3 ;
@@ -194,17 +194,22 @@ void pwmout_period_us(pwmout_t* obj, int us)
194
194
pwmout_write (obj , dc );
195
195
}
196
196
197
- void pwmout_pulsewidth (pwmout_t * obj , float seconds )
197
+ int pwmout_read_period_us (pwmout_t * obj )
198
+ {
199
+ return (base -> SM [module ].VAL1 ) & PWM_VAL1_VAL1_MASK ;
200
+ }
201
+
202
+ void pwmout_pulsewidth (pwmout_t * obj , float seconds )
198
203
{
199
204
pwmout_pulsewidth_us (obj , seconds * 1000000.0f );
200
205
}
201
206
202
- void pwmout_pulsewidth_ms (pwmout_t * obj , int ms )
207
+ void pwmout_pulsewidth_ms (pwmout_t * obj , int ms )
203
208
{
204
209
pwmout_pulsewidth_us (obj , ms * 1000 );
205
210
}
206
211
207
- void pwmout_pulsewidth_us (pwmout_t * obj , int us )
212
+ void pwmout_pulsewidth_us (pwmout_t * obj , int us )
208
213
{
209
214
PWM_Type * base = pwm_addrs [(obj -> pwm_name >> PWM_SHIFT ) & 0x7 ];
210
215
uint32_t module = (obj -> pwm_name >> PWM_MODULE_SHIFT ) & 0x3 ;
@@ -223,6 +228,18 @@ void pwmout_pulsewidth_us(pwmout_t* obj, int us)
223
228
PWM_SetPwmLdok (base , (1 << module ), true);
224
229
}
225
230
231
+ int pwmout_read_pulsewidth_us (pwmout_t * obj {
232
+ uint16_t count ;
233
+
234
+ if (pwmchannel == 0 )
235
+ {
236
+ count = (base -> SM [module ].VAL3 ) & PWM_VAL3_VAL3_MASK ;
237
+ } else
238
+ {
239
+ count = (base -> SM [module ].VAL5 ) & PWM_VAL5_VAL5_MASK ;
240
+ }
241
+ }
242
+
226
243
const PinMap * pwmout_pinmap ()
227
244
{
228
245
return PinMap_PWM ;
0 commit comments