Fork of Erik Olieman's FastPWM library created to add the targets I need.
Fork of FastPWM by
FastPWM.h
- Committer:
- Sissors
- Date:
- 2012-07-12
- Revision:
- 1:1aed61747ed6
- Parent:
- 0:f8c1b0ad5371
- Child:
- 3:3094d3806cfc
File content as of revision 1:1aed61747ed6:
/* .---. _....._ / p `\ .-""`: :`"-. |__ - | ,' . ' ', ._> \ /: : ; :, '-. '\`. . : ' \ `. | .'._.' '._.' '._.'. | `;-\. : : ' '/,__, .-'`'._ ' . : _.'.__.' ((((-'/ `";--..:..--;"` \ .' / \ \ jgs ((((-' ((((-' Yeah ASCII art turtle more fun than copyright stuff */ #include "mbed.h" #ifndef FASTPWM_H #define FASTPWM_H #ifndef F_CLK #define F_CLK 96000000 #endif /** Library that allows faster and/or higher resolution PWM output * * Library can directly replace standard mbed PWM library. Only limitation is that the maximum PWM period is four times shorter * The maximum achievable period is roughly 40 seconds, I dont think that should be a problem. * Do take into account all PWM objects will run four times faster than default. * * Contrary to the default mbed library, this library takes doubles instead of floats. The compiler will autocast if needed, * but do take into account it is done for a reason, your accuracy will otherwise be limitted by the floating point precision. * * In your program you can define F_CLK if you use a different clock frequency than the default one. * * Only works on LPC1768 for now. If you want support for the other one, send a PM and I will have a look, but I cannot even compile for it. */ class FastPWM { public: /** * Create a FastPWM object connected to the specified pin * * @param pin - PWM pin to connect to */ FastPWM(PinName pin); /** * Set the PWM period, specified in seconds (double), keeping the duty cycle the same. */ void period(double seconds); /** * Set the PWM period, specified in milli-seconds (int), keeping the duty cycle the same. */ void period_ms(int ms); /** * Set the PWM period, specified in micro-seconds (int), keeping the duty cycle the same. */ void period_us(int us); /** * Set the PWM period, specified in micro-seconds (double), keeping the duty cycle the same. */ void period_us(double us); /** * Set the PWM pulsewidth, specified in seconds (double), keeping the period the same. */ void pulsewidth(double seconds); /** * Set the PWM pulsewidth, specified in milli-seconds (int), keeping the period the same. */ void pulsewidth_ms(int ms); /** * Set the PWM pulsewidth, specified in micro-seconds (int), keeping the period the same. */ void pulsewidth_us(int us); /** * Set the PWM pulsewidth, specified in micro-seconds (double), keeping the period the same. */ void pulsewidth_us(double us); /** * Set the ouput duty-cycle, specified as a percentage (double) * * @param duty - A double value representing the output duty-cycle, specified as a percentage. The value should lie between 0.0 (representing on 0%) and 1.0 (representing on 100%). */ void write(double duty); /** * Return the ouput duty-cycle, specified as a percentage (double) * * @param return - A double value representing the output duty-cycle, specified as a percentage. */ double read( void ); /** * An operator shorthand for write() */ FastPWM& operator= (double value); /** * An operator shorthand for read() */ operator double(); private: PwmOut PWMObject; double _duty; double _period; __IO uint32_t *MR; }; #endif