git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5432 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
acirillo87 2013-03-14 20:27:31 +00:00
parent 060093508d
commit 95a19f5c76
1 changed files with 34 additions and 30 deletions

View File

@ -243,28 +243,21 @@ void pwm_lld_start_submodule(PWMDriver *pwmp, uint8_t sid) {
} }
/* Complementary output setup.*/ /* Complementary output setup.*/
/* switch (pwmp->config->channels[0].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) { switch (pwmp->config->channels[0].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) {
case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW: case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW:
chDbgAssert(pwmp->config->channels[1].mode == PWM_OUTPUT_ACTIVE_LOW, chDbgAssert(pwmp->config->channels[1].mode == PWM_OUTPUT_ACTIVE_LOW,
"pwm_lld_start(), #1", "pwm_lld_start_submodule(), #2",
"the PWM chB must be set in PWM_OUTPUT_ACTIVE_LOW"); "the PWM chB must be set in PWM_OUTPUT_ACTIVE_LOW");
//pwmp->flexpwmp->SUB[sid].OCTRL.B.POLA = 1; pwmp->flexpwmp->SUB[sid].OCTRL.B.POLA = 1;
pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0; pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0;
pwmp->flexpwmp->MCTRL.B.IPOL |= (0b0000 | (1U << sid)); pwmp->flexpwmp->OUTEN.B.PWMA_EN |= (0x0 | (1U << sid));
pwmp->flexpwmp->MASK.B.MASKA |= (0b0000 | (1U << sid));
pwmp->flexpwmp->OUTEN.B.PWMA_EN |= (0b0000 | (1U << sid));
//pwmp->flexpwmp->SUB[0].OCTRL.B.POLB = 0;
break; break;
case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH: case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH:
chDbgAssert(pwmp->config->channels[1].mode == PWM_OUTPUT_ACTIVE_HIGH, chDbgAssert(pwmp->config->channels[1].mode == PWM_OUTPUT_ACTIVE_HIGH,
"pwm_lld_start(), #2", "pwm_lld_start_submodule(), #3",
"the PWM chB must be set in PWM_OUTPUT_ACTIVE_HIGH"); "the PWM chB must be set in PWM_OUTPUT_ACTIVE_HIGH");
pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0; pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0;
pwmp->flexpwmp->MCTRL.B.IPOL |= (0b0000 | (0U << sid)); pwmp->flexpwmp->OUTEN.B.PWMA_EN |= (0x0 | (1U << sid));
pwmp->flexpwmp->MASK.B.MASKA |= (0b0000 | (1U << sid));
pwmp->flexpwmp->OUTEN.B.PWMA_EN |= (0b0000 | (1U << sid));
// pwmp->flexpwmp->SUB[0].OCTRL.B.POLA = 0;
//pwmp->flexpwmp->SUB[0].OCTRL.B.POLB = 1;
break; break;
default: default:
; ;
@ -273,31 +266,24 @@ void pwm_lld_start_submodule(PWMDriver *pwmp, uint8_t sid) {
switch (pwmp->config->channels[1].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) { switch (pwmp->config->channels[1].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) {
case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW: case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW:
chDbgAssert(pwmp->config->channels[0].mode == PWM_OUTPUT_ACTIVE_LOW, chDbgAssert(pwmp->config->channels[0].mode == PWM_OUTPUT_ACTIVE_LOW,
"pwm_lld_start(), #3", "pwm_lld_start_submodule(), #4",
"the PWM chA must be set in PWM_OUTPUT_ACTIVE_LOW"); "the PWM chA must be set in PWM_OUTPUT_ACTIVE_LOW");
pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0; pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0;
pwmp->flexpwmp->MCTRL.B.IPOL &= ~ (0b0000 | (1U << sid)); pwmp->flexpwmp->MCTRL.B.IPOL &= ~ (0x0 | (1U << sid));
// pwmp->flexpwmp->SUB[0].OCTRL.B.POLA = 0;
pwmp->flexpwmp->SUB[sid].OCTRL.B.POLB = 1; pwmp->flexpwmp->SUB[sid].OCTRL.B.POLB = 1;
pwmp->flexpwmp->MASK.B.MASKB |= (0b0000 | (1U << sid)); pwmp->flexpwmp->OUTEN.B.PWMB_EN |= (0x0 | (1U << sid));
pwmp->flexpwmp->OUTEN.B.PWMB_EN |= (0b0000 | (1U << sid));
break; break;
case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH: case PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH:
chDbgAssert(pwmp->config->channels[0].mode == PWM_OUTPUT_ACTIVE_HIGH, chDbgAssert(pwmp->config->channels[0].mode == PWM_OUTPUT_ACTIVE_HIGH,
"pwm_lld_start(), #4", "pwm_lld_start_submodule(), #5",
"the PWM chA must be set in PWM_OUTPUT_ACTIVE_HIGH"); "the PWM chA must be set in PWM_OUTPUT_ACTIVE_HIGH");
pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0; pwmp->flexpwmp->SUB[sid].CTRL2.B.INDEP = 0;
pwmp->flexpwmp->MCTRL.B.IPOL &= ~ (0b0000 | (1U << sid)); pwmp->flexpwmp->MCTRL.B.IPOL |= (0x0 | (1U << sid));
pwmp->flexpwmp->OUTEN.B.PWMB_EN |= (0x0 | (1U << sid));
pwmp->flexpwmp->MASK.B.MASKB |= (0b0000 | (1U << sid));
pwmp->flexpwmp->OUTEN.B.PWMB_EN |= (0b0000 | (1U << sid));
// pwmp->flexpwmp->SUB[0].OCTRL.B.POLA = 1;
// pwmp->flexpwmp->SUB[0].OCTRL.B.POLB = 0;
break; break;
default: default:
; ;
} }
*/
/* Sets the INIT and MASK registers.*/ /* Sets the INIT and MASK registers.*/
pwmp->flexpwmp->SUB[sid].CTRL2.B.FRCEN = 1U; pwmp->flexpwmp->SUB[sid].CTRL2.B.FRCEN = 1U;
@ -355,7 +341,11 @@ void pwm_lld_enable_submodule_channel(PWMDriver *pwmp,
/* Removes the channel mask if it is necessary.*/ /* Removes the channel mask if it is necessary.*/
if ((pwmp->flexpwmp->MASK.B.MASKA & (0x0 | (1U << sid))) == 1) if ((pwmp->flexpwmp->MASK.B.MASKA & (0x0 | (1U << sid))) == 1)
pwmp->flexpwmp->MASK.B.MASKA &= ~ (0x0 | (1U << sid)); pwmp->flexpwmp->MASK.B.MASKA &= ~(0x0 | (1U << sid));
if ((pwmp->config->channels[0].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) != 0) {
pwmp->flexpwmp->MASK.B.MASKB &= ~(0x0 | (1U << sid));
}
} }
/* Active the width interrupt.*/ /* Active the width interrupt.*/
else if (channel == 1) { else if (channel == 1) {
@ -382,7 +372,11 @@ void pwm_lld_enable_submodule_channel(PWMDriver *pwmp,
/* Removes the channel mask if it is necessary.*/ /* Removes the channel mask if it is necessary.*/
if ((pwmp->flexpwmp->MASK.B.MASKB & (0x0 | (1U << sid))) == 1) if ((pwmp->flexpwmp->MASK.B.MASKB & (0x0 | (1U << sid))) == 1)
pwmp->flexpwmp->MASK.B.MASKB &= ~ (0x0 | (1U << sid)); pwmp->flexpwmp->MASK.B.MASKB &= ~(0x0 | (1U << sid));
if ((pwmp->config->channels[1].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) != 0) {
pwmp->flexpwmp->MASK.B.MASKA &= ~(0x0 | (1U << sid));
}
} }
/* Active the periodic interrupt.*/ /* Active the periodic interrupt.*/
@ -424,6 +418,11 @@ void pwm_lld_disable_submodule_channel(PWMDriver *pwmp,
} }
/* Active the channel mask.*/ /* Active the channel mask.*/
if ((pwmp->config->channels[0].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) != 0) {
pwmp->flexpwmp->MASK.B.MASKA |= (0x0 | (1U << sid));
pwmp->flexpwmp->MASK.B.MASKB |= (0x0 | (1U << sid));
}
else
pwmp->flexpwmp->MASK.B.MASKA |= (0x0 | (1U << sid)); pwmp->flexpwmp->MASK.B.MASKA |= (0x0 | (1U << sid));
} }
/* Disable the width interrupt.*/ /* Disable the width interrupt.*/
@ -435,6 +434,11 @@ void pwm_lld_disable_submodule_channel(PWMDriver *pwmp,
} }
/* Active the channel mask.*/ /* Active the channel mask.*/
if ((pwmp->config->channels[1].mode & PWM_COMPLEMENTARY_OUTPUT_MASK) != 0) {
pwmp->flexpwmp->MASK.B.MASKA |= (0x0 | (1U << sid));
pwmp->flexpwmp->MASK.B.MASKB |= (0x0 | (1U << sid));
}
else
pwmp->flexpwmp->MASK.B.MASKB |= (0x0 | (1U << sid)); pwmp->flexpwmp->MASK.B.MASKB |= (0x0 | (1U << sid));
} }