} else {
*(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) ; // Sets bits to zero = input
}
+ if (PM_OFF==mode && !usingGpioMem && pwm && PI_MODEL_5!=RaspberryPiModel && gpioToPwmALT[pin]>0) { //PWM pin -> reset
+ pwmWrite(origPin, 0);
+ }
} else if (mode == OUTPUT) {
if (PI_MODEL_5 == RaspberryPiModel) {
pads[1+pin] = (pin<=8) ? RP1_PAD_DEFAULT_0TO8 : RP1_PAD_DEFAULT_FROM9;
pinMode (origPin, PWM_OUTPUT) ; // Call myself to enable PWM mode
pwmSetMode (PWM_MODE_MS) ;
}
- else if (mode == PWM_OUTPUT)
- {
+ else if (PWM_OUTPUT==mode || PWM_MS_OUTPUT==mode || PWM_BAL_OUTPUT==mode) {
RETURN_ON_MODEL5
if ((alt = gpioToPwmALT [pin]) == 0) // Not a hardware capable PWM pin
return ;
- usingGpioMemCheck ("pinMode PWM") ;
-
-// Set pin to PWM mode
+ usingGpioMemCheck("pinMode PWM") ; // exit on error!
+ // Set pin to PWM mode
*(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | (alt << shift) ;
delayMicroseconds (110) ; // See comments in pwmSetClockWPi
- pwmSetMode (PWM_MODE_BAL) ; // Pi default mode
- pwmSetRange (1024) ; // Default range of 1024
- pwmSetClock (32) ; // 19.2 / 32 = 600KHz - Also starts the PWM
+ if (PWM_OUTPUT==mode || PWM_BAL_OUTPUT==mode) {
+ pwmSetMode(PWM_MODE_BAL); // Pi default mode
+ } else {
+ pwmSetMode(PWM_MODE_MS);
+ }
+ if (PWM_OUTPUT==mode) { // predefine
+ pwmSetRange (1024) ; // Default range of 1024
+ pwmSetClock (32) ; // 19.2 / 32 = 600KHz - Also starts the PWM
+ }
}
else if (mode == GPIO_CLOCK)
{