mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'toyowata-master'
commit
b395dd5956
|
@ -152,10 +152,18 @@ void pwmout_write(pwmout_t* obj, float value) {
|
||||||
uint32_t t_off = (uint32_t)((float)(obj->pwm->MATCHREL[0].U) * value);
|
uint32_t t_off = (uint32_t)((float)(obj->pwm->MATCHREL[0].U) * value);
|
||||||
obj->pwm->MATCHREL[(obj->pwm_ch) + 1].U = t_off; // New endtime
|
obj->pwm->MATCHREL[(obj->pwm_ch) + 1].U = t_off; // New endtime
|
||||||
|
|
||||||
|
// Clear OxRES (conflict resolution register) bit first, effect of simultaneous set and clear on output x
|
||||||
|
int offset = (obj->pwm_ch * 2);
|
||||||
|
obj->pwm->RES &= ~(0x3 << offset);
|
||||||
|
|
||||||
if (value == 0.0f) { // duty is 0%
|
if (value == 0.0f) { // duty is 0%
|
||||||
|
// Clear output
|
||||||
|
obj->pwm->RES |= (0x2 << offset);
|
||||||
// Set CLR event to be same as SET event, makes output to be 0 (low)
|
// Set CLR event to be same as SET event, makes output to be 0 (low)
|
||||||
obj->pwm->OUT[(obj->pwm_ch)].CLR = (1 << 0);
|
obj->pwm->OUT[(obj->pwm_ch)].CLR = (1 << 0);
|
||||||
} else {
|
} else {
|
||||||
|
// Set output
|
||||||
|
obj->pwm->RES |= (0x1 << offset);
|
||||||
// Use normal CLR event (current SCT ch + 1)
|
// Use normal CLR event (current SCT ch + 1)
|
||||||
obj->pwm->OUT[(obj->pwm_ch)].CLR = (1 << ((obj->pwm_ch) + 1));
|
obj->pwm->OUT[(obj->pwm_ch)].CLR = (1 << ((obj->pwm_ch) + 1));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue