@@ -190,15 +190,28 @@ typedef struct
190
190
/* Mask for tracking event handler entries allocation. */
191
191
nrfx_atomic_t available_evt_handlers ;
192
192
193
- /* Mask of available ports for GPIOTE instance. */
194
- uint32_t available_gpio_ports ;
195
-
193
+ uint16_t ch_pin [GPIOTE_CH_NUM ];
196
194
#if !defined(NRF_GPIO_LATCH_PRESENT )
197
195
uint32_t port_pins [GPIO_COUNT ];
198
196
#endif
199
197
nrfx_drv_state_t state ;
200
198
} gpiote_control_block_t ;
201
199
200
+ typedef struct
201
+ {
202
+ /* Number of GPIOTE channels. */
203
+ uint32_t channels_number ;
204
+
205
+ /* Mask of available ports for GPIOTE instance. */
206
+ uint32_t available_gpio_ports ;
207
+
208
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
209
+ uint8_t group_idx ;
210
+ bool port_supported ;
211
+ bool dynamic_chan_supported ;
212
+ #endif
213
+ } gpiote_config_t ;
214
+
202
215
#if !defined(__NRFX_DOXYGEN__ )
203
216
#if (defined(NRF_GPIOTE ) || defined(NRF_GPIOTE0 )) && !defined(NRFX_GPIOTE0_CHANNELS_USED )
204
217
/* Bitmask that defines GPIOTE0 channels that are reserved for use outside of the nrfx library. */
@@ -231,16 +244,34 @@ typedef struct
231
244
#endif
232
245
#endif // !defined(__NRFX_DOXYGEN__)
233
246
234
- #define _NRFX_GPIOTE_CB_INITIALIZER (periph_name , prefix , idx , _ ) \
247
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
248
+ #define GPIOTE_VAR_INIT (prefix , idx ) \
249
+ .group_idx = idx == 0 ? 0 : NRF_GPIOTE_IRQ_GROUP, \
250
+ .port_supported = idx != 0, \
251
+ .dynamic_chan_supported = idx != 0,
252
+ #else
253
+ #define GPIOTE_VAR_INIT (prefix , idx )
254
+ #endif
255
+
256
+ #define _NRFX_GPIOTE_CONFIG_INITIALIZER (periph_name , prefix , idx , _ ) \
235
257
[NRFX_CONCAT(NRFX_, periph_name, idx, _INST_IDX)] = { \
236
258
.channels_number = NRFX_CONCAT_3(periph_name, idx, _CH_NUM), \
237
- .available_channels_mask = (nrfx_atomic_t)NRFX_GPIOTE_APP_CHANNELS_MASK(idx), \
238
259
.available_gpio_ports = NRFX_CONCAT_3(periph_name, idx, _AVAILABLE_GPIO_PORTS), \
260
+ GPIOTE_VAR_INIT(prefix, idx) \
239
261
},
240
262
241
- static gpiote_control_block_t m_cb [NRFX_GPIOTE_ENABLED_COUNT ] = {
242
- NRFX_FOREACH_ENABLED (GPIOTE , _NRFX_GPIOTE_CB_INITIALIZER , ( ), ( ))
263
+ #define _NRFX_GPIOTE_CHANNEL_INITIALIZER (periph_name , prefix , idx , _ ) \
264
+ [NRFX_CONCAT(NRFX_, periph_name, idx, _INST_IDX)] = \
265
+ (nrfx_atomic_t)NRFX_GPIOTE_APP_CHANNELS_MASK(idx),
266
+
267
+ /* Mask for tracking GPIOTE channel allocation. */
268
+ static nrfx_atomic_t available_channels_mask [NRFX_GPIOTE_ENABLED_COUNT ] = {
269
+ NRFX_FOREACH_ENABLED (GPIOTE , _NRFX_GPIOTE_CHANNEL_INITIALIZER , ( ), ( ))
243
270
};
271
+ static const gpiote_config_t m_config [NRFX_GPIOTE_ENABLED_COUNT ] = {
272
+ NRFX_FOREACH_ENABLED (GPIOTE , _NRFX_GPIOTE_CONFIG_INITIALIZER , ( ), ( ))
273
+ };
274
+ static gpiote_control_block_t m_cb [NRFX_GPIOTE_ENABLED_COUNT ];
244
275
245
276
#if defined(NRF_GPIO_LATCH_PRESENT ) || (!FULL_PORTS_PRESENT )
246
277
static const uint8_t ports [GPIO_COUNT ] = GPIO_PORT_NUM_LIST ;
@@ -301,6 +332,26 @@ static gpiote_control_block_t * get_cb(uint32_t idx)
301
332
}
302
333
}
303
334
335
+ /** @brief Function for getting instance configuration structure.
336
+ *
337
+ * Function is optimized for case when there is only one GPIOTE instance.
338
+ *
339
+ * @param[in] idx Instance index.
340
+ *
341
+ * @return Configure structure.
342
+ */
343
+ static const gpiote_config_t * get_config (uint32_t idx )
344
+ {
345
+ if (NRFX_GPIOTE_ENABLED_COUNT == 1 )
346
+ {
347
+ return & m_config [0 ];
348
+ }
349
+ else
350
+ {
351
+ return & m_config [idx ];
352
+ }
353
+ }
354
+
304
355
/** @brief Checks if pin is in use by a given GPIOTE instance.
305
356
*
306
357
* @param[in] p_instance Pointer to the driver instance structure.
@@ -471,7 +522,13 @@ static void pin_trigger_disable(nrfx_gpiote_t const * p_instance, nrfx_gpiote_pi
471
522
{
472
523
uint8_t ch = pin_te_get (p_instance , pin );
473
524
525
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
526
+ nrf_gpiote_int_group_disable (p_instance -> p_reg ,
527
+ get_config (p_instance -> drv_inst_idx )-> group_idx ,
528
+ NRFX_BIT (ch ));
529
+ #else
474
530
nrfy_gpiote_int_disable (p_instance -> p_reg , NRFX_BIT (ch ));
531
+ #endif
475
532
nrfy_gpiote_event_disable (p_instance -> p_reg , ch );
476
533
}
477
534
else
@@ -622,6 +679,7 @@ static nrfx_err_t gpiote_input_configure(nrfx_gpiote_t const *
622
679
{
623
680
nrfx_err_t err ;
624
681
uint8_t idx = get_pin_idx (pin );
682
+ gpiote_control_block_t * cb = get_cb (p_instance -> drv_inst_idx );
625
683
626
684
if (p_config -> p_pull_config )
627
685
{
@@ -635,8 +693,8 @@ static nrfx_err_t gpiote_input_configure(nrfx_gpiote_t const *
635
693
636
694
nrfy_gpio_reconfigure (pin , & dir , & input_connect , p_config -> p_pull_config , NULL , NULL );
637
695
638
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] &= (uint16_t )~PIN_FLAG_OUTPUT ;
639
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] |= PIN_FLAG_IN_USE ;
696
+ cb -> pin_flags [idx ] &= (uint16_t )~PIN_FLAG_OUTPUT ;
697
+ cb -> pin_flags [idx ] |= PIN_FLAG_IN_USE ;
640
698
}
641
699
642
700
if (p_config -> p_trigger_config )
@@ -653,7 +711,7 @@ static nrfx_err_t gpiote_input_configure(nrfx_gpiote_t const *
653
711
}
654
712
else
655
713
{
656
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] &=
714
+ cb -> pin_flags [idx ] &=
657
715
(uint16_t ) ~(PIN_TE_ID_MASK | PIN_FLAG_TE_USED );
658
716
if (use_evt ) {
659
717
bool edge = trigger <= NRFX_GPIOTE_TRIGGER_TOGGLE ;
@@ -677,23 +735,29 @@ static nrfx_err_t gpiote_input_configure(nrfx_gpiote_t const *
677
735
678
736
nrfy_gpiote_event_disable (p_instance -> p_reg , ch );
679
737
nrfy_gpiote_event_configure (p_instance -> p_reg , ch , pin , polarity );
680
-
681
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] |= (uint16_t )PIN_FLAG_TE_ID (ch );
738
+ cb -> ch_pin [ ch ] = ( uint16_t ) pin ;
739
+ cb -> pin_flags [idx ] |= (uint16_t )PIN_FLAG_TE_ID (ch );
682
740
}
683
741
}
684
742
}
685
743
#if !defined(NRF_GPIO_LATCH_PRESENT )
686
744
if (use_evt || trigger == NRFX_GPIOTE_TRIGGER_NONE )
687
745
{
688
- nrf_bitmask_bit_clear (pin , (uint8_t * )get_cb ( p_instance -> drv_inst_idx ) -> port_pins );
746
+ nrf_bitmask_bit_clear (pin , (uint8_t * )cb -> port_pins );
689
747
}
690
748
else
691
749
{
692
- nrf_bitmask_bit_set (pin , (uint8_t * )get_cb (p_instance -> drv_inst_idx )-> port_pins );
750
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
751
+ if (!get_config (p_instance -> drv_inst_idx )-> port_supported )
752
+ {
753
+ return NRFX_ERROR_INVALID_PARAM ;
754
+ }
755
+ #endif
756
+ nrf_bitmask_bit_set (pin , (uint8_t * )cb -> port_pins );
693
757
}
694
758
#endif
695
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] &= (uint16_t )~PIN_FLAG_TRIG_MODE_MASK ;
696
- get_cb ( p_instance -> drv_inst_idx ) -> pin_flags [idx ] |= (uint16_t )PIN_FLAG_TRIG_MODE_SET (trigger );
759
+ cb -> pin_flags [idx ] &= (uint16_t )~PIN_FLAG_TRIG_MODE_MASK ;
760
+ cb -> pin_flags [idx ] |= (uint16_t )PIN_FLAG_TRIG_MODE_SET (trigger );
697
761
}
698
762
699
763
if (p_config -> p_handler_config )
@@ -805,7 +869,8 @@ static nrfx_err_t gpiote_init(nrfx_gpiote_t const * p_instance, uint8_t interrup
805
869
nrfx_err_t err_code = NRFX_SUCCESS ;
806
870
807
871
NRFX_LOG_INFO ("channels_number: %d, available_channels_mask: 0x%x" ,
808
- (int )p_cb -> channels_number , (int )p_cb -> available_channels_mask );
872
+ (int )get_config (p_instance -> drv_inst_idx )-> channels_number ,
873
+ (int )available_channels_mask [p_instance -> drv_inst_idx ]);
809
874
810
875
if (p_cb -> state != NRFX_DRV_STATE_UNINITIALIZED )
811
876
{
@@ -822,11 +887,18 @@ static nrfx_err_t gpiote_init(nrfx_gpiote_t const * p_instance, uint8_t interrup
822
887
823
888
memset (p_cb -> pin_flags , 0 , sizeof (p_cb -> pin_flags ));
824
889
890
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
891
+ uint32_t int_mask = get_config (p_instance -> drv_inst_idx )-> port_supported ?
892
+ NRF_GPIOTE_INT_PORT_MASK : 0 ;
893
+ #else
894
+ uint32_t int_mask = NRF_GPIOTE_INT_PORT_MASK ;
895
+ #endif
896
+
825
897
nrfy_gpiote_int_init (p_instance -> p_reg ,
826
- ( uint32_t ) NRF_GPIOTE_INT_PORT_MASK ,
898
+ int_mask ,
827
899
interrupt_priority ,
828
900
false,
829
- p_cb -> channels_number );
901
+ get_config ( p_instance -> drv_inst_idx ) -> channels_number );
830
902
831
903
p_cb -> state = NRFX_DRV_STATE_INITIALIZED ;
832
904
p_cb -> available_evt_handlers = NRFX_BIT_MASK (NRFX_GPIOTE_CONFIG_NUM_OF_EVT_HANDLERS );
@@ -875,14 +947,31 @@ static void gpiote_uninit(nrfx_gpiote_t const * p_instance)
875
947
876
948
static nrfx_err_t pin_channel_free (nrfx_gpiote_t const * p_instance , uint8_t channel )
877
949
{
878
- return nrfx_flag32_free (& get_cb (p_instance -> drv_inst_idx )-> available_channels_mask , channel );
950
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
951
+ const gpiote_config_t * p_config = get_config (p_instance -> drv_inst_idx );
952
+
953
+ if (!p_config -> dynamic_chan_supported )
954
+ {
955
+ return NRFX_ERROR_NOT_SUPPORTED ;
956
+ }
957
+ #endif
958
+ return nrfx_flag32_free (& available_channels_mask [p_instance -> drv_inst_idx ], channel );
879
959
}
880
960
881
961
static nrfx_err_t pin_channel_alloc (nrfx_gpiote_t const * p_instance , uint8_t * p_channel )
882
962
{
883
963
NRFX_LOG_INFO ("available_channels_mask = %d" ,
884
- (int )get_cb (p_instance -> drv_inst_idx )-> available_channels_mask );
885
- return nrfx_flag32_alloc (& get_cb (p_instance -> drv_inst_idx )-> available_channels_mask , p_channel );
964
+ (int )& available_channels_mask [p_instance -> drv_inst_idx ]);
965
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
966
+ const gpiote_config_t * p_config = get_config (p_instance -> drv_inst_idx );
967
+
968
+ if (!p_config -> dynamic_chan_supported )
969
+ {
970
+ return NRFX_ERROR_NOT_SUPPORTED ;
971
+ }
972
+ #endif
973
+
974
+ return nrfx_flag32_alloc (& available_channels_mask [p_instance -> drv_inst_idx ], p_channel );
886
975
}
887
976
888
977
static void pin_out_set (nrfx_gpiote_t const * p_instance , nrfx_gpiote_pin_t pin )
@@ -1017,11 +1106,6 @@ static void pin_trigger_enable(nrfx_gpiote_t const * p_instance,
1017
1106
{
1018
1107
NRFX_ASSERT (pin_has_trigger (p_instance , pin ));
1019
1108
1020
- if (!nrfy_gpiote_int_enable_check (p_instance -> p_reg , (uint32_t )NRF_GPIOTE_INT_PORT_MASK ))
1021
- {
1022
- nrfy_gpiote_int_enable (p_instance -> p_reg , (uint32_t )NRF_GPIOTE_INT_PORT_MASK );
1023
- }
1024
-
1025
1109
if (pin_in_use_by_te (p_instance , pin ) && pin_is_input (p_instance , pin ))
1026
1110
{
1027
1111
uint8_t ch = pin_te_get (p_instance , pin );
@@ -1030,11 +1114,22 @@ static void pin_trigger_enable(nrfx_gpiote_t const * p_instance,
1030
1114
nrfy_gpiote_event_enable (p_instance -> p_reg , ch );
1031
1115
if (int_enable )
1032
1116
{
1117
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
1118
+ nrf_gpiote_int_group_enable (p_instance -> p_reg ,
1119
+ get_config (p_instance -> drv_inst_idx )-> group_idx ,
1120
+ NRFX_BIT (ch ));
1121
+ #else
1033
1122
nrfy_gpiote_int_enable (p_instance -> p_reg , NRFX_BIT (ch ));
1123
+ #endif
1034
1124
}
1035
1125
}
1036
1126
else
1037
1127
{
1128
+ if (!nrfy_gpiote_int_enable_check (p_instance -> p_reg , (uint32_t )NRF_GPIOTE_INT_PORT_MASK ))
1129
+ {
1130
+ nrfy_gpiote_int_enable (p_instance -> p_reg , (uint32_t )NRF_GPIOTE_INT_PORT_MASK );
1131
+ }
1132
+
1038
1133
NRFX_ASSERT (int_enable );
1039
1134
nrfy_gpio_cfg_sense_set (pin , get_initial_sense (p_instance , pin ));
1040
1135
}
@@ -1079,9 +1174,7 @@ nrfx_err_t nrfx_gpiote_channel_get(nrfx_gpiote_t const * p_instance,
1079
1174
1080
1175
uint32_t nrfx_gpiote_channels_number_get (nrfx_gpiote_t const * p_instance )
1081
1176
{
1082
- gpiote_control_block_t * p_cb = get_cb (p_instance -> drv_inst_idx );
1083
-
1084
- return p_cb -> channels_number ;
1177
+ return get_config (p_instance -> drv_inst_idx )-> channels_number ;
1085
1178
}
1086
1179
1087
1180
nrfx_err_t nrfx_gpiote_init (nrfx_gpiote_t const * p_instance , uint8_t interrupt_priority )
@@ -1479,16 +1572,17 @@ static bool latch_pending_read_and_check(uint32_t * latch, uint32_t available_gp
1479
1572
return false;
1480
1573
}
1481
1574
1482
- static void port_event_handle (NRF_GPIOTE_Type * p_gpiote , gpiote_control_block_t * p_cb )
1575
+ static void port_event_handle (NRF_GPIOTE_Type * p_gpiote , gpiote_control_block_t * p_cb ,
1576
+ const gpiote_config_t * p_config )
1483
1577
{
1484
1578
uint32_t latch [GPIO_COUNT ] = {0 };
1485
1579
1486
- latch_pending_read_and_check (latch , p_cb -> available_gpio_ports );
1580
+ latch_pending_read_and_check (latch , p_config -> available_gpio_ports );
1487
1581
1488
1582
do {
1489
1583
for (uint32_t i = 0 ; i < GPIO_COUNT ; i ++ )
1490
1584
{
1491
- if (nrf_bitmask_bit_is_set (port_index [i ], & p_cb -> available_gpio_ports ))
1585
+ if (nrf_bitmask_bit_is_set (port_index [i ], & p_config -> available_gpio_ports ))
1492
1586
{
1493
1587
while (latch [i ])
1494
1588
{
@@ -1516,7 +1610,7 @@ static void port_event_handle(NRF_GPIOTE_Type * p_gpiote, gpiote_control_block_t
1516
1610
/* All pins have been handled, clear PORT, check latch again in case
1517
1611
* something came between deciding to exit and clearing PORT event. */
1518
1612
(void )nrfy_gpiote_events_process (p_gpiote , (uint32_t )NRF_GPIOTE_INT_PORT_MASK , 0 );
1519
- } while (latch_pending_read_and_check (latch , p_cb -> available_gpio_ports ));
1613
+ } while (latch_pending_read_and_check (latch , p_config -> available_gpio_ports ));
1520
1614
}
1521
1615
1522
1616
#else
@@ -1554,7 +1648,8 @@ static bool input_read_and_check(uint32_t * input,
1554
1648
return process_inputs_again ;
1555
1649
}
1556
1650
1557
- static void port_event_handle (NRF_GPIOTE_Type * p_gpiote , gpiote_control_block_t * p_cb )
1651
+ static void port_event_handle (NRF_GPIOTE_Type * p_gpiote , gpiote_control_block_t * p_cb ,
1652
+ const gpiote_config_t * p_config )
1558
1653
{
1559
1654
uint32_t pins_to_check [GPIO_COUNT ] = {0 };
1560
1655
uint32_t input [GPIO_COUNT ] = {0 };
@@ -1564,7 +1659,7 @@ static void port_event_handle(NRF_GPIOTE_Type * p_gpiote, gpiote_control_block_t
1564
1659
1565
1660
for (uint32_t port_idx = 0 ; port_idx < GPIO_COUNT ; port_idx ++ )
1566
1661
{
1567
- if (nrf_bitmask_bit_is_set (port_index [port_idx ], & p_cb -> available_gpio_ports ))
1662
+ if (nrf_bitmask_bit_is_set (port_index [port_idx ], & p_config -> available_gpio_ports ))
1568
1663
{
1569
1664
nrfy_gpio_ports_read (port_idx , 1 , & input [port_idx ]);
1570
1665
pins_to_check [port_idx ] = p_cb -> port_pins [port_idx ];
@@ -1599,7 +1694,7 @@ static void port_event_handle(NRF_GPIOTE_Type * p_gpiote, gpiote_control_block_t
1599
1694
1600
1695
for (uint32_t port_idx = 0 ; port_idx < GPIO_COUNT ; port_idx ++ )
1601
1696
{
1602
- if (nrf_bitmask_bit_is_set (port_index [port_idx ], & p_cb -> available_gpio_ports ))
1697
+ if (nrf_bitmask_bit_is_set (port_index [port_idx ], & p_config -> available_gpio_ports ))
1603
1698
{
1604
1699
/* All pins used with PORT must be rechecked because it's content and
1605
1700
* number of port pins may have changed during handler execution. */
@@ -1633,7 +1728,7 @@ static void port_event_handle(NRF_GPIOTE_Type * p_gpiote, gpiote_control_block_t
1633
1728
}
1634
1729
1635
1730
(void )nrfy_gpiote_events_process (p_gpiote , (uint32_t )NRF_GPIOTE_INT_PORT_MASK , 0 );
1636
- } while (input_read_and_check (input , pins_to_check , p_cb -> available_gpio_ports ));
1731
+ } while (input_read_and_check (input , pins_to_check , p_config -> available_gpio_ports ));
1637
1732
}
1638
1733
#endif // defined(NRF_GPIO_LATCH_PRESENT)
1639
1734
@@ -1645,7 +1740,7 @@ static void gpiote_evt_handle(NRF_GPIOTE_Type * p_gpiote,
1645
1740
{
1646
1741
uint32_t ch = NRF_CTZ (mask );
1647
1742
mask &= ~NRFX_BIT (ch );
1648
- nrfx_gpiote_pin_t pin = nrfy_gpiote_event_pin_get ( p_gpiote , ch ) ;
1743
+ nrfx_gpiote_pin_t pin = p_cb -> ch_pin [ ch ] ;
1649
1744
nrf_gpiote_polarity_t polarity = nrfy_gpiote_event_polarity_get (p_gpiote , ch );
1650
1745
1651
1746
call_handler (p_cb , pin , gpiote_polarity_to_trigger (polarity ));
@@ -1654,17 +1749,27 @@ static void gpiote_evt_handle(NRF_GPIOTE_Type * p_gpiote,
1654
1749
1655
1750
static void irq_handler (NRF_GPIOTE_Type * p_gpiote , gpiote_control_block_t * p_cb )
1656
1751
{
1752
+ uint32_t instance_idx = (uint32_t )((uint8_t * )p_cb - (uint8_t * )m_cb ) / sizeof (* p_cb );
1753
+ const gpiote_config_t * p_config = get_config (instance_idx );
1657
1754
/* Collect status of all GPIOTE pin events. Processing is done once all are collected and cleared.*/
1658
- uint32_t enabled_in_events = nrf_gpiote_int_enable_check (p_gpiote , NRF_GPIOTE_INT_IN_MASK );
1755
+ #if NRFX_CHECK (NRFX_GPIOTE_CONFIG_NONUNIFORM_INSTANCES )
1756
+ uint32_t enabled_in_events = nrf_gpiote_int_group_enable_check (p_gpiote ,
1757
+ p_config -> group_idx ,
1758
+ NRF_GPIOTE_INT_IN_MASK );
1759
+ uint32_t enabled_events = enabled_in_events |
1760
+ (p_config -> port_supported ? NRF_GPIOTE_INT_PORT_MASK : 0 );
1761
+ #else
1762
+ uint32_t enabled_events = nrf_gpiote_int_enable_check (p_gpiote , NRF_GPIOTE_INT_IN_MASK ) |
1763
+ NRF_GPIOTE_INT_PORT_MASK ;
1764
+ #endif
1659
1765
uint32_t evt_mask = nrfy_gpiote_events_process (p_gpiote ,
1660
- enabled_in_events |
1661
- (uint32_t )NRF_GPIOTE_INT_PORT_MASK ,
1662
- p_cb -> channels_number );
1766
+ enabled_events ,
1767
+ p_config -> channels_number );
1663
1768
1664
1769
/* Handle PORT event. */
1665
1770
if (evt_mask & (uint32_t )NRF_GPIOTE_INT_PORT_MASK )
1666
1771
{
1667
- port_event_handle (p_gpiote , p_cb );
1772
+ port_event_handle (p_gpiote , p_cb , p_config );
1668
1773
evt_mask &= ~(uint32_t )NRF_GPIOTE_INT_PORT_MASK ;
1669
1774
}
1670
1775
0 commit comments