mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 188:bcfe06ba3d64 1 /* mbed Microcontroller Library
AnnaBridge 188:bcfe06ba3d64 2 * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2018 All rights reserved
AnnaBridge 188:bcfe06ba3d64 3 *
AnnaBridge 188:bcfe06ba3d64 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 188:bcfe06ba3d64 5 * you may not use this file except in compliance with the License.
AnnaBridge 188:bcfe06ba3d64 6 * You may obtain a copy of the License at
AnnaBridge 188:bcfe06ba3d64 7 *
AnnaBridge 188:bcfe06ba3d64 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 188:bcfe06ba3d64 9 *
AnnaBridge 188:bcfe06ba3d64 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 188:bcfe06ba3d64 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 188:bcfe06ba3d64 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 188:bcfe06ba3d64 13 * See the License for the specific language governing permissions and
AnnaBridge 188:bcfe06ba3d64 14 * limitations under the License.
AnnaBridge 188:bcfe06ba3d64 15 */
AnnaBridge 188:bcfe06ba3d64 16 #include "gpio_irq_api.h"
AnnaBridge 188:bcfe06ba3d64 17 #include "mbed_error.h"
AnnaBridge 188:bcfe06ba3d64 18 #include "PeripheralNames.h"
AnnaBridge 188:bcfe06ba3d64 19 #include "pinmap.h"
AnnaBridge 188:bcfe06ba3d64 20 #include "mbed_critical.h"
AnnaBridge 188:bcfe06ba3d64 21 #include "txz_gpio.h"
AnnaBridge 188:bcfe06ba3d64 22
AnnaBridge 188:bcfe06ba3d64 23 #define CHANNEL_NUM (16)
AnnaBridge 188:bcfe06ba3d64 24 #define DISABLE (0)
AnnaBridge 188:bcfe06ba3d64 25 #define ENABLE (1)
AnnaBridge 188:bcfe06ba3d64 26 #define CLR_INT_FLAG (0xC0)
AnnaBridge 188:bcfe06ba3d64 27
AnnaBridge 188:bcfe06ba3d64 28 const PinMap PinMap_GPIO_IRQ[] = {
AnnaBridge 188:bcfe06ba3d64 29 {PK7, GPIO_IRQ_0, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 30 {PL0, GPIO_IRQ_1, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 31 {PA0, GPIO_IRQ_2, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 32 {PA7, GPIO_IRQ_3, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 33 {PB0, GPIO_IRQ_4, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 34 {PB1, GPIO_IRQ_5, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 35 {PB6, GPIO_IRQ_6, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 36 {PB7, GPIO_IRQ_7, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 37 {PG0, GPIO_IRQ_8, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 38 {PG1, GPIO_IRQ_9, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 39 {PK0, GPIO_IRQ_A, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 40 {PK1, GPIO_IRQ_B, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 41 {PC0, GPIO_IRQ_C, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 42 {PC1, GPIO_IRQ_D, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 43 {PC6, GPIO_IRQ_E, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 44 {PC7, GPIO_IRQ_F, PIN_DATA(0, 0)},
AnnaBridge 188:bcfe06ba3d64 45 {NC, NC, 0}
AnnaBridge 188:bcfe06ba3d64 46 };
AnnaBridge 188:bcfe06ba3d64 47
AnnaBridge 188:bcfe06ba3d64 48 extern _gpio_t gpio_port_add;
AnnaBridge 188:bcfe06ba3d64 49
AnnaBridge 188:bcfe06ba3d64 50 static uint32_t channel_ids[CHANNEL_NUM] = {0};
AnnaBridge 188:bcfe06ba3d64 51 static gpio_irq_handler hal_irq_handler[CHANNEL_NUM] = {NULL};
AnnaBridge 188:bcfe06ba3d64 52 static CG_INTActiveState CurrentState;
AnnaBridge 188:bcfe06ba3d64 53
AnnaBridge 188:bcfe06ba3d64 54 static void CG_SetSTBYReleaseINTSrc(CG_INTSrc, CG_INTActiveState, uint8_t);
AnnaBridge 188:bcfe06ba3d64 55 static void INT_IRQHandler(PinName, uint32_t);
AnnaBridge 188:bcfe06ba3d64 56
AnnaBridge 188:bcfe06ba3d64 57 void INT00_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 58 {
AnnaBridge 188:bcfe06ba3d64 59 INT_IRQHandler(PK7, 0);
AnnaBridge 188:bcfe06ba3d64 60 }
AnnaBridge 188:bcfe06ba3d64 61
AnnaBridge 188:bcfe06ba3d64 62 void INT01_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 63 {
AnnaBridge 188:bcfe06ba3d64 64 INT_IRQHandler(PL0, 1);
AnnaBridge 188:bcfe06ba3d64 65 }
AnnaBridge 188:bcfe06ba3d64 66
AnnaBridge 188:bcfe06ba3d64 67 void INT02_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 68 {
AnnaBridge 188:bcfe06ba3d64 69 INT_IRQHandler(PA0, 2);
AnnaBridge 188:bcfe06ba3d64 70 }
AnnaBridge 188:bcfe06ba3d64 71
AnnaBridge 188:bcfe06ba3d64 72 void INT03_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 73 {
AnnaBridge 188:bcfe06ba3d64 74 INT_IRQHandler(PA7, 3);
AnnaBridge 188:bcfe06ba3d64 75 }
AnnaBridge 188:bcfe06ba3d64 76
AnnaBridge 188:bcfe06ba3d64 77 void INT04_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 78 {
AnnaBridge 188:bcfe06ba3d64 79 INT_IRQHandler(PB0, 4);
AnnaBridge 188:bcfe06ba3d64 80 }
AnnaBridge 188:bcfe06ba3d64 81
AnnaBridge 188:bcfe06ba3d64 82 void INT05_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 83 {
AnnaBridge 188:bcfe06ba3d64 84 INT_IRQHandler(PB1, 5);
AnnaBridge 188:bcfe06ba3d64 85 }
AnnaBridge 188:bcfe06ba3d64 86
AnnaBridge 188:bcfe06ba3d64 87 void INT06_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 88 {
AnnaBridge 188:bcfe06ba3d64 89 INT_IRQHandler(PB6, 6);
AnnaBridge 188:bcfe06ba3d64 90 }
AnnaBridge 188:bcfe06ba3d64 91
AnnaBridge 188:bcfe06ba3d64 92 void INT07_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 93 {
AnnaBridge 188:bcfe06ba3d64 94 INT_IRQHandler(PB7, 7);
AnnaBridge 188:bcfe06ba3d64 95 }
AnnaBridge 188:bcfe06ba3d64 96
AnnaBridge 188:bcfe06ba3d64 97 void INT08_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 98 {
AnnaBridge 188:bcfe06ba3d64 99 INT_IRQHandler(PG0, 8);
AnnaBridge 188:bcfe06ba3d64 100 }
AnnaBridge 188:bcfe06ba3d64 101
AnnaBridge 188:bcfe06ba3d64 102 void INT09_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 103 {
AnnaBridge 188:bcfe06ba3d64 104 INT_IRQHandler(PG1, 9);
AnnaBridge 188:bcfe06ba3d64 105 }
AnnaBridge 188:bcfe06ba3d64 106
AnnaBridge 188:bcfe06ba3d64 107 void INT10_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 108 {
AnnaBridge 188:bcfe06ba3d64 109 INT_IRQHandler(PK0, 10);
AnnaBridge 188:bcfe06ba3d64 110 }
AnnaBridge 188:bcfe06ba3d64 111
AnnaBridge 188:bcfe06ba3d64 112 void INT11_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 113 {
AnnaBridge 188:bcfe06ba3d64 114 INT_IRQHandler(PK1, 11);
AnnaBridge 188:bcfe06ba3d64 115 }
AnnaBridge 188:bcfe06ba3d64 116
AnnaBridge 188:bcfe06ba3d64 117 void INT12_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 118 {
AnnaBridge 188:bcfe06ba3d64 119 INT_IRQHandler(PC0, 12);
AnnaBridge 188:bcfe06ba3d64 120 }
AnnaBridge 188:bcfe06ba3d64 121 void INT13_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 122 {
AnnaBridge 188:bcfe06ba3d64 123 INT_IRQHandler(PC1, 13);
AnnaBridge 188:bcfe06ba3d64 124 }
AnnaBridge 188:bcfe06ba3d64 125 void INT14_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 126 {
AnnaBridge 188:bcfe06ba3d64 127 INT_IRQHandler(PC6, 14);
AnnaBridge 188:bcfe06ba3d64 128 }
AnnaBridge 188:bcfe06ba3d64 129 void INT15_IRQHandler(void)
AnnaBridge 188:bcfe06ba3d64 130 {
AnnaBridge 188:bcfe06ba3d64 131 INT_IRQHandler(PC7, 15);
AnnaBridge 188:bcfe06ba3d64 132 }
AnnaBridge 188:bcfe06ba3d64 133
AnnaBridge 188:bcfe06ba3d64 134 int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id)
AnnaBridge 188:bcfe06ba3d64 135 {
AnnaBridge 188:bcfe06ba3d64 136 // Get gpio interrupt ID
AnnaBridge 188:bcfe06ba3d64 137 obj->irq_id = pinmap_peripheral(pin, PinMap_GPIO_IRQ);
AnnaBridge 188:bcfe06ba3d64 138 core_util_critical_section_enter();
AnnaBridge 188:bcfe06ba3d64 139 // Get GPIO port and pin num
AnnaBridge 188:bcfe06ba3d64 140 obj->port = (PortName)PIN_PORT(pin);
AnnaBridge 188:bcfe06ba3d64 141 obj->pin_num = PIN_POS(pin);
AnnaBridge 188:bcfe06ba3d64 142 // Set pin level as LOW
AnnaBridge 188:bcfe06ba3d64 143 gpio_write_bit(&gpio_port_add, obj->port, obj->pin_num, GPIO_Mode_DATA, 0);
AnnaBridge 188:bcfe06ba3d64 144 // Enable gpio interrupt function
AnnaBridge 188:bcfe06ba3d64 145 pinmap_pinout(pin, PinMap_GPIO_IRQ);
AnnaBridge 188:bcfe06ba3d64 146 // Get GPIO irq source
AnnaBridge 188:bcfe06ba3d64 147 obj->irq_src = (CG_INTSrc)obj->irq_id;
AnnaBridge 188:bcfe06ba3d64 148 // Save irq handler
AnnaBridge 188:bcfe06ba3d64 149 hal_irq_handler[obj->irq_src] = handler;
AnnaBridge 188:bcfe06ba3d64 150 // Save irq id
AnnaBridge 188:bcfe06ba3d64 151 channel_ids[obj->irq_src] = id;
AnnaBridge 188:bcfe06ba3d64 152 // Initialize interrupt event as both edges detection
AnnaBridge 188:bcfe06ba3d64 153 obj->event = CG_INT_ACTIVE_STATE_BOTH_EDGES;
AnnaBridge 188:bcfe06ba3d64 154 // Clear gpio pending interrupt
AnnaBridge 188:bcfe06ba3d64 155 NVIC_ClearPendingIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 156 // Set interrupt event and enable INTx clear
AnnaBridge 188:bcfe06ba3d64 157 CG_SetSTBYReleaseINTSrc(obj->irq_src, (CG_INTActiveState)obj->event, ENABLE);
AnnaBridge 188:bcfe06ba3d64 158 core_util_critical_section_exit();
AnnaBridge 188:bcfe06ba3d64 159
AnnaBridge 188:bcfe06ba3d64 160 return 0;
AnnaBridge 188:bcfe06ba3d64 161 }
AnnaBridge 188:bcfe06ba3d64 162
AnnaBridge 188:bcfe06ba3d64 163 void gpio_irq_free(gpio_irq_t *obj)
AnnaBridge 188:bcfe06ba3d64 164 {
AnnaBridge 188:bcfe06ba3d64 165 // Clear gpio_irq
AnnaBridge 188:bcfe06ba3d64 166 NVIC_ClearPendingIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 167 // Reset interrupt handler
AnnaBridge 188:bcfe06ba3d64 168 hal_irq_handler[obj->irq_src] = NULL;
AnnaBridge 188:bcfe06ba3d64 169 // Reset interrupt id
AnnaBridge 188:bcfe06ba3d64 170 channel_ids[obj->irq_src] = 0;
AnnaBridge 188:bcfe06ba3d64 171 }
AnnaBridge 188:bcfe06ba3d64 172
AnnaBridge 188:bcfe06ba3d64 173 void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable)
AnnaBridge 188:bcfe06ba3d64 174 {
AnnaBridge 188:bcfe06ba3d64 175 // Disable GPIO interrupt on obj
AnnaBridge 188:bcfe06ba3d64 176 gpio_irq_disable(obj);
AnnaBridge 188:bcfe06ba3d64 177
AnnaBridge 188:bcfe06ba3d64 178 if (enable) {
AnnaBridge 188:bcfe06ba3d64 179 // Get gpio interrupt event
AnnaBridge 188:bcfe06ba3d64 180 if (event == IRQ_RISE) {
AnnaBridge 188:bcfe06ba3d64 181 if ((obj->event == CG_INT_ACTIVE_STATE_FALLING) ||
AnnaBridge 188:bcfe06ba3d64 182 (obj->event == CG_INT_ACTIVE_STATE_BOTH_EDGES)) {
AnnaBridge 188:bcfe06ba3d64 183 obj->event = CG_INT_ACTIVE_STATE_BOTH_EDGES;
AnnaBridge 188:bcfe06ba3d64 184 } else {
AnnaBridge 188:bcfe06ba3d64 185 obj->event = CG_INT_ACTIVE_STATE_RISING;
AnnaBridge 188:bcfe06ba3d64 186 }
AnnaBridge 188:bcfe06ba3d64 187 } else if (event == IRQ_FALL) {
AnnaBridge 188:bcfe06ba3d64 188 if ((obj->event == CG_INT_ACTIVE_STATE_RISING) ||
AnnaBridge 188:bcfe06ba3d64 189 (obj->event == CG_INT_ACTIVE_STATE_BOTH_EDGES)) {
AnnaBridge 188:bcfe06ba3d64 190 obj->event = CG_INT_ACTIVE_STATE_BOTH_EDGES;
AnnaBridge 188:bcfe06ba3d64 191 } else {
AnnaBridge 188:bcfe06ba3d64 192 obj->event = CG_INT_ACTIVE_STATE_FALLING;
AnnaBridge 188:bcfe06ba3d64 193 }
AnnaBridge 188:bcfe06ba3d64 194 } else {
AnnaBridge 188:bcfe06ba3d64 195 error("Not supported event\n");
AnnaBridge 188:bcfe06ba3d64 196 }
AnnaBridge 188:bcfe06ba3d64 197 } else {
AnnaBridge 188:bcfe06ba3d64 198 // Get gpio interrupt event
AnnaBridge 188:bcfe06ba3d64 199 if (event == IRQ_RISE) {
AnnaBridge 188:bcfe06ba3d64 200 if ((obj->event == CG_INT_ACTIVE_STATE_RISING) ||
AnnaBridge 188:bcfe06ba3d64 201 (obj->event == CG_INT_ACTIVE_STATE_INVALID)) {
AnnaBridge 188:bcfe06ba3d64 202 obj->event = CG_INT_ACTIVE_STATE_BOTH_EDGES;
AnnaBridge 188:bcfe06ba3d64 203 } else {
AnnaBridge 188:bcfe06ba3d64 204 obj->event = CG_INT_ACTIVE_STATE_FALLING;
AnnaBridge 188:bcfe06ba3d64 205 }
AnnaBridge 188:bcfe06ba3d64 206 } else if (event == IRQ_FALL) {
AnnaBridge 188:bcfe06ba3d64 207 if ((obj->event == CG_INT_ACTIVE_STATE_FALLING) ||
AnnaBridge 188:bcfe06ba3d64 208 (obj->event == CG_INT_ACTIVE_STATE_INVALID)) {
AnnaBridge 188:bcfe06ba3d64 209 obj->event = CG_INT_ACTIVE_STATE_BOTH_EDGES;
AnnaBridge 188:bcfe06ba3d64 210 } else {
AnnaBridge 188:bcfe06ba3d64 211 obj->event = CG_INT_ACTIVE_STATE_RISING;
AnnaBridge 188:bcfe06ba3d64 212 }
AnnaBridge 188:bcfe06ba3d64 213 } else {
AnnaBridge 188:bcfe06ba3d64 214 error("Not supported event\n");
AnnaBridge 188:bcfe06ba3d64 215 }
AnnaBridge 188:bcfe06ba3d64 216 }
AnnaBridge 188:bcfe06ba3d64 217
AnnaBridge 188:bcfe06ba3d64 218 CurrentState = obj->event;
AnnaBridge 188:bcfe06ba3d64 219 if (obj->event != CG_INT_ACTIVE_STATE_INVALID ) {
AnnaBridge 188:bcfe06ba3d64 220 // Set interrupt event and enable INTx clear
AnnaBridge 188:bcfe06ba3d64 221 CG_SetSTBYReleaseINTSrc(obj->irq_src, (CG_INTActiveState)obj->event, ENABLE);
AnnaBridge 188:bcfe06ba3d64 222 gpio_write_bit(&gpio_port_add, (gpio_gr_t)obj->port, (gpio_num_t)obj->pin_num, GPIO_Mode_DATA, 0);
AnnaBridge 188:bcfe06ba3d64 223 } else {
AnnaBridge 188:bcfe06ba3d64 224 gpio_write_bit(&gpio_port_add, (gpio_gr_t)obj->port, (gpio_num_t)obj->pin_num, GPIO_Mode_DATA, 1);
AnnaBridge 188:bcfe06ba3d64 225 }
AnnaBridge 188:bcfe06ba3d64 226
AnnaBridge 188:bcfe06ba3d64 227 // Clear interrupt request
AnnaBridge 188:bcfe06ba3d64 228 NVIC_ClearPendingIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 229 // Enable GPIO interrupt on obj
AnnaBridge 188:bcfe06ba3d64 230 gpio_irq_enable(obj);
AnnaBridge 188:bcfe06ba3d64 231 }
AnnaBridge 188:bcfe06ba3d64 232
AnnaBridge 188:bcfe06ba3d64 233 void gpio_irq_enable(gpio_irq_t *obj)
AnnaBridge 188:bcfe06ba3d64 234 {
AnnaBridge 188:bcfe06ba3d64 235 // Clear and Enable gpio_irq object
AnnaBridge 188:bcfe06ba3d64 236 NVIC_ClearPendingIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 237 NVIC_EnableIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 238 }
AnnaBridge 188:bcfe06ba3d64 239
AnnaBridge 188:bcfe06ba3d64 240 void gpio_irq_disable(gpio_irq_t *obj)
AnnaBridge 188:bcfe06ba3d64 241 {
AnnaBridge 188:bcfe06ba3d64 242 // Disable gpio_irq object
AnnaBridge 188:bcfe06ba3d64 243 NVIC_DisableIRQ((IRQn_Type)obj->irq_id);
AnnaBridge 188:bcfe06ba3d64 244 }
AnnaBridge 188:bcfe06ba3d64 245
AnnaBridge 188:bcfe06ba3d64 246 static void INT_IRQHandler(PinName pin, uint32_t index)
AnnaBridge 188:bcfe06ba3d64 247 {
AnnaBridge 188:bcfe06ba3d64 248 PortName port;
AnnaBridge 188:bcfe06ba3d64 249 uint8_t pin_num;
AnnaBridge 188:bcfe06ba3d64 250
AnnaBridge 188:bcfe06ba3d64 251 gpio_pinstate_t data = GPIO_PIN_RESET;
AnnaBridge 188:bcfe06ba3d64 252 pin_num = PIN_POS(pin);
AnnaBridge 188:bcfe06ba3d64 253 port = (PortName)PIN_PORT(pin);
AnnaBridge 188:bcfe06ba3d64 254
AnnaBridge 188:bcfe06ba3d64 255 // Clear interrupt request
AnnaBridge 188:bcfe06ba3d64 256 CG_SetSTBYReleaseINTSrc((CG_INTSrc)(CG_INT_SRC_0 + index), CurrentState, DISABLE);
AnnaBridge 188:bcfe06ba3d64 257 // Get pin value
AnnaBridge 188:bcfe06ba3d64 258 gpio_read_bit(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)pin_num, GPIO_Mode_DATA, &data);
AnnaBridge 188:bcfe06ba3d64 259
AnnaBridge 188:bcfe06ba3d64 260 switch (data) {
AnnaBridge 188:bcfe06ba3d64 261 // Falling edge detection
AnnaBridge 188:bcfe06ba3d64 262 case 0:
AnnaBridge 188:bcfe06ba3d64 263 hal_irq_handler[index](channel_ids[index], IRQ_FALL);
AnnaBridge 188:bcfe06ba3d64 264 break;
AnnaBridge 188:bcfe06ba3d64 265 // Rising edge detection
AnnaBridge 188:bcfe06ba3d64 266 case 1:
AnnaBridge 188:bcfe06ba3d64 267 hal_irq_handler[index](channel_ids[index], IRQ_RISE);
AnnaBridge 188:bcfe06ba3d64 268 break;
AnnaBridge 188:bcfe06ba3d64 269 default:
AnnaBridge 188:bcfe06ba3d64 270 break;
AnnaBridge 188:bcfe06ba3d64 271 }
AnnaBridge 188:bcfe06ba3d64 272
AnnaBridge 188:bcfe06ba3d64 273 // Clear gpio pending interrupt
AnnaBridge 188:bcfe06ba3d64 274 NVIC_ClearPendingIRQ((IRQn_Type)(CG_INT_SRC_0 + index));
AnnaBridge 188:bcfe06ba3d64 275 // Enable interrupt request
AnnaBridge 188:bcfe06ba3d64 276 CG_SetSTBYReleaseINTSrc((CG_INTSrc)(CG_INT_SRC_0 + index), CurrentState, ENABLE);
AnnaBridge 188:bcfe06ba3d64 277 }
AnnaBridge 188:bcfe06ba3d64 278
AnnaBridge 188:bcfe06ba3d64 279 static void CG_SetSTBYReleaseINTSrc(CG_INTSrc INTSource, CG_INTActiveState ActiveState, uint8_t NewState)
AnnaBridge 188:bcfe06ba3d64 280 {
AnnaBridge 188:bcfe06ba3d64 281 uint8_t *ptr = ((uint8_t *)(&(TSB_IA->IMC00)) + (INTSource * 2));
AnnaBridge 188:bcfe06ba3d64 282 // Clear pending falling and rising edge bit
AnnaBridge 188:bcfe06ba3d64 283 *ptr = CLR_INT_FLAG;
AnnaBridge 188:bcfe06ba3d64 284 *ptr = (ActiveState | NewState);
AnnaBridge 188:bcfe06ba3d64 285 {
AnnaBridge 188:bcfe06ba3d64 286 uint8_t regval = *ptr;
AnnaBridge 188:bcfe06ba3d64 287 }
AnnaBridge 188:bcfe06ba3d64 288 }