mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/gpio_api.c@189:f392fc9709a3, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 22:31:08 2019 +0000
- Revision:
- 189:f392fc9709a3
- Parent:
- 187:0387e8f68319
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 167:e84263d55307 | 1 | /* mbed Microcontroller Library |
AnnaBridge | 184:08ed48f1de7f | 2 | * Copyright (c) 2006-2018 ARM Limited |
AnnaBridge | 167:e84263d55307 | 3 | * |
AnnaBridge | 167:e84263d55307 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
AnnaBridge | 167:e84263d55307 | 5 | * you may not use this file except in compliance with the License. |
AnnaBridge | 167:e84263d55307 | 6 | * You may obtain a copy of the License at |
AnnaBridge | 167:e84263d55307 | 7 | * |
AnnaBridge | 167:e84263d55307 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
AnnaBridge | 167:e84263d55307 | 9 | * |
AnnaBridge | 167:e84263d55307 | 10 | * Unless required by applicable law or agreed to in writing, software |
AnnaBridge | 167:e84263d55307 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
AnnaBridge | 167:e84263d55307 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
AnnaBridge | 167:e84263d55307 | 13 | * See the License for the specific language governing permissions and |
AnnaBridge | 167:e84263d55307 | 14 | * limitations under the License. |
AnnaBridge | 167:e84263d55307 | 15 | */ |
AnnaBridge | 167:e84263d55307 | 16 | |
AnnaBridge | 167:e84263d55307 | 17 | #include <stddef.h> |
AnnaBridge | 167:e84263d55307 | 18 | #include "gpio_api.h" |
AnnaBridge | 167:e84263d55307 | 19 | #include "pinmap.h" |
AnnaBridge | 184:08ed48f1de7f | 20 | #include "objects.h" |
AnnaBridge | 184:08ed48f1de7f | 21 | #include "mbed_error.h" |
AnnaBridge | 167:e84263d55307 | 22 | |
Anna Bridge |
186:707f6e361f3e | 23 | #define RESERVED_MISC_PIN 7u |
Anna Bridge |
186:707f6e361f3e | 24 | |
AnnaBridge | 184:08ed48f1de7f | 25 | enum io_type { |
AnnaBridge | 184:08ed48f1de7f | 26 | GPIO_DEVICE, |
AnnaBridge | 184:08ed48f1de7f | 27 | MPS2_IO_DEVICE, |
AnnaBridge | 184:08ed48f1de7f | 28 | DEVICE_UNKNOWN |
AnnaBridge | 184:08ed48f1de7f | 29 | }; |
AnnaBridge | 167:e84263d55307 | 30 | |
AnnaBridge | 184:08ed48f1de7f | 31 | /* Tell if the gpio is from GPIO device or MPS2 IO */ |
AnnaBridge | 184:08ed48f1de7f | 32 | static enum io_type io_type(gpio_t *obj) |
AnnaBridge | 167:e84263d55307 | 33 | { |
AnnaBridge | 184:08ed48f1de7f | 34 | if (obj->gpio_dev != NULL && obj->mps2_io_dev == NULL) { |
AnnaBridge | 184:08ed48f1de7f | 35 | return GPIO_DEVICE; |
AnnaBridge | 167:e84263d55307 | 36 | } |
AnnaBridge | 184:08ed48f1de7f | 37 | if (obj->gpio_dev == NULL && obj->mps2_io_dev != NULL) { |
AnnaBridge | 184:08ed48f1de7f | 38 | return MPS2_IO_DEVICE; |
AnnaBridge | 184:08ed48f1de7f | 39 | } |
AnnaBridge | 184:08ed48f1de7f | 40 | return DEVICE_UNKNOWN; |
AnnaBridge | 167:e84263d55307 | 41 | } |
AnnaBridge | 167:e84263d55307 | 42 | |
AnnaBridge | 184:08ed48f1de7f | 43 | /* Return the correct mask of the given PIN */ |
AnnaBridge | 167:e84263d55307 | 44 | uint32_t gpio_set(PinName pin) |
AnnaBridge | 167:e84263d55307 | 45 | { |
AnnaBridge | 184:08ed48f1de7f | 46 | pin_function(pin, (int)GPIO_FUNC); |
AnnaBridge | 168:9672193075cf | 47 | |
AnnaBridge | 184:08ed48f1de7f | 48 | if (pin >= EXP0 && pin <= EXP51) { |
AnnaBridge | 184:08ed48f1de7f | 49 | /* GPIO pins */ |
AnnaBridge | 184:08ed48f1de7f | 50 | return (1 << GPIO_PIN_NUMBER(pin)); |
AnnaBridge | 184:08ed48f1de7f | 51 | } else if (pin == USERLED1 || pin == USERLED2) { |
AnnaBridge | 184:08ed48f1de7f | 52 | /* User LEDs */ |
AnnaBridge | 184:08ed48f1de7f | 53 | return (1 << (pin - USERLED1)); |
AnnaBridge | 184:08ed48f1de7f | 54 | } else if (pin == USERSW1 || pin == USERSW2) { |
AnnaBridge | 184:08ed48f1de7f | 55 | /* User Push buttons */ |
AnnaBridge | 184:08ed48f1de7f | 56 | return (1 << (pin - USERSW1)); |
AnnaBridge | 184:08ed48f1de7f | 57 | } else if (pin >= LED1 && pin <= LED8) { |
AnnaBridge | 184:08ed48f1de7f | 58 | /* MCC LEDs */ |
AnnaBridge | 184:08ed48f1de7f | 59 | return (1 << (pin - LED1)); |
AnnaBridge | 184:08ed48f1de7f | 60 | } else if (pin >= SW1 && pin <= SW8) { |
AnnaBridge | 184:08ed48f1de7f | 61 | /* MCC Switches */ |
AnnaBridge | 184:08ed48f1de7f | 62 | return (1 << (pin - SW1)); |
AnnaBridge | 168:9672193075cf | 63 | } else { |
AnnaBridge | 184:08ed48f1de7f | 64 | return 0; |
AnnaBridge | 168:9672193075cf | 65 | } |
AnnaBridge | 167:e84263d55307 | 66 | } |
AnnaBridge | 167:e84263d55307 | 67 | |
Anna Bridge |
186:707f6e361f3e | 68 | /* |
Anna Bridge |
186:707f6e361f3e | 69 | * FPGA MISC bit mapping: |
Anna Bridge |
186:707f6e361f3e | 70 | * [31:7] Reserved |
Anna Bridge |
186:707f6e361f3e | 71 | * [6] CLCD_BL_CTRL |
Anna Bridge |
186:707f6e361f3e | 72 | * [5] CLCD_RD |
Anna Bridge |
186:707f6e361f3e | 73 | * [4] CLCD_RS |
Anna Bridge |
186:707f6e361f3e | 74 | * [3] CLCD_RESET |
Anna Bridge |
186:707f6e361f3e | 75 | * [2] Reserved |
Anna Bridge |
186:707f6e361f3e | 76 | * [1] SPI_nSS |
Anna Bridge |
186:707f6e361f3e | 77 | * [0] CLCD_CS |
Anna Bridge |
186:707f6e361f3e | 78 | */ |
Anna Bridge |
186:707f6e361f3e | 79 | static uint32_t gpio_fpga_misc_pin(PinName pin) |
Anna Bridge |
186:707f6e361f3e | 80 | { |
Anna Bridge |
186:707f6e361f3e | 81 | uint32_t pin_number = RESERVED_MISC_PIN; |
Anna Bridge |
186:707f6e361f3e | 82 | |
Anna Bridge |
186:707f6e361f3e | 83 | if (pin == CLCD_SSEL) { |
Anna Bridge |
186:707f6e361f3e | 84 | pin_number = 0u; |
Anna Bridge |
186:707f6e361f3e | 85 | } else if (pin == SPI_SSEL) { |
Anna Bridge |
186:707f6e361f3e | 86 | pin_number = 1u; |
Anna Bridge |
186:707f6e361f3e | 87 | } else if (pin == CLCD_RESET) { |
Anna Bridge |
186:707f6e361f3e | 88 | pin_number = 3u; |
Anna Bridge |
186:707f6e361f3e | 89 | } else if (pin == CLCD_RS) { |
Anna Bridge |
186:707f6e361f3e | 90 | pin_number = 4u; |
Anna Bridge |
186:707f6e361f3e | 91 | } else if (pin == CLCD_RD) { |
Anna Bridge |
186:707f6e361f3e | 92 | pin_number = 5u; |
Anna Bridge |
186:707f6e361f3e | 93 | } else if (pin == CLCD_BL_CTRL){ |
Anna Bridge |
186:707f6e361f3e | 94 | pin_number = 6u; |
Anna Bridge |
186:707f6e361f3e | 95 | } |
Anna Bridge |
186:707f6e361f3e | 96 | |
Anna Bridge |
186:707f6e361f3e | 97 | return pin_number; |
Anna Bridge |
186:707f6e361f3e | 98 | } |
Anna Bridge |
186:707f6e361f3e | 99 | |
AnnaBridge | 167:e84263d55307 | 100 | void gpio_init(gpio_t *obj, PinName pin) |
AnnaBridge | 167:e84263d55307 | 101 | { |
AnnaBridge | 184:08ed48f1de7f | 102 | struct arm_gpio_dev_t *gpio_dev; |
AnnaBridge | 167:e84263d55307 | 103 | |
AnnaBridge | 184:08ed48f1de7f | 104 | if (pin >= EXP0 && pin <= EXP51) { |
AnnaBridge | 184:08ed48f1de7f | 105 | /* GPIO pins */ |
AnnaBridge | 184:08ed48f1de7f | 106 | switch (GPIO_DEV_NUMBER(pin)) { |
AnnaBridge | 184:08ed48f1de7f | 107 | #ifdef ARM_GPIO0 |
AnnaBridge | 184:08ed48f1de7f | 108 | case GPIO0_NUMBER: |
AnnaBridge | 184:08ed48f1de7f | 109 | gpio_dev = &ARM_GPIO0_DEV; |
AnnaBridge | 184:08ed48f1de7f | 110 | break; |
AnnaBridge | 184:08ed48f1de7f | 111 | #endif /* ARM_GPIO0 */ |
AnnaBridge | 184:08ed48f1de7f | 112 | #ifdef ARM_GPIO1 |
AnnaBridge | 184:08ed48f1de7f | 113 | case GPIO1_NUMBER: |
AnnaBridge | 184:08ed48f1de7f | 114 | gpio_dev = &ARM_GPIO1_DEV; |
AnnaBridge | 184:08ed48f1de7f | 115 | break; |
AnnaBridge | 184:08ed48f1de7f | 116 | #endif /* ARM_GPIO1 */ |
AnnaBridge | 184:08ed48f1de7f | 117 | #ifdef ARM_GPIO2 |
AnnaBridge | 184:08ed48f1de7f | 118 | case GPIO2_NUMBER: |
AnnaBridge | 184:08ed48f1de7f | 119 | gpio_dev = &ARM_GPIO2_DEV; |
AnnaBridge | 184:08ed48f1de7f | 120 | break; |
AnnaBridge | 184:08ed48f1de7f | 121 | #endif /* ARM_GPIO2 */ |
AnnaBridge | 184:08ed48f1de7f | 122 | #ifdef ARM_GPIO3 |
AnnaBridge | 184:08ed48f1de7f | 123 | case GPIO3_NUMBER: |
AnnaBridge | 184:08ed48f1de7f | 124 | gpio_dev = &ARM_GPIO3_DEV; |
AnnaBridge | 184:08ed48f1de7f | 125 | break; |
AnnaBridge | 184:08ed48f1de7f | 126 | #endif /* ARM_GPIO3 */ |
AnnaBridge | 184:08ed48f1de7f | 127 | default: |
AnnaBridge | 184:08ed48f1de7f | 128 | error("GPIO %d, associated with expansion pin %d, is disabled", |
AnnaBridge | 184:08ed48f1de7f | 129 | GPIO_DEV_NUMBER(pin), pin); |
AnnaBridge | 184:08ed48f1de7f | 130 | return; |
AnnaBridge | 184:08ed48f1de7f | 131 | } |
AnnaBridge | 184:08ed48f1de7f | 132 | |
AnnaBridge | 184:08ed48f1de7f | 133 | arm_gpio_init(gpio_dev); |
AnnaBridge | 184:08ed48f1de7f | 134 | |
AnnaBridge | 184:08ed48f1de7f | 135 | obj->gpio_dev = gpio_dev; |
AnnaBridge | 184:08ed48f1de7f | 136 | obj->mps2_io_dev = NULL; |
Anna Bridge |
186:707f6e361f3e | 137 | obj->arm_mps2_io_write = NULL; |
AnnaBridge | 184:08ed48f1de7f | 138 | obj->pin_number = GPIO_PIN_NUMBER(pin); |
AnnaBridge | 184:08ed48f1de7f | 139 | /* GPIO is input by default */ |
AnnaBridge | 184:08ed48f1de7f | 140 | obj->direction = PIN_INPUT; |
AnnaBridge | 184:08ed48f1de7f | 141 | return; |
AnnaBridge | 167:e84263d55307 | 142 | } |
AnnaBridge | 167:e84263d55307 | 143 | |
AnnaBridge | 184:08ed48f1de7f | 144 | #ifdef ARM_MPS2_IO_FPGAIO |
AnnaBridge | 184:08ed48f1de7f | 145 | if (pin == USERLED1 || pin == USERLED2) { |
AnnaBridge | 167:e84263d55307 | 146 | /* User LEDs */ |
AnnaBridge | 184:08ed48f1de7f | 147 | obj->gpio_dev = NULL; |
AnnaBridge | 184:08ed48f1de7f | 148 | obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV; |
AnnaBridge | 184:08ed48f1de7f | 149 | obj->pin_number = pin - USERLED1; |
Anna Bridge |
186:707f6e361f3e | 150 | obj->arm_mps2_io_write = arm_mps2_io_write_leds; |
AnnaBridge | 184:08ed48f1de7f | 151 | obj->direction = PIN_OUTPUT; |
AnnaBridge | 184:08ed48f1de7f | 152 | return; |
AnnaBridge | 184:08ed48f1de7f | 153 | } else if (pin == USERSW1 || pin == USERSW2) { |
AnnaBridge | 184:08ed48f1de7f | 154 | /* User Push buttons */ |
AnnaBridge | 184:08ed48f1de7f | 155 | obj->gpio_dev = NULL; |
AnnaBridge | 184:08ed48f1de7f | 156 | obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV; |
Anna Bridge |
186:707f6e361f3e | 157 | obj->arm_mps2_io_write = NULL; |
AnnaBridge | 184:08ed48f1de7f | 158 | obj->pin_number = pin - USERSW1; |
AnnaBridge | 184:08ed48f1de7f | 159 | obj->direction = PIN_INPUT; |
AnnaBridge | 184:08ed48f1de7f | 160 | return; |
AnnaBridge | 184:08ed48f1de7f | 161 | } |
Anna Bridge |
186:707f6e361f3e | 162 | /* Check if pin is a MISC pin */ |
Anna Bridge |
186:707f6e361f3e | 163 | obj->pin_number = gpio_fpga_misc_pin(pin); |
Anna Bridge |
186:707f6e361f3e | 164 | if (obj->pin_number != RESERVED_MISC_PIN) { |
Anna Bridge |
186:707f6e361f3e | 165 | obj->gpio_dev = NULL; |
Anna Bridge |
186:707f6e361f3e | 166 | obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV; |
Anna Bridge |
186:707f6e361f3e | 167 | obj->arm_mps2_io_write = arm_mps2_io_write_misc; |
Anna Bridge |
186:707f6e361f3e | 168 | obj->direction = PIN_OUTPUT; |
Anna Bridge |
186:707f6e361f3e | 169 | return; |
Anna Bridge |
186:707f6e361f3e | 170 | } |
AnnaBridge | 184:08ed48f1de7f | 171 | #endif /* ARM_MPS2_IO_FPGAIO */ |
AnnaBridge | 184:08ed48f1de7f | 172 | |
AnnaBridge | 184:08ed48f1de7f | 173 | #ifdef ARM_MPS2_IO_SCC |
AnnaBridge | 184:08ed48f1de7f | 174 | if (pin >= LED1 && pin <= LED8) { |
AnnaBridge | 167:e84263d55307 | 175 | /* MCC LEDs */ |
AnnaBridge | 184:08ed48f1de7f | 176 | obj->gpio_dev = NULL; |
AnnaBridge | 184:08ed48f1de7f | 177 | obj->mps2_io_dev = &ARM_MPS2_IO_SCC_DEV; |
AnnaBridge | 187:0387e8f68319 | 178 | obj->arm_mps2_io_write = arm_mps2_io_write_leds; |
AnnaBridge | 184:08ed48f1de7f | 179 | obj->pin_number = pin - LED1; |
AnnaBridge | 184:08ed48f1de7f | 180 | obj->direction = PIN_OUTPUT; |
AnnaBridge | 184:08ed48f1de7f | 181 | return; |
AnnaBridge | 184:08ed48f1de7f | 182 | } else if (pin >= SW1 && pin <= SW8) { |
AnnaBridge | 184:08ed48f1de7f | 183 | /* MCC Switches */ |
AnnaBridge | 184:08ed48f1de7f | 184 | obj->gpio_dev = NULL; |
AnnaBridge | 184:08ed48f1de7f | 185 | obj->mps2_io_dev = &ARM_MPS2_IO_SCC_DEV; |
Anna Bridge |
186:707f6e361f3e | 186 | obj->arm_mps2_io_write = NULL; |
AnnaBridge | 184:08ed48f1de7f | 187 | obj->pin_number = pin - SW1; |
AnnaBridge | 184:08ed48f1de7f | 188 | obj->direction = PIN_INPUT; |
AnnaBridge | 184:08ed48f1de7f | 189 | return; |
AnnaBridge | 167:e84263d55307 | 190 | } |
AnnaBridge | 184:08ed48f1de7f | 191 | #endif /* ARM_MPS2_IO_SCC */ |
AnnaBridge | 167:e84263d55307 | 192 | |
AnnaBridge | 184:08ed48f1de7f | 193 | error("pin %d is not a GPIO", pin); |
AnnaBridge | 167:e84263d55307 | 194 | } |
AnnaBridge | 167:e84263d55307 | 195 | |
AnnaBridge | 167:e84263d55307 | 196 | void gpio_mode(gpio_t *obj, PinMode mode) |
AnnaBridge | 167:e84263d55307 | 197 | { |
AnnaBridge | 184:08ed48f1de7f | 198 | /* PinMode is not supported */ |
AnnaBridge | 167:e84263d55307 | 199 | } |
AnnaBridge | 167:e84263d55307 | 200 | |
AnnaBridge | 167:e84263d55307 | 201 | void gpio_dir(gpio_t *obj, PinDirection direction) |
AnnaBridge | 167:e84263d55307 | 202 | { |
AnnaBridge | 184:08ed48f1de7f | 203 | uint32_t flags = ARM_GPIO_PIN_ENABLE; |
AnnaBridge | 184:08ed48f1de7f | 204 | |
AnnaBridge | 184:08ed48f1de7f | 205 | obj->direction = direction; |
AnnaBridge | 184:08ed48f1de7f | 206 | |
AnnaBridge | 184:08ed48f1de7f | 207 | switch (io_type(obj)) { |
AnnaBridge | 184:08ed48f1de7f | 208 | case GPIO_DEVICE: |
AnnaBridge | 167:e84263d55307 | 209 | switch (direction) { |
AnnaBridge | 184:08ed48f1de7f | 210 | case PIN_INPUT: |
AnnaBridge | 184:08ed48f1de7f | 211 | flags |= ARM_GPIO_INPUT; |
AnnaBridge | 184:08ed48f1de7f | 212 | break; |
AnnaBridge | 184:08ed48f1de7f | 213 | case PIN_OUTPUT: |
AnnaBridge | 184:08ed48f1de7f | 214 | flags |= ARM_GPIO_OUTPUT; |
AnnaBridge | 184:08ed48f1de7f | 215 | break; |
AnnaBridge | 184:08ed48f1de7f | 216 | /* default: not added to force to cover all enumeration cases */ |
AnnaBridge | 167:e84263d55307 | 217 | } |
AnnaBridge | 184:08ed48f1de7f | 218 | |
AnnaBridge | 184:08ed48f1de7f | 219 | (void)arm_gpio_config(obj->gpio_dev, ARM_GPIO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 220 | obj->pin_number, flags); |
AnnaBridge | 184:08ed48f1de7f | 221 | return; |
AnnaBridge | 184:08ed48f1de7f | 222 | case MPS2_IO_DEVICE: |
AnnaBridge | 184:08ed48f1de7f | 223 | /* Do nothing as MPS2 IO direction can not be changed */ |
AnnaBridge | 184:08ed48f1de7f | 224 | return; |
AnnaBridge | 184:08ed48f1de7f | 225 | case DEVICE_UNKNOWN: |
AnnaBridge | 184:08ed48f1de7f | 226 | break; |
AnnaBridge | 184:08ed48f1de7f | 227 | /* default: The default is not defined intentionally to force the |
AnnaBridge | 184:08ed48f1de7f | 228 | * compiler to check that all the enumeration values are |
AnnaBridge | 184:08ed48f1de7f | 229 | * covered in the switch.*/ |
AnnaBridge | 167:e84263d55307 | 230 | } |
AnnaBridge | 184:08ed48f1de7f | 231 | |
AnnaBridge | 184:08ed48f1de7f | 232 | error("can not change the direction of pin"); |
AnnaBridge | 167:e84263d55307 | 233 | } |
AnnaBridge | 167:e84263d55307 | 234 | |
AnnaBridge | 167:e84263d55307 | 235 | int gpio_is_connected(const gpio_t *obj) |
AnnaBridge | 167:e84263d55307 | 236 | { |
AnnaBridge | 184:08ed48f1de7f | 237 | if (obj->pin_number == (uint32_t)NC) { |
AnnaBridge | 184:08ed48f1de7f | 238 | return 0; |
AnnaBridge | 184:08ed48f1de7f | 239 | } else { |
AnnaBridge | 167:e84263d55307 | 240 | return 1; |
AnnaBridge | 167:e84263d55307 | 241 | } |
AnnaBridge | 184:08ed48f1de7f | 242 | } |
AnnaBridge | 184:08ed48f1de7f | 243 | |
AnnaBridge | 184:08ed48f1de7f | 244 | void gpio_write(gpio_t *obj, int value) |
AnnaBridge | 184:08ed48f1de7f | 245 | { |
AnnaBridge | 184:08ed48f1de7f | 246 | switch (io_type(obj)) { |
AnnaBridge | 184:08ed48f1de7f | 247 | case GPIO_DEVICE: |
AnnaBridge | 184:08ed48f1de7f | 248 | (void)arm_gpio_write(obj->gpio_dev, ARM_GPIO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 249 | obj->pin_number, (uint32_t)value); |
AnnaBridge | 184:08ed48f1de7f | 250 | return; |
AnnaBridge | 184:08ed48f1de7f | 251 | case MPS2_IO_DEVICE: |
AnnaBridge | 184:08ed48f1de7f | 252 | if (obj->direction == PIN_INPUT) { |
AnnaBridge | 184:08ed48f1de7f | 253 | /* |
AnnaBridge | 184:08ed48f1de7f | 254 | * If the given gpio is in fact a button, ignore the call to not |
AnnaBridge | 184:08ed48f1de7f | 255 | * write to the corresponding LED instead. |
AnnaBridge | 184:08ed48f1de7f | 256 | */ |
AnnaBridge | 184:08ed48f1de7f | 257 | return; |
AnnaBridge | 184:08ed48f1de7f | 258 | } |
Anna Bridge |
186:707f6e361f3e | 259 | if (obj->arm_mps2_io_write != NULL) { |
Anna Bridge |
186:707f6e361f3e | 260 | obj->arm_mps2_io_write(obj->mps2_io_dev, ARM_MPS2_IO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 261 | obj->pin_number, (uint32_t)value); |
Anna Bridge |
186:707f6e361f3e | 262 | } |
AnnaBridge | 184:08ed48f1de7f | 263 | return; |
AnnaBridge | 184:08ed48f1de7f | 264 | case DEVICE_UNKNOWN: |
AnnaBridge | 184:08ed48f1de7f | 265 | break; |
AnnaBridge | 184:08ed48f1de7f | 266 | /* default: The default is not defined intentionally to force the |
AnnaBridge | 184:08ed48f1de7f | 267 | * compiler to check that all the enumeration values are |
AnnaBridge | 184:08ed48f1de7f | 268 | * covered in the switch.*/ |
AnnaBridge | 184:08ed48f1de7f | 269 | } |
AnnaBridge | 167:e84263d55307 | 270 | |
AnnaBridge | 184:08ed48f1de7f | 271 | error("can not write pin"); |
AnnaBridge | 184:08ed48f1de7f | 272 | } |
AnnaBridge | 184:08ed48f1de7f | 273 | |
AnnaBridge | 184:08ed48f1de7f | 274 | int gpio_read(gpio_t *obj) |
AnnaBridge | 184:08ed48f1de7f | 275 | { |
AnnaBridge | 184:08ed48f1de7f | 276 | switch (io_type(obj)) { |
AnnaBridge | 184:08ed48f1de7f | 277 | case GPIO_DEVICE: |
AnnaBridge | 184:08ed48f1de7f | 278 | return (int)arm_gpio_read(obj->gpio_dev, ARM_GPIO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 279 | obj->pin_number); |
AnnaBridge | 184:08ed48f1de7f | 280 | case MPS2_IO_DEVICE: |
AnnaBridge | 184:08ed48f1de7f | 281 | switch (obj->direction) { |
AnnaBridge | 184:08ed48f1de7f | 282 | case PIN_INPUT: |
AnnaBridge | 184:08ed48f1de7f | 283 | |
AnnaBridge | 184:08ed48f1de7f | 284 | return (int)arm_mps2_io_read_buttons(obj->mps2_io_dev, |
AnnaBridge | 184:08ed48f1de7f | 285 | ARM_MPS2_IO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 286 | obj->pin_number); |
AnnaBridge | 184:08ed48f1de7f | 287 | case PIN_OUTPUT: |
AnnaBridge | 184:08ed48f1de7f | 288 | return (int)arm_mps2_io_read_leds(obj->mps2_io_dev, |
AnnaBridge | 184:08ed48f1de7f | 289 | ARM_MPS2_IO_ACCESS_PIN, |
AnnaBridge | 184:08ed48f1de7f | 290 | obj->pin_number); |
AnnaBridge | 184:08ed48f1de7f | 291 | } |
AnnaBridge | 184:08ed48f1de7f | 292 | |
AnnaBridge | 184:08ed48f1de7f | 293 | case DEVICE_UNKNOWN: |
AnnaBridge | 184:08ed48f1de7f | 294 | break; |
AnnaBridge | 184:08ed48f1de7f | 295 | /* default: The default is not defined intentionally to force the |
AnnaBridge | 184:08ed48f1de7f | 296 | * compiler to check that all the enumeration values are |
AnnaBridge | 184:08ed48f1de7f | 297 | * covered in the switch.*/ |
AnnaBridge | 184:08ed48f1de7f | 298 | } |
AnnaBridge | 184:08ed48f1de7f | 299 | |
AnnaBridge | 184:08ed48f1de7f | 300 | error("can not read pin"); |
AnnaBridge | 167:e84263d55307 | 301 | return 0; |
AnnaBridge | 167:e84263d55307 | 302 | } |