|
|
@ -53,19 +53,47 @@ static int32_t getDeviceId() { |
|
|
|
*******************************************************************************/ |
|
|
|
class PWMCtrler : public ZIPWMCtrl { |
|
|
|
ZPWMGenerator pwm; |
|
|
|
int32_t freq; |
|
|
|
int32_t duty; |
|
|
|
int32_t state; |
|
|
|
int32_t m_freq = 50000; |
|
|
|
int32_t m_duty = 50; |
|
|
|
int32_t m_state; |
|
|
|
|
|
|
|
public: |
|
|
|
void initialize() { pwm.initialize(&htim2, TIM_CHANNEL_2, 25000, 1); } |
|
|
|
void initialize() { pwm.initialize(&htim2, TIM_CHANNEL_2, 25000, 1); } |
|
|
|
|
|
|
|
virtual int32_t pwm_set_state(int32_t state) { |
|
|
|
if (state) { |
|
|
|
pwm.startPWM(m_freq, m_duty); |
|
|
|
} else { |
|
|
|
pwm.stopPWM(); |
|
|
|
} |
|
|
|
m_state = state; |
|
|
|
} |
|
|
|
virtual int32_t pwm_get_state(int32_t& state) { |
|
|
|
state = m_state; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
virtual int32_t set_pwm_duty(int32_t duty) { |
|
|
|
pwm.startPWM(duty); |
|
|
|
m_duty = duty; |
|
|
|
if (m_state) { |
|
|
|
pwm.startPWM(m_freq, m_duty); |
|
|
|
} |
|
|
|
} |
|
|
|
virtual int32_t get_pwm_duty(int32_t& duty) { |
|
|
|
duty = m_duty; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
virtual int32_t set_pwm_freq(int32_t freq) { |
|
|
|
m_freq = freq; |
|
|
|
if (m_state) { |
|
|
|
pwm.startPWM(m_freq, m_duty); |
|
|
|
} |
|
|
|
} |
|
|
|
virtual int32_t get_pwm_freq(int32_t& duty) { |
|
|
|
duty = m_freq; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
virtual int32_t set_pwm_freq(int32_t freq) {} |
|
|
|
virtual int32_t get_pwm_duty() {} |
|
|
|
virtual int32_t get_pwm_freq() {} |
|
|
|
}; |
|
|
|
|
|
|
|
PWMCtrler pwmCtrler; |
|
|
@ -126,7 +154,10 @@ void umain() { |
|
|
|
{.pin = PC7, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false}, |
|
|
|
{.pin = PC8, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false}, |
|
|
|
}, |
|
|
|
.pwmctrl = &pwmCtrler, |
|
|
|
.pwmctrl = |
|
|
|
{ |
|
|
|
&pwmCtrler, |
|
|
|
}, |
|
|
|
}; |
|
|
|
initer.init(&cfg); |
|
|
|
initsubmodule(); |
|
|
|