]> git.feebdaed.xyz Git - 0xmirror/WiringPi.git/commitdiff
#267 new output commands PWM_MODE_BAL & PWM_MODE_MS
authormstroh76 <m.stroh76@gmail.com>
Fri, 23 Aug 2024 14:30:08 +0000 (16:30 +0200)
committermstroh76 <m.stroh76@gmail.com>
Fri, 23 Aug 2024 14:30:08 +0000 (16:30 +0200)
wiringPi/wiringPi.c
wiringPi/wiringPi.h

index f5e8d414675e9f3f67306a0071272aadd2f85a41..38d7a8f3d46b9ebe9fdda00f92a64e1b2424f93e 100644 (file)
@@ -1794,6 +1794,9 @@ void pinMode (int pin, int mode)
       } 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;
@@ -1811,22 +1814,26 @@ void pinMode (int pin, int mode)
       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)
     {
index 64cbb553652bc8f64d8b3ebd9157c82c532cb9ff..79a895af1cc9247bc0323fa8d5b6500912520b61 100644 (file)
 
 // Pin modes
 
-#define        INPUT                    0
-#define        OUTPUT                   1
-#define        PWM_OUTPUT               2
-#define        GPIO_CLOCK               3
+#define        INPUT                            0
+#define        OUTPUT                         1
+#define        PWM_OUTPUT                   2
+#define        PWM_MS_OUTPUT        8
+#define        PWM_BAL_OUTPUT     9
+#define        GPIO_CLOCK                   3
 #define        SOFT_PWM_OUTPUT          4
 #define        SOFT_TONE_OUTPUT         5
 #define        PWM_TONE_OUTPUT          6