Hi,
I'm trying to use a GPIO interrupt and a semaphore to trigger a free rtos taskm but whenever I run xSemaphoreTake i get a hard fault error.
// Semaphore to signal interrupt pin change SemaphoreHandle_t m_ppg_semaphore; static void ppg_test_task(void *pvParameter){ UNUSED_PARAMETER(pvParameter); m_ppg_semaphore = xSemaphoreCreateBinary(); ASSERT(NULL != m_ppg_semaphore); gpio_init(); //volatile enum ppgInterupt ppgState = notReady; // Read the interrupt registers to clear them //uint8_t buffer; //bool stay = false; while (true) { bool temp = xSemaphoreTake(m_ppg_semaphore, portMAX_DELAY); // Turn an LED on to signify the start of data reading bsp_board_led_invert(BSP_BOARD_LED_3); } } void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { BaseType_t yield_req = pdFALSE; /* The returned value may be safely ignored, if error is returned it only means that * the semaphore is already given (raised). */ UNUSED_VARIABLE(xSemaphoreGiveFromISR(m_ppg_semaphore, &yield_req)); portYIELD_FROM_ISR(yield_req); } /** * @brief Function for configuring: PIN_IN pin for input, PIN_OUT pin for output, * and configures GPIOTE to give an interrupt on pin change. */ static void gpio_init(void) { ret_code_t err_code; err_code = nrf_drv_gpiote_init(); APP_ERROR_CHECK(err_code); nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(true); in_config.pull = NRF_GPIO_PIN_PULLUP; err_code = nrf_drv_gpiote_in_init(INT_IN, &in_config, in_pin_handler); APP_ERROR_CHECK(err_code); nrf_drv_gpiote_in_event_enable(INT_IN, true); NRF_LOG_INFO("GPIO Configured"); }