Ben Katz / FastPWM3

Dependents:   qonly_controller foc-ed_in_the_bot_compact foc-ed_in_the_bot_compact CurrentModeSine ... more

Fork of FastPWM by Erik -

Revision:
3:3094d3806cfc
Parent:
2:4b8de6ae5885
--- a/FastPWM.cpp	Thu Jul 12 19:26:43 2012 +0000
+++ b/FastPWM.cpp	Wed Jul 25 07:14:39 2012 +0000
@@ -1,20 +1,35 @@
 #include "FastPWM.h"
 
 FastPWM::FastPWM(PinName pin) : PWMObject(pin){
+    //Set clock source
+    LPC_SC->PCLKSEL0|=1<<12;
+    
     _duty=0;
     _period=0.02;
-    if (pin==p26||pin==LED1)
+    if (pin==p26||pin==LED1) {
+        PWMUnit=1;
         MR=&LPC_PWM1->MR1;
-    else if (pin==p25||pin==LED2)
+        }
+    else if (pin==p25||pin==LED2){
+        PWMUnit=2;
         MR=&LPC_PWM1->MR2;
-    else if (pin==p24||pin==LED3)
+        }
+    else if (pin==p24||pin==LED3){
+        PWMUnit=3;
         MR=&LPC_PWM1->MR3;
-    else if (pin==p23||pin==LED4)
+        }
+    else if (pin==p23||pin==LED4){
+        PWMUnit=4;
         MR=&LPC_PWM1->MR4;
-    else if (pin==p22)
+        }
+    else if (pin==p22){
+        PWMUnit=5;
         MR=&LPC_PWM1->MR5;
-    else if (pin==p21)
+        }
+    else if (pin==p21){
+        PWMUnit=6;
         MR=&LPC_PWM1->MR6;
+        }
     else
         error("No hardware PWM pin\n\r");
     
@@ -23,8 +38,9 @@
 
 void FastPWM::period(double seconds) {
     LPC_PWM1->MR0 = (unsigned int) (seconds * (double)F_CLK);
-    pulsewidth(_duty*seconds);
+    LPC_PWM1->LER |= 1;
     _period = seconds;
+    pulsewidth(_duty*_period);
 }
 
 void FastPWM::period_ms(int ms) {
@@ -41,6 +57,8 @@
 
 void FastPWM::pulsewidth(double seconds) {
     *MR=(unsigned int) (seconds * (double)F_CLK);
+    LPC_PWM1->LER |= 1<<PWMUnit;
+    _duty=seconds/_period;
 }
 
 void FastPWM::pulsewidth_ms(int ms) {