20 #include "button_ui.h" 25 #include "isr_manager.h" 28 #ifndef BUTTON_ACTIVE_STATE 29 #error "The board definition file must specify the GPIO state on button press" 32 #if BUTTON_ACTIVE_STATE == 1 33 #define GPIO_PULL_RESISTOR HAL_GPIO_PULL_DOWN 34 #define GPIO_PIN_SENSE GPIO_PIN_CNF_SENSE_High 35 #define BUTTON_PRESSED 1 36 #define BUTTON_RELEASED 0 38 #define GPIO_PULL_RESISTOR HAL_GPIO_PULL_UP 39 #define GPIO_PIN_SENSE GPIO_PIN_CNF_SENSE_Low 40 #define BUTTON_PRESSED 0 41 #define BUTTON_RELEASED 1 48 bool wake_evt =
false, btn_press_start =
false;
51 void button_ui_gpiote_Handler ()
59 NRF_GPIOTE->EVENTS_PORT = 0;
60 (void) NRF_GPIOTE->EVENTS_PORT;
63 btn_press_start =
true;
67 uint32_t irq_priority,
void (*button_ui_handler)
70 hal_gpio_cfg(button_pin, GPIO_PIN_CNF_DIR_Input,
71 GPIO_PIN_CNF_INPUT_Connect, GPIO_PULL_RESISTOR,
72 GPIO_PIN_CNF_DRIVE_S0S1, GPIO_PIN_SENSE);
75 handler = button_ui_handler;
77 NRF_GPIOTE->EVENTS_PORT = 0;
78 NRF_GPIOTE->INTENSET = (GPIOTE_INTENSET_PORT_Enabled
79 << GPIOTE_INTENSET_PORT_Pos);
81 NVIC_ClearPendingIRQ(GPIOTE_IRQn);
82 NVIC_SetPriority(GPIOTE_IRQn, irq_priority);
83 NVIC_EnableIRQ(GPIOTE_IRQn);
88 static uint32_t ticks = 0, step = 0;
90 if(btn_press_start ==
true)
93 btn_press_start =
false;
96 if((hal_gpio_pin_read(btn_pin) == BUTTON_RELEASED)
108 if((hal_gpio_pin_read(btn_pin) == BUTTON_PRESSED)){
112 if(ticks > press_duration[step])
118 if(hal_gpio_pin_read(btn_pin) == BUTTON_RELEASED)
120 uint32_t temp_step = step;
132 NRF_GPIOTE->INTENSET = (GPIOTE_INTENSET_PORT_Enabled
133 << GPIOTE_INTENSET_PORT_Pos);
137 NRF_GPIOTE->INTENCLR = (GPIOTE_INTENCLR_PORT_Enabled
138 << GPIOTE_INTENCLR_PORT_Pos);