Modify flags in PwmOut to center align pwm signals.
Device/CenteredPwmOut_KLXX.cpp@0:7200daf08b56, 2014-07-08 (annotated)
- Committer:
- acracan
- Date:
- Tue Jul 08 17:37:24 2014 +0000
- Revision:
- 0:7200daf08b56
Update.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
acracan | 0:7200daf08b56 | 1 | #ifdef TARGET_KLXX |
acracan | 0:7200daf08b56 | 2 | |
acracan | 0:7200daf08b56 | 3 | #include "CenteredPwmOut.h" |
acracan | 0:7200daf08b56 | 4 | #include "PeripheralPins.h" |
acracan | 0:7200daf08b56 | 5 | |
acracan | 0:7200daf08b56 | 6 | CenteredPwmOut::CenteredPwmOut(PinName pin): |
acracan | 0:7200daf08b56 | 7 | PwmOut(pin) |
acracan | 0:7200daf08b56 | 8 | { |
acracan | 0:7200daf08b56 | 9 | PWMName pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); |
acracan | 0:7200daf08b56 | 10 | if (pwm == (PWMName)NC) |
acracan | 0:7200daf08b56 | 11 | return; |
acracan | 0:7200daf08b56 | 12 | unsigned int tpm_n = (pwm >> TPM_SHIFT); |
acracan | 0:7200daf08b56 | 13 | |
acracan | 0:7200daf08b56 | 14 | TPM_Type *tpm = (TPM_Type *)(TPM0_BASE + 0x1000 * tpm_n); |
acracan | 0:7200daf08b56 | 15 | |
acracan | 0:7200daf08b56 | 16 | // Enable PWM interrupts |
acracan | 0:7200daf08b56 | 17 | tpm->SC |= TPM_SC_TOIE_MASK; |
acracan | 0:7200daf08b56 | 18 | |
acracan | 0:7200daf08b56 | 19 | unsigned int clkdiv = (tpm->SC & TPM_SC_PS_MASK) >> TPM_SC_PS_SHIFT; |
acracan | 0:7200daf08b56 | 20 | bool centered = tpm->SC & TPM_SC_CPWMS_MASK; |
acracan | 0:7200daf08b56 | 21 | |
acracan | 0:7200daf08b56 | 22 | if (centered) |
acracan | 0:7200daf08b56 | 23 | return; |
acracan | 0:7200daf08b56 | 24 | // Change PWM to center-aligned mode |
acracan | 0:7200daf08b56 | 25 | |
acracan | 0:7200daf08b56 | 26 | // First, disable counter |
acracan | 0:7200daf08b56 | 27 | tpm->SC &= ~TPM_SC_CMOD_MASK; |
acracan | 0:7200daf08b56 | 28 | // Change the prescaler factor |
acracan | 0:7200daf08b56 | 29 | //tpm->SC &= ~TPM_SC_PS_MASK; |
acracan | 0:7200daf08b56 | 30 | //tpm->SC |= TPM_SC_PS(clkdiv - 1); |
acracan | 0:7200daf08b56 | 31 | // Then change mode |
acracan | 0:7200daf08b56 | 32 | tpm->SC |= TPM_SC_CPWMS_MASK; |
acracan | 0:7200daf08b56 | 33 | // Finally, enable counter |
acracan | 0:7200daf08b56 | 34 | tpm->SC |= TPM_SC_CMOD(1); |
acracan | 0:7200daf08b56 | 35 | } |
acracan | 0:7200daf08b56 | 36 | |
acracan | 0:7200daf08b56 | 37 | #endif |