The code from https://github.com/vpcola/Nucleo

Committer:
sinrab
Date:
Wed Oct 08 11:00:24 2014 +0000
Revision:
0:5464d5e415e5
The code from https://github.com/vpcola/Nucleo

Who changed what in which revision?

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