145#if NRFX_API_VER_AT_LEAST(3, 2, 0)
146#if defined(NRF54L15_XXAA)
147 if(!nrfx_gpiote_init_check(&gpiote_instance_p0)) {
148 nrfx_gpiote_init(&gpiote_instance_p0, NRFX_GPIOTE_DEFAULT_CONFIG_IRQ_PRIORITY);
150 if(!nrfx_gpiote_init_check(&gpiote_instance_p1)) {
151 nrfx_gpiote_init(&gpiote_instance_p1, NRFX_GPIOTE_DEFAULT_CONFIG_IRQ_PRIORITY);
154 if(!nrfx_gpiote_init_check(&gpiote_instance)) {
155 nrfx_gpiote_init(&gpiote_instance, NRFX_GPIOTE_DEFAULT_CONFIG_IRQ_PRIORITY);
159 if(!nrfx_gpiote_is_init()) {
160 nrfx_gpiote_init(NRFX_GPIOTE_DEFAULT_CONFIG_IRQ_PRIORITY);
169 uint32_t pin_number = NRF_GPIO_PIN_MAP(port, pin);
171#if NRFX_API_VER_AT_LEAST(3, 2, 0)
172 const nrfx_gpiote_t *p_instance = get_gpiote_instance(pin_number);
176 nrf_gpio_pin_pull_t pull_config = NRF_GPIO_PIN_NOPULL;
178 nrfx_gpiote_trigger_config_t trigger_config = {
179 .trigger = NRFX_GPIOTE_TRIGGER_NONE,
182 nrfx_gpiote_handler_config_t handler_config = {
187 tmp = cfg & GPIO_HAL_PIN_CFG_EDGE_BOTH;
188 if(tmp == GPIO_HAL_PIN_CFG_EDGE_RISING) {
189 trigger_config.trigger = NRFX_GPIOTE_TRIGGER_LOTOHI;
190 }
else if(tmp == GPIO_HAL_PIN_CFG_EDGE_FALLING) {
191 trigger_config.trigger = NRFX_GPIOTE_TRIGGER_HITOLO;
192 }
else if(tmp == GPIO_HAL_PIN_CFG_EDGE_BOTH) {
193 trigger_config.trigger = NRFX_GPIOTE_TRIGGER_TOGGLE;
196 if(trigger_config.trigger != NRFX_GPIOTE_TRIGGER_NONE) {
197 err = nrfx_gpiote_channel_get(p_instance, pin_number, &channel);
198 if(err == NRFX_ERROR_INVALID_PARAM) {
199 err = nrfx_gpiote_channel_alloc(p_instance, &channel);
201 if(err == NRFX_SUCCESS) {
202 trigger_config.p_in_channel = &channel;
206 tmp = cfg & GPIO_HAL_PIN_CFG_PULL_MASK;
207 if(tmp == GPIO_HAL_PIN_CFG_PULL_DOWN) {
208 pull_config = NRF_GPIO_PIN_PULLDOWN;
209 }
else if(tmp == GPIO_HAL_PIN_CFG_PULL_UP) {
210 pull_config = NRF_GPIO_PIN_PULLUP;
213 nrfx_gpiote_input_pin_config_t input_pin_config = {
214 .p_pull_config = &pull_config,
215 .p_trigger_config = &trigger_config,
216 .p_handler_config = &handler_config,
219 err = nrfx_gpiote_input_configure(p_instance, pin_number, &input_pin_config);
220 if(err != NRFX_SUCCESS) {
224 tmp = cfg & GPIO_HAL_PIN_CFG_INT_MASK;
225 if(tmp == GPIO_HAL_PIN_CFG_INT_ENABLE) {
226 gpio_hal_arch_interrupt_enable_nrfx_v3(port, pin);
228 gpio_hal_arch_interrupt_disable_nrfx_v3(port, pin);
231 nrfx_gpiote_in_config_t gpiote_config = {
236 tmp = cfg & GPIO_HAL_PIN_CFG_EDGE_BOTH;
237 if(tmp == GPIO_HAL_PIN_CFG_EDGE_NONE) {
238 gpiote_config.sense = GPIOTE_CONFIG_POLARITY_None;
239 }
else if(tmp == GPIO_HAL_PIN_CFG_EDGE_RISING) {
240 gpiote_config.sense = NRF_GPIOTE_POLARITY_LOTOHI;
241 }
else if(tmp == GPIO_HAL_PIN_CFG_EDGE_FALLING) {
242 gpiote_config.sense = NRF_GPIOTE_POLARITY_HITOLO;
243 }
else if(tmp == GPIO_HAL_PIN_CFG_EDGE_BOTH) {
244 gpiote_config.sense = NRF_GPIOTE_POLARITY_TOGGLE;
247 tmp = cfg & GPIO_HAL_PIN_CFG_PULL_MASK;
248 if(tmp == GPIO_HAL_PIN_CFG_PULL_NONE) {
249 gpiote_config.pull = NRF_GPIO_PIN_NOPULL;
250 }
else if(tmp == GPIO_HAL_PIN_CFG_PULL_DOWN) {
251 gpiote_config.pull = NRF_GPIO_PIN_PULLDOWN;
252 }
else if(tmp == GPIO_HAL_PIN_CFG_PULL_UP) {
253 gpiote_config.pull = NRF_GPIO_PIN_PULLUP;
258 tmp = cfg & GPIO_HAL_PIN_CFG_INT_MASK;
259 if(tmp == GPIO_HAL_PIN_CFG_INT_DISABLE) {
260 nrfx_gpiote_in_event_disable(pin_number);
261 }
else if(tmp == GPIO_HAL_PIN_CFG_INT_ENABLE) {
262 nrfx_gpiote_in_event_enable(pin_number,
true);
273 GPIO_HAL_PIN_CFG_EDGE_NONE |
274 GPIO_HAL_PIN_CFG_INT_DISABLE;
275 nrf_gpio_pin_pull_t pull;
276 nrf_gpiote_polarity_t polarity;
278 pin_number = NRF_GPIO_PIN_MAP(port, pin);
281 if(nrf_gpio_pin_dir_get(pin_number) == NRF_GPIO_PIN_DIR_OUTPUT) {
285#if defined(NRF54L15_XXAA)
287 NRF_GPIOTE_Type *gpiote_reg = (port == 0) ? NRF_GPIOTE30 : NRF_GPIOTE20;
288 uint8_t ch_num = (port == 0) ? GPIOTE30_CH_NUM : GPIOTE20_CH_NUM;
295 for(i = 0; i < ch_num; i++) {
296 if(nrf_gpiote_event_pin_get(gpiote_reg, i) == pin_number) {
297 polarity = nrf_gpiote_event_polarity_get(gpiote_reg, i);
299 if(polarity == NRF_GPIOTE_POLARITY_LOTOHI) {
300 cfg |= GPIO_HAL_PIN_CFG_EDGE_RISING;
301 }
else if(polarity == NRF_GPIOTE_POLARITY_HITOLO) {
302 cfg |= GPIO_HAL_PIN_CFG_EDGE_FALLING;
303 }
else if(polarity == NRF_GPIOTE_POLARITY_TOGGLE) {
304 cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
307 pull = nrf_gpio_pin_pull_get(pin_number);
309 if(pull == NRF_GPIO_PIN_PULLDOWN) {
310 cfg |= GPIO_HAL_PIN_CFG_PULL_DOWN;
311 }
else if(pull == NRF_GPIO_PIN_PULLUP) {
312 cfg |= GPIO_HAL_PIN_CFG_PULL_UP;
315 if(nrf_gpiote_int_enable_check(gpiote_reg, 1 << i)) {
316 cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
327 for(i = 0; i < GPIOTE_CH_NUM; i++) {
328 if(nrf_gpiote_event_pin_get(NRF_GPIOTE, i) == pin_number) {
329 polarity = nrf_gpiote_event_polarity_get(NRF_GPIOTE, i);
331 if(polarity == NRF_GPIOTE_POLARITY_LOTOHI) {
332 cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
333 }
else if(polarity == NRF_GPIOTE_POLARITY_HITOLO) {
334 cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
335 }
else if(polarity == NRF_GPIOTE_POLARITY_TOGGLE) {
336 cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
339 pull = nrf_gpio_pin_pull_get(pin_number);
341 if(pull == NRF_GPIO_PIN_PULLDOWN) {
342 cfg |= GPIO_HAL_PIN_CFG_PULL_DOWN;
343 }
else if(pull == NRF_GPIO_PIN_PULLUP) {
344 cfg |= GPIO_HAL_PIN_CFG_PULL_UP;
347 if(nrf_gpiote_int_enable_check(NRF_GPIOTE, 1 << i)) {
348 cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;