1
- /*
1
+ /*
2
2
* Copyright (c) 2019-2020 Nuvoton Technology Corporation
3
3
* SPDX-License-Identifier: Apache-2.0
4
4
*
@@ -58,9 +58,9 @@ static const struct nu_modinit_s pwm_modinit_tab[] = {
58
58
{NC , 0 , 0 , 0 , 0 , (IRQn_Type ) 0 , NULL }
59
59
};
60
60
61
- static void pwmout_config (pwmout_t * obj , int start );
61
+ static void pwmout_config (pwmout_t * obj , int start );
62
62
63
- void pwmout_init (pwmout_t * obj , PinName pin )
63
+ void pwmout_init (pwmout_t * obj , PinName pin )
64
64
{
65
65
obj -> pwm = (PWMName ) pinmap_peripheral (pin , PinMap_PWM );
66
66
MBED_ASSERT ((int ) obj -> pwm != NC );
@@ -85,7 +85,7 @@ void pwmout_init(pwmout_t* obj, PinName pin)
85
85
}
86
86
87
87
// NOTE: All channels (identified by PWMName) share a PWM module. This reset will also affect other channels of the same PWM module.
88
- if (! ((struct nu_pwm_var * ) modinit -> var )-> en_msk ) {
88
+ if (!((struct nu_pwm_var * ) modinit -> var )-> en_msk ) {
89
89
// Reset this module if no channel enabled
90
90
SYS_ResetModule (modinit -> rsetidx );
91
91
}
@@ -102,7 +102,7 @@ void pwmout_init(pwmout_t* obj, PinName pin)
102
102
pwm_modinit_mask |= 1 << i ;
103
103
}
104
104
105
- void pwmout_free (pwmout_t * obj )
105
+ void pwmout_free (pwmout_t * obj )
106
106
{
107
107
EPWM_T * pwm_base = (EPWM_T * ) NU_MODBASE (obj -> pwm );
108
108
uint32_t chn = NU_MODSUBINDEX (obj -> pwm );
@@ -127,29 +127,29 @@ void pwmout_free(pwmout_t* obj)
127
127
obj -> pin = NC ;
128
128
}
129
129
130
- void pwmout_write (pwmout_t * obj , float value )
130
+ void pwmout_write (pwmout_t * obj , float value )
131
131
{
132
- obj -> pulsewidth_us = NU_CLAMP ((uint32_t ) (value * obj -> period_us ), 0 , obj -> period_us );
132
+ obj -> pulsewidth_us = NU_CLAMP ((uint32_t )(value * obj -> period_us ), 0 , obj -> period_us );
133
133
pwmout_config (obj , 1 );
134
134
}
135
135
136
- float pwmout_read (pwmout_t * obj )
136
+ float pwmout_read (pwmout_t * obj )
137
137
{
138
138
return NU_CLAMP ((((float ) obj -> pulsewidth_us ) / obj -> period_us ), 0.0f , 1.0f );
139
139
}
140
140
141
- void pwmout_period (pwmout_t * obj , float seconds )
141
+ void pwmout_period (pwmout_t * obj , float seconds )
142
142
{
143
143
pwmout_period_us (obj , seconds * 1000000.0f );
144
144
}
145
145
146
- void pwmout_period_ms (pwmout_t * obj , int ms )
146
+ void pwmout_period_ms (pwmout_t * obj , int ms )
147
147
{
148
148
pwmout_period_us (obj , ms * 1000 );
149
149
}
150
150
151
151
// Set the PWM period, keeping the duty cycle the same.
152
- void pwmout_period_us (pwmout_t * obj , int us )
152
+ void pwmout_period_us (pwmout_t * obj , int us )
153
153
{
154
154
uint32_t period_us_old = obj -> period_us ;
155
155
uint32_t pulsewidth_us_old = obj -> pulsewidth_us ;
@@ -158,23 +158,32 @@ void pwmout_period_us(pwmout_t* obj, int us)
158
158
pwmout_config (obj , 1 );
159
159
}
160
160
161
- void pwmout_pulsewidth (pwmout_t * obj , float seconds )
161
+ int pwmout_read_period_us (pwmout_t * obj )
162
+ {
163
+ return obj -> period_us ;
164
+ }
165
+
166
+ void pwmout_pulsewidth (pwmout_t * obj , float seconds )
162
167
{
163
168
pwmout_pulsewidth_us (obj , seconds * 1000000.0f );
164
169
}
165
170
166
- void pwmout_pulsewidth_ms (pwmout_t * obj , int ms )
171
+ void pwmout_pulsewidth_ms (pwmout_t * obj , int ms )
167
172
{
168
173
pwmout_pulsewidth_us (obj , ms * 1000 );
169
174
}
170
175
171
- void pwmout_pulsewidth_us (pwmout_t * obj , int us )
176
+ void pwmout_pulsewidth_us (pwmout_t * obj , int us )
172
177
{
173
178
obj -> pulsewidth_us = NU_CLAMP (us , 0 , obj -> period_us );
174
179
pwmout_config (obj , 1 );
175
180
}
176
181
177
- static void pwmout_config (pwmout_t * obj , int start )
182
+ int pwmout_read_pulsewidth_us (pwmout_t * obj {
183
+ return obj -> pulsewidth_us ;
184
+ }
185
+
186
+ static void pwmout_config (pwmout_t * obj , int start )
178
187
{
179
188
EPWM_T * pwm_base = (EPWM_T * ) NU_MODBASE (obj -> pwm );
180
189
uint32_t chn = NU_MODSUBINDEX (obj -> pwm );
0 commit comments