mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1
kenjiArai 0:5b88d5760320 2 /** \addtogroup hal */
kenjiArai 0:5b88d5760320 3 /** @{*/
kenjiArai 0:5b88d5760320 4 /* mbed Microcontroller Library
kenjiArai 0:5b88d5760320 5 * Copyright (c) 2006-2013 ARM Limited
kenjiArai 0:5b88d5760320 6 * SPDX-License-Identifier: Apache-2.0
kenjiArai 0:5b88d5760320 7 *
kenjiArai 0:5b88d5760320 8 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 9 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 10 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 11 *
kenjiArai 0:5b88d5760320 12 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 13 *
kenjiArai 0:5b88d5760320 14 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 15 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 17 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 18 * limitations under the License.
kenjiArai 0:5b88d5760320 19 */
kenjiArai 0:5b88d5760320 20 #ifndef MBED_PWMOUT_API_H
kenjiArai 0:5b88d5760320 21 #define MBED_PWMOUT_API_H
kenjiArai 0:5b88d5760320 22
kenjiArai 0:5b88d5760320 23 #include "device.h"
kenjiArai 0:5b88d5760320 24 #include "pinmap.h"
kenjiArai 0:5b88d5760320 25
kenjiArai 0:5b88d5760320 26 #if DEVICE_PWMOUT
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28 #ifdef __cplusplus
kenjiArai 0:5b88d5760320 29 extern "C" {
kenjiArai 0:5b88d5760320 30 #endif
kenjiArai 0:5b88d5760320 31
kenjiArai 0:5b88d5760320 32 /** Pwmout hal structure. pwmout_s is declared in the target's hal
kenjiArai 0:5b88d5760320 33 */
kenjiArai 0:5b88d5760320 34 typedef struct pwmout_s pwmout_t;
kenjiArai 0:5b88d5760320 35
kenjiArai 0:5b88d5760320 36 /**
kenjiArai 0:5b88d5760320 37 * \defgroup hal_pwmout Pwmout hal functions
kenjiArai 1:9db0e321a9f4 38 *
kenjiArai 1:9db0e321a9f4 39 * # Defined behavior
kenjiArai 1:9db0e321a9f4 40 * * ::pwmout_init initializes the pwmout_t control structure
kenjiArai 1:9db0e321a9f4 41 * * ::pwmout_free deinitializes the pwmout object
kenjiArai 1:9db0e321a9f4 42 * * ::pwmout_write sets the output duty-cycle in range <0.0f, 1.0f>
kenjiArai 1:9db0e321a9f4 43 * * ::pwmout_read returns the current float-point output duty-cycle in range <0.0f, 1.0f>
kenjiArai 1:9db0e321a9f4 44 * * ::pwmout_period sets the PWM period specified in seconds, keeping the duty cycle the same
kenjiArai 1:9db0e321a9f4 45 * * ::pwmout_period_ms sets the PWM period specified in miliseconds, keeping the duty cycle the same
kenjiArai 1:9db0e321a9f4 46 * * ::pwmout_period_us sets the PWM period specified in microseconds, keeping the duty cycle the same
kenjiArai 1:9db0e321a9f4 47 * * ::pwmout_pulsewidth sets the PWM pulsewidth specified in seconds, keeping the period the same
kenjiArai 1:9db0e321a9f4 48 * * ::pwmout_pulsewidth_ms sets the PWM pulsewidth specified in miliseconds, keeping the period the same
kenjiArai 1:9db0e321a9f4 49 * * ::pwmout_pulsewidth_us sets the PWM pulsewidth specified in microseconds, keeping the period the same
kenjiArai 1:9db0e321a9f4 50 * * The accuracy of the PWM is +/- 10%
kenjiArai 1:9db0e321a9f4 51 * * The PWM operations ::pwmout_write, ::pwmout_read, ::pwmout_read, ::pwmout_period_ms, ::pwmout_period_us
kenjiArai 1:9db0e321a9f4 52 * ::pwmout_pulsewidth, ::pwmout_pulsewidth_ms, ::pwmout_pulsewidth_us take less than 20us to complete
kenjiArai 1:9db0e321a9f4 53 *
kenjiArai 1:9db0e321a9f4 54 * # Undefined behavior
kenjiArai 1:9db0e321a9f4 55 * * Calling other function before ::pwmout_init
kenjiArai 1:9db0e321a9f4 56 * * Calling ::pwmout_init with NC as pwmout pin
kenjiArai 1:9db0e321a9f4 57 *
kenjiArai 0:5b88d5760320 58 * @{
kenjiArai 0:5b88d5760320 59 */
kenjiArai 0:5b88d5760320 60
kenjiArai 1:9db0e321a9f4 61 /**
kenjiArai 1:9db0e321a9f4 62 * \defgroup hal_pwmout_tests GPIO IRQ HAL tests
kenjiArai 1:9db0e321a9f4 63 * The Pwmout HAL tests ensure driver conformance to defined behaviour.
kenjiArai 1:9db0e321a9f4 64 *
kenjiArai 1:9db0e321a9f4 65 * To run the Pwmout hal tests use the command:
kenjiArai 1:9db0e321a9f4 66 *
kenjiArai 1:9db0e321a9f4 67 * mbed test -t <toolchain> -m <target> -n tests-mbed_hal_fpga_ci_test_shield-pwm
kenjiArai 1:9db0e321a9f4 68 *
kenjiArai 1:9db0e321a9f4 69 */
kenjiArai 1:9db0e321a9f4 70
kenjiArai 1:9db0e321a9f4 71 /** Initialize the pwm out peripheral and configure the pin
kenjiArai 1:9db0e321a9f4 72 *
kenjiArai 1:9db0e321a9f4 73 * @param obj The pwmout object to initialize
kenjiArai 1:9db0e321a9f4 74 * @param pinmap pointer to structure which holds static pinmap
kenjiArai 1:9db0e321a9f4 75 */
kenjiArai 1:9db0e321a9f4 76 void pwmout_init_direct(pwmout_t *obj, const PinMap *pinmap);
kenjiArai 1:9db0e321a9f4 77
kenjiArai 0:5b88d5760320 78 /** Initialize the pwm out peripheral and configure the pin
kenjiArai 0:5b88d5760320 79 *
kenjiArai 0:5b88d5760320 80 * @param obj The pwmout object to initialize
kenjiArai 0:5b88d5760320 81 * @param pin The pwmout pin to initialize
kenjiArai 0:5b88d5760320 82 */
kenjiArai 0:5b88d5760320 83 void pwmout_init(pwmout_t *obj, PinName pin);
kenjiArai 0:5b88d5760320 84
kenjiArai 0:5b88d5760320 85 /** Deinitialize the pwmout object
kenjiArai 0:5b88d5760320 86 *
kenjiArai 0:5b88d5760320 87 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 88 */
kenjiArai 0:5b88d5760320 89 void pwmout_free(pwmout_t *obj);
kenjiArai 0:5b88d5760320 90
kenjiArai 0:5b88d5760320 91 /** Set the output duty-cycle in range <0.0f, 1.0f>
kenjiArai 0:5b88d5760320 92 *
kenjiArai 0:5b88d5760320 93 * Value 0.0f represents 0 percentage, 1.0f represents 100 percent.
kenjiArai 0:5b88d5760320 94 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 95 * @param percent The floating-point percentage number
kenjiArai 0:5b88d5760320 96 */
kenjiArai 0:5b88d5760320 97 void pwmout_write(pwmout_t *obj, float percent);
kenjiArai 0:5b88d5760320 98
kenjiArai 0:5b88d5760320 99 /** Read the current float-point output duty-cycle
kenjiArai 0:5b88d5760320 100 *
kenjiArai 0:5b88d5760320 101 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 102 * @return A floating-point output duty-cycle
kenjiArai 0:5b88d5760320 103 */
kenjiArai 0:5b88d5760320 104 float pwmout_read(pwmout_t *obj);
kenjiArai 0:5b88d5760320 105
kenjiArai 0:5b88d5760320 106 /** Set the PWM period specified in seconds, keeping the duty cycle the same
kenjiArai 0:5b88d5760320 107 *
kenjiArai 0:5b88d5760320 108 * Periods smaller than microseconds (the lowest resolution) are set to zero.
kenjiArai 0:5b88d5760320 109 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 110 * @param seconds The floating-point seconds period
kenjiArai 0:5b88d5760320 111 */
kenjiArai 0:5b88d5760320 112 void pwmout_period(pwmout_t *obj, float seconds);
kenjiArai 0:5b88d5760320 113
kenjiArai 0:5b88d5760320 114 /** Set the PWM period specified in miliseconds, keeping the duty cycle the same
kenjiArai 0:5b88d5760320 115 *
kenjiArai 0:5b88d5760320 116 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 117 * @param ms The milisecond period
kenjiArai 0:5b88d5760320 118 */
kenjiArai 0:5b88d5760320 119 void pwmout_period_ms(pwmout_t *obj, int ms);
kenjiArai 0:5b88d5760320 120
kenjiArai 0:5b88d5760320 121 /** Set the PWM period specified in microseconds, keeping the duty cycle the same
kenjiArai 0:5b88d5760320 122 *
kenjiArai 0:5b88d5760320 123 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 124 * @param us The microsecond period
kenjiArai 0:5b88d5760320 125 */
kenjiArai 0:5b88d5760320 126 void pwmout_period_us(pwmout_t *obj, int us);
kenjiArai 0:5b88d5760320 127
kenjiArai 0:5b88d5760320 128 /** Set the PWM pulsewidth specified in seconds, keeping the period the same.
kenjiArai 0:5b88d5760320 129 *
kenjiArai 0:5b88d5760320 130 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 131 * @param seconds The floating-point pulsewidth in seconds
kenjiArai 0:5b88d5760320 132 */
kenjiArai 0:5b88d5760320 133 void pwmout_pulsewidth(pwmout_t *obj, float seconds);
kenjiArai 0:5b88d5760320 134
kenjiArai 0:5b88d5760320 135 /** Set the PWM pulsewidth specified in miliseconds, keeping the period the same.
kenjiArai 0:5b88d5760320 136 *
kenjiArai 0:5b88d5760320 137 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 138 * @param ms The floating-point pulsewidth in miliseconds
kenjiArai 0:5b88d5760320 139 */
kenjiArai 0:5b88d5760320 140 void pwmout_pulsewidth_ms(pwmout_t *obj, int ms);
kenjiArai 0:5b88d5760320 141
kenjiArai 0:5b88d5760320 142 /** Set the PWM pulsewidth specified in microseconds, keeping the period the same.
kenjiArai 0:5b88d5760320 143 *
kenjiArai 0:5b88d5760320 144 * @param obj The pwmout object
kenjiArai 0:5b88d5760320 145 * @param us The floating-point pulsewidth in microseconds
kenjiArai 0:5b88d5760320 146 */
kenjiArai 0:5b88d5760320 147 void pwmout_pulsewidth_us(pwmout_t *obj, int us);
kenjiArai 0:5b88d5760320 148
kenjiArai 0:5b88d5760320 149 /** Get the pins that support PWM
kenjiArai 0:5b88d5760320 150 *
kenjiArai 0:5b88d5760320 151 * Return a PinMap array of pins that support PWM.
kenjiArai 0:5b88d5760320 152 * The array is terminated with {NC, NC, 0}.
kenjiArai 0:5b88d5760320 153 *
kenjiArai 0:5b88d5760320 154 * @return PinMap array
kenjiArai 0:5b88d5760320 155 */
kenjiArai 0:5b88d5760320 156 const PinMap *pwmout_pinmap(void);
kenjiArai 0:5b88d5760320 157
kenjiArai 0:5b88d5760320 158 /**@}*/
kenjiArai 0:5b88d5760320 159
kenjiArai 0:5b88d5760320 160 #ifdef __cplusplus
kenjiArai 0:5b88d5760320 161 }
kenjiArai 0:5b88d5760320 162 #endif
kenjiArai 0:5b88d5760320 163
kenjiArai 0:5b88d5760320 164 #endif
kenjiArai 0:5b88d5760320 165
kenjiArai 0:5b88d5760320 166 #endif
kenjiArai 0:5b88d5760320 167
kenjiArai 0:5b88d5760320 168 /** @}*/