cc y / mbed

Fork of mbed by mbed official

Committer:
kaoshen
Date:
Tue Jan 17 23:27:32 2017 +0000
Revision:
135:fce8a9387ed1
Parent:
123:b0220dba8be7
333 ADS1115 ADC1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 123:b0220dba8be7 1 /*
Kojto 123:b0220dba8be7 2 * Copyright (c) 2015 Nordic Semiconductor ASA
Kojto 123:b0220dba8be7 3 * All rights reserved.
Kojto 123:b0220dba8be7 4 *
Kojto 123:b0220dba8be7 5 * Redistribution and use in source and binary forms, with or without modification,
Kojto 123:b0220dba8be7 6 * are permitted provided that the following conditions are met:
Kojto 123:b0220dba8be7 7 *
Kojto 123:b0220dba8be7 8 * 1. Redistributions of source code must retain the above copyright notice, this list
Kojto 123:b0220dba8be7 9 * of conditions and the following disclaimer.
Kojto 123:b0220dba8be7 10 *
Kojto 123:b0220dba8be7 11 * 2. Redistributions in binary form, except as embedded into a Nordic Semiconductor ASA
Kojto 123:b0220dba8be7 12 * integrated circuit in a product or a software update for such product, must reproduce
Kojto 123:b0220dba8be7 13 * the above copyright notice, this list of conditions and the following disclaimer in
Kojto 123:b0220dba8be7 14 * the documentation and/or other materials provided with the distribution.
Kojto 123:b0220dba8be7 15 *
Kojto 123:b0220dba8be7 16 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its contributors may be
Kojto 123:b0220dba8be7 17 * used to endorse or promote products derived from this software without specific prior
Kojto 123:b0220dba8be7 18 * written permission.
Kojto 123:b0220dba8be7 19 *
Kojto 123:b0220dba8be7 20 * 4. This software, with or without modification, must only be used with a
Kojto 123:b0220dba8be7 21 * Nordic Semiconductor ASA integrated circuit.
Kojto 123:b0220dba8be7 22 *
Kojto 123:b0220dba8be7 23 * 5. Any software provided in binary or object form under this license must not be reverse
Kojto 123:b0220dba8be7 24 * engineered, decompiled, modified and/or disassembled.
Kojto 123:b0220dba8be7 25 *
Kojto 123:b0220dba8be7 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Kojto 123:b0220dba8be7 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Kojto 123:b0220dba8be7 28 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Kojto 123:b0220dba8be7 29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
Kojto 123:b0220dba8be7 30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Kojto 123:b0220dba8be7 31 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Kojto 123:b0220dba8be7 32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
Kojto 123:b0220dba8be7 33 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Kojto 123:b0220dba8be7 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Kojto 123:b0220dba8be7 35 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kojto 123:b0220dba8be7 36 *
Kojto 123:b0220dba8be7 37 */
Kojto 123:b0220dba8be7 38
Kojto 123:b0220dba8be7 39 #ifndef NRF_GPIO_H__
Kojto 123:b0220dba8be7 40 #define NRF_GPIO_H__
Kojto 123:b0220dba8be7 41
Kojto 123:b0220dba8be7 42 #include "nrf.h"
Kojto 123:b0220dba8be7 43 #include <stdbool.h>
Kojto 123:b0220dba8be7 44
Kojto 123:b0220dba8be7 45 /**
Kojto 123:b0220dba8be7 46 * @defgroup nrf_gpio GPIO abstraction
Kojto 123:b0220dba8be7 47 * @{
Kojto 123:b0220dba8be7 48 * @ingroup nrf_drivers
Kojto 123:b0220dba8be7 49 * @brief GPIO pin abstraction and port abstraction for reading and writing byte-wise to GPIO ports.
Kojto 123:b0220dba8be7 50 *
Kojto 123:b0220dba8be7 51 * Here, the GPIO ports are defined as follows:
Kojto 123:b0220dba8be7 52 * - Port 0 -> pin 0-7
Kojto 123:b0220dba8be7 53 * - Port 1 -> pin 8-15
Kojto 123:b0220dba8be7 54 * - Port 2 -> pin 16-23
Kojto 123:b0220dba8be7 55 * - Port 3 -> pin 24-31
Kojto 123:b0220dba8be7 56 */
Kojto 123:b0220dba8be7 57
Kojto 123:b0220dba8be7 58 #define NUMBER_OF_PINS 32
Kojto 123:b0220dba8be7 59
Kojto 123:b0220dba8be7 60 /**
Kojto 123:b0220dba8be7 61 * @brief Enumerator used for selecting between port 0 - 3.
Kojto 123:b0220dba8be7 62 */
Kojto 123:b0220dba8be7 63 typedef enum
Kojto 123:b0220dba8be7 64 {
Kojto 123:b0220dba8be7 65 NRF_GPIO_PORT_SELECT_PORT0 = 0, ///< Port 0 (GPIO pin 0-7)
Kojto 123:b0220dba8be7 66 NRF_GPIO_PORT_SELECT_PORT1, ///< Port 1 (GPIO pin 8-15)
Kojto 123:b0220dba8be7 67 NRF_GPIO_PORT_SELECT_PORT2, ///< Port 2 (GPIO pin 16-23)
Kojto 123:b0220dba8be7 68 NRF_GPIO_PORT_SELECT_PORT3, ///< Port 3 (GPIO pin 24-31)
Kojto 123:b0220dba8be7 69 } nrf_gpio_port_select_t;
Kojto 123:b0220dba8be7 70
Kojto 123:b0220dba8be7 71 /**
Kojto 123:b0220dba8be7 72 * @brief Enumerator used for setting the direction of a GPIO port.
Kojto 123:b0220dba8be7 73 */
Kojto 123:b0220dba8be7 74 typedef enum
Kojto 123:b0220dba8be7 75 {
Kojto 123:b0220dba8be7 76 NRF_GPIO_PORT_DIR_OUTPUT, ///< Output
Kojto 123:b0220dba8be7 77 NRF_GPIO_PORT_DIR_INPUT ///< Input
Kojto 123:b0220dba8be7 78 } nrf_gpio_port_dir_t;
Kojto 123:b0220dba8be7 79
Kojto 123:b0220dba8be7 80 /**
Kojto 123:b0220dba8be7 81 * @brief Pin direction definitions.
Kojto 123:b0220dba8be7 82 */
Kojto 123:b0220dba8be7 83 typedef enum
Kojto 123:b0220dba8be7 84 {
Kojto 123:b0220dba8be7 85 NRF_GPIO_PIN_DIR_INPUT = GPIO_PIN_CNF_DIR_Input, ///< Input
Kojto 123:b0220dba8be7 86 NRF_GPIO_PIN_DIR_OUTPUT = GPIO_PIN_CNF_DIR_Output ///< Output
Kojto 123:b0220dba8be7 87 } nrf_gpio_pin_dir_t;
Kojto 123:b0220dba8be7 88
Kojto 123:b0220dba8be7 89 /**
Kojto 123:b0220dba8be7 90 * @brief Connection of input buffer
Kojto 123:b0220dba8be7 91 */
Kojto 123:b0220dba8be7 92 typedef enum
Kojto 123:b0220dba8be7 93 {
Kojto 123:b0220dba8be7 94 NRF_GPIO_PIN_INPUT_CONNECT = GPIO_PIN_CNF_INPUT_Connect, ///< Connect input buffer
Kojto 123:b0220dba8be7 95 NRF_GPIO_PIN_INPUT_DISCONNECT = GPIO_PIN_CNF_INPUT_Disconnect ///< Disconnect input buffer
Kojto 123:b0220dba8be7 96 } nrf_gpio_pin_input_t;
Kojto 123:b0220dba8be7 97
Kojto 123:b0220dba8be7 98 /**
Kojto 123:b0220dba8be7 99 * @brief Enumerator used for selecting the pin to be pulled down or up at the time of pin configuration
Kojto 123:b0220dba8be7 100 */
Kojto 123:b0220dba8be7 101 typedef enum
Kojto 123:b0220dba8be7 102 {
Kojto 123:b0220dba8be7 103 NRF_GPIO_PIN_NOPULL = GPIO_PIN_CNF_PULL_Disabled, ///< Pin pullup resistor disabled
Kojto 123:b0220dba8be7 104 NRF_GPIO_PIN_PULLDOWN = GPIO_PIN_CNF_PULL_Pulldown, ///< Pin pulldown resistor enabled
Kojto 123:b0220dba8be7 105 NRF_GPIO_PIN_PULLUP = GPIO_PIN_CNF_PULL_Pullup, ///< Pin pullup resistor enabled
Kojto 123:b0220dba8be7 106 } nrf_gpio_pin_pull_t;
Kojto 123:b0220dba8be7 107
Kojto 123:b0220dba8be7 108 /**
Kojto 123:b0220dba8be7 109 * @brief Enumerator used for selecting output drive mode
Kojto 123:b0220dba8be7 110 */
Kojto 123:b0220dba8be7 111 typedef enum
Kojto 123:b0220dba8be7 112 {
Kojto 123:b0220dba8be7 113 NRF_GPIO_PIN_S0S1 = GPIO_PIN_CNF_DRIVE_S0S1, ///< !< Standard '0', standard '1'
Kojto 123:b0220dba8be7 114 NRF_GPIO_PIN_H0S1 = GPIO_PIN_CNF_DRIVE_H0S1, ///< !< High drive '0', standard '1'
Kojto 123:b0220dba8be7 115 NRF_GPIO_PIN_S0H1 = GPIO_PIN_CNF_DRIVE_S0H1, ///< !< Standard '0', high drive '1'
Kojto 123:b0220dba8be7 116 NRF_GPIO_PIN_H0H1 = GPIO_PIN_CNF_DRIVE_H0H1, ///< !< High drive '0', high 'drive '1''
Kojto 123:b0220dba8be7 117 NRF_GPIO_PIN_D0S1 = GPIO_PIN_CNF_DRIVE_D0S1, ///< !< Disconnect '0' standard '1'
Kojto 123:b0220dba8be7 118 NRF_GPIO_PIN_D0H1 = GPIO_PIN_CNF_DRIVE_D0H1, ///< !< Disconnect '0', high drive '1'
Kojto 123:b0220dba8be7 119 NRF_GPIO_PIN_S0D1 = GPIO_PIN_CNF_DRIVE_S0D1, ///< !< Standard '0'. disconnect '1'
Kojto 123:b0220dba8be7 120 NRF_GPIO_PIN_H0D1 = GPIO_PIN_CNF_DRIVE_H0D1, ///< !< High drive '0', disconnect '1'
Kojto 123:b0220dba8be7 121 } nrf_gpio_pin_drive_t;
Kojto 123:b0220dba8be7 122
Kojto 123:b0220dba8be7 123 /**
Kojto 123:b0220dba8be7 124 * @brief Enumerator used for selecting the pin to sense high or low level on the pin input.
Kojto 123:b0220dba8be7 125 */
Kojto 123:b0220dba8be7 126 typedef enum
Kojto 123:b0220dba8be7 127 {
Kojto 123:b0220dba8be7 128 NRF_GPIO_PIN_NOSENSE = GPIO_PIN_CNF_SENSE_Disabled, ///< Pin sense level disabled.
Kojto 123:b0220dba8be7 129 NRF_GPIO_PIN_SENSE_LOW = GPIO_PIN_CNF_SENSE_Low, ///< Pin sense low level.
Kojto 123:b0220dba8be7 130 NRF_GPIO_PIN_SENSE_HIGH = GPIO_PIN_CNF_SENSE_High, ///< Pin sense high level.
Kojto 123:b0220dba8be7 131 } nrf_gpio_pin_sense_t;
Kojto 123:b0220dba8be7 132
Kojto 123:b0220dba8be7 133
Kojto 123:b0220dba8be7 134 /**
Kojto 123:b0220dba8be7 135 * @brief Function for configuring the GPIO pin range as outputs with normal drive strength.
Kojto 123:b0220dba8be7 136 * This function can be used to configure pin range as simple output with gate driving GPIO_PIN_CNF_DRIVE_S0S1 (normal cases).
Kojto 123:b0220dba8be7 137 *
Kojto 123:b0220dba8be7 138 * @param pin_range_start specifies the start number (inclusive) in the range of pin numbers to be configured (allowed values 0-30)
Kojto 123:b0220dba8be7 139 *
Kojto 123:b0220dba8be7 140 * @param pin_range_end specifies the end number (inclusive) in the range of pin numbers to be configured (allowed values 0-30)
Kojto 123:b0220dba8be7 141 *
Kojto 123:b0220dba8be7 142 * @note For configuring only one pin as output use @ref nrf_gpio_cfg_output
Kojto 123:b0220dba8be7 143 * Sense capability on the pin is disabled, and input is disconnected from the buffer as the pins are configured as output.
Kojto 123:b0220dba8be7 144 */
Kojto 123:b0220dba8be7 145 __STATIC_INLINE void nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end);
Kojto 123:b0220dba8be7 146
Kojto 123:b0220dba8be7 147 /**
Kojto 123:b0220dba8be7 148 * @brief Function for configuring the GPIO pin range as inputs with given initial value set, hiding inner details.
Kojto 123:b0220dba8be7 149 * This function can be used to configure pin range as simple input.
Kojto 123:b0220dba8be7 150 *
Kojto 123:b0220dba8be7 151 * @param pin_range_start specifies the start number (inclusive) in the range of pin numbers to be configured (allowed values 0-30)
Kojto 123:b0220dba8be7 152 *
Kojto 123:b0220dba8be7 153 * @param pin_range_end specifies the end number (inclusive) in the range of pin numbers to be configured (allowed values 0-30)
Kojto 123:b0220dba8be7 154 *
Kojto 123:b0220dba8be7 155 * @param pull_config State of the pin range pull resistor (no pull, pulled down or pulled high)
Kojto 123:b0220dba8be7 156 *
Kojto 123:b0220dba8be7 157 * @note For configuring only one pin as input use @ref nrf_gpio_cfg_input
Kojto 123:b0220dba8be7 158 * Sense capability on the pin is disabled, and input is connected to buffer so that the GPIO->IN register is readable
Kojto 123:b0220dba8be7 159 */
Kojto 123:b0220dba8be7 160 __STATIC_INLINE void nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config);
Kojto 123:b0220dba8be7 161
Kojto 123:b0220dba8be7 162 /**
Kojto 123:b0220dba8be7 163 * @brief Pin configuration function
Kojto 123:b0220dba8be7 164 *
Kojto 123:b0220dba8be7 165 * The main pin configuration function.
Kojto 123:b0220dba8be7 166 * This function allows to set any aspect in PIN_CNF register.
Kojto 123:b0220dba8be7 167 * @param pin_number Specifies the pin number (allowed values 0-31).
Kojto 123:b0220dba8be7 168 * @param dir Pin direction
Kojto 123:b0220dba8be7 169 * @param input Connect or disconnect input buffer
Kojto 123:b0220dba8be7 170 * @param pull Pull configuration
Kojto 123:b0220dba8be7 171 * @param drive Drive configuration
Kojto 123:b0220dba8be7 172 * @param sense Pin sensing mechanism
Kojto 123:b0220dba8be7 173 */
Kojto 123:b0220dba8be7 174 __STATIC_INLINE void nrf_gpio_cfg(
Kojto 123:b0220dba8be7 175 uint32_t pin_number,
Kojto 123:b0220dba8be7 176 nrf_gpio_pin_dir_t dir,
Kojto 123:b0220dba8be7 177 nrf_gpio_pin_input_t input,
Kojto 123:b0220dba8be7 178 nrf_gpio_pin_pull_t pull,
Kojto 123:b0220dba8be7 179 nrf_gpio_pin_drive_t drive,
Kojto 123:b0220dba8be7 180 nrf_gpio_pin_sense_t sense);
Kojto 123:b0220dba8be7 181
Kojto 123:b0220dba8be7 182 /**
Kojto 123:b0220dba8be7 183 * @brief Function for configuring the given GPIO pin number as output with given initial value set, hiding inner details.
Kojto 123:b0220dba8be7 184 * This function can be used to configure pin range as simple input with gate driving GPIO_PIN_CNF_DRIVE_S0S1 (normal cases).
Kojto 123:b0220dba8be7 185 *
Kojto 123:b0220dba8be7 186 * @param pin_number specifies the pin number (allowed values 0-31)
Kojto 123:b0220dba8be7 187 *
Kojto 123:b0220dba8be7 188 * @note Sense capability on the pin is disabled, and input is disconnected from the buffer as the pins are configured as output.
Kojto 123:b0220dba8be7 189 */
Kojto 123:b0220dba8be7 190 __STATIC_INLINE void nrf_gpio_cfg_output(uint32_t pin_number);
Kojto 123:b0220dba8be7 191
Kojto 123:b0220dba8be7 192 /**
Kojto 123:b0220dba8be7 193 * @brief Function for configuring the given GPIO pin number as input with given initial value set, hiding inner details.
Kojto 123:b0220dba8be7 194 * This function can be used to configure pin range as simple input with gate driving GPIO_PIN_CNF_DRIVE_S0S1 (normal cases).
Kojto 123:b0220dba8be7 195 *
Kojto 123:b0220dba8be7 196 * @param pin_number Specifies the pin number (allowed values 0-30).
Kojto 123:b0220dba8be7 197 * @param pull_config State of the pin range pull resistor (no pull, pulled down or pulled high).
Kojto 123:b0220dba8be7 198 *
Kojto 123:b0220dba8be7 199 * @note Sense capability on the pin is disabled, and input is connected to buffer so that the GPIO->IN register is readable
Kojto 123:b0220dba8be7 200 */
Kojto 123:b0220dba8be7 201 __STATIC_INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config);
Kojto 123:b0220dba8be7 202
Kojto 123:b0220dba8be7 203 /**
Kojto 123:b0220dba8be7 204 * @brief Function for reseting pin configuration to its default state.
Kojto 123:b0220dba8be7 205 *
Kojto 123:b0220dba8be7 206 * @param pin_number Specifies the pin number (allowed values 0-31).
Kojto 123:b0220dba8be7 207 */
Kojto 123:b0220dba8be7 208 __STATIC_INLINE void nrf_gpio_cfg_default(uint32_t pin_number);
Kojto 123:b0220dba8be7 209
Kojto 123:b0220dba8be7 210 /**
Kojto 123:b0220dba8be7 211 * @brief Function for configuring the given GPIO pin number as a watcher. Only input is connected.
Kojto 123:b0220dba8be7 212 *
Kojto 123:b0220dba8be7 213 * @param pin_number Specifies the pin number (allowed values 0-31).
Kojto 123:b0220dba8be7 214 *
Kojto 123:b0220dba8be7 215 */
Kojto 123:b0220dba8be7 216 __STATIC_INLINE void nrf_gpio_cfg_watcher(uint32_t pin_number);
Kojto 123:b0220dba8be7 217
Kojto 123:b0220dba8be7 218 /**
Kojto 123:b0220dba8be7 219 * @brief Function for disconnecting input for the given GPIO.
Kojto 123:b0220dba8be7 220 *
Kojto 123:b0220dba8be7 221 * @param pin_number Specifies the pin number (allowed values 0-31).
Kojto 123:b0220dba8be7 222 *
Kojto 123:b0220dba8be7 223 */
Kojto 123:b0220dba8be7 224 __STATIC_INLINE void nrf_gpio_input_disconnect(uint32_t pin_number);
Kojto 123:b0220dba8be7 225
Kojto 123:b0220dba8be7 226 /**
Kojto 123:b0220dba8be7 227 * @brief Function for configuring the given GPIO pin number as input with given initial value set, hiding inner details.
Kojto 123:b0220dba8be7 228 * This function can be used to configure pin range as simple input with gate driving GPIO_PIN_CNF_DRIVE_S0S1 (normal cases).
Kojto 123:b0220dba8be7 229 * Sense capability on the pin is configurable, and input is connected to buffer so that the GPIO->IN register is readable.
Kojto 123:b0220dba8be7 230 *
Kojto 123:b0220dba8be7 231 * @param pin_number Specifies the pin number (allowed values 0-30).
Kojto 123:b0220dba8be7 232 * @param pull_config State of the pin pull resistor (no pull, pulled down or pulled high).
Kojto 123:b0220dba8be7 233 * @param sense_config Sense level of the pin (no sense, sense low or sense high).
Kojto 123:b0220dba8be7 234 */
Kojto 123:b0220dba8be7 235 __STATIC_INLINE void nrf_gpio_cfg_sense_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config, nrf_gpio_pin_sense_t sense_config);
Kojto 123:b0220dba8be7 236
Kojto 123:b0220dba8be7 237 /**
Kojto 123:b0220dba8be7 238 * @brief Function for configuring sense level for the given GPIO.
Kojto 123:b0220dba8be7 239 *
Kojto 123:b0220dba8be7 240 * @param pin_number Specifies the pin number of gpio pin numbers to be configured (allowed values 0-30).
Kojto 123:b0220dba8be7 241 * @param sense_config Sense configuration.
Kojto 123:b0220dba8be7 242 *
Kojto 123:b0220dba8be7 243 */
Kojto 123:b0220dba8be7 244 __STATIC_INLINE void nrf_gpio_cfg_sense_set(uint32_t pin_number, nrf_gpio_pin_sense_t sense_config);
Kojto 123:b0220dba8be7 245
Kojto 123:b0220dba8be7 246 /**
Kojto 123:b0220dba8be7 247 * @brief Function for setting the direction for a GPIO pin.
Kojto 123:b0220dba8be7 248 *
Kojto 123:b0220dba8be7 249 * @param pin_number specifies the pin number (0-31) for which to
Kojto 123:b0220dba8be7 250 * set the direction.
Kojto 123:b0220dba8be7 251 *
Kojto 123:b0220dba8be7 252 * @param direction specifies the direction
Kojto 123:b0220dba8be7 253 */
Kojto 123:b0220dba8be7 254 __STATIC_INLINE void nrf_gpio_pin_dir_set(uint32_t pin_number, nrf_gpio_pin_dir_t direction);
Kojto 123:b0220dba8be7 255
Kojto 123:b0220dba8be7 256 /**
Kojto 123:b0220dba8be7 257 * @brief Function for setting a GPIO pin.
Kojto 123:b0220dba8be7 258 *
Kojto 123:b0220dba8be7 259 * Note that the pin must be configured as an output for this
Kojto 123:b0220dba8be7 260 * function to have any effect.
Kojto 123:b0220dba8be7 261 *
Kojto 123:b0220dba8be7 262 * @param pin_number Specifies the pin number (0-31) to set.
Kojto 123:b0220dba8be7 263 */
Kojto 123:b0220dba8be7 264 __STATIC_INLINE void nrf_gpio_pin_set(uint32_t pin_number);
Kojto 123:b0220dba8be7 265
Kojto 123:b0220dba8be7 266 /**
Kojto 123:b0220dba8be7 267 * @brief Function for setting GPIO pins.
Kojto 123:b0220dba8be7 268 *
Kojto 123:b0220dba8be7 269 * Note that the pins must be configured as outputs for this
Kojto 123:b0220dba8be7 270 * function to have any effect.
Kojto 123:b0220dba8be7 271 *
Kojto 123:b0220dba8be7 272 * @param pin_mask Specifies the pins to set.
Kojto 123:b0220dba8be7 273 */
Kojto 123:b0220dba8be7 274 __STATIC_INLINE void nrf_gpio_pins_set(uint32_t pin_mask);
Kojto 123:b0220dba8be7 275
Kojto 123:b0220dba8be7 276 /**
Kojto 123:b0220dba8be7 277 * @brief Function for clearing a GPIO pin.
Kojto 123:b0220dba8be7 278 *
Kojto 123:b0220dba8be7 279 * Note that the pin must be configured as an output for this
Kojto 123:b0220dba8be7 280 * function to have any effect.
Kojto 123:b0220dba8be7 281 *
Kojto 123:b0220dba8be7 282 * @param pin_number Specifies the pin number (0-31) to clear.
Kojto 123:b0220dba8be7 283 */
Kojto 123:b0220dba8be7 284 __STATIC_INLINE void nrf_gpio_pin_clear(uint32_t pin_number);
Kojto 123:b0220dba8be7 285
Kojto 123:b0220dba8be7 286 /**
Kojto 123:b0220dba8be7 287 * @brief Function for clearing GPIO pins.
Kojto 123:b0220dba8be7 288 *
Kojto 123:b0220dba8be7 289 * Note that the pins must be configured as outputs for this
Kojto 123:b0220dba8be7 290 * function to have any effect.
Kojto 123:b0220dba8be7 291 *
Kojto 123:b0220dba8be7 292 * @param pin_mask Specifies the pins to clear.
Kojto 123:b0220dba8be7 293 */
Kojto 123:b0220dba8be7 294 __STATIC_INLINE void nrf_gpio_pins_clear(uint32_t pin_mask);
Kojto 123:b0220dba8be7 295
Kojto 123:b0220dba8be7 296 /**
Kojto 123:b0220dba8be7 297 * @brief Function for toggling a GPIO pin.
Kojto 123:b0220dba8be7 298 *
Kojto 123:b0220dba8be7 299 * Note that the pin must be configured as an output for this
Kojto 123:b0220dba8be7 300 * function to have any effect.
Kojto 123:b0220dba8be7 301 *
Kojto 123:b0220dba8be7 302 * @param pin_number Specifies the pin number (0-31) to toggle.
Kojto 123:b0220dba8be7 303 */
Kojto 123:b0220dba8be7 304 __STATIC_INLINE void nrf_gpio_pin_toggle(uint32_t pin_number);
Kojto 123:b0220dba8be7 305
Kojto 123:b0220dba8be7 306 /**
Kojto 123:b0220dba8be7 307 * @brief Function for toggling GPIO pins.
Kojto 123:b0220dba8be7 308 *
Kojto 123:b0220dba8be7 309 * Note that the pins must be configured as outputs for this
Kojto 123:b0220dba8be7 310 * function to have any effect.
Kojto 123:b0220dba8be7 311 *
Kojto 123:b0220dba8be7 312 * @param pin_mask Specifies the pins to toggle.
Kojto 123:b0220dba8be7 313 */
Kojto 123:b0220dba8be7 314 __STATIC_INLINE void nrf_gpio_pins_toggle(uint32_t pin_mask);
Kojto 123:b0220dba8be7 315
Kojto 123:b0220dba8be7 316 /**
Kojto 123:b0220dba8be7 317 * @brief Function for writing a value to a GPIO pin.
Kojto 123:b0220dba8be7 318 *
Kojto 123:b0220dba8be7 319 * Note that the pin must be configured as an output for this
Kojto 123:b0220dba8be7 320 * function to have any effect.
Kojto 123:b0220dba8be7 321 *
Kojto 123:b0220dba8be7 322 * @param pin_number specifies the pin number (0-31) to
Kojto 123:b0220dba8be7 323 * write.
Kojto 123:b0220dba8be7 324 *
Kojto 123:b0220dba8be7 325 * @param value specifies the value to be written to the pin.
Kojto 123:b0220dba8be7 326 * @arg 0 clears the pin
Kojto 123:b0220dba8be7 327 * @arg >=1 sets the pin.
Kojto 123:b0220dba8be7 328 */
Kojto 123:b0220dba8be7 329 __STATIC_INLINE void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value);
Kojto 123:b0220dba8be7 330
Kojto 123:b0220dba8be7 331 /**
Kojto 123:b0220dba8be7 332 * @brief Function for reading the input level of a GPIO pin.
Kojto 123:b0220dba8be7 333 *
Kojto 123:b0220dba8be7 334 * Note that the pin must have input connected for the value
Kojto 123:b0220dba8be7 335 * returned from this function to be valid.
Kojto 123:b0220dba8be7 336 *
Kojto 123:b0220dba8be7 337 * @param pin_number specifies the pin number (0-31) to
Kojto 123:b0220dba8be7 338 * read.
Kojto 123:b0220dba8be7 339 *
Kojto 123:b0220dba8be7 340 * @return
Kojto 123:b0220dba8be7 341 * @retval 0 if the pin input level is low.
Kojto 123:b0220dba8be7 342 * @retval 1 if the pin input level is high.
Kojto 123:b0220dba8be7 343 * @retval > 1 should never occur.
Kojto 123:b0220dba8be7 344 */
Kojto 123:b0220dba8be7 345 __STATIC_INLINE uint32_t nrf_gpio_pin_read(uint32_t pin_number);
Kojto 123:b0220dba8be7 346
Kojto 123:b0220dba8be7 347 /**
Kojto 123:b0220dba8be7 348 * @brief Function for reading the input level of all GPIO pins.
Kojto 123:b0220dba8be7 349 *
Kojto 123:b0220dba8be7 350 * Note that the pin must have input connected for the value
Kojto 123:b0220dba8be7 351 * returned from this function to be valid.
Kojto 123:b0220dba8be7 352 *
Kojto 123:b0220dba8be7 353 * @retval Status of input of all pins
Kojto 123:b0220dba8be7 354 */
Kojto 123:b0220dba8be7 355 __STATIC_INLINE uint32_t nrf_gpio_pins_read(void);
Kojto 123:b0220dba8be7 356
Kojto 123:b0220dba8be7 357 /**
Kojto 123:b0220dba8be7 358 * @brief Function for reading the sense configuration of a GPIO pin.
Kojto 123:b0220dba8be7 359 *
Kojto 123:b0220dba8be7 360 * @param pin_number specifies the pin number (0-31) to
Kojto 123:b0220dba8be7 361 * read.
Kojto 123:b0220dba8be7 362 *
Kojto 123:b0220dba8be7 363 * @retval Sense configuration
Kojto 123:b0220dba8be7 364 */
Kojto 123:b0220dba8be7 365 __STATIC_INLINE nrf_gpio_pin_sense_t nrf_gpio_pin_sense_get(uint32_t pin_number);
Kojto 123:b0220dba8be7 366
Kojto 123:b0220dba8be7 367 /**
Kojto 123:b0220dba8be7 368 * @brief Generic function for writing a single byte of a 32 bit word at a given
Kojto 123:b0220dba8be7 369 * address.
Kojto 123:b0220dba8be7 370 *
Kojto 123:b0220dba8be7 371 * This function should not be called from outside the nrf_gpio
Kojto 123:b0220dba8be7 372 * abstraction layer.
Kojto 123:b0220dba8be7 373 *
Kojto 123:b0220dba8be7 374 * @param word_address is the address of the word to be written.
Kojto 123:b0220dba8be7 375 *
Kojto 123:b0220dba8be7 376 * @param byte_no is the word byte number (0-3) to be written.
Kojto 123:b0220dba8be7 377 *
Kojto 123:b0220dba8be7 378 * @param value is the value to be written to byte "byte_no" of word
Kojto 123:b0220dba8be7 379 * at address "word_address"
Kojto 123:b0220dba8be7 380 */
Kojto 123:b0220dba8be7 381 __STATIC_INLINE void nrf_gpio_word_byte_write(volatile uint32_t * word_address, uint8_t byte_no, uint8_t value);
Kojto 123:b0220dba8be7 382
Kojto 123:b0220dba8be7 383 /**
Kojto 123:b0220dba8be7 384 * @brief Generic function for reading a single byte of a 32 bit word at a given
Kojto 123:b0220dba8be7 385 * address.
Kojto 123:b0220dba8be7 386 *
Kojto 123:b0220dba8be7 387 * This function should not be called from outside the nrf_gpio
Kojto 123:b0220dba8be7 388 * abstraction layer.
Kojto 123:b0220dba8be7 389 *
Kojto 123:b0220dba8be7 390 * @param word_address is the address of the word to be read.
Kojto 123:b0220dba8be7 391 *
Kojto 123:b0220dba8be7 392 * @param byte_no is the byte number (0-3) of the word to be read.
Kojto 123:b0220dba8be7 393 *
Kojto 123:b0220dba8be7 394 * @return byte "byte_no" of word at address "word_address".
Kojto 123:b0220dba8be7 395 */
Kojto 123:b0220dba8be7 396 __STATIC_INLINE uint8_t nrf_gpio_word_byte_read(const volatile uint32_t* word_address, uint8_t byte_no);
Kojto 123:b0220dba8be7 397
Kojto 123:b0220dba8be7 398 /**
Kojto 123:b0220dba8be7 399 * @brief Function for setting the direction of a port.
Kojto 123:b0220dba8be7 400 *
Kojto 123:b0220dba8be7 401 * @param port is the port for which to set the direction.
Kojto 123:b0220dba8be7 402 *
Kojto 123:b0220dba8be7 403 * @param dir direction to be set for this port.
Kojto 123:b0220dba8be7 404 */
Kojto 123:b0220dba8be7 405 __STATIC_INLINE void nrf_gpio_port_dir_set(nrf_gpio_port_select_t port, nrf_gpio_port_dir_t dir);
Kojto 123:b0220dba8be7 406
Kojto 123:b0220dba8be7 407 /**
Kojto 123:b0220dba8be7 408 * @brief Function for reading a GPIO port.
Kojto 123:b0220dba8be7 409 *
Kojto 123:b0220dba8be7 410 * @param port is the port to read.
Kojto 123:b0220dba8be7 411 *
Kojto 123:b0220dba8be7 412 * @return the input value on this port.
Kojto 123:b0220dba8be7 413 */
Kojto 123:b0220dba8be7 414 __STATIC_INLINE uint8_t nrf_gpio_port_read(nrf_gpio_port_select_t port);
Kojto 123:b0220dba8be7 415
Kojto 123:b0220dba8be7 416 /**
Kojto 123:b0220dba8be7 417 * @brief Function for writing to a GPIO port.
Kojto 123:b0220dba8be7 418 *
Kojto 123:b0220dba8be7 419 * @param port is the port to write.
Kojto 123:b0220dba8be7 420 *
Kojto 123:b0220dba8be7 421 * @param value is the value to write to this port.
Kojto 123:b0220dba8be7 422 *
Kojto 123:b0220dba8be7 423 * @sa nrf_gpio_port_dir_set()
Kojto 123:b0220dba8be7 424 */
Kojto 123:b0220dba8be7 425 __STATIC_INLINE void nrf_gpio_port_write(nrf_gpio_port_select_t port, uint8_t value);
Kojto 123:b0220dba8be7 426
Kojto 123:b0220dba8be7 427 /**
Kojto 123:b0220dba8be7 428 * @brief Function for setting individual pins on GPIO port.
Kojto 123:b0220dba8be7 429 *
Kojto 123:b0220dba8be7 430 * @param port is the port for which to set the pins.
Kojto 123:b0220dba8be7 431 *
Kojto 123:b0220dba8be7 432 * @param set_mask is a mask specifying which pins to set. A bit
Kojto 123:b0220dba8be7 433 * set to 1 indicates that the corresponding port pin shall be
Kojto 123:b0220dba8be7 434 * set.
Kojto 123:b0220dba8be7 435 *
Kojto 123:b0220dba8be7 436 * @sa nrf_gpio_port_dir_set()
Kojto 123:b0220dba8be7 437 */
Kojto 123:b0220dba8be7 438 __STATIC_INLINE void nrf_gpio_port_set(nrf_gpio_port_select_t port, uint8_t set_mask);
Kojto 123:b0220dba8be7 439
Kojto 123:b0220dba8be7 440 /**
Kojto 123:b0220dba8be7 441 * @brief Function for clearing individual pins on GPIO port.
Kojto 123:b0220dba8be7 442 *
Kojto 123:b0220dba8be7 443 * @param port is the port for which to clear the pins.
Kojto 123:b0220dba8be7 444 *
Kojto 123:b0220dba8be7 445 * @param clr_mask is a mask specifying which pins to clear. A bit
Kojto 123:b0220dba8be7 446 * set to 1 indicates that the corresponding port pin shall be
Kojto 123:b0220dba8be7 447 * cleared.
Kojto 123:b0220dba8be7 448 *
Kojto 123:b0220dba8be7 449 * @sa nrf_gpio_port_dir_set()
Kojto 123:b0220dba8be7 450 */
Kojto 123:b0220dba8be7 451 __STATIC_INLINE void nrf_gpio_port_clear(nrf_gpio_port_select_t port, uint8_t clr_mask);
Kojto 123:b0220dba8be7 452
Kojto 123:b0220dba8be7 453 #ifndef SUPPRESS_INLINE_IMPLEMENTATION
Kojto 123:b0220dba8be7 454 __STATIC_INLINE void nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end)
Kojto 123:b0220dba8be7 455 {
Kojto 123:b0220dba8be7 456 /*lint -e{845} // A zero has been given as right argument to operator '|'" */
Kojto 123:b0220dba8be7 457 for (; pin_range_start <= pin_range_end; pin_range_start++)
Kojto 123:b0220dba8be7 458 {
Kojto 123:b0220dba8be7 459 nrf_gpio_cfg_output(pin_range_start);
Kojto 123:b0220dba8be7 460 }
Kojto 123:b0220dba8be7 461 }
Kojto 123:b0220dba8be7 462
Kojto 123:b0220dba8be7 463 __STATIC_INLINE void nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config)
Kojto 123:b0220dba8be7 464 {
Kojto 123:b0220dba8be7 465 /*lint -e{845} // A zero has been given as right argument to operator '|'" */
Kojto 123:b0220dba8be7 466 for (; pin_range_start <= pin_range_end; pin_range_start++)
Kojto 123:b0220dba8be7 467 {
Kojto 123:b0220dba8be7 468 nrf_gpio_cfg_input(pin_range_start, pull_config);
Kojto 123:b0220dba8be7 469 }
Kojto 123:b0220dba8be7 470 }
Kojto 123:b0220dba8be7 471
Kojto 123:b0220dba8be7 472 __STATIC_INLINE void nrf_gpio_cfg(
Kojto 123:b0220dba8be7 473 uint32_t pin_number,
Kojto 123:b0220dba8be7 474 nrf_gpio_pin_dir_t dir,
Kojto 123:b0220dba8be7 475 nrf_gpio_pin_input_t input,
Kojto 123:b0220dba8be7 476 nrf_gpio_pin_pull_t pull,
Kojto 123:b0220dba8be7 477 nrf_gpio_pin_drive_t drive,
Kojto 123:b0220dba8be7 478 nrf_gpio_pin_sense_t sense)
Kojto 123:b0220dba8be7 479 {
Kojto 123:b0220dba8be7 480 NRF_GPIO->PIN_CNF[pin_number] = ((uint32_t)dir << GPIO_PIN_CNF_DIR_Pos)
Kojto 123:b0220dba8be7 481 | ((uint32_t)input << GPIO_PIN_CNF_INPUT_Pos)
Kojto 123:b0220dba8be7 482 | ((uint32_t)pull << GPIO_PIN_CNF_PULL_Pos)
Kojto 123:b0220dba8be7 483 | ((uint32_t)drive << GPIO_PIN_CNF_DRIVE_Pos)
Kojto 123:b0220dba8be7 484 | ((uint32_t)sense << GPIO_PIN_CNF_SENSE_Pos);
Kojto 123:b0220dba8be7 485 }
Kojto 123:b0220dba8be7 486
Kojto 123:b0220dba8be7 487 __STATIC_INLINE void nrf_gpio_cfg_output(uint32_t pin_number)
Kojto 123:b0220dba8be7 488 {
Kojto 123:b0220dba8be7 489 nrf_gpio_cfg(
Kojto 123:b0220dba8be7 490 pin_number,
Kojto 123:b0220dba8be7 491 NRF_GPIO_PIN_DIR_OUTPUT,
Kojto 123:b0220dba8be7 492 NRF_GPIO_PIN_INPUT_DISCONNECT,
Kojto 123:b0220dba8be7 493 NRF_GPIO_PIN_NOPULL,
Kojto 123:b0220dba8be7 494 NRF_GPIO_PIN_S0S1,
Kojto 123:b0220dba8be7 495 NRF_GPIO_PIN_NOSENSE);
Kojto 123:b0220dba8be7 496 }
Kojto 123:b0220dba8be7 497
Kojto 123:b0220dba8be7 498 __STATIC_INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)
Kojto 123:b0220dba8be7 499 {
Kojto 123:b0220dba8be7 500 nrf_gpio_cfg(
Kojto 123:b0220dba8be7 501 pin_number,
Kojto 123:b0220dba8be7 502 NRF_GPIO_PIN_DIR_INPUT,
Kojto 123:b0220dba8be7 503 NRF_GPIO_PIN_INPUT_CONNECT,
Kojto 123:b0220dba8be7 504 pull_config,
Kojto 123:b0220dba8be7 505 NRF_GPIO_PIN_S0S1,
Kojto 123:b0220dba8be7 506 NRF_GPIO_PIN_NOSENSE);
Kojto 123:b0220dba8be7 507 }
Kojto 123:b0220dba8be7 508
Kojto 123:b0220dba8be7 509 __STATIC_INLINE void nrf_gpio_cfg_default(uint32_t pin_number)
Kojto 123:b0220dba8be7 510 {
Kojto 123:b0220dba8be7 511 nrf_gpio_cfg(
Kojto 123:b0220dba8be7 512 pin_number,
Kojto 123:b0220dba8be7 513 NRF_GPIO_PIN_DIR_INPUT,
Kojto 123:b0220dba8be7 514 NRF_GPIO_PIN_INPUT_DISCONNECT,
Kojto 123:b0220dba8be7 515 NRF_GPIO_PIN_NOPULL,
Kojto 123:b0220dba8be7 516 NRF_GPIO_PIN_S0S1,
Kojto 123:b0220dba8be7 517 NRF_GPIO_PIN_NOSENSE);
Kojto 123:b0220dba8be7 518 }
Kojto 123:b0220dba8be7 519
Kojto 123:b0220dba8be7 520 __STATIC_INLINE void nrf_gpio_cfg_watcher(uint32_t pin_number)
Kojto 123:b0220dba8be7 521 {
Kojto 123:b0220dba8be7 522 /*lint -e{845} // A zero has been given as right argument to operator '|'" */
Kojto 123:b0220dba8be7 523 uint32_t cnf = NRF_GPIO->PIN_CNF[pin_number] & ~GPIO_PIN_CNF_INPUT_Msk;
Kojto 123:b0220dba8be7 524 NRF_GPIO->PIN_CNF[pin_number] = cnf | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos);
Kojto 123:b0220dba8be7 525 }
Kojto 123:b0220dba8be7 526
Kojto 123:b0220dba8be7 527 __STATIC_INLINE void nrf_gpio_input_disconnect(uint32_t pin_number)
Kojto 123:b0220dba8be7 528 {
Kojto 123:b0220dba8be7 529 /*lint -e{845} // A zero has been given as right argument to operator '|'" */
Kojto 123:b0220dba8be7 530 uint32_t cnf = NRF_GPIO->PIN_CNF[pin_number] & ~GPIO_PIN_CNF_INPUT_Msk;
Kojto 123:b0220dba8be7 531 NRF_GPIO->PIN_CNF[pin_number] = cnf | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos);
Kojto 123:b0220dba8be7 532 }
Kojto 123:b0220dba8be7 533
Kojto 123:b0220dba8be7 534 __STATIC_INLINE void nrf_gpio_cfg_sense_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config, nrf_gpio_pin_sense_t sense_config)
Kojto 123:b0220dba8be7 535 {
Kojto 123:b0220dba8be7 536 nrf_gpio_cfg(
Kojto 123:b0220dba8be7 537 pin_number,
Kojto 123:b0220dba8be7 538 NRF_GPIO_PIN_DIR_INPUT,
Kojto 123:b0220dba8be7 539 NRF_GPIO_PIN_INPUT_CONNECT,
Kojto 123:b0220dba8be7 540 pull_config,
Kojto 123:b0220dba8be7 541 NRF_GPIO_PIN_S0S1,
Kojto 123:b0220dba8be7 542 sense_config);
Kojto 123:b0220dba8be7 543 }
Kojto 123:b0220dba8be7 544
Kojto 123:b0220dba8be7 545 __STATIC_INLINE void nrf_gpio_cfg_sense_set(uint32_t pin_number, nrf_gpio_pin_sense_t sense_config)
Kojto 123:b0220dba8be7 546 {
Kojto 123:b0220dba8be7 547 /*lint -e{845} // A zero has been given as right argument to operator '|'" */
Kojto 123:b0220dba8be7 548 //uint32_t cnf = NRF_GPIO->PIN_CNF[pin_number] & ~GPIO_PIN_CNF_SENSE_Msk;
Kojto 123:b0220dba8be7 549 NRF_GPIO->PIN_CNF[pin_number] &= ~GPIO_PIN_CNF_SENSE_Msk;
Kojto 123:b0220dba8be7 550 NRF_GPIO->PIN_CNF[pin_number] |= (sense_config << GPIO_PIN_CNF_SENSE_Pos);
Kojto 123:b0220dba8be7 551 }
Kojto 123:b0220dba8be7 552
Kojto 123:b0220dba8be7 553 __STATIC_INLINE void nrf_gpio_pin_dir_set(uint32_t pin_number, nrf_gpio_pin_dir_t direction)
Kojto 123:b0220dba8be7 554 {
Kojto 123:b0220dba8be7 555 if(direction == NRF_GPIO_PIN_DIR_INPUT)
Kojto 123:b0220dba8be7 556 {
Kojto 123:b0220dba8be7 557 nrf_gpio_cfg(
Kojto 123:b0220dba8be7 558 pin_number,
Kojto 123:b0220dba8be7 559 NRF_GPIO_PIN_DIR_INPUT,
Kojto 123:b0220dba8be7 560 NRF_GPIO_PIN_INPUT_CONNECT,
Kojto 123:b0220dba8be7 561 NRF_GPIO_PIN_NOPULL,
Kojto 123:b0220dba8be7 562 NRF_GPIO_PIN_S0S1,
Kojto 123:b0220dba8be7 563 NRF_GPIO_PIN_NOSENSE);
Kojto 123:b0220dba8be7 564 }
Kojto 123:b0220dba8be7 565 else
Kojto 123:b0220dba8be7 566 {
Kojto 123:b0220dba8be7 567 NRF_GPIO->DIRSET = (1UL << pin_number);
Kojto 123:b0220dba8be7 568 }
Kojto 123:b0220dba8be7 569 }
Kojto 123:b0220dba8be7 570
Kojto 123:b0220dba8be7 571 __STATIC_INLINE void nrf_gpio_pin_set(uint32_t pin_number)
Kojto 123:b0220dba8be7 572 {
Kojto 123:b0220dba8be7 573 NRF_GPIO->OUTSET = (1UL << pin_number);
Kojto 123:b0220dba8be7 574 }
Kojto 123:b0220dba8be7 575
Kojto 123:b0220dba8be7 576 __STATIC_INLINE void nrf_gpio_pins_set(uint32_t pin_mask)
Kojto 123:b0220dba8be7 577 {
Kojto 123:b0220dba8be7 578 NRF_GPIO->OUTSET = pin_mask;
Kojto 123:b0220dba8be7 579 }
Kojto 123:b0220dba8be7 580
Kojto 123:b0220dba8be7 581 __STATIC_INLINE void nrf_gpio_pin_clear(uint32_t pin_number)
Kojto 123:b0220dba8be7 582 {
Kojto 123:b0220dba8be7 583 NRF_GPIO->OUTCLR = (1UL << pin_number);
Kojto 123:b0220dba8be7 584 }
Kojto 123:b0220dba8be7 585
Kojto 123:b0220dba8be7 586 __STATIC_INLINE void nrf_gpio_pins_clear(uint32_t pin_mask)
Kojto 123:b0220dba8be7 587 {
Kojto 123:b0220dba8be7 588 NRF_GPIO->OUTCLR = pin_mask;
Kojto 123:b0220dba8be7 589 }
Kojto 123:b0220dba8be7 590
Kojto 123:b0220dba8be7 591 __STATIC_INLINE void nrf_gpio_pin_toggle(uint32_t pin_number)
Kojto 123:b0220dba8be7 592 {
Kojto 123:b0220dba8be7 593 nrf_gpio_pins_toggle(1UL << pin_number);
Kojto 123:b0220dba8be7 594 }
Kojto 123:b0220dba8be7 595
Kojto 123:b0220dba8be7 596 __STATIC_INLINE void nrf_gpio_pins_toggle(uint32_t pin_mask)
Kojto 123:b0220dba8be7 597 {
Kojto 123:b0220dba8be7 598 uint32_t pins_state = NRF_GPIO->OUT;
Kojto 123:b0220dba8be7 599 NRF_GPIO->OUTSET = (~pins_state & pin_mask);
Kojto 123:b0220dba8be7 600 NRF_GPIO->OUTCLR = ( pins_state & pin_mask);
Kojto 123:b0220dba8be7 601 }
Kojto 123:b0220dba8be7 602
Kojto 123:b0220dba8be7 603 __STATIC_INLINE void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value)
Kojto 123:b0220dba8be7 604 {
Kojto 123:b0220dba8be7 605 if (value == 0)
Kojto 123:b0220dba8be7 606 {
Kojto 123:b0220dba8be7 607 nrf_gpio_pin_clear(pin_number);
Kojto 123:b0220dba8be7 608 }
Kojto 123:b0220dba8be7 609 else
Kojto 123:b0220dba8be7 610 {
Kojto 123:b0220dba8be7 611 nrf_gpio_pin_set(pin_number);
Kojto 123:b0220dba8be7 612 }
Kojto 123:b0220dba8be7 613 }
Kojto 123:b0220dba8be7 614
Kojto 123:b0220dba8be7 615 __STATIC_INLINE uint32_t nrf_gpio_pin_read(uint32_t pin_number)
Kojto 123:b0220dba8be7 616 {
Kojto 123:b0220dba8be7 617 return ((NRF_GPIO->IN >> pin_number) & 1UL);
Kojto 123:b0220dba8be7 618 }
Kojto 123:b0220dba8be7 619
Kojto 123:b0220dba8be7 620 __STATIC_INLINE uint32_t nrf_gpio_pins_read(void)
Kojto 123:b0220dba8be7 621 {
Kojto 123:b0220dba8be7 622 return NRF_GPIO->IN;
Kojto 123:b0220dba8be7 623 }
Kojto 123:b0220dba8be7 624
Kojto 123:b0220dba8be7 625 __STATIC_INLINE nrf_gpio_pin_sense_t nrf_gpio_pin_sense_get(uint32_t pin_number)
Kojto 123:b0220dba8be7 626 {
Kojto 123:b0220dba8be7 627 return (nrf_gpio_pin_sense_t)((NRF_GPIO->PIN_CNF[pin_number] & GPIO_PIN_CNF_SENSE_Msk) >> GPIO_PIN_CNF_SENSE_Pos);
Kojto 123:b0220dba8be7 628 }
Kojto 123:b0220dba8be7 629
Kojto 123:b0220dba8be7 630 __STATIC_INLINE void nrf_gpio_word_byte_write(volatile uint32_t * word_address, uint8_t byte_no, uint8_t value)
Kojto 123:b0220dba8be7 631 {
Kojto 123:b0220dba8be7 632 *((volatile uint8_t*)(word_address) + byte_no) = value;
Kojto 123:b0220dba8be7 633 }
Kojto 123:b0220dba8be7 634
Kojto 123:b0220dba8be7 635 __STATIC_INLINE uint8_t nrf_gpio_word_byte_read(const volatile uint32_t* word_address, uint8_t byte_no)
Kojto 123:b0220dba8be7 636 {
Kojto 123:b0220dba8be7 637 return (*((const volatile uint8_t*)(word_address) + byte_no));
Kojto 123:b0220dba8be7 638 }
Kojto 123:b0220dba8be7 639
Kojto 123:b0220dba8be7 640 __STATIC_INLINE void nrf_gpio_port_dir_set(nrf_gpio_port_select_t port, nrf_gpio_port_dir_t dir)
Kojto 123:b0220dba8be7 641 {
Kojto 123:b0220dba8be7 642 if (dir == NRF_GPIO_PORT_DIR_OUTPUT)
Kojto 123:b0220dba8be7 643 {
Kojto 123:b0220dba8be7 644 nrf_gpio_word_byte_write(&NRF_GPIO->DIRSET, port, 0xFF);
Kojto 123:b0220dba8be7 645 }
Kojto 123:b0220dba8be7 646 else
Kojto 123:b0220dba8be7 647 {
Kojto 123:b0220dba8be7 648 nrf_gpio_range_cfg_input(port*8, (port+1)*8-1, NRF_GPIO_PIN_NOPULL);
Kojto 123:b0220dba8be7 649 }
Kojto 123:b0220dba8be7 650 }
Kojto 123:b0220dba8be7 651
Kojto 123:b0220dba8be7 652 __STATIC_INLINE uint8_t nrf_gpio_port_read(nrf_gpio_port_select_t port)
Kojto 123:b0220dba8be7 653 {
Kojto 123:b0220dba8be7 654 return nrf_gpio_word_byte_read(&NRF_GPIO->IN, port);
Kojto 123:b0220dba8be7 655 }
Kojto 123:b0220dba8be7 656
Kojto 123:b0220dba8be7 657 __STATIC_INLINE void nrf_gpio_port_write(nrf_gpio_port_select_t port, uint8_t value)
Kojto 123:b0220dba8be7 658 {
Kojto 123:b0220dba8be7 659 nrf_gpio_word_byte_write(&NRF_GPIO->OUT, port, value);
Kojto 123:b0220dba8be7 660 }
Kojto 123:b0220dba8be7 661
Kojto 123:b0220dba8be7 662 __STATIC_INLINE void nrf_gpio_port_set(nrf_gpio_port_select_t port, uint8_t set_mask)
Kojto 123:b0220dba8be7 663 {
Kojto 123:b0220dba8be7 664 nrf_gpio_word_byte_write(&NRF_GPIO->OUTSET, port, set_mask);
Kojto 123:b0220dba8be7 665 }
Kojto 123:b0220dba8be7 666
Kojto 123:b0220dba8be7 667 __STATIC_INLINE void nrf_gpio_port_clear(nrf_gpio_port_select_t port, uint8_t clr_mask)
Kojto 123:b0220dba8be7 668 {
Kojto 123:b0220dba8be7 669 nrf_gpio_word_byte_write(&NRF_GPIO->OUTCLR, port, clr_mask);
Kojto 123:b0220dba8be7 670 }
Kojto 123:b0220dba8be7 671 #endif //SUPPRESS_INLINE_IMPLEMENTATION
Kojto 123:b0220dba8be7 672 /** @} */
Kojto 123:b0220dba8be7 673
Kojto 123:b0220dba8be7 674 #endif