So I have a timer interrupt setup which triggers every 1ms in the interrupt I give the semaphore with
void sensor_timer_event_handler(nrf_timer_event_t event_type, void * p_context)
{
switch(event_type) {
case NRF_TIMER_EVENT_COMPARE0:
k_sem_give(&drdy_sem);
// gpio_pin_toggle_dt(&dbg_pin);
break;
default:
break;
}
}The interrupt triggers correctly as seen from logic analyzer
this should unblock the main thread
/* Main Function */
int main(void)
{
int ret, err;
uint32_t reset_cause;
// k_msleep(10000);
hwinfo_get_reset_cause(&reset_cause);
print_reset_cause(reset_cause);
ret = gpio_is_ready_dt(&dbg_pin);
if (!ret)
{
LOG_ERR("DBG Pin not ready.");
return -EIO;
}
ret = gpio_pin_configure_dt(&dbg_pin, GPIO_OUTPUT_INACTIVE);
if (ret != 0)
{
LOG_ERR("Unable to configure dbg pin");
}
sensor_timer_init();
sensor_timer_repeated_start(US_FOR_1KHZ);
while (true)
{
err = k_sem_take(&drdy_sem, K_FOREVER);
if (err != 0)
{
LOG_ERR("Error taking drdy sem: %d", err);
}
gpio_pin_toggle_dt(&dbg_pin);
int a = 1 + 3;
int b = a;
}
return 0;
}
The main thread does not run but if I change it to like this then it runs properly but then the thread runs continously which is not good for power management.
err = k_sem_take(&drdy_sem, K_NO_WAIT);
if (err != 0)
{
LOG_ERR("Error taking drdy sem: %d", err);
}
else
{
gpio_pin_toggle_dt(&dbg_pin);
int a = 1 + 3;
int b = a;
}My prj.conf file
CONFIG_USB_DEVICE_STACK_NEXT=y CONFIG_USBD_HID_SUPPORT=y CONFIG_USBD_LOG_LEVEL_WRN=y CONFIG_USBD_HID_LOG_LEVEL_WRN=y CONFIG_UDC_DRIVER_LOG_LEVEL_WRN=y # CONFIG_UDC_BUF_POOL_SIZE=5000 CONFIG_GPIO=y CONFIG_IPC_SERVICE=y CONFIG_IPC_SERVICE_BACKEND_ICMSG=y CONFIG_MBOX=y # Disable UART Console and enable the RTT console CONFIG_LOG=y # CONFIG_UART_CONSOLE=n CONFIG_RTT_CONSOLE=y CONFIG_USE_SEGGER_RTT=y CONFIG_ASSERT=y CONFIG_SOC_NRF53_CPUNET_ENABLE=y CONFIG_STDOUT_CONSOLE=y CONFIG_FLASH=y CONFIG_FLASH_MAP=y CONFIG_SETTINGS=y CONFIG_SETTINGS_RUNTIME=y CONFIG_NVS=y CONFIG_SETTINGS_NVS=y CONFIG_HEAP_MEM_POOL_SIZE=256 CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NORDIC_QSPI_NOR=n CONFIG_SENSOR=y CONFIG_NRF_FUEL_GAUGE=y CONFIG_REGULATOR=y CONFIG_REQUIRES_FLOAT_PRINTF=y CONFIG_NRFX_SPIM4=y CONFIG_NRFX_TIMER1=y CONFIG_POWEROFF=y CONFIG_HWINFO=y
I want to run this properly I am not sure why this is not working. Any help will be highly appreciated.
Thanks