My forked repository. DISCO_F407VG, DISCO_F303VC, DISCO_F051R8 and DISCO_F100RB maybe added.

Dependents:   FastPWM-DISCO-test

Fork of FastPWM by Erik -

Revision:
0:f8c1b0ad5371
Child:
2:4b8de6ae5885
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FastPWM.cpp	Thu Jul 12 11:20:09 2012 +0000
@@ -0,0 +1,75 @@
+#include "FastPWM.h"
+
+FastPWM::FastPWM(PinName pin) : PWMObject(pin){
+    _duty=0;
+    _period=0.02;
+    if (pin==p26||pin==LED1)
+        MR=&LPC_PWM1->MR1;
+    else if (pin==p25||pin==LED2)
+        MR=&LPC_PWM1->MR2;
+    else if (pin==p24||pin==LED3)
+        MR=&LPC_PWM1->MR3;
+    else if (pin==p23||pin==LED4)
+        MR=&LPC_PWM1->MR4;
+    else if (pin==p22)
+        MR=&LPC_PWM1->MR5;
+    else if (pin==p21)
+        MR=&LPC_PWM1->MR6;
+    else
+        error("No hardware PWM pin\n\r");
+    
+    period(_period);
+}
+
+void FastPWM::period(double seconds) {
+    LPC_PWM1->MR0 = (unsigned int) (seconds * (double)F_CLK);
+    pulsewidth(_duty*seconds);
+    _period = seconds;
+}
+
+void FastPWM::period_ms(int ms) {
+    period((double)ms*1000.0);
+}
+
+void FastPWM::period_us(int us) {
+    period((double)us*1000000.0);
+}
+
+void FastPWM::period_us(double us) {
+    period(us*1000000.0);
+}
+
+void FastPWM::pulsewidth(double seconds) {
+    *MR=(unsigned int) (seconds * (double)F_CLK);
+}
+
+void FastPWM::pulsewidth_ms(int ms) {
+    pulsewidth((double)ms*1000.0);
+}
+
+void FastPWM::pulsewidth_us(int us) {
+    pulsewidth((double)us*1000000.0);
+}
+
+void FastPWM::pulsewidth_us(double us) {
+    pulsewidth(us*1000000.0);
+}
+
+void FastPWM::write(double duty) {
+    _duty=duty;
+    pulsewidth(duty*_period);
+}
+
+double FastPWM::read( void ) {
+    return _duty;
+    }
+    
+FastPWM & FastPWM::operator= (double value) {
+    write(value);
+    return(*this);
+    }
+    
+FastPWM::operator double() {
+    return _duty;
+}
+    
\ No newline at end of file