A question about buttons in a matrix structure

Hello!

I am implementing the input of the key of the matrix structure of the circuit diagram below.

First of all, I tested whether the GPIO output (Row 1~4) and input (Column 1~5) are working normally.

- When all High outputs are given to Rows 1 to 4 and the button is pressed to confirm that signals are input to Columns 1 to 5, High signals are normally input to the Columns.

I confirmed that the " void bsp_event_handler(bsp_event_t event) " function was called.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**@brief Function for handling events from the BSP module.
*
* @param[in] event Event generated by button press.
*/
void bsp_event_handler(bsp_event_t event)
{
uint32_t err_code;
uint8_t reason, result = 0;
uint8_t mMatrix_souce;
// NRF_UART0->TASKS_STARTRX= 1;
//NRF_UART0->ENABLE = 1;
printf("> bsp_event_handler ");
//gMatrix_source = 1;
/*
mMatrix_souce = bsp_board_getMatrix_souce();
if( ( eboards_Matrix_source_all_on == mMatrix_souce ) || ( eboards_Matrix_source_all_off == mMatrix_souce ) )
{
event = BSP_EVENT_KEY_5;
}
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[ PC Terminal  ]

By sending data to PC through UART, it was confirmed that 5 Buttons were normally recognized.

---> question from here

The SW configuration for the matrix structure I thought of is as follows.

1) Before entering Sleep Mode, set all Rows 1 ~ 4 to High -> Wake-up occurs when any button is pressed in Sleep mode.

       

2) In the above test, it was confirmed that the handler functions are executed in the following order at wake-up.

    static void gpiote_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) ->  void bsp_event_handler(bsp_event_t event) ->

    static void detection_delay_timeout_handler(void * p_context)

   

 3) So, in the first static void gpiote_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) function,
    Row 1 ~ 4 All High is set to High sequentially in the order of 1-> 2 -> 3 -> 4 -> to distinguish which button it actually is.

In the static void gpiote_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) function, make row high sequentially to distinguish which button was pressed.

The question is whether it is the right choice to try to distinguish in the void gpiote_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) function?

And if you have similar examples, please provide them.

tnank