The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 2 * @file em_gpio.h
AnnaBridge 156:ff21514d8981 3 * @brief General Purpose IO (GPIO) peripheral API
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
AnnaBridge 156:ff21514d8981 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
AnnaBridge 156:ff21514d8981 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
AnnaBridge 156:ff21514d8981 8 *******************************************************************************
AnnaBridge 156:ff21514d8981 9 *
AnnaBridge 156:ff21514d8981 10 * Permission is granted to anyone to use this software for any purpose,
AnnaBridge 156:ff21514d8981 11 * including commercial applications, and to alter it and redistribute it
AnnaBridge 156:ff21514d8981 12 * freely, subject to the following restrictions:
AnnaBridge 156:ff21514d8981 13 *
AnnaBridge 156:ff21514d8981 14 * 1. The origin of this software must not be misrepresented; you must not
AnnaBridge 156:ff21514d8981 15 * claim that you wrote the original software.
AnnaBridge 156:ff21514d8981 16 * 2. Altered source versions must be plainly marked as such, and must not be
AnnaBridge 156:ff21514d8981 17 * misrepresented as being the original software.
AnnaBridge 156:ff21514d8981 18 * 3. This notice may not be removed or altered from any source distribution.
AnnaBridge 156:ff21514d8981 19 *
AnnaBridge 156:ff21514d8981 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
AnnaBridge 156:ff21514d8981 21 * obligation to support this Software. Silicon Labs is providing the
AnnaBridge 156:ff21514d8981 22 * Software "AS IS", with no express or implied warranties of any kind,
AnnaBridge 156:ff21514d8981 23 * including, but not limited to, any implied warranties of merchantability
AnnaBridge 156:ff21514d8981 24 * or fitness for any particular purpose or warranties against infringement
AnnaBridge 156:ff21514d8981 25 * of any proprietary rights of a third party.
AnnaBridge 156:ff21514d8981 26 *
AnnaBridge 156:ff21514d8981 27 * Silicon Labs will not be liable for any consequential, incidental, or
AnnaBridge 156:ff21514d8981 28 * special damages, or any other relief, or for any claim by any third party,
AnnaBridge 156:ff21514d8981 29 * arising from your use of this Software.
AnnaBridge 156:ff21514d8981 30 *
AnnaBridge 156:ff21514d8981 31 ******************************************************************************/
AnnaBridge 156:ff21514d8981 32
AnnaBridge 156:ff21514d8981 33 #ifndef EM_GPIO_H
AnnaBridge 156:ff21514d8981 34 #define EM_GPIO_H
AnnaBridge 156:ff21514d8981 35
AnnaBridge 156:ff21514d8981 36 #include "em_device.h"
AnnaBridge 156:ff21514d8981 37 #if defined(GPIO_COUNT) && (GPIO_COUNT > 0)
AnnaBridge 156:ff21514d8981 38
AnnaBridge 156:ff21514d8981 39 #include <stdbool.h>
AnnaBridge 156:ff21514d8981 40 #include "em_bus.h"
AnnaBridge 156:ff21514d8981 41 #include "em_assert.h"
AnnaBridge 156:ff21514d8981 42
AnnaBridge 156:ff21514d8981 43 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 44 extern "C" {
AnnaBridge 156:ff21514d8981 45 #endif
AnnaBridge 156:ff21514d8981 46
AnnaBridge 156:ff21514d8981 47 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 48 * @addtogroup emlib
AnnaBridge 156:ff21514d8981 49 * @{
AnnaBridge 156:ff21514d8981 50 ******************************************************************************/
AnnaBridge 156:ff21514d8981 51
AnnaBridge 156:ff21514d8981 52 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 53 * @addtogroup GPIO
AnnaBridge 156:ff21514d8981 54 * @{
AnnaBridge 156:ff21514d8981 55 ******************************************************************************/
AnnaBridge 156:ff21514d8981 56
AnnaBridge 156:ff21514d8981 57 /*******************************************************************************
AnnaBridge 156:ff21514d8981 58 ******************************* DEFINES ***********************************
AnnaBridge 156:ff21514d8981 59 ******************************************************************************/
AnnaBridge 156:ff21514d8981 60
AnnaBridge 156:ff21514d8981 61 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
Anna Bridge 160:5571c4ff569f 62 #if defined(_SILICON_LABS_32B_SERIES_0) \
Anna Bridge 160:5571c4ff569f 63 && defined(_EFM32_TINY_FAMILY) || defined(_EFM32_ZERO_FAMILY)
AnnaBridge 156:ff21514d8981 64
AnnaBridge 156:ff21514d8981 65 #define _GPIO_PORT_A_PIN_COUNT 14
AnnaBridge 156:ff21514d8981 66 #define _GPIO_PORT_B_PIN_COUNT 10
AnnaBridge 156:ff21514d8981 67 #define _GPIO_PORT_C_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 68 #define _GPIO_PORT_D_PIN_COUNT 9
AnnaBridge 156:ff21514d8981 69 #define _GPIO_PORT_E_PIN_COUNT 12
AnnaBridge 156:ff21514d8981 70 #define _GPIO_PORT_F_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 71 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 72 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 73 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 74 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 75 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 76
AnnaBridge 156:ff21514d8981 77 #define _GPIO_PORT_A_PIN_MASK 0xF77F
AnnaBridge 156:ff21514d8981 78 #define _GPIO_PORT_B_PIN_MASK 0x79F8
AnnaBridge 156:ff21514d8981 79 #define _GPIO_PORT_C_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 80 #define _GPIO_PORT_D_PIN_MASK 0x01FF
AnnaBridge 156:ff21514d8981 81 #define _GPIO_PORT_E_PIN_MASK 0xFFF0
AnnaBridge 156:ff21514d8981 82 #define _GPIO_PORT_F_PIN_MASK 0x003F
AnnaBridge 156:ff21514d8981 83 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 84 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 85 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 86 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 87 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 88
Anna Bridge 160:5571c4ff569f 89 #elif defined(_EFM32_HAPPY_FAMILY)
AnnaBridge 156:ff21514d8981 90
AnnaBridge 156:ff21514d8981 91 #define _GPIO_PORT_A_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 92 #define _GPIO_PORT_B_PIN_COUNT 5
AnnaBridge 156:ff21514d8981 93 #define _GPIO_PORT_C_PIN_COUNT 12
AnnaBridge 156:ff21514d8981 94 #define _GPIO_PORT_D_PIN_COUNT 4
AnnaBridge 156:ff21514d8981 95 #define _GPIO_PORT_E_PIN_COUNT 4
AnnaBridge 156:ff21514d8981 96 #define _GPIO_PORT_F_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 97 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 98 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 99 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 100 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 101 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 102
AnnaBridge 156:ff21514d8981 103 #define _GPIO_PORT_A_PIN_MASK 0x0707
AnnaBridge 156:ff21514d8981 104 #define _GPIO_PORT_B_PIN_MASK 0x6980
AnnaBridge 156:ff21514d8981 105 #define _GPIO_PORT_C_PIN_MASK 0xEF1F
AnnaBridge 156:ff21514d8981 106 #define _GPIO_PORT_D_PIN_MASK 0x00F0
AnnaBridge 156:ff21514d8981 107 #define _GPIO_PORT_E_PIN_MASK 0x3C00
AnnaBridge 156:ff21514d8981 108 #define _GPIO_PORT_F_PIN_MASK 0x003F
AnnaBridge 156:ff21514d8981 109 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 110 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 111 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 112 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 113 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 114
Anna Bridge 160:5571c4ff569f 115 #elif defined(_SILICON_LABS_32B_SERIES_0) \
Anna Bridge 160:5571c4ff569f 116 && (defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY))
AnnaBridge 156:ff21514d8981 117
AnnaBridge 156:ff21514d8981 118 #define _GPIO_PORT_A_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 119 #define _GPIO_PORT_B_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 120 #define _GPIO_PORT_C_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 121 #define _GPIO_PORT_D_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 122 #define _GPIO_PORT_E_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 123 #define _GPIO_PORT_F_PIN_COUNT 13
AnnaBridge 156:ff21514d8981 124 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 125 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 126 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 127 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 128 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 129
AnnaBridge 156:ff21514d8981 130 #define _GPIO_PORT_A_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 131 #define _GPIO_PORT_B_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 132 #define _GPIO_PORT_C_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 133 #define _GPIO_PORT_D_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 134 #define _GPIO_PORT_E_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 135 #define _GPIO_PORT_F_PIN_MASK 0x1FFF
AnnaBridge 156:ff21514d8981 136 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 137 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 138 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 139 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 140 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 141
Anna Bridge 160:5571c4ff569f 142 #elif defined(_EFM32_GECKO_FAMILY)
AnnaBridge 156:ff21514d8981 143
AnnaBridge 156:ff21514d8981 144 #define _GPIO_PORT_A_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 145 #define _GPIO_PORT_B_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 146 #define _GPIO_PORT_C_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 147 #define _GPIO_PORT_D_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 148 #define _GPIO_PORT_E_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 149 #define _GPIO_PORT_F_PIN_COUNT 10
AnnaBridge 156:ff21514d8981 150 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 151 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 152 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 153 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 154 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 155
AnnaBridge 156:ff21514d8981 156 #define _GPIO_PORT_A_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 157 #define _GPIO_PORT_B_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 158 #define _GPIO_PORT_C_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 159 #define _GPIO_PORT_D_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 160 #define _GPIO_PORT_E_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 161 #define _GPIO_PORT_F_PIN_MASK 0x03FF
AnnaBridge 156:ff21514d8981 162 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 163 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 164 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 165 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 166 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 167
Anna Bridge 160:5571c4ff569f 168 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_80) && defined(_EFR_DEVICE)
AnnaBridge 156:ff21514d8981 169
AnnaBridge 156:ff21514d8981 170 #define _GPIO_PORT_A_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 171 #define _GPIO_PORT_B_PIN_COUNT 5
AnnaBridge 156:ff21514d8981 172 #define _GPIO_PORT_C_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 173 #define _GPIO_PORT_D_PIN_COUNT 7
AnnaBridge 156:ff21514d8981 174 #define _GPIO_PORT_E_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 175 #define _GPIO_PORT_F_PIN_COUNT 8
AnnaBridge 156:ff21514d8981 176 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 177 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 178 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 179 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 180 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 181
AnnaBridge 156:ff21514d8981 182 #define _GPIO_PORT_A_PIN_MASK 0x003F
AnnaBridge 156:ff21514d8981 183 #define _GPIO_PORT_B_PIN_MASK 0xF800
AnnaBridge 156:ff21514d8981 184 #define _GPIO_PORT_C_PIN_MASK 0x0FC0
AnnaBridge 156:ff21514d8981 185 #define _GPIO_PORT_D_PIN_MASK 0xFE00
AnnaBridge 156:ff21514d8981 186 #define _GPIO_PORT_E_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 187 #define _GPIO_PORT_F_PIN_MASK 0x00FF
AnnaBridge 156:ff21514d8981 188 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 189 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 190 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 191 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 192 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 193
Anna Bridge 160:5571c4ff569f 194 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_80) && defined(_EFM_DEVICE)
Anna Bridge 160:5571c4ff569f 195
Anna Bridge 160:5571c4ff569f 196 #define _GPIO_PORT_A_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 197 #define _GPIO_PORT_B_PIN_COUNT 5
Anna Bridge 160:5571c4ff569f 198 #define _GPIO_PORT_C_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 199 #define _GPIO_PORT_D_PIN_COUNT 7
Anna Bridge 160:5571c4ff569f 200 #define _GPIO_PORT_E_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 201 #define _GPIO_PORT_F_PIN_COUNT 8
Anna Bridge 160:5571c4ff569f 202 #define _GPIO_PORT_G_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 203 #define _GPIO_PORT_H_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 204 #define _GPIO_PORT_I_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 205 #define _GPIO_PORT_J_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 206 #define _GPIO_PORT_K_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 207
Anna Bridge 160:5571c4ff569f 208 #define _GPIO_PORT_A_PIN_MASK 0x003F
Anna Bridge 160:5571c4ff569f 209 #define _GPIO_PORT_B_PIN_MASK 0xF800
Anna Bridge 160:5571c4ff569f 210 #define _GPIO_PORT_C_PIN_MASK 0x0FC0
Anna Bridge 160:5571c4ff569f 211 #define _GPIO_PORT_D_PIN_MASK 0xFE00
Anna Bridge 160:5571c4ff569f 212 #define _GPIO_PORT_E_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 213 #define _GPIO_PORT_F_PIN_MASK 0x00FF
Anna Bridge 160:5571c4ff569f 214 #define _GPIO_PORT_G_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 215 #define _GPIO_PORT_H_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 216 #define _GPIO_PORT_I_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 217 #define _GPIO_PORT_J_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 218 #define _GPIO_PORT_K_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 219
Anna Bridge 160:5571c4ff569f 220 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_84)
AnnaBridge 156:ff21514d8981 221
AnnaBridge 156:ff21514d8981 222 #define _GPIO_PORT_A_PIN_COUNT 10
AnnaBridge 156:ff21514d8981 223 #define _GPIO_PORT_B_PIN_COUNT 10
AnnaBridge 156:ff21514d8981 224 #define _GPIO_PORT_C_PIN_COUNT 12
AnnaBridge 156:ff21514d8981 225 #define _GPIO_PORT_D_PIN_COUNT 8
AnnaBridge 156:ff21514d8981 226 #define _GPIO_PORT_E_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 227 #define _GPIO_PORT_F_PIN_COUNT 16
AnnaBridge 156:ff21514d8981 228 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 229 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 230 #define _GPIO_PORT_I_PIN_COUNT 4
AnnaBridge 156:ff21514d8981 231 #define _GPIO_PORT_J_PIN_COUNT 2
AnnaBridge 156:ff21514d8981 232 #define _GPIO_PORT_K_PIN_COUNT 3
AnnaBridge 156:ff21514d8981 233
AnnaBridge 156:ff21514d8981 234 #define _GPIO_PORT_A_PIN_MASK 0x03FF
AnnaBridge 156:ff21514d8981 235 #define _GPIO_PORT_B_PIN_MASK 0xFFC0
AnnaBridge 156:ff21514d8981 236 #define _GPIO_PORT_C_PIN_MASK 0x0FFF
AnnaBridge 156:ff21514d8981 237 #define _GPIO_PORT_D_PIN_MASK 0xFF00
AnnaBridge 156:ff21514d8981 238 #define _GPIO_PORT_E_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 239 #define _GPIO_PORT_F_PIN_MASK 0xFFFF
AnnaBridge 156:ff21514d8981 240 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 241 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 242 #define _GPIO_PORT_I_PIN_MASK 0x000F
AnnaBridge 156:ff21514d8981 243 #define _GPIO_PORT_J_PIN_MASK 0xC000
AnnaBridge 156:ff21514d8981 244 #define _GPIO_PORT_K_PIN_MASK 0x0007
AnnaBridge 156:ff21514d8981 245
Anna Bridge 160:5571c4ff569f 246 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_89)
Anna Bridge 160:5571c4ff569f 247
Anna Bridge 160:5571c4ff569f 248 #define _GPIO_PORT_A_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 249 #define _GPIO_PORT_B_PIN_COUNT 5
Anna Bridge 160:5571c4ff569f 250 #define _GPIO_PORT_C_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 251 #define _GPIO_PORT_D_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 252 #define _GPIO_PORT_E_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 253 #define _GPIO_PORT_F_PIN_COUNT 8
Anna Bridge 160:5571c4ff569f 254 #define _GPIO_PORT_G_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 255 #define _GPIO_PORT_H_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 256 #define _GPIO_PORT_I_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 257 #define _GPIO_PORT_J_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 258 #define _GPIO_PORT_K_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 259
Anna Bridge 160:5571c4ff569f 260 #define _GPIO_PORT_A_PIN_MASK 0x003F
Anna Bridge 160:5571c4ff569f 261 #define _GPIO_PORT_B_PIN_MASK 0xF800
Anna Bridge 160:5571c4ff569f 262 #define _GPIO_PORT_C_PIN_MASK 0x0FC0
Anna Bridge 160:5571c4ff569f 263 #define _GPIO_PORT_D_PIN_MASK 0xFC00
Anna Bridge 160:5571c4ff569f 264 #define _GPIO_PORT_E_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 265 #define _GPIO_PORT_F_PIN_MASK 0x00FF
Anna Bridge 160:5571c4ff569f 266 #define _GPIO_PORT_G_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 267 #define _GPIO_PORT_H_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 268 #define _GPIO_PORT_I_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 269 #define _GPIO_PORT_J_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 270 #define _GPIO_PORT_K_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 271
Anna Bridge 160:5571c4ff569f 272 #elif defined(_SILICON_LABS_32B_SERIES_1) && defined(_EFM32_GIANT_FAMILY)
Anna Bridge 160:5571c4ff569f 273
Anna Bridge 160:5571c4ff569f 274 #define _GPIO_PORT_A_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 275 #define _GPIO_PORT_B_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 276 #define _GPIO_PORT_C_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 277 #define _GPIO_PORT_D_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 278 #define _GPIO_PORT_E_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 279 #define _GPIO_PORT_F_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 280 #define _GPIO_PORT_G_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 281 #define _GPIO_PORT_H_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 282 #define _GPIO_PORT_I_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 283 #define _GPIO_PORT_J_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 284 #define _GPIO_PORT_K_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 285
Anna Bridge 160:5571c4ff569f 286 #define _GPIO_PORT_A_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 287 #define _GPIO_PORT_B_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 288 #define _GPIO_PORT_C_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 289 #define _GPIO_PORT_D_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 290 #define _GPIO_PORT_E_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 291 #define _GPIO_PORT_F_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 292 #define _GPIO_PORT_G_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 293 #define _GPIO_PORT_H_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 294 #define _GPIO_PORT_I_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 295 #define _GPIO_PORT_J_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 296 #define _GPIO_PORT_K_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 297
Anna Bridge 160:5571c4ff569f 298 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_95)
AnnaBridge 156:ff21514d8981 299
AnnaBridge 156:ff21514d8981 300 #define _GPIO_PORT_A_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 301 #define _GPIO_PORT_B_PIN_COUNT 5
AnnaBridge 156:ff21514d8981 302 #define _GPIO_PORT_C_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 303 #define _GPIO_PORT_D_PIN_COUNT 6
AnnaBridge 156:ff21514d8981 304 #define _GPIO_PORT_E_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 305 #define _GPIO_PORT_F_PIN_COUNT 8
AnnaBridge 156:ff21514d8981 306 #define _GPIO_PORT_G_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 307 #define _GPIO_PORT_H_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 308 #define _GPIO_PORT_I_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 309 #define _GPIO_PORT_J_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 310 #define _GPIO_PORT_K_PIN_COUNT 0
AnnaBridge 156:ff21514d8981 311
AnnaBridge 156:ff21514d8981 312 #define _GPIO_PORT_A_PIN_MASK 0x003F
AnnaBridge 156:ff21514d8981 313 #define _GPIO_PORT_B_PIN_MASK 0xF800
AnnaBridge 156:ff21514d8981 314 #define _GPIO_PORT_C_PIN_MASK 0x0FC0
AnnaBridge 156:ff21514d8981 315 #define _GPIO_PORT_D_PIN_MASK 0xFC00
AnnaBridge 156:ff21514d8981 316 #define _GPIO_PORT_E_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 317 #define _GPIO_PORT_F_PIN_MASK 0x00FF
AnnaBridge 156:ff21514d8981 318 #define _GPIO_PORT_G_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 319 #define _GPIO_PORT_H_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 320 #define _GPIO_PORT_I_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 321 #define _GPIO_PORT_J_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 322 #define _GPIO_PORT_K_PIN_MASK 0x0000
AnnaBridge 156:ff21514d8981 323
Anna Bridge 160:5571c4ff569f 324 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_103)
Anna Bridge 160:5571c4ff569f 325
Anna Bridge 160:5571c4ff569f 326 #define _GPIO_PORT_A_PIN_COUNT 14
Anna Bridge 160:5571c4ff569f 327 #define _GPIO_PORT_B_PIN_COUNT 10
Anna Bridge 160:5571c4ff569f 328 #define _GPIO_PORT_C_PIN_COUNT 16
Anna Bridge 160:5571c4ff569f 329 #define _GPIO_PORT_D_PIN_COUNT 9
Anna Bridge 160:5571c4ff569f 330 #define _GPIO_PORT_E_PIN_COUNT 12
Anna Bridge 160:5571c4ff569f 331 #define _GPIO_PORT_F_PIN_COUNT 6
Anna Bridge 160:5571c4ff569f 332 #define _GPIO_PORT_G_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 333 #define _GPIO_PORT_H_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 334 #define _GPIO_PORT_I_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 335 #define _GPIO_PORT_J_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 336 #define _GPIO_PORT_K_PIN_COUNT 0
Anna Bridge 160:5571c4ff569f 337
Anna Bridge 160:5571c4ff569f 338 #define _GPIO_PORT_A_PIN_MASK 0xF77F
Anna Bridge 160:5571c4ff569f 339 #define _GPIO_PORT_B_PIN_MASK 0x79F8
Anna Bridge 160:5571c4ff569f 340 #define _GPIO_PORT_C_PIN_MASK 0xFFFF
Anna Bridge 160:5571c4ff569f 341 #define _GPIO_PORT_D_PIN_MASK 0x01FF
Anna Bridge 160:5571c4ff569f 342 #define _GPIO_PORT_E_PIN_MASK 0xFFF0
Anna Bridge 160:5571c4ff569f 343 #define _GPIO_PORT_F_PIN_MASK 0x003F
Anna Bridge 160:5571c4ff569f 344 #define _GPIO_PORT_G_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 345 #define _GPIO_PORT_H_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 346 #define _GPIO_PORT_I_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 347 #define _GPIO_PORT_J_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 348 #define _GPIO_PORT_K_PIN_MASK 0x0000
Anna Bridge 160:5571c4ff569f 349
AnnaBridge 156:ff21514d8981 350 #else
AnnaBridge 156:ff21514d8981 351 #warning "Port and pin masks are not defined for this family."
AnnaBridge 156:ff21514d8981 352 #endif
AnnaBridge 156:ff21514d8981 353
Anna Bridge 160:5571c4ff569f 354 #define _GPIO_PORT_SIZE(port) ( \
Anna Bridge 160:5571c4ff569f 355 (port) == 0 ? _GPIO_PORT_A_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 356 : (port) == 1 ? _GPIO_PORT_B_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 357 : (port) == 2 ? _GPIO_PORT_C_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 358 : (port) == 3 ? _GPIO_PORT_D_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 359 : (port) == 4 ? _GPIO_PORT_E_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 360 : (port) == 5 ? _GPIO_PORT_F_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 361 : (port) == 6 ? _GPIO_PORT_G_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 362 : (port) == 7 ? _GPIO_PORT_H_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 363 : (port) == 8 ? _GPIO_PORT_I_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 364 : (port) == 9 ? _GPIO_PORT_J_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 365 : (port) == 10 ? _GPIO_PORT_K_PIN_COUNT \
Anna Bridge 160:5571c4ff569f 366 : 0)
AnnaBridge 156:ff21514d8981 367
Anna Bridge 160:5571c4ff569f 368 #define _GPIO_PORT_MASK(port) ( \
Anna Bridge 160:5571c4ff569f 369 (port) == 0 ? _GPIO_PORT_A_PIN_MASK \
Anna Bridge 160:5571c4ff569f 370 : (port) == 1 ? _GPIO_PORT_B_PIN_MASK \
Anna Bridge 160:5571c4ff569f 371 : (port) == 2 ? _GPIO_PORT_C_PIN_MASK \
Anna Bridge 160:5571c4ff569f 372 : (port) == 3 ? _GPIO_PORT_D_PIN_MASK \
Anna Bridge 160:5571c4ff569f 373 : (port) == 4 ? _GPIO_PORT_E_PIN_MASK \
Anna Bridge 160:5571c4ff569f 374 : (port) == 5 ? _GPIO_PORT_F_PIN_MASK \
Anna Bridge 160:5571c4ff569f 375 : (port) == 6 ? _GPIO_PORT_G_PIN_MASK \
Anna Bridge 160:5571c4ff569f 376 : (port) == 7 ? _GPIO_PORT_H_PIN_MASK \
Anna Bridge 160:5571c4ff569f 377 : (port) == 8 ? _GPIO_PORT_I_PIN_MASK \
Anna Bridge 160:5571c4ff569f 378 : (port) == 9 ? _GPIO_PORT_J_PIN_MASK \
Anna Bridge 160:5571c4ff569f 379 : (port) == 10 ? _GPIO_PORT_K_PIN_MASK \
Anna Bridge 160:5571c4ff569f 380 : 0)
AnnaBridge 156:ff21514d8981 381
AnnaBridge 156:ff21514d8981 382 /** Validation of port and pin */
Anna Bridge 160:5571c4ff569f 383 #define GPIO_PORT_VALID(port) (_GPIO_PORT_MASK(port) )
Anna Bridge 160:5571c4ff569f 384 #define GPIO_PORT_PIN_VALID(port, pin) (((_GPIO_PORT_MASK(port)) >> (pin)) & 0x1)
AnnaBridge 156:ff21514d8981 385
AnnaBridge 156:ff21514d8981 386 #if defined(_GPIO_EXTIPINSELL_MASK)
AnnaBridge 156:ff21514d8981 387 /** Validation of interrupt number and pin */
Anna Bridge 160:5571c4ff569f 388 #define GPIO_INTNO_PIN_VALID(intNo, pin) \
Anna Bridge 160:5571c4ff569f 389 ((intNo & ~_GPIO_EXTIPINSELL_EXTIPINSEL0_MASK) \
AnnaBridge 156:ff21514d8981 390 == (pin & ~_GPIO_EXTIPINSELL_EXTIPINSEL0_MASK))
AnnaBridge 156:ff21514d8981 391 #endif
AnnaBridge 156:ff21514d8981 392
AnnaBridge 156:ff21514d8981 393 /** Highest GPIO pin number */
AnnaBridge 156:ff21514d8981 394 #define GPIO_PIN_MAX 15
AnnaBridge 156:ff21514d8981 395
AnnaBridge 156:ff21514d8981 396 /** Highest GPIO port number */
Anna Bridge 160:5571c4ff569f 397 #if (_GPIO_PORT_K_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 398 #define GPIO_PORT_MAX 10
Anna Bridge 160:5571c4ff569f 399 #elif (_GPIO_PORT_J_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 400 #define GPIO_PORT_MAX 9
Anna Bridge 160:5571c4ff569f 401 #elif (_GPIO_PORT_I_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 402 #define GPIO_PORT_MAX 8
Anna Bridge 160:5571c4ff569f 403 #elif (_GPIO_PORT_H_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 404 #define GPIO_PORT_MAX 7
Anna Bridge 160:5571c4ff569f 405 #elif (_GPIO_PORT_G_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 406 #define GPIO_PORT_MAX 6
Anna Bridge 160:5571c4ff569f 407 #elif (_GPIO_PORT_F_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 408 #define GPIO_PORT_MAX 5
AnnaBridge 156:ff21514d8981 409 #else
AnnaBridge 156:ff21514d8981 410 #error "Max GPIO port number is undefined for this part."
AnnaBridge 156:ff21514d8981 411 #endif
AnnaBridge 156:ff21514d8981 412
AnnaBridge 156:ff21514d8981 413 /** Highest EXT GPIO interrupt number */
AnnaBridge 156:ff21514d8981 414 #define GPIO_EXTINTNO_MAX 15
AnnaBridge 156:ff21514d8981 415
AnnaBridge 156:ff21514d8981 416 /** @endcond */
AnnaBridge 156:ff21514d8981 417
AnnaBridge 156:ff21514d8981 418 /*******************************************************************************
AnnaBridge 156:ff21514d8981 419 ******************************** ENUMS ************************************
AnnaBridge 156:ff21514d8981 420 ******************************************************************************/
AnnaBridge 156:ff21514d8981 421
AnnaBridge 156:ff21514d8981 422 /** GPIO ports ids. */
Anna Bridge 160:5571c4ff569f 423 typedef enum {
Anna Bridge 160:5571c4ff569f 424 #if (_GPIO_PORT_A_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 425 gpioPortA = 0,
AnnaBridge 156:ff21514d8981 426 #endif
Anna Bridge 160:5571c4ff569f 427 #if (_GPIO_PORT_B_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 428 gpioPortB = 1,
AnnaBridge 156:ff21514d8981 429 #endif
Anna Bridge 160:5571c4ff569f 430 #if (_GPIO_PORT_C_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 431 gpioPortC = 2,
AnnaBridge 156:ff21514d8981 432 #endif
Anna Bridge 160:5571c4ff569f 433 #if (_GPIO_PORT_D_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 434 gpioPortD = 3,
AnnaBridge 156:ff21514d8981 435 #endif
Anna Bridge 160:5571c4ff569f 436 #if (_GPIO_PORT_E_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 437 gpioPortE = 4,
AnnaBridge 156:ff21514d8981 438 #endif
Anna Bridge 160:5571c4ff569f 439 #if (_GPIO_PORT_F_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 440 gpioPortF = 5,
AnnaBridge 156:ff21514d8981 441 #endif
Anna Bridge 160:5571c4ff569f 442 #if (_GPIO_PORT_G_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 443 gpioPortG = 6,
AnnaBridge 156:ff21514d8981 444 #endif
Anna Bridge 160:5571c4ff569f 445 #if (_GPIO_PORT_H_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 446 gpioPortH = 7,
AnnaBridge 156:ff21514d8981 447 #endif
Anna Bridge 160:5571c4ff569f 448 #if (_GPIO_PORT_I_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 449 gpioPortI = 8,
AnnaBridge 156:ff21514d8981 450 #endif
Anna Bridge 160:5571c4ff569f 451 #if (_GPIO_PORT_J_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 452 gpioPortJ = 9,
AnnaBridge 156:ff21514d8981 453 #endif
Anna Bridge 160:5571c4ff569f 454 #if (_GPIO_PORT_K_PIN_COUNT > 0)
AnnaBridge 156:ff21514d8981 455 gpioPortK = 10,
AnnaBridge 156:ff21514d8981 456 #endif
AnnaBridge 156:ff21514d8981 457 } GPIO_Port_TypeDef;
AnnaBridge 156:ff21514d8981 458
Anna Bridge 160:5571c4ff569f 459 #if defined(_GPIO_P_CTRL_DRIVEMODE_MASK)
AnnaBridge 156:ff21514d8981 460 /** GPIO drive mode. */
Anna Bridge 160:5571c4ff569f 461 typedef enum {
AnnaBridge 156:ff21514d8981 462 /** Default 6mA */
AnnaBridge 156:ff21514d8981 463 gpioDriveModeStandard = GPIO_P_CTRL_DRIVEMODE_STANDARD,
AnnaBridge 156:ff21514d8981 464 /** 0.5 mA */
AnnaBridge 156:ff21514d8981 465 gpioDriveModeLowest = GPIO_P_CTRL_DRIVEMODE_LOWEST,
AnnaBridge 156:ff21514d8981 466 /** 20 mA */
AnnaBridge 156:ff21514d8981 467 gpioDriveModeHigh = GPIO_P_CTRL_DRIVEMODE_HIGH,
AnnaBridge 156:ff21514d8981 468 /** 2 mA */
AnnaBridge 156:ff21514d8981 469 gpioDriveModeLow = GPIO_P_CTRL_DRIVEMODE_LOW
AnnaBridge 156:ff21514d8981 470 } GPIO_DriveMode_TypeDef;
AnnaBridge 156:ff21514d8981 471 #endif
AnnaBridge 156:ff21514d8981 472
Anna Bridge 160:5571c4ff569f 473 #if defined(_GPIO_P_CTRL_DRIVESTRENGTH_MASK) && defined(_GPIO_P_CTRL_DRIVESTRENGTHALT_MASK)
AnnaBridge 156:ff21514d8981 474 /** GPIO drive strength. */
Anna Bridge 160:5571c4ff569f 475 typedef enum {
AnnaBridge 156:ff21514d8981 476 /** GPIO weak 1mA and alternate function weak 1mA */
AnnaBridge 156:ff21514d8981 477 gpioDriveStrengthWeakAlternateWeak = GPIO_P_CTRL_DRIVESTRENGTH_WEAK | GPIO_P_CTRL_DRIVESTRENGTHALT_WEAK,
AnnaBridge 156:ff21514d8981 478
AnnaBridge 156:ff21514d8981 479 /** GPIO weak 1mA and alternate function strong 10mA */
AnnaBridge 156:ff21514d8981 480 gpioDriveStrengthWeakAlternateStrong = GPIO_P_CTRL_DRIVESTRENGTH_WEAK | GPIO_P_CTRL_DRIVESTRENGTHALT_STRONG,
AnnaBridge 156:ff21514d8981 481
Anna Bridge 160:5571c4ff569f 482 /** GPIO strong 10mA and alternate function weak 1mA */
AnnaBridge 156:ff21514d8981 483 gpioDriveStrengthStrongAlternateWeak = GPIO_P_CTRL_DRIVESTRENGTH_STRONG | GPIO_P_CTRL_DRIVESTRENGTHALT_WEAK,
AnnaBridge 156:ff21514d8981 484
AnnaBridge 156:ff21514d8981 485 /** GPIO strong 10mA and alternate function strong 10mA */
AnnaBridge 156:ff21514d8981 486 gpioDriveStrengthStrongAlternateStrong = GPIO_P_CTRL_DRIVESTRENGTH_STRONG | GPIO_P_CTRL_DRIVESTRENGTHALT_STRONG,
AnnaBridge 156:ff21514d8981 487 } GPIO_DriveStrength_TypeDef;
AnnaBridge 156:ff21514d8981 488
AnnaBridge 156:ff21514d8981 489 /* Deprecated enums */
AnnaBridge 156:ff21514d8981 490 #define gpioDriveStrengthStrong gpioDriveStrengthStrongAlternateStrong
AnnaBridge 156:ff21514d8981 491 #define gpioDriveStrengthWeak gpioDriveStrengthWeakAlternateWeak
AnnaBridge 156:ff21514d8981 492 #endif
AnnaBridge 156:ff21514d8981 493
AnnaBridge 156:ff21514d8981 494 /** Pin mode. For more details on each mode, please refer to the
AnnaBridge 156:ff21514d8981 495 * reference manual. */
Anna Bridge 160:5571c4ff569f 496 typedef enum {
AnnaBridge 156:ff21514d8981 497 /** Input disabled. Pullup if DOUT is set. */
AnnaBridge 156:ff21514d8981 498 gpioModeDisabled = _GPIO_P_MODEL_MODE0_DISABLED,
AnnaBridge 156:ff21514d8981 499 /** Input enabled. Filter if DOUT is set */
AnnaBridge 156:ff21514d8981 500 gpioModeInput = _GPIO_P_MODEL_MODE0_INPUT,
AnnaBridge 156:ff21514d8981 501 /** Input enabled. DOUT determines pull direction */
AnnaBridge 156:ff21514d8981 502 gpioModeInputPull = _GPIO_P_MODEL_MODE0_INPUTPULL,
AnnaBridge 156:ff21514d8981 503 /** Input enabled with filter. DOUT determines pull direction */
AnnaBridge 156:ff21514d8981 504 gpioModeInputPullFilter = _GPIO_P_MODEL_MODE0_INPUTPULLFILTER,
AnnaBridge 156:ff21514d8981 505 /** Push-pull output */
AnnaBridge 156:ff21514d8981 506 gpioModePushPull = _GPIO_P_MODEL_MODE0_PUSHPULL,
Anna Bridge 160:5571c4ff569f 507 #if defined(_GPIO_P_MODEL_MODE0_PUSHPULLDRIVE)
AnnaBridge 156:ff21514d8981 508 /** Push-pull output with drive-strength set by DRIVEMODE */
AnnaBridge 156:ff21514d8981 509 gpioModePushPullDrive = _GPIO_P_MODEL_MODE0_PUSHPULLDRIVE,
AnnaBridge 156:ff21514d8981 510 #endif
Anna Bridge 160:5571c4ff569f 511 #if defined(_GPIO_P_MODEL_MODE0_PUSHPULLALT)
AnnaBridge 156:ff21514d8981 512 /** Push-pull using alternate control */
AnnaBridge 156:ff21514d8981 513 gpioModePushPullAlternate = _GPIO_P_MODEL_MODE0_PUSHPULLALT,
AnnaBridge 156:ff21514d8981 514 #endif
AnnaBridge 156:ff21514d8981 515 /** Wired-or output */
AnnaBridge 156:ff21514d8981 516 gpioModeWiredOr = _GPIO_P_MODEL_MODE0_WIREDOR,
AnnaBridge 156:ff21514d8981 517 /** Wired-or output with pull-down */
AnnaBridge 156:ff21514d8981 518 gpioModeWiredOrPullDown = _GPIO_P_MODEL_MODE0_WIREDORPULLDOWN,
AnnaBridge 156:ff21514d8981 519 /** Open-drain output */
AnnaBridge 156:ff21514d8981 520 gpioModeWiredAnd = _GPIO_P_MODEL_MODE0_WIREDAND,
AnnaBridge 156:ff21514d8981 521 /** Open-drain output with filter */
AnnaBridge 156:ff21514d8981 522 gpioModeWiredAndFilter = _GPIO_P_MODEL_MODE0_WIREDANDFILTER,
AnnaBridge 156:ff21514d8981 523 /** Open-drain output with pullup */
AnnaBridge 156:ff21514d8981 524 gpioModeWiredAndPullUp = _GPIO_P_MODEL_MODE0_WIREDANDPULLUP,
AnnaBridge 156:ff21514d8981 525 /** Open-drain output with filter and pullup */
AnnaBridge 156:ff21514d8981 526 gpioModeWiredAndPullUpFilter = _GPIO_P_MODEL_MODE0_WIREDANDPULLUPFILTER,
Anna Bridge 160:5571c4ff569f 527 #if defined(_GPIO_P_MODEL_MODE0_WIREDANDDRIVE)
AnnaBridge 156:ff21514d8981 528 /** Open-drain output with drive-strength set by DRIVEMODE */
AnnaBridge 156:ff21514d8981 529 gpioModeWiredAndDrive = _GPIO_P_MODEL_MODE0_WIREDANDDRIVE,
AnnaBridge 156:ff21514d8981 530 /** Open-drain output with filter and drive-strength set by DRIVEMODE */
AnnaBridge 156:ff21514d8981 531 gpioModeWiredAndDriveFilter = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEFILTER,
AnnaBridge 156:ff21514d8981 532 /** Open-drain output with pullup and drive-strength set by DRIVEMODE */
AnnaBridge 156:ff21514d8981 533 gpioModeWiredAndDrivePullUp = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEPULLUP,
AnnaBridge 156:ff21514d8981 534 /** Open-drain output with filter, pullup and drive-strength set by DRIVEMODE */
AnnaBridge 156:ff21514d8981 535 gpioModeWiredAndDrivePullUpFilter = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEPULLUPFILTER
AnnaBridge 156:ff21514d8981 536 #endif
Anna Bridge 160:5571c4ff569f 537 #if defined(_GPIO_P_MODEL_MODE0_WIREDANDALT)
AnnaBridge 156:ff21514d8981 538 /** Open-drain output using alternate control */
AnnaBridge 156:ff21514d8981 539 gpioModeWiredAndAlternate = _GPIO_P_MODEL_MODE0_WIREDANDALT,
AnnaBridge 156:ff21514d8981 540 /** Open-drain output using alternate control with filter */
AnnaBridge 156:ff21514d8981 541 gpioModeWiredAndAlternateFilter = _GPIO_P_MODEL_MODE0_WIREDANDALTFILTER,
AnnaBridge 156:ff21514d8981 542 /** Open-drain output using alternate control with pullup */
AnnaBridge 156:ff21514d8981 543 gpioModeWiredAndAlternatePullUp = _GPIO_P_MODEL_MODE0_WIREDANDALTPULLUP,
AnnaBridge 156:ff21514d8981 544 /** Open-drain output uisng alternate control with filter and pullup */
AnnaBridge 156:ff21514d8981 545 gpioModeWiredAndAlternatePullUpFilter = _GPIO_P_MODEL_MODE0_WIREDANDALTPULLUPFILTER,
AnnaBridge 156:ff21514d8981 546 #endif
AnnaBridge 156:ff21514d8981 547 } GPIO_Mode_TypeDef;
AnnaBridge 156:ff21514d8981 548
AnnaBridge 156:ff21514d8981 549 /*******************************************************************************
AnnaBridge 156:ff21514d8981 550 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 551 ******************************************************************************/
AnnaBridge 156:ff21514d8981 552
AnnaBridge 156:ff21514d8981 553 void GPIO_DbgLocationSet(unsigned int location);
AnnaBridge 156:ff21514d8981 554
AnnaBridge 156:ff21514d8981 555 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 556 * @brief
AnnaBridge 156:ff21514d8981 557 * Enable/disable serial wire clock pin.
AnnaBridge 156:ff21514d8981 558 *
AnnaBridge 156:ff21514d8981 559 * @note
AnnaBridge 156:ff21514d8981 560 * Disabling SWDClk will disable the debug interface, which may result in
AnnaBridge 156:ff21514d8981 561 * a lockout if done early in startup (before debugger is able to halt core).
AnnaBridge 156:ff21514d8981 562 *
AnnaBridge 156:ff21514d8981 563 * @param[in] enable
AnnaBridge 156:ff21514d8981 564 * @li false - disable serial wire clock.
AnnaBridge 156:ff21514d8981 565 * @li true - enable serial wire clock (default after reset).
AnnaBridge 156:ff21514d8981 566 ******************************************************************************/
AnnaBridge 156:ff21514d8981 567 __STATIC_INLINE void GPIO_DbgSWDClkEnable(bool enable)
AnnaBridge 156:ff21514d8981 568 {
Anna Bridge 160:5571c4ff569f 569 #if defined(_GPIO_ROUTE_SWCLKPEN_MASK)
AnnaBridge 156:ff21514d8981 570 BUS_RegBitWrite(&(GPIO->ROUTE), _GPIO_ROUTE_SWCLKPEN_SHIFT, enable);
Anna Bridge 160:5571c4ff569f 571 #elif defined(_GPIO_ROUTEPEN_SWCLKTCKPEN_MASK)
AnnaBridge 156:ff21514d8981 572 BUS_RegBitWrite(&(GPIO->ROUTEPEN), _GPIO_ROUTEPEN_SWCLKTCKPEN_SHIFT, enable);
AnnaBridge 156:ff21514d8981 573 #else
AnnaBridge 156:ff21514d8981 574 #warning "ROUTE enable for SWCLK pin is not defined."
AnnaBridge 156:ff21514d8981 575 #endif
AnnaBridge 156:ff21514d8981 576 }
AnnaBridge 156:ff21514d8981 577
AnnaBridge 156:ff21514d8981 578 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 579 * @brief
AnnaBridge 156:ff21514d8981 580 * Enable/disable serial wire data I/O pin.
AnnaBridge 156:ff21514d8981 581 *
AnnaBridge 156:ff21514d8981 582 * @note
AnnaBridge 156:ff21514d8981 583 * Disabling SWDClk will disable the debug interface, which may result in
AnnaBridge 156:ff21514d8981 584 * a lockout if done early in startup (before debugger is able to halt core).
AnnaBridge 156:ff21514d8981 585 *
AnnaBridge 156:ff21514d8981 586 * @param[in] enable
AnnaBridge 156:ff21514d8981 587 * @li false - disable serial wire data pin.
AnnaBridge 156:ff21514d8981 588 * @li true - enable serial wire data pin (default after reset).
AnnaBridge 156:ff21514d8981 589 ******************************************************************************/
AnnaBridge 156:ff21514d8981 590 __STATIC_INLINE void GPIO_DbgSWDIOEnable(bool enable)
AnnaBridge 156:ff21514d8981 591 {
Anna Bridge 160:5571c4ff569f 592 #if defined(_GPIO_ROUTE_SWDIOPEN_MASK)
AnnaBridge 156:ff21514d8981 593 BUS_RegBitWrite(&(GPIO->ROUTE), _GPIO_ROUTE_SWDIOPEN_SHIFT, enable);
Anna Bridge 160:5571c4ff569f 594 #elif defined(_GPIO_ROUTEPEN_SWDIOTMSPEN_MASK)
AnnaBridge 156:ff21514d8981 595 BUS_RegBitWrite(&(GPIO->ROUTEPEN), _GPIO_ROUTEPEN_SWDIOTMSPEN_SHIFT, enable);
AnnaBridge 156:ff21514d8981 596 #else
AnnaBridge 156:ff21514d8981 597 #warning "ROUTE enable for SWDIO pin is not defined."
AnnaBridge 156:ff21514d8981 598 #endif
AnnaBridge 156:ff21514d8981 599 }
AnnaBridge 156:ff21514d8981 600
Anna Bridge 160:5571c4ff569f 601 #if defined(_GPIO_ROUTE_SWOPEN_MASK) || defined(_GPIO_ROUTEPEN_SWVPEN_MASK)
AnnaBridge 156:ff21514d8981 602 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 603 * @brief
AnnaBridge 156:ff21514d8981 604 * Enable/Disable serial wire output pin.
AnnaBridge 156:ff21514d8981 605 *
AnnaBridge 156:ff21514d8981 606 * @note
AnnaBridge 156:ff21514d8981 607 * Enabling this pin is not sufficient to fully enable serial wire output
AnnaBridge 156:ff21514d8981 608 * which is also dependent on issues outside the GPIO module. Please refer to
Anna Bridge 160:5571c4ff569f 609 * @ref DBG_SWOEnable().
AnnaBridge 156:ff21514d8981 610 *
AnnaBridge 156:ff21514d8981 611 * @param[in] enable
AnnaBridge 156:ff21514d8981 612 * @li false - disable serial wire viewer pin (default after reset).
AnnaBridge 156:ff21514d8981 613 * @li true - enable serial wire viewer pin.
AnnaBridge 156:ff21514d8981 614 ******************************************************************************/
AnnaBridge 156:ff21514d8981 615 __STATIC_INLINE void GPIO_DbgSWOEnable(bool enable)
AnnaBridge 156:ff21514d8981 616 {
Anna Bridge 160:5571c4ff569f 617 #if defined(_GPIO_ROUTE_SWOPEN_MASK)
AnnaBridge 156:ff21514d8981 618 BUS_RegBitWrite(&(GPIO->ROUTE), _GPIO_ROUTE_SWOPEN_SHIFT, enable);
Anna Bridge 160:5571c4ff569f 619 #elif defined(_GPIO_ROUTEPEN_SWVPEN_MASK)
AnnaBridge 156:ff21514d8981 620 BUS_RegBitWrite(&(GPIO->ROUTEPEN), _GPIO_ROUTEPEN_SWVPEN_SHIFT, enable);
AnnaBridge 156:ff21514d8981 621 #else
AnnaBridge 156:ff21514d8981 622 #warning "ROUTE enable for SWO/SWV pin is not defined."
AnnaBridge 156:ff21514d8981 623 #endif
AnnaBridge 156:ff21514d8981 624 }
AnnaBridge 156:ff21514d8981 625 #endif
AnnaBridge 156:ff21514d8981 626
AnnaBridge 156:ff21514d8981 627 #if defined (_GPIO_P_CTRL_DRIVEMODE_MASK)
AnnaBridge 156:ff21514d8981 628 void GPIO_DriveModeSet(GPIO_Port_TypeDef port, GPIO_DriveMode_TypeDef mode);
AnnaBridge 156:ff21514d8981 629 #endif
AnnaBridge 156:ff21514d8981 630
Anna Bridge 160:5571c4ff569f 631 #if defined(_GPIO_P_CTRL_DRIVESTRENGTH_MASK)
AnnaBridge 156:ff21514d8981 632 void GPIO_DriveStrengthSet(GPIO_Port_TypeDef port, GPIO_DriveStrength_TypeDef strength);
AnnaBridge 156:ff21514d8981 633 #endif
AnnaBridge 156:ff21514d8981 634
Anna Bridge 160:5571c4ff569f 635 # if defined(_GPIO_EM4WUEN_MASK)
AnnaBridge 156:ff21514d8981 636 /**************************************************************************//**
AnnaBridge 156:ff21514d8981 637 * @brief
AnnaBridge 156:ff21514d8981 638 * Disable GPIO pin wake-up from EM4.
AnnaBridge 156:ff21514d8981 639 *
AnnaBridge 156:ff21514d8981 640 * @param[in] pinmask
AnnaBridge 156:ff21514d8981 641 * Bitmask containing the bitwise logic OR of which GPIO pin(s) to disable.
AnnaBridge 156:ff21514d8981 642 * Refer to Reference Manuals for pinmask to GPIO port/pin mapping.
AnnaBridge 156:ff21514d8981 643 *****************************************************************************/
AnnaBridge 156:ff21514d8981 644 __STATIC_INLINE void GPIO_EM4DisablePinWakeup(uint32_t pinmask)
AnnaBridge 156:ff21514d8981 645 {
AnnaBridge 156:ff21514d8981 646 EFM_ASSERT((pinmask & ~_GPIO_EM4WUEN_MASK) == 0);
AnnaBridge 156:ff21514d8981 647
AnnaBridge 156:ff21514d8981 648 GPIO->EM4WUEN &= ~pinmask;
AnnaBridge 156:ff21514d8981 649 }
AnnaBridge 156:ff21514d8981 650 #endif
AnnaBridge 156:ff21514d8981 651
Anna Bridge 160:5571c4ff569f 652 # if defined(_GPIO_EM4WUEN_MASK)
AnnaBridge 156:ff21514d8981 653 void GPIO_EM4EnablePinWakeup(uint32_t pinmask, uint32_t polaritymask);
AnnaBridge 156:ff21514d8981 654 #endif
AnnaBridge 156:ff21514d8981 655
Anna Bridge 160:5571c4ff569f 656 #if defined(_GPIO_EM4WUCAUSE_MASK) || defined(_GPIO_IF_EM4WU_MASK)
AnnaBridge 156:ff21514d8981 657 /**************************************************************************//**
AnnaBridge 156:ff21514d8981 658 * @brief
AnnaBridge 156:ff21514d8981 659 * Check which GPIO pin(s) that caused a wake-up from EM4.
AnnaBridge 156:ff21514d8981 660 *
AnnaBridge 156:ff21514d8981 661 * @return
AnnaBridge 156:ff21514d8981 662 * Bitmask containing the bitwise logic OR of which GPIO pin(s) caused the
AnnaBridge 156:ff21514d8981 663 * wake-up. Refer to Reference Manuals for pinmask to GPIO port/pin mapping.
AnnaBridge 156:ff21514d8981 664 *****************************************************************************/
AnnaBridge 156:ff21514d8981 665 __STATIC_INLINE uint32_t GPIO_EM4GetPinWakeupCause(void)
AnnaBridge 156:ff21514d8981 666 {
Anna Bridge 160:5571c4ff569f 667 #if defined(_GPIO_EM4WUCAUSE_MASK)
AnnaBridge 156:ff21514d8981 668 return GPIO->EM4WUCAUSE & _GPIO_EM4WUCAUSE_MASK;
AnnaBridge 156:ff21514d8981 669 #else
AnnaBridge 156:ff21514d8981 670 return GPIO->IF & _GPIO_IF_EM4WU_MASK;
AnnaBridge 156:ff21514d8981 671 #endif
AnnaBridge 156:ff21514d8981 672 }
AnnaBridge 156:ff21514d8981 673 #endif
AnnaBridge 156:ff21514d8981 674
Anna Bridge 160:5571c4ff569f 675 #if defined(GPIO_CTRL_EM4RET) || defined(_EMU_EM4CTRL_EM4IORETMODE_MASK)
AnnaBridge 156:ff21514d8981 676 /**************************************************************************//**
AnnaBridge 156:ff21514d8981 677 * @brief
AnnaBridge 156:ff21514d8981 678 * Enable GPIO pin retention of output enable, output value, pull enable and
AnnaBridge 156:ff21514d8981 679 * pull direction in EM4.
AnnaBridge 156:ff21514d8981 680 *
AnnaBridge 156:ff21514d8981 681 * @note
Anna Bridge 160:5571c4ff569f 682 * For platform 2 parts, @ref EMU_EM4Init() and @ref EMU_UnlatchPinRetention() offers
AnnaBridge 156:ff21514d8981 683 * more pin retention features. This function implements the EM4EXIT retention
AnnaBridge 156:ff21514d8981 684 * mode on platform 2.
AnnaBridge 156:ff21514d8981 685 *
AnnaBridge 156:ff21514d8981 686 * @param[in] enable
AnnaBridge 156:ff21514d8981 687 * @li true - enable EM4 pin retention.
AnnaBridge 156:ff21514d8981 688 * @li false - disable EM4 pin retention.
AnnaBridge 156:ff21514d8981 689 *****************************************************************************/
AnnaBridge 156:ff21514d8981 690 __STATIC_INLINE void GPIO_EM4SetPinRetention(bool enable)
AnnaBridge 156:ff21514d8981 691 {
Anna Bridge 160:5571c4ff569f 692 if (enable) {
Anna Bridge 160:5571c4ff569f 693 #if defined(GPIO_CTRL_EM4RET)
AnnaBridge 156:ff21514d8981 694 GPIO->CTRL |= GPIO_CTRL_EM4RET;
AnnaBridge 156:ff21514d8981 695 #else
AnnaBridge 156:ff21514d8981 696 EMU->EM4CTRL = (EMU->EM4CTRL & ~_EMU_EM4CTRL_EM4IORETMODE_MASK)
AnnaBridge 156:ff21514d8981 697 | EMU_EM4CTRL_EM4IORETMODE_EM4EXIT;
AnnaBridge 156:ff21514d8981 698 #endif
Anna Bridge 160:5571c4ff569f 699 } else {
Anna Bridge 160:5571c4ff569f 700 #if defined(GPIO_CTRL_EM4RET)
AnnaBridge 156:ff21514d8981 701 GPIO->CTRL &= ~GPIO_CTRL_EM4RET;
AnnaBridge 156:ff21514d8981 702 #else
AnnaBridge 156:ff21514d8981 703 EMU->EM4CTRL = (EMU->EM4CTRL & ~_EMU_EM4CTRL_EM4IORETMODE_MASK)
AnnaBridge 156:ff21514d8981 704 | EMU_EM4CTRL_EM4IORETMODE_DISABLE;
AnnaBridge 156:ff21514d8981 705 #endif
AnnaBridge 156:ff21514d8981 706 }
AnnaBridge 156:ff21514d8981 707 }
AnnaBridge 156:ff21514d8981 708 #endif
AnnaBridge 156:ff21514d8981 709
AnnaBridge 156:ff21514d8981 710 void GPIO_ExtIntConfig(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 711 unsigned int pin,
AnnaBridge 156:ff21514d8981 712 unsigned int intNo,
AnnaBridge 156:ff21514d8981 713 bool risingEdge,
AnnaBridge 156:ff21514d8981 714 bool fallingEdge,
AnnaBridge 156:ff21514d8981 715 bool enable);
AnnaBridge 156:ff21514d8981 716
AnnaBridge 156:ff21514d8981 717 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 718 * @brief
AnnaBridge 156:ff21514d8981 719 * Enable/disable input sensing.
AnnaBridge 156:ff21514d8981 720 *
AnnaBridge 156:ff21514d8981 721 * @details
AnnaBridge 156:ff21514d8981 722 * Disabling input sensing if not used, can save some energy consumption.
AnnaBridge 156:ff21514d8981 723 *
AnnaBridge 156:ff21514d8981 724 * @param[in] val
AnnaBridge 156:ff21514d8981 725 * Bitwise logic OR of one or more of:
AnnaBridge 156:ff21514d8981 726 * @li GPIO_INSENSE_INT - interrupt input sensing.
AnnaBridge 156:ff21514d8981 727 * @li GPIO_INSENSE_PRS - peripheral reflex system input sensing.
AnnaBridge 156:ff21514d8981 728 *
AnnaBridge 156:ff21514d8981 729 * @param[in] mask
AnnaBridge 156:ff21514d8981 730 * Mask containing bitwise logic OR of bits similar as for @p val used to
AnnaBridge 156:ff21514d8981 731 * indicate which input sense options to disable/enable.
AnnaBridge 156:ff21514d8981 732 ******************************************************************************/
AnnaBridge 156:ff21514d8981 733 __STATIC_INLINE void GPIO_InputSenseSet(uint32_t val, uint32_t mask)
AnnaBridge 156:ff21514d8981 734 {
AnnaBridge 156:ff21514d8981 735 GPIO->INSENSE = (GPIO->INSENSE & ~mask) | (val & mask);
AnnaBridge 156:ff21514d8981 736 }
AnnaBridge 156:ff21514d8981 737
AnnaBridge 156:ff21514d8981 738 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 739 * @brief
AnnaBridge 156:ff21514d8981 740 * Clear one or more pending GPIO interrupts.
AnnaBridge 156:ff21514d8981 741 *
AnnaBridge 156:ff21514d8981 742 * @param[in] flags
AnnaBridge 156:ff21514d8981 743 * Bitwise logic OR of GPIO interrupt sources to clear.
AnnaBridge 156:ff21514d8981 744 ******************************************************************************/
AnnaBridge 156:ff21514d8981 745 __STATIC_INLINE void GPIO_IntClear(uint32_t flags)
AnnaBridge 156:ff21514d8981 746 {
AnnaBridge 156:ff21514d8981 747 GPIO->IFC = flags;
AnnaBridge 156:ff21514d8981 748 }
AnnaBridge 156:ff21514d8981 749
AnnaBridge 156:ff21514d8981 750 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 751 * @brief
AnnaBridge 156:ff21514d8981 752 * Disable one or more GPIO interrupts.
AnnaBridge 156:ff21514d8981 753 *
AnnaBridge 156:ff21514d8981 754 * @param[in] flags
AnnaBridge 156:ff21514d8981 755 * GPIO interrupt sources to disable.
AnnaBridge 156:ff21514d8981 756 ******************************************************************************/
AnnaBridge 156:ff21514d8981 757 __STATIC_INLINE void GPIO_IntDisable(uint32_t flags)
AnnaBridge 156:ff21514d8981 758 {
AnnaBridge 156:ff21514d8981 759 GPIO->IEN &= ~flags;
AnnaBridge 156:ff21514d8981 760 }
AnnaBridge 156:ff21514d8981 761
AnnaBridge 156:ff21514d8981 762 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 763 * @brief
AnnaBridge 156:ff21514d8981 764 * Enable one or more GPIO interrupts.
AnnaBridge 156:ff21514d8981 765 *
AnnaBridge 156:ff21514d8981 766 * @note
AnnaBridge 156:ff21514d8981 767 * Depending on the use, a pending interrupt may already be set prior to
Anna Bridge 160:5571c4ff569f 768 * enabling the interrupt. Consider using @ref GPIO_IntClear() prior to enabling
AnnaBridge 156:ff21514d8981 769 * if such a pending interrupt should be ignored.
AnnaBridge 156:ff21514d8981 770 *
AnnaBridge 156:ff21514d8981 771 * @param[in] flags
AnnaBridge 156:ff21514d8981 772 * GPIO interrupt sources to enable.
AnnaBridge 156:ff21514d8981 773 ******************************************************************************/
AnnaBridge 156:ff21514d8981 774 __STATIC_INLINE void GPIO_IntEnable(uint32_t flags)
AnnaBridge 156:ff21514d8981 775 {
AnnaBridge 156:ff21514d8981 776 GPIO->IEN |= flags;
AnnaBridge 156:ff21514d8981 777 }
AnnaBridge 156:ff21514d8981 778
AnnaBridge 156:ff21514d8981 779 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 780 * @brief
AnnaBridge 156:ff21514d8981 781 * Get pending GPIO interrupts.
AnnaBridge 156:ff21514d8981 782 *
AnnaBridge 156:ff21514d8981 783 * @return
AnnaBridge 156:ff21514d8981 784 * GPIO interrupt sources pending.
AnnaBridge 156:ff21514d8981 785 ******************************************************************************/
AnnaBridge 156:ff21514d8981 786 __STATIC_INLINE uint32_t GPIO_IntGet(void)
AnnaBridge 156:ff21514d8981 787 {
AnnaBridge 156:ff21514d8981 788 return GPIO->IF;
AnnaBridge 156:ff21514d8981 789 }
AnnaBridge 156:ff21514d8981 790
AnnaBridge 156:ff21514d8981 791 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 792 * @brief
AnnaBridge 156:ff21514d8981 793 * Get enabled and pending GPIO interrupt flags.
AnnaBridge 156:ff21514d8981 794 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 795 *
AnnaBridge 156:ff21514d8981 796 * @note
AnnaBridge 156:ff21514d8981 797 * Interrupt flags are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 798 *
AnnaBridge 156:ff21514d8981 799 * @return
AnnaBridge 156:ff21514d8981 800 * Pending and enabled GPIO interrupt sources.
AnnaBridge 156:ff21514d8981 801 * The return value is the bitwise AND combination of
AnnaBridge 156:ff21514d8981 802 * - the OR combination of enabled interrupt sources in GPIO_IEN register
AnnaBridge 156:ff21514d8981 803 * and
AnnaBridge 156:ff21514d8981 804 * - the OR combination of valid interrupt flags in GPIO_IF register.
AnnaBridge 156:ff21514d8981 805 ******************************************************************************/
AnnaBridge 156:ff21514d8981 806 __STATIC_INLINE uint32_t GPIO_IntGetEnabled(void)
AnnaBridge 156:ff21514d8981 807 {
AnnaBridge 156:ff21514d8981 808 uint32_t tmp;
AnnaBridge 156:ff21514d8981 809
AnnaBridge 156:ff21514d8981 810 /* Store GPIO->IEN in temporary variable in order to define explicit order
AnnaBridge 156:ff21514d8981 811 * of volatile accesses. */
AnnaBridge 156:ff21514d8981 812 tmp = GPIO->IEN;
AnnaBridge 156:ff21514d8981 813
AnnaBridge 156:ff21514d8981 814 /* Bitwise AND of pending and enabled interrupts */
AnnaBridge 156:ff21514d8981 815 return GPIO->IF & tmp;
AnnaBridge 156:ff21514d8981 816 }
AnnaBridge 156:ff21514d8981 817
AnnaBridge 156:ff21514d8981 818 /**************************************************************************//**
AnnaBridge 156:ff21514d8981 819 * @brief
AnnaBridge 156:ff21514d8981 820 * Set one or more pending GPIO interrupts from SW.
AnnaBridge 156:ff21514d8981 821 *
AnnaBridge 156:ff21514d8981 822 * @param[in] flags
AnnaBridge 156:ff21514d8981 823 * GPIO interrupt sources to set to pending.
AnnaBridge 156:ff21514d8981 824 *****************************************************************************/
AnnaBridge 156:ff21514d8981 825 __STATIC_INLINE void GPIO_IntSet(uint32_t flags)
AnnaBridge 156:ff21514d8981 826 {
AnnaBridge 156:ff21514d8981 827 GPIO->IFS = flags;
AnnaBridge 156:ff21514d8981 828 }
AnnaBridge 156:ff21514d8981 829
AnnaBridge 156:ff21514d8981 830 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 831 * @brief
AnnaBridge 156:ff21514d8981 832 * Locks the GPIO configuration.
AnnaBridge 156:ff21514d8981 833 ******************************************************************************/
AnnaBridge 156:ff21514d8981 834 __STATIC_INLINE void GPIO_Lock(void)
AnnaBridge 156:ff21514d8981 835 {
AnnaBridge 156:ff21514d8981 836 GPIO->LOCK = GPIO_LOCK_LOCKKEY_LOCK;
AnnaBridge 156:ff21514d8981 837 }
AnnaBridge 156:ff21514d8981 838
AnnaBridge 156:ff21514d8981 839 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 840 * @brief
AnnaBridge 156:ff21514d8981 841 * Read the pad value for a single pin in a GPIO port.
AnnaBridge 156:ff21514d8981 842 *
AnnaBridge 156:ff21514d8981 843 * @param[in] port
AnnaBridge 156:ff21514d8981 844 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 845 *
AnnaBridge 156:ff21514d8981 846 * @param[in] pin
AnnaBridge 156:ff21514d8981 847 * The pin number to read.
AnnaBridge 156:ff21514d8981 848 *
AnnaBridge 156:ff21514d8981 849 * @return
AnnaBridge 156:ff21514d8981 850 * The pin value, 0 or 1.
AnnaBridge 156:ff21514d8981 851 ******************************************************************************/
AnnaBridge 156:ff21514d8981 852 __STATIC_INLINE unsigned int GPIO_PinInGet(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 853 unsigned int pin)
AnnaBridge 156:ff21514d8981 854 {
AnnaBridge 156:ff21514d8981 855 EFM_ASSERT(GPIO_PORT_PIN_VALID(port, pin));
AnnaBridge 156:ff21514d8981 856 return BUS_RegBitRead(&GPIO->P[port].DIN, pin);
AnnaBridge 156:ff21514d8981 857 }
AnnaBridge 156:ff21514d8981 858
AnnaBridge 156:ff21514d8981 859 GPIO_Mode_TypeDef GPIO_PinModeGet(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 860 unsigned int pin);
AnnaBridge 156:ff21514d8981 861
AnnaBridge 156:ff21514d8981 862 void GPIO_PinModeSet(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 863 unsigned int pin,
AnnaBridge 156:ff21514d8981 864 GPIO_Mode_TypeDef mode,
AnnaBridge 156:ff21514d8981 865 unsigned int out);
AnnaBridge 156:ff21514d8981 866
AnnaBridge 156:ff21514d8981 867 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 868 * @brief
AnnaBridge 156:ff21514d8981 869 * Set a single pin in GPIO data out port register to 0.
AnnaBridge 156:ff21514d8981 870 *
AnnaBridge 156:ff21514d8981 871 * @note
AnnaBridge 156:ff21514d8981 872 * In order for the setting to take effect on the output pad, the pin must
AnnaBridge 156:ff21514d8981 873 * have been configured properly. If not, it will take effect whenever the
AnnaBridge 156:ff21514d8981 874 * pin has been properly configured.
AnnaBridge 156:ff21514d8981 875 *
AnnaBridge 156:ff21514d8981 876 * @param[in] port
AnnaBridge 156:ff21514d8981 877 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 878 *
AnnaBridge 156:ff21514d8981 879 * @param[in] pin
AnnaBridge 156:ff21514d8981 880 * The pin to set.
AnnaBridge 156:ff21514d8981 881 ******************************************************************************/
AnnaBridge 156:ff21514d8981 882 __STATIC_INLINE void GPIO_PinOutClear(GPIO_Port_TypeDef port, unsigned int pin)
AnnaBridge 156:ff21514d8981 883 {
AnnaBridge 156:ff21514d8981 884 EFM_ASSERT(GPIO_PORT_PIN_VALID(port, pin));
Anna Bridge 160:5571c4ff569f 885 #if defined(_GPIO_P_DOUTCLR_MASK)
AnnaBridge 156:ff21514d8981 886 GPIO->P[port].DOUTCLR = 1 << pin;
AnnaBridge 156:ff21514d8981 887 #else
Anna Bridge 160:5571c4ff569f 888 BUS_RegMaskedClear(&GPIO->P[port].DOUT, 1 << pin);
AnnaBridge 156:ff21514d8981 889 #endif
AnnaBridge 156:ff21514d8981 890 }
AnnaBridge 156:ff21514d8981 891
AnnaBridge 156:ff21514d8981 892 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 893 * @brief
AnnaBridge 156:ff21514d8981 894 * Get current setting for a pin in a GPIO port data out register.
AnnaBridge 156:ff21514d8981 895 *
AnnaBridge 156:ff21514d8981 896 * @param[in] port
AnnaBridge 156:ff21514d8981 897 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 898 *
AnnaBridge 156:ff21514d8981 899 * @param[in] pin
AnnaBridge 156:ff21514d8981 900 * The pin to get setting for.
AnnaBridge 156:ff21514d8981 901 *
AnnaBridge 156:ff21514d8981 902 * @return
AnnaBridge 156:ff21514d8981 903 * The DOUT setting for the requested pin, 0 or 1.
AnnaBridge 156:ff21514d8981 904 ******************************************************************************/
AnnaBridge 156:ff21514d8981 905 __STATIC_INLINE unsigned int GPIO_PinOutGet(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 906 unsigned int pin)
AnnaBridge 156:ff21514d8981 907 {
AnnaBridge 156:ff21514d8981 908 EFM_ASSERT(GPIO_PORT_PIN_VALID(port, pin));
AnnaBridge 156:ff21514d8981 909 return BUS_RegBitRead(&GPIO->P[port].DOUT, pin);
AnnaBridge 156:ff21514d8981 910 }
AnnaBridge 156:ff21514d8981 911
AnnaBridge 156:ff21514d8981 912 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 913 * @brief
AnnaBridge 156:ff21514d8981 914 * Set a single pin in GPIO data out register to 1.
AnnaBridge 156:ff21514d8981 915 *
AnnaBridge 156:ff21514d8981 916 * @note
AnnaBridge 156:ff21514d8981 917 * In order for the setting to take effect on the output pad, the pin must
AnnaBridge 156:ff21514d8981 918 * have been configured properly. If not, it will take effect whenever the
AnnaBridge 156:ff21514d8981 919 * pin has been properly configured.
AnnaBridge 156:ff21514d8981 920 *
AnnaBridge 156:ff21514d8981 921 * @param[in] port
AnnaBridge 156:ff21514d8981 922 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 923 *
AnnaBridge 156:ff21514d8981 924 * @param[in] pin
AnnaBridge 156:ff21514d8981 925 * The pin to set.
AnnaBridge 156:ff21514d8981 926 ******************************************************************************/
AnnaBridge 156:ff21514d8981 927 __STATIC_INLINE void GPIO_PinOutSet(GPIO_Port_TypeDef port, unsigned int pin)
AnnaBridge 156:ff21514d8981 928 {
AnnaBridge 156:ff21514d8981 929 EFM_ASSERT(GPIO_PORT_PIN_VALID(port, pin));
Anna Bridge 160:5571c4ff569f 930 #if defined(_GPIO_P_DOUTSET_MASK)
AnnaBridge 156:ff21514d8981 931 GPIO->P[port].DOUTSET = 1 << pin;
AnnaBridge 156:ff21514d8981 932 #else
Anna Bridge 160:5571c4ff569f 933 BUS_RegMaskedSet(&GPIO->P[port].DOUT, 1 << pin);
AnnaBridge 156:ff21514d8981 934 #endif
AnnaBridge 156:ff21514d8981 935 }
AnnaBridge 156:ff21514d8981 936
AnnaBridge 156:ff21514d8981 937 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 938 * @brief
AnnaBridge 156:ff21514d8981 939 * Toggle a single pin in GPIO port data out register.
AnnaBridge 156:ff21514d8981 940 *
AnnaBridge 156:ff21514d8981 941 * @note
AnnaBridge 156:ff21514d8981 942 * In order for the setting to take effect on the output pad, the pin must
AnnaBridge 156:ff21514d8981 943 * have been configured properly. If not, it will take effect whenever the
AnnaBridge 156:ff21514d8981 944 * pin has been properly configured.
AnnaBridge 156:ff21514d8981 945 *
AnnaBridge 156:ff21514d8981 946 * @param[in] port
AnnaBridge 156:ff21514d8981 947 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 948 *
AnnaBridge 156:ff21514d8981 949 * @param[in] pin
AnnaBridge 156:ff21514d8981 950 * The pin to toggle.
AnnaBridge 156:ff21514d8981 951 ******************************************************************************/
AnnaBridge 156:ff21514d8981 952 __STATIC_INLINE void GPIO_PinOutToggle(GPIO_Port_TypeDef port, unsigned int pin)
AnnaBridge 156:ff21514d8981 953 {
AnnaBridge 156:ff21514d8981 954 EFM_ASSERT(GPIO_PORT_PIN_VALID(port, pin));
AnnaBridge 156:ff21514d8981 955
AnnaBridge 156:ff21514d8981 956 GPIO->P[port].DOUTTGL = 1 << pin;
AnnaBridge 156:ff21514d8981 957 }
AnnaBridge 156:ff21514d8981 958
AnnaBridge 156:ff21514d8981 959 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 960 * @brief
AnnaBridge 156:ff21514d8981 961 * Read the pad values for GPIO port.
AnnaBridge 156:ff21514d8981 962 *
AnnaBridge 156:ff21514d8981 963 * @param[in] port
AnnaBridge 156:ff21514d8981 964 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 965 ******************************************************************************/
AnnaBridge 156:ff21514d8981 966 __STATIC_INLINE uint32_t GPIO_PortInGet(GPIO_Port_TypeDef port)
AnnaBridge 156:ff21514d8981 967 {
AnnaBridge 156:ff21514d8981 968 EFM_ASSERT(GPIO_PORT_VALID(port));
AnnaBridge 156:ff21514d8981 969
AnnaBridge 156:ff21514d8981 970 return GPIO->P[port].DIN;
AnnaBridge 156:ff21514d8981 971 }
AnnaBridge 156:ff21514d8981 972
AnnaBridge 156:ff21514d8981 973 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 974 * @brief
AnnaBridge 156:ff21514d8981 975 * Set bits in DOUT register for a port to 0.
AnnaBridge 156:ff21514d8981 976 *
AnnaBridge 156:ff21514d8981 977 * @note
AnnaBridge 156:ff21514d8981 978 * In order for the setting to take effect on the output pad, the pin must
AnnaBridge 156:ff21514d8981 979 * have been configured properly. If not, it will take effect whenever the
AnnaBridge 156:ff21514d8981 980 * pin has been properly configured.
AnnaBridge 156:ff21514d8981 981 *
AnnaBridge 156:ff21514d8981 982 * @param[in] port
AnnaBridge 156:ff21514d8981 983 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 984 *
AnnaBridge 156:ff21514d8981 985 * @param[in] pins
AnnaBridge 156:ff21514d8981 986 * Bit mask for bits to clear in DOUT register.
AnnaBridge 156:ff21514d8981 987 ******************************************************************************/
AnnaBridge 156:ff21514d8981 988 __STATIC_INLINE void GPIO_PortOutClear(GPIO_Port_TypeDef port, uint32_t pins)
AnnaBridge 156:ff21514d8981 989 {
AnnaBridge 156:ff21514d8981 990 EFM_ASSERT(GPIO_PORT_VALID(port));
Anna Bridge 160:5571c4ff569f 991 #if defined(_GPIO_P_DOUTCLR_MASK)
AnnaBridge 156:ff21514d8981 992 GPIO->P[port].DOUTCLR = pins;
AnnaBridge 156:ff21514d8981 993 #else
AnnaBridge 156:ff21514d8981 994 BUS_RegMaskedClear(&GPIO->P[port].DOUT, pins);
AnnaBridge 156:ff21514d8981 995 #endif
AnnaBridge 156:ff21514d8981 996 }
AnnaBridge 156:ff21514d8981 997
AnnaBridge 156:ff21514d8981 998 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 999 * @brief
AnnaBridge 156:ff21514d8981 1000 * Get current setting for a GPIO port data out register.
AnnaBridge 156:ff21514d8981 1001 *
AnnaBridge 156:ff21514d8981 1002 * @param[in] port
AnnaBridge 156:ff21514d8981 1003 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 1004 *
AnnaBridge 156:ff21514d8981 1005 * @return
AnnaBridge 156:ff21514d8981 1006 * The data out setting for the requested port.
AnnaBridge 156:ff21514d8981 1007 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1008 __STATIC_INLINE uint32_t GPIO_PortOutGet(GPIO_Port_TypeDef port)
AnnaBridge 156:ff21514d8981 1009 {
AnnaBridge 156:ff21514d8981 1010 EFM_ASSERT(GPIO_PORT_VALID(port));
AnnaBridge 156:ff21514d8981 1011
AnnaBridge 156:ff21514d8981 1012 return GPIO->P[port].DOUT;
AnnaBridge 156:ff21514d8981 1013 }
AnnaBridge 156:ff21514d8981 1014
AnnaBridge 156:ff21514d8981 1015 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1016 * @brief
AnnaBridge 156:ff21514d8981 1017 * Set bits GPIO data out register to 1.
AnnaBridge 156:ff21514d8981 1018 *
AnnaBridge 156:ff21514d8981 1019 * @note
AnnaBridge 156:ff21514d8981 1020 * In order for the setting to take effect on the respective output pads, the
AnnaBridge 156:ff21514d8981 1021 * pins must have been configured properly. If not, it will take effect
AnnaBridge 156:ff21514d8981 1022 * whenever the pin has been properly configured.
AnnaBridge 156:ff21514d8981 1023 *
AnnaBridge 156:ff21514d8981 1024 * @param[in] port
AnnaBridge 156:ff21514d8981 1025 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 1026 *
AnnaBridge 156:ff21514d8981 1027 * @param[in] pins
AnnaBridge 156:ff21514d8981 1028 * Bit mask for bits to set to 1 in DOUT register.
AnnaBridge 156:ff21514d8981 1029 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1030 __STATIC_INLINE void GPIO_PortOutSet(GPIO_Port_TypeDef port, uint32_t pins)
AnnaBridge 156:ff21514d8981 1031 {
AnnaBridge 156:ff21514d8981 1032 EFM_ASSERT(GPIO_PORT_VALID(port));
Anna Bridge 160:5571c4ff569f 1033 #if defined(_GPIO_P_DOUTSET_MASK)
AnnaBridge 156:ff21514d8981 1034 GPIO->P[port].DOUTSET = pins;
AnnaBridge 156:ff21514d8981 1035 #else
AnnaBridge 156:ff21514d8981 1036 BUS_RegMaskedSet(&GPIO->P[port].DOUT, pins);
AnnaBridge 156:ff21514d8981 1037 #endif
AnnaBridge 156:ff21514d8981 1038 }
AnnaBridge 156:ff21514d8981 1039
AnnaBridge 156:ff21514d8981 1040 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1041 * @brief
AnnaBridge 156:ff21514d8981 1042 * Set GPIO port data out register.
AnnaBridge 156:ff21514d8981 1043 *
AnnaBridge 156:ff21514d8981 1044 * @note
AnnaBridge 156:ff21514d8981 1045 * In order for the setting to take effect on the respective output pads, the
AnnaBridge 156:ff21514d8981 1046 * pins must have been configured properly. If not, it will take effect
AnnaBridge 156:ff21514d8981 1047 * whenever the pin has been properly configured.
AnnaBridge 156:ff21514d8981 1048 *
AnnaBridge 156:ff21514d8981 1049 * @param[in] port
AnnaBridge 156:ff21514d8981 1050 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 1051 *
AnnaBridge 156:ff21514d8981 1052 * @param[in] val
AnnaBridge 156:ff21514d8981 1053 * Value to write to port data out register.
AnnaBridge 156:ff21514d8981 1054 *
AnnaBridge 156:ff21514d8981 1055 * @param[in] mask
AnnaBridge 156:ff21514d8981 1056 * Mask indicating which bits to modify.
AnnaBridge 156:ff21514d8981 1057 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1058 __STATIC_INLINE void GPIO_PortOutSetVal(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 1059 uint32_t val,
AnnaBridge 156:ff21514d8981 1060 uint32_t mask)
AnnaBridge 156:ff21514d8981 1061 {
AnnaBridge 156:ff21514d8981 1062 EFM_ASSERT(GPIO_PORT_VALID(port));
AnnaBridge 156:ff21514d8981 1063
AnnaBridge 156:ff21514d8981 1064 GPIO->P[port].DOUT = (GPIO->P[port].DOUT & ~mask) | (val & mask);
AnnaBridge 156:ff21514d8981 1065 }
AnnaBridge 156:ff21514d8981 1066
AnnaBridge 156:ff21514d8981 1067 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1068 * @brief
AnnaBridge 156:ff21514d8981 1069 * Toggle pins in GPIO port data out register.
AnnaBridge 156:ff21514d8981 1070 *
AnnaBridge 156:ff21514d8981 1071 * @note
AnnaBridge 156:ff21514d8981 1072 * In order for the setting to take effect on the output pad, the pin must
AnnaBridge 156:ff21514d8981 1073 * have been configured properly. If not, it will take effect whenever the
AnnaBridge 156:ff21514d8981 1074 * pin has been properly configured.
AnnaBridge 156:ff21514d8981 1075 *
AnnaBridge 156:ff21514d8981 1076 * @param[in] port
AnnaBridge 156:ff21514d8981 1077 * The GPIO port to access.
AnnaBridge 156:ff21514d8981 1078 *
AnnaBridge 156:ff21514d8981 1079 * @param[in] pins
AnnaBridge 156:ff21514d8981 1080 * Bitmask with pins to toggle.
AnnaBridge 156:ff21514d8981 1081 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1082 __STATIC_INLINE void GPIO_PortOutToggle(GPIO_Port_TypeDef port, uint32_t pins)
AnnaBridge 156:ff21514d8981 1083 {
AnnaBridge 156:ff21514d8981 1084 EFM_ASSERT(GPIO_PORT_VALID(port));
AnnaBridge 156:ff21514d8981 1085
AnnaBridge 156:ff21514d8981 1086 GPIO->P[port].DOUTTGL = pins;
AnnaBridge 156:ff21514d8981 1087 }
AnnaBridge 156:ff21514d8981 1088
AnnaBridge 156:ff21514d8981 1089 #if defined(_GPIO_P_CTRL_SLEWRATE_MASK)
AnnaBridge 156:ff21514d8981 1090 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1091 * @brief
AnnaBridge 156:ff21514d8981 1092 * Set slewrate for pins on a GPIO port.
AnnaBridge 156:ff21514d8981 1093 *
AnnaBridge 156:ff21514d8981 1094 * @param[in] port
AnnaBridge 156:ff21514d8981 1095 * The GPIO port to configure.
AnnaBridge 156:ff21514d8981 1096 *
AnnaBridge 156:ff21514d8981 1097 * @param[in] slewrate
AnnaBridge 156:ff21514d8981 1098 * The slewrate to configure for pins on this GPIO port.
AnnaBridge 156:ff21514d8981 1099 *
AnnaBridge 156:ff21514d8981 1100 * @param[in] slewrateAlt
AnnaBridge 156:ff21514d8981 1101 * The slewrate to configure for pins using alternate modes on this GPIO port.
AnnaBridge 156:ff21514d8981 1102 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1103 __STATIC_INLINE void GPIO_SlewrateSet(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 1104 uint32_t slewrate,
AnnaBridge 156:ff21514d8981 1105 uint32_t slewrateAlt)
AnnaBridge 156:ff21514d8981 1106 {
AnnaBridge 156:ff21514d8981 1107 EFM_ASSERT(GPIO_PORT_VALID(port));
AnnaBridge 156:ff21514d8981 1108 EFM_ASSERT(slewrate <= (_GPIO_P_CTRL_SLEWRATE_MASK
AnnaBridge 156:ff21514d8981 1109 >> _GPIO_P_CTRL_SLEWRATE_SHIFT));
AnnaBridge 156:ff21514d8981 1110 EFM_ASSERT(slewrateAlt <= (_GPIO_P_CTRL_SLEWRATEALT_MASK
AnnaBridge 156:ff21514d8981 1111 >> _GPIO_P_CTRL_SLEWRATEALT_SHIFT));
AnnaBridge 156:ff21514d8981 1112
AnnaBridge 156:ff21514d8981 1113 GPIO->P[port].CTRL = (GPIO->P[port].CTRL
AnnaBridge 156:ff21514d8981 1114 & ~(_GPIO_P_CTRL_SLEWRATE_MASK
AnnaBridge 156:ff21514d8981 1115 | _GPIO_P_CTRL_SLEWRATEALT_MASK))
AnnaBridge 156:ff21514d8981 1116 | (slewrate << _GPIO_P_CTRL_SLEWRATE_SHIFT)
AnnaBridge 156:ff21514d8981 1117 | (slewrateAlt << _GPIO_P_CTRL_SLEWRATEALT_SHIFT);
AnnaBridge 156:ff21514d8981 1118 }
AnnaBridge 156:ff21514d8981 1119 #endif
AnnaBridge 156:ff21514d8981 1120
AnnaBridge 156:ff21514d8981 1121 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1122 * @brief
AnnaBridge 156:ff21514d8981 1123 * Unlocks the GPIO configuration.
AnnaBridge 156:ff21514d8981 1124 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1125 __STATIC_INLINE void GPIO_Unlock(void)
AnnaBridge 156:ff21514d8981 1126 {
AnnaBridge 156:ff21514d8981 1127 GPIO->LOCK = GPIO_LOCK_LOCKKEY_UNLOCK;
AnnaBridge 156:ff21514d8981 1128 }
AnnaBridge 156:ff21514d8981 1129
AnnaBridge 156:ff21514d8981 1130 /*******************************************************************************
AnnaBridge 156:ff21514d8981 1131 *********************** DEPRECATED PROTOTYPES *****************************
AnnaBridge 156:ff21514d8981 1132 *********************** (will be removed) *****************************
AnnaBridge 156:ff21514d8981 1133 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1134
AnnaBridge 156:ff21514d8981 1135 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1136 * @brief
AnnaBridge 156:ff21514d8981 1137 * Configure GPIO interrupt.
AnnaBridge 156:ff21514d8981 1138 *
AnnaBridge 156:ff21514d8981 1139 * @details
AnnaBridge 156:ff21514d8981 1140 * If reconfiguring a GPIO interrupt that is already enabled, it is generally
Anna Bridge 160:5571c4ff569f 1141 * recommended to disable it first, see @ref GPIO_Disable().
AnnaBridge 156:ff21514d8981 1142 *
AnnaBridge 156:ff21514d8981 1143 * The actual GPIO interrupt handler must be in place before enabling the
AnnaBridge 156:ff21514d8981 1144 * interrupt.
AnnaBridge 156:ff21514d8981 1145 *
AnnaBridge 156:ff21514d8981 1146 * Notice that any pending interrupt for the selected pin is cleared by this
AnnaBridge 156:ff21514d8981 1147 * function.
AnnaBridge 156:ff21514d8981 1148 *
AnnaBridge 156:ff21514d8981 1149 * @deprecated
AnnaBridge 156:ff21514d8981 1150 * Deprecated function. New code should use @ref GPIO_ExtIntConfig().
AnnaBridge 156:ff21514d8981 1151 *
AnnaBridge 156:ff21514d8981 1152 * @note
AnnaBridge 156:ff21514d8981 1153 * A certain pin number can only be associated with one port. Ie, if GPIO
AnnaBridge 156:ff21514d8981 1154 * interrupt 1 is assigned to port A/pin 1, then it is not possible to use
AnnaBridge 156:ff21514d8981 1155 * pin 1 from any other ports for interrupts. Please refer to the reference
AnnaBridge 156:ff21514d8981 1156 * manual. On devices which implement GPIO_EXTIPINSEL registers a more
AnnaBridge 156:ff21514d8981 1157 * flexible approach is possible, refer to @ref GPIO_ExtIntConfig().
AnnaBridge 156:ff21514d8981 1158 *
AnnaBridge 156:ff21514d8981 1159 * @param[in] port
AnnaBridge 156:ff21514d8981 1160 * The port to associate with @p pin.
AnnaBridge 156:ff21514d8981 1161 *
AnnaBridge 156:ff21514d8981 1162 * @param[in] pin
AnnaBridge 156:ff21514d8981 1163 * The pin number on the port ( == GPIO EXTI interrupt number).
AnnaBridge 156:ff21514d8981 1164 *
AnnaBridge 156:ff21514d8981 1165 * @param[in] risingEdge
AnnaBridge 156:ff21514d8981 1166 * Set to true if interrupts shall be enabled on rising edge, otherwise false.
AnnaBridge 156:ff21514d8981 1167 *
AnnaBridge 156:ff21514d8981 1168 * @param[in] fallingEdge
AnnaBridge 156:ff21514d8981 1169 * Set to true if interrupts shall be enabled on falling edge, otherwise false.
AnnaBridge 156:ff21514d8981 1170 *
AnnaBridge 156:ff21514d8981 1171 * @param[in] enable
AnnaBridge 156:ff21514d8981 1172 * Set to true if interrupt shall be enabled after configuration completed,
Anna Bridge 160:5571c4ff569f 1173 * false to leave disabled. See @ref GPIO_IntDisable() and @ref GPIO_IntEnable().
AnnaBridge 156:ff21514d8981 1174 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1175 __STATIC_INLINE void GPIO_IntConfig(GPIO_Port_TypeDef port,
AnnaBridge 156:ff21514d8981 1176 unsigned int pin,
AnnaBridge 156:ff21514d8981 1177 bool risingEdge,
AnnaBridge 156:ff21514d8981 1178 bool fallingEdge,
AnnaBridge 156:ff21514d8981 1179 bool enable)
AnnaBridge 156:ff21514d8981 1180 {
AnnaBridge 156:ff21514d8981 1181 GPIO_ExtIntConfig(port, pin, pin, risingEdge, fallingEdge, enable);
AnnaBridge 156:ff21514d8981 1182 }
AnnaBridge 156:ff21514d8981 1183
AnnaBridge 156:ff21514d8981 1184 /** @} (end addtogroup GPIO) */
AnnaBridge 156:ff21514d8981 1185 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 1186
AnnaBridge 156:ff21514d8981 1187 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 1188 }
AnnaBridge 156:ff21514d8981 1189 #endif
AnnaBridge 156:ff21514d8981 1190
AnnaBridge 156:ff21514d8981 1191 #endif /* defined(GPIO_COUNT) && (GPIO_COUNT > 0) */
AnnaBridge 156:ff21514d8981 1192 #endif /* EM_GPIO_H */