Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: qonly_controller foc-ed_in_the_bot_compact foc-ed_in_the_bot_compact CurrentModeSine ... more
Fork of FastPWM by
FastPWM.cpp@3:3094d3806cfc, 2012-07-25 (annotated)
- Committer:
- Sissors
- Date:
- Wed Jul 25 07:14:39 2012 +0000
- Revision:
- 3:3094d3806cfc
- Parent:
- 2:4b8de6ae5885
Fixed clk_sel, latch registers and constant duty when changing period
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Sissors | 0:f8c1b0ad5371 | 1 | #include "FastPWM.h" |
| Sissors | 0:f8c1b0ad5371 | 2 | |
| Sissors | 0:f8c1b0ad5371 | 3 | FastPWM::FastPWM(PinName pin) : PWMObject(pin){ |
| Sissors | 3:3094d3806cfc | 4 | //Set clock source |
| Sissors | 3:3094d3806cfc | 5 | LPC_SC->PCLKSEL0|=1<<12; |
| Sissors | 3:3094d3806cfc | 6 | |
| Sissors | 0:f8c1b0ad5371 | 7 | _duty=0; |
| Sissors | 0:f8c1b0ad5371 | 8 | _period=0.02; |
| Sissors | 3:3094d3806cfc | 9 | if (pin==p26||pin==LED1) { |
| Sissors | 3:3094d3806cfc | 10 | PWMUnit=1; |
| Sissors | 0:f8c1b0ad5371 | 11 | MR=&LPC_PWM1->MR1; |
| Sissors | 3:3094d3806cfc | 12 | } |
| Sissors | 3:3094d3806cfc | 13 | else if (pin==p25||pin==LED2){ |
| Sissors | 3:3094d3806cfc | 14 | PWMUnit=2; |
| Sissors | 0:f8c1b0ad5371 | 15 | MR=&LPC_PWM1->MR2; |
| Sissors | 3:3094d3806cfc | 16 | } |
| Sissors | 3:3094d3806cfc | 17 | else if (pin==p24||pin==LED3){ |
| Sissors | 3:3094d3806cfc | 18 | PWMUnit=3; |
| Sissors | 0:f8c1b0ad5371 | 19 | MR=&LPC_PWM1->MR3; |
| Sissors | 3:3094d3806cfc | 20 | } |
| Sissors | 3:3094d3806cfc | 21 | else if (pin==p23||pin==LED4){ |
| Sissors | 3:3094d3806cfc | 22 | PWMUnit=4; |
| Sissors | 0:f8c1b0ad5371 | 23 | MR=&LPC_PWM1->MR4; |
| Sissors | 3:3094d3806cfc | 24 | } |
| Sissors | 3:3094d3806cfc | 25 | else if (pin==p22){ |
| Sissors | 3:3094d3806cfc | 26 | PWMUnit=5; |
| Sissors | 0:f8c1b0ad5371 | 27 | MR=&LPC_PWM1->MR5; |
| Sissors | 3:3094d3806cfc | 28 | } |
| Sissors | 3:3094d3806cfc | 29 | else if (pin==p21){ |
| Sissors | 3:3094d3806cfc | 30 | PWMUnit=6; |
| Sissors | 0:f8c1b0ad5371 | 31 | MR=&LPC_PWM1->MR6; |
| Sissors | 3:3094d3806cfc | 32 | } |
| Sissors | 0:f8c1b0ad5371 | 33 | else |
| Sissors | 0:f8c1b0ad5371 | 34 | error("No hardware PWM pin\n\r"); |
| Sissors | 0:f8c1b0ad5371 | 35 | |
| Sissors | 0:f8c1b0ad5371 | 36 | period(_period); |
| Sissors | 0:f8c1b0ad5371 | 37 | } |
| Sissors | 0:f8c1b0ad5371 | 38 | |
| Sissors | 0:f8c1b0ad5371 | 39 | void FastPWM::period(double seconds) { |
| Sissors | 0:f8c1b0ad5371 | 40 | LPC_PWM1->MR0 = (unsigned int) (seconds * (double)F_CLK); |
| Sissors | 3:3094d3806cfc | 41 | LPC_PWM1->LER |= 1; |
| Sissors | 0:f8c1b0ad5371 | 42 | _period = seconds; |
| Sissors | 3:3094d3806cfc | 43 | pulsewidth(_duty*_period); |
| Sissors | 0:f8c1b0ad5371 | 44 | } |
| Sissors | 0:f8c1b0ad5371 | 45 | |
| Sissors | 0:f8c1b0ad5371 | 46 | void FastPWM::period_ms(int ms) { |
| Sissors | 2:4b8de6ae5885 | 47 | period((double)ms/1000.0); |
| Sissors | 0:f8c1b0ad5371 | 48 | } |
| Sissors | 0:f8c1b0ad5371 | 49 | |
| Sissors | 0:f8c1b0ad5371 | 50 | void FastPWM::period_us(int us) { |
| Sissors | 2:4b8de6ae5885 | 51 | period((double)us/1000000.0); |
| Sissors | 0:f8c1b0ad5371 | 52 | } |
| Sissors | 0:f8c1b0ad5371 | 53 | |
| Sissors | 0:f8c1b0ad5371 | 54 | void FastPWM::period_us(double us) { |
| Sissors | 2:4b8de6ae5885 | 55 | period(us/1000000.0); |
| Sissors | 0:f8c1b0ad5371 | 56 | } |
| Sissors | 0:f8c1b0ad5371 | 57 | |
| Sissors | 0:f8c1b0ad5371 | 58 | void FastPWM::pulsewidth(double seconds) { |
| Sissors | 0:f8c1b0ad5371 | 59 | *MR=(unsigned int) (seconds * (double)F_CLK); |
| Sissors | 3:3094d3806cfc | 60 | LPC_PWM1->LER |= 1<<PWMUnit; |
| Sissors | 3:3094d3806cfc | 61 | _duty=seconds/_period; |
| Sissors | 0:f8c1b0ad5371 | 62 | } |
| Sissors | 0:f8c1b0ad5371 | 63 | |
| Sissors | 0:f8c1b0ad5371 | 64 | void FastPWM::pulsewidth_ms(int ms) { |
| Sissors | 2:4b8de6ae5885 | 65 | pulsewidth((double)ms/1000.0); |
| Sissors | 0:f8c1b0ad5371 | 66 | } |
| Sissors | 0:f8c1b0ad5371 | 67 | |
| Sissors | 0:f8c1b0ad5371 | 68 | void FastPWM::pulsewidth_us(int us) { |
| Sissors | 2:4b8de6ae5885 | 69 | pulsewidth((double)us/1000000.0); |
| Sissors | 0:f8c1b0ad5371 | 70 | } |
| Sissors | 0:f8c1b0ad5371 | 71 | |
| Sissors | 0:f8c1b0ad5371 | 72 | void FastPWM::pulsewidth_us(double us) { |
| Sissors | 2:4b8de6ae5885 | 73 | pulsewidth(us/1000000.0); |
| Sissors | 0:f8c1b0ad5371 | 74 | } |
| Sissors | 0:f8c1b0ad5371 | 75 | |
| Sissors | 0:f8c1b0ad5371 | 76 | void FastPWM::write(double duty) { |
| Sissors | 0:f8c1b0ad5371 | 77 | _duty=duty; |
| Sissors | 0:f8c1b0ad5371 | 78 | pulsewidth(duty*_period); |
| Sissors | 0:f8c1b0ad5371 | 79 | } |
| Sissors | 0:f8c1b0ad5371 | 80 | |
| Sissors | 0:f8c1b0ad5371 | 81 | double FastPWM::read( void ) { |
| Sissors | 0:f8c1b0ad5371 | 82 | return _duty; |
| Sissors | 0:f8c1b0ad5371 | 83 | } |
| Sissors | 0:f8c1b0ad5371 | 84 | |
| Sissors | 0:f8c1b0ad5371 | 85 | FastPWM & FastPWM::operator= (double value) { |
| Sissors | 0:f8c1b0ad5371 | 86 | write(value); |
| Sissors | 0:f8c1b0ad5371 | 87 | return(*this); |
| Sissors | 0:f8c1b0ad5371 | 88 | } |
| Sissors | 0:f8c1b0ad5371 | 89 | |
| Sissors | 0:f8c1b0ad5371 | 90 | FastPWM::operator double() { |
| Sissors | 0:f8c1b0ad5371 | 91 | return _duty; |
| Sissors | 0:f8c1b0ad5371 | 92 | } |
| Sissors | 0:f8c1b0ad5371 | 93 |
