...

Dependents:   2doejemplo Labo_TRSE_Drone

Fork of mbed by mbed official

Committer:
emilmont
Date:
Mon Feb 18 11:12:58 2013 +0000
Revision:
59:0883845fe643
Parent:
55:d722ed6a4237
Child:
65:5798e58a58b1
Add pinmap NC terminators for LPC1768 CAN.
Update the license from MIT to Apache v2.
Make the semihost code target independent using opportune defines for the UID and MAC.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 44:24d45a770a51 1 /* mbed Microcontroller Library
emilmont 54:71b101360fb9 2 * Copyright (c) 2006-2013 ARM Limited
emilmont 44:24d45a770a51 3 *
emilmont 59:0883845fe643 4 * Licensed under the Apache License, Version 2.0 (the "License");
emilmont 59:0883845fe643 5 * you may not use this file except in compliance with the License.
emilmont 59:0883845fe643 6 * You may obtain a copy of the License at
emilmont 59:0883845fe643 7 *
emilmont 59:0883845fe643 8 * http://www.apache.org/licenses/LICENSE-2.0
emilmont 44:24d45a770a51 9 *
emilmont 59:0883845fe643 10 * Unless required by applicable law or agreed to in writing, software
emilmont 59:0883845fe643 11 * distributed under the License is distributed on an "AS IS" BASIS,
emilmont 59:0883845fe643 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
emilmont 59:0883845fe643 13 * See the License for the specific language governing permissions and
emilmont 59:0883845fe643 14 * limitations under the License.
emilmont 44:24d45a770a51 15 */
simon.ford@mbed.co.uk 0:82220227f4fa 16 #ifndef MBED_PWMOUT_H
simon.ford@mbed.co.uk 0:82220227f4fa 17 #define MBED_PWMOUT_H
simon.ford@mbed.co.uk 0:82220227f4fa 18
emilmont 44:24d45a770a51 19 #include "platform.h"
emilmont 27:7110ebee3484 20
emilmont 27:7110ebee3484 21 #if DEVICE_PWMOUT
emilmont 44:24d45a770a51 22 #include "pwmout_api.h"
simon.ford@mbed.co.uk 0:82220227f4fa 23
simon.ford@mbed.co.uk 0:82220227f4fa 24 namespace mbed {
simon.ford@mbed.co.uk 0:82220227f4fa 25
emilmont 43:e2ed12d17f06 26 /** A pulse-width modulation digital output
simon.ford@mbed.co.uk 5:62573be585e9 27 *
rolf.meyer@arm.com 11:1c1ebd0324fa 28 * Example
emilmont 43:e2ed12d17f06 29 * @code
emilmont 43:e2ed12d17f06 30 * // Fade a led on.
emilmont 43:e2ed12d17f06 31 * #include "mbed.h"
simon.ford@mbed.co.uk 18:b3c9f16cbb96 32 *
emilmont 43:e2ed12d17f06 33 * PwmOut led(LED1);
emilmont 55:d722ed6a4237 34 *
emilmont 43:e2ed12d17f06 35 * int main() {
emilmont 43:e2ed12d17f06 36 * while(1) {
emilmont 43:e2ed12d17f06 37 * led = led + 0.01;
emilmont 43:e2ed12d17f06 38 * wait(0.2);
emilmont 43:e2ed12d17f06 39 * if(led == 1.0) {
emilmont 43:e2ed12d17f06 40 * led = 0;
emilmont 43:e2ed12d17f06 41 * }
emilmont 43:e2ed12d17f06 42 * }
emilmont 43:e2ed12d17f06 43 * }
emilmont 43:e2ed12d17f06 44 * @endcode
emilmont 43:e2ed12d17f06 45 *
emilmont 43:e2ed12d17f06 46 * @note
emilmont 43:e2ed12d17f06 47 * On the LPC1768 and LPC2368, the PWMs all share the same
simon.ford@mbed.co.uk 18:b3c9f16cbb96 48 * period - if you change the period for one, you change it for all.
simon.ford@mbed.co.uk 18:b3c9f16cbb96 49 * Although routines that change the period maintain the duty cycle
simon.ford@mbed.co.uk 18:b3c9f16cbb96 50 * for its PWM, all other PWMs will require their duty cycle to be
simon.ford@mbed.co.uk 18:b3c9f16cbb96 51 * refreshed.
simon.ford@mbed.co.uk 0:82220227f4fa 52 */
emilmont 44:24d45a770a51 53 class PwmOut {
simon.ford@mbed.co.uk 0:82220227f4fa 54
simon.ford@mbed.co.uk 0:82220227f4fa 55 public:
simon.ford@mbed.co.uk 0:82220227f4fa 56
emilmont 43:e2ed12d17f06 57 /** Create a PwmOut connected to the specified pin
rolf.meyer@arm.com 11:1c1ebd0324fa 58 *
emilmont 43:e2ed12d17f06 59 * @param pin PwmOut pin to connect to
rolf.meyer@arm.com 11:1c1ebd0324fa 60 */
emilmont 44:24d45a770a51 61 PwmOut(PinName pin) {
emilmont 44:24d45a770a51 62 pwmout_init(&_pwm, pin);
emilmont 44:24d45a770a51 63 }
simon.ford@mbed.co.uk 0:82220227f4fa 64
emilmont 43:e2ed12d17f06 65 /** Set the ouput duty-cycle, specified as a percentage (float)
rolf.meyer@arm.com 11:1c1ebd0324fa 66 *
emilmont 55:d722ed6a4237 67 * @param value A floating-point value representing the output duty-cycle,
rolf.meyer@arm.com 11:1c1ebd0324fa 68 * specified as a percentage. The value should lie between
rolf.meyer@arm.com 11:1c1ebd0324fa 69 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
emilmont 44:24d45a770a51 70 * Values outside this range will be saturated to 0.0f or 1.0f.
rolf.meyer@arm.com 11:1c1ebd0324fa 71 */
emilmont 44:24d45a770a51 72 void write(float value) {
emilmont 44:24d45a770a51 73 pwmout_write(&_pwm, value);
emilmont 44:24d45a770a51 74 }
simon.ford@mbed.co.uk 0:82220227f4fa 75
emilmont 43:e2ed12d17f06 76 /** Return the current output duty-cycle setting, measured as a percentage (float)
simon.ford@mbed.co.uk 0:82220227f4fa 77 *
emilmont 43:e2ed12d17f06 78 * @returns
emilmont 55:d722ed6a4237 79 * A floating-point value representing the current duty-cycle being output on the pin,
rolf.meyer@arm.com 11:1c1ebd0324fa 80 * measured as a percentage. The returned value will lie between
rolf.meyer@arm.com 11:1c1ebd0324fa 81 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
rolf.meyer@arm.com 11:1c1ebd0324fa 82 *
emilmont 43:e2ed12d17f06 83 * @note
emilmont 44:24d45a770a51 84 * This value may not match exactly the value set by a previous <write>.
rolf.meyer@arm.com 11:1c1ebd0324fa 85 */
emilmont 44:24d45a770a51 86 float read() {
emilmont 44:24d45a770a51 87 return pwmout_read(&_pwm);
emilmont 44:24d45a770a51 88 }
emilmont 55:d722ed6a4237 89
emilmont 43:e2ed12d17f06 90 /** Set the PWM period, specified in seconds (float), keeping the duty cycle the same.
simon.ford@mbed.co.uk 18:b3c9f16cbb96 91 *
emilmont 43:e2ed12d17f06 92 * @note
emilmont 44:24d45a770a51 93 * The resolution is currently in microseconds; periods smaller than this
emilmont 44:24d45a770a51 94 * will be set to zero.
rolf.meyer@arm.com 11:1c1ebd0324fa 95 */
emilmont 44:24d45a770a51 96 void period(float seconds) {
emilmont 44:24d45a770a51 97 pwmout_period(&_pwm, seconds);
emilmont 44:24d45a770a51 98 }
simon.ford@mbed.co.uk 0:82220227f4fa 99
emilmont 43:e2ed12d17f06 100 /** Set the PWM period, specified in milli-seconds (int), keeping the duty cycle the same.
rolf.meyer@arm.com 11:1c1ebd0324fa 101 */
emilmont 44:24d45a770a51 102 void period_ms(int ms) {
emilmont 44:24d45a770a51 103 pwmout_period_ms(&_pwm, ms);
emilmont 44:24d45a770a51 104 }
simon.ford@mbed.co.uk 5:62573be585e9 105
emilmont 43:e2ed12d17f06 106 /** Set the PWM period, specified in micro-seconds (int), keeping the duty cycle the same.
rolf.meyer@arm.com 11:1c1ebd0324fa 107 */
emilmont 44:24d45a770a51 108 void period_us(int us) {
emilmont 44:24d45a770a51 109 pwmout_period_us(&_pwm, us);
emilmont 44:24d45a770a51 110 }
simon.ford@mbed.co.uk 5:62573be585e9 111
emilmont 43:e2ed12d17f06 112 /** Set the PWM pulsewidth, specified in seconds (float), keeping the period the same.
rolf.meyer@arm.com 11:1c1ebd0324fa 113 */
emilmont 44:24d45a770a51 114 void pulsewidth(float seconds) {
emilmont 44:24d45a770a51 115 pwmout_pulsewidth(&_pwm, seconds);
emilmont 44:24d45a770a51 116 }
rolf.meyer@arm.com 11:1c1ebd0324fa 117
emilmont 43:e2ed12d17f06 118 /** Set the PWM pulsewidth, specified in milli-seconds (int), keeping the period the same.
rolf.meyer@arm.com 11:1c1ebd0324fa 119 */
emilmont 44:24d45a770a51 120 void pulsewidth_ms(int ms) {
emilmont 44:24d45a770a51 121 pwmout_pulsewidth_ms(&_pwm, ms);
emilmont 44:24d45a770a51 122 }
rolf.meyer@arm.com 11:1c1ebd0324fa 123
emilmont 43:e2ed12d17f06 124 /** Set the PWM pulsewidth, specified in micro-seconds (int), keeping the period the same.
rolf.meyer@arm.com 11:1c1ebd0324fa 125 */
emilmont 44:24d45a770a51 126 void pulsewidth_us(int us) {
emilmont 44:24d45a770a51 127 pwmout_pulsewidth_us(&_pwm, us);
emilmont 44:24d45a770a51 128 }
simon.ford@mbed.co.uk 0:82220227f4fa 129
rolf.meyer@arm.com 11:1c1ebd0324fa 130 #ifdef MBED_OPERATORS
emilmont 43:e2ed12d17f06 131 /** A operator shorthand for write()
rolf.meyer@arm.com 11:1c1ebd0324fa 132 */
emilmont 44:24d45a770a51 133 PwmOut& operator= (float value) {
emilmont 44:24d45a770a51 134 write(value);
emilmont 44:24d45a770a51 135 return *this;
emilmont 44:24d45a770a51 136 }
emilmont 55:d722ed6a4237 137
emilmont 44:24d45a770a51 138 PwmOut& operator= (PwmOut& rhs) {
emilmont 44:24d45a770a51 139 write(rhs.read());
emilmont 44:24d45a770a51 140 return *this;
emilmont 44:24d45a770a51 141 }
emilmont 55:d722ed6a4237 142
emilmont 43:e2ed12d17f06 143 /** An operator shorthand for read()
rolf.meyer@arm.com 11:1c1ebd0324fa 144 */
emilmont 44:24d45a770a51 145 operator float() {
emilmont 44:24d45a770a51 146 return read();
emilmont 44:24d45a770a51 147 }
rolf.meyer@arm.com 11:1c1ebd0324fa 148 #endif
simon.ford@mbed.co.uk 5:62573be585e9 149
simon.ford@mbed.co.uk 0:82220227f4fa 150 protected:
emilmont 44:24d45a770a51 151 pwmout_t _pwm;
simon.ford@mbed.co.uk 0:82220227f4fa 152 };
simon.ford@mbed.co.uk 0:82220227f4fa 153
rolf.meyer@arm.com 11:1c1ebd0324fa 154 } // namespace mbed
simon.ford@mbed.co.uk 0:82220227f4fa 155
simon.ford@mbed.co.uk 1:6b7f447ca868 156 #endif
emilmont 27:7110ebee3484 157
emilmont 27:7110ebee3484 158 #endif