Skip to content

Commit 20dce73

Browse files
committed
pwmout - NANO100 - add read methods for period and pulsewidth
1 parent 0512889 commit 20dce73

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

targets/TARGET_NUVOTON/TARGET_NANO100/pwmout_api.c

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
16+
1717
#include "pwmout_api.h"
1818

1919
#if DEVICE_PWMOUT
@@ -52,18 +52,18 @@ static const struct nu_modinit_s pwm_modinit_tab[] = {
5252
{PWM_0_1, PWM0_CH01_MODULE, CLK_CLKSEL1_PWM0_CH01_S_HCLK, 0, PWM0_RST, PWM0_IRQn, &pwm0_01_var},
5353
{PWM_0_2, PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HCLK, 0, PWM0_RST, PWM0_IRQn, &pwm0_23_var},
5454
{PWM_0_3, PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HCLK, 0, PWM0_RST, PWM0_IRQn, &pwm0_23_var},
55-
55+
5656
{PWM_1_0, PWM1_CH01_MODULE, CLK_CLKSEL2_PWM1_CH01_S_HCLK, 0, PWM1_RST, PWM1_IRQn, &pwm1_01_var},
5757
{PWM_1_1, PWM1_CH01_MODULE, CLK_CLKSEL2_PWM1_CH01_S_HCLK, 0, PWM1_RST, PWM1_IRQn, &pwm1_01_var},
5858
{PWM_1_2, PWM1_CH23_MODULE, CLK_CLKSEL2_PWM1_CH23_S_HCLK, 0, PWM1_RST, PWM1_IRQn, &pwm1_23_var},
5959
{PWM_1_3, PWM1_CH23_MODULE, CLK_CLKSEL2_PWM1_CH23_S_HCLK, 0, PWM1_RST, PWM1_IRQn, &pwm1_23_var},
60-
60+
6161
{NC, 0, 0, 0, 0, (IRQn_Type) 0, NULL}
6262
};
6363

64-
static void pwmout_config(pwmout_t* obj);
64+
static void pwmout_config(pwmout_t *obj);
6565

66-
void pwmout_init(pwmout_t* obj, PinName pin)
66+
void pwmout_init(pwmout_t *obj, PinName pin)
6767
{
6868
obj->pwm = (PWMName) pinmap_peripheral(pin, PinMap_PWM);
6969
MBED_ASSERT((int) obj->pwm != NC);
@@ -108,22 +108,22 @@ void pwmout_init(pwmout_t* obj, PinName pin)
108108
}
109109
}
110110

111-
void pwmout_free(pwmout_t* obj)
111+
void pwmout_free(pwmout_t *obj)
112112
{
113113
PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm);
114114
uint32_t chn = NU_MODSUBINDEX(obj->pwm);
115115
PWM_ForceStop(pwm_base, 1 << chn);
116-
116+
117117
const struct nu_modinit_s *modinit = get_modinit(obj->pwm, pwm_modinit_tab);
118118
MBED_ASSERT(modinit != NULL);
119119
MBED_ASSERT((PWMName) modinit->modname == obj->pwm);
120120
((struct nu_pwm_var *) modinit->var)->en_msk &= ~(1 << chn);
121-
122-
121+
122+
123123
if ((((struct nu_pwm_var *) modinit->var)->en_msk & 0xF) == 0) {
124124
CLK_DisableModuleClock(modinit->clkidx);
125125
}
126-
126+
127127
if (((struct nu_pwm_var *) modinit->var)->en_msk == 0) {
128128
// Mark this module to be deinited.
129129
int i = modinit - pwm_modinit_tab;
@@ -135,29 +135,29 @@ void pwmout_free(pwmout_t* obj)
135135
obj->pin = NC;
136136
}
137137

138-
void pwmout_write(pwmout_t* obj, float value)
138+
void pwmout_write(pwmout_t *obj, float value)
139139
{
140-
obj->pulsewidth_us = NU_CLAMP((uint32_t) (value * obj->period_us), 0, obj->period_us);
140+
obj->pulsewidth_us = NU_CLAMP((uint32_t)(value * obj->period_us), 0, obj->period_us);
141141
pwmout_config(obj);
142142
}
143143

144-
float pwmout_read(pwmout_t* obj)
144+
float pwmout_read(pwmout_t *obj)
145145
{
146146
return NU_CLAMP((((float) obj->pulsewidth_us) / obj->period_us), 0.0f, 1.0f);
147147
}
148148

149-
void pwmout_period(pwmout_t* obj, float seconds)
149+
void pwmout_period(pwmout_t *obj, float seconds)
150150
{
151151
pwmout_period_us(obj, seconds * 1000000.0f);
152152
}
153153

154-
void pwmout_period_ms(pwmout_t* obj, int ms)
154+
void pwmout_period_ms(pwmout_t *obj, int ms)
155155
{
156156
pwmout_period_us(obj, ms * 1000);
157157
}
158158

159159
// Set the PWM period, keeping the duty cycle the same.
160-
void pwmout_period_us(pwmout_t* obj, int us)
160+
void pwmout_period_us(pwmout_t *obj, int us)
161161
{
162162
uint32_t period_us_old = obj->period_us;
163163
uint32_t pulsewidth_us_old = obj->pulsewidth_us;
@@ -166,23 +166,32 @@ void pwmout_period_us(pwmout_t* obj, int us)
166166
pwmout_config(obj);
167167
}
168168

169-
void pwmout_pulsewidth(pwmout_t* obj, float seconds)
169+
int pwmout_read_period_us(pwmout_t *obj)
170+
{
171+
return obj->period_us;
172+
}
173+
174+
void pwmout_pulsewidth(pwmout_t *obj, float seconds)
170175
{
171176
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
172177
}
173178

174-
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
179+
void pwmout_pulsewidth_ms(pwmout_t *obj, int ms)
175180
{
176181
pwmout_pulsewidth_us(obj, ms * 1000);
177182
}
178183

179-
void pwmout_pulsewidth_us(pwmout_t* obj, int us)
184+
void pwmout_pulsewidth_us(pwmout_t *obj, int us)
180185
{
181186
obj->pulsewidth_us = NU_CLAMP(us, 0, obj->period_us);
182187
pwmout_config(obj);
183188
}
184189

185-
static void pwmout_config(pwmout_t* obj)
190+
int pwmout_read_pulsewidth_us(pwmout_t *obj {
191+
return obj->pulsewidth_us;
192+
}
193+
194+
static void pwmout_config(pwmout_t *obj)
186195
{
187196
PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm);
188197
uint32_t chn = NU_MODSUBINDEX(obj->pwm);

0 commit comments

Comments
 (0)