This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PwmOut.h Source File

PwmOut.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2013 ARM Limited
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 #ifndef MBED_PWMOUT_H
00017 #define MBED_PWMOUT_H
00018 
00019 #include "platform/platform.h"
00020 
00021 #if DEVICE_PWMOUT
00022 #include "hal/pwmout_api.h"
00023 #include "platform/critical.h"
00024 
00025 namespace mbed {
00026 /** \addtogroup drivers */
00027 /** @{*/
00028 
00029 /** A pulse-width modulation digital output
00030  *
00031  * @Note Synchronization level: Interrupt safe
00032  *
00033  * Example
00034  * @code
00035  * // Fade a led on.
00036  * #include "mbed.h"
00037  *
00038  * PwmOut led(LED1);
00039  *
00040  * int main() {
00041  *     while(1) {
00042  *         led = led + 0.01;
00043  *         wait(0.2);
00044  *         if(led == 1.0) {
00045  *             led = 0;
00046  *         }
00047  *     }
00048  * }
00049  * @endcode
00050  *
00051  * @note
00052  *  On the LPC1768 and LPC2368, the PWMs all share the same
00053  *  period - if you change the period for one, you change it for all.
00054  *  Although routines that change the period maintain the duty cycle
00055  *  for its PWM, all other PWMs will require their duty cycle to be
00056  *  refreshed.
00057  */
00058 class PwmOut {
00059 
00060 public:
00061 
00062     /** Create a PwmOut connected to the specified pin
00063      *
00064      *  @param pin PwmOut pin to connect to
00065      */
00066     PwmOut(PinName pin) {
00067         core_util_critical_section_enter();
00068         pwmout_init(&_pwm, pin);
00069         core_util_critical_section_exit();
00070     }
00071 
00072     /** Set the ouput duty-cycle, specified as a percentage (float)
00073      *
00074      *  @param value A floating-point value representing the output duty-cycle,
00075      *    specified as a percentage. The value should lie between
00076      *    0.0f (representing on 0%) and 1.0f (representing on 100%).
00077      *    Values outside this range will be saturated to 0.0f or 1.0f.
00078      */
00079     void write(float value) {
00080         core_util_critical_section_enter();
00081         pwmout_write(&_pwm, value);
00082         core_util_critical_section_exit();
00083     }
00084 
00085     /** Return the current output duty-cycle setting, measured as a percentage (float)
00086      *
00087      *  @returns
00088      *    A floating-point value representing the current duty-cycle being output on the pin,
00089      *    measured as a percentage. The returned value will lie between
00090      *    0.0f (representing on 0%) and 1.0f (representing on 100%).
00091      *
00092      *  @note
00093      *  This value may not match exactly the value set by a previous <write>.
00094      */
00095     float read() {
00096         core_util_critical_section_enter();
00097         float val = pwmout_read(&_pwm);
00098         core_util_critical_section_exit();
00099         return val;
00100     }
00101 
00102     /** Set the PWM period, specified in seconds (float), keeping the duty cycle the same.
00103      *
00104      *  @note
00105      *   The resolution is currently in microseconds; periods smaller than this
00106      *   will be set to zero.
00107      */
00108     void period(float seconds) {
00109         core_util_critical_section_enter();
00110         pwmout_period(&_pwm, seconds);
00111         core_util_critical_section_exit();
00112     }
00113 
00114     /** Set the PWM period, specified in milli-seconds (int), keeping the duty cycle the same.
00115      */
00116     void period_ms(int ms) {
00117         core_util_critical_section_enter();
00118         pwmout_period_ms(&_pwm, ms);
00119         core_util_critical_section_exit();
00120     }
00121 
00122     /** Set the PWM period, specified in micro-seconds (int), keeping the duty cycle the same.
00123      */
00124     void period_us(int us) {
00125         core_util_critical_section_enter();
00126         pwmout_period_us(&_pwm, us);
00127         core_util_critical_section_exit();
00128     }
00129 
00130     /** Set the PWM pulsewidth, specified in seconds (float), keeping the period the same.
00131      */
00132     void pulsewidth(float seconds) {
00133         core_util_critical_section_enter();
00134         pwmout_pulsewidth(&_pwm, seconds);
00135         core_util_critical_section_exit();
00136     }
00137 
00138     /** Set the PWM pulsewidth, specified in milli-seconds (int), keeping the period the same.
00139      */
00140     void pulsewidth_ms(int ms) {
00141         core_util_critical_section_enter();
00142         pwmout_pulsewidth_ms(&_pwm, ms);
00143         core_util_critical_section_exit();
00144     }
00145 
00146     /** Set the PWM pulsewidth, specified in micro-seconds (int), keeping the period the same.
00147      */
00148     void pulsewidth_us(int us) {
00149         core_util_critical_section_enter();
00150         pwmout_pulsewidth_us(&_pwm, us);
00151         core_util_critical_section_exit();
00152     }
00153 
00154     /** A operator shorthand for write()
00155      */
00156     PwmOut& operator= (float value) {
00157         // Underlying call is thread safe
00158         write(value);
00159         return *this;
00160     }
00161 
00162     PwmOut& operator= (PwmOut& rhs) {
00163         // Underlying call is thread safe
00164         write(rhs.read());
00165         return *this;
00166     }
00167 
00168     /** An operator shorthand for read()
00169      */
00170     operator float() {
00171         // Underlying call is thread safe
00172         return read();
00173     }
00174 
00175 protected:
00176     pwmout_t _pwm;
00177 };
00178 
00179 } // namespace mbed
00180 
00181 #endif
00182 
00183 #endif
00184 
00185 /** @}*/