I have been trying to achieve a delay of 1 Us , I have tried using Kernel timers and even tried fetching the system clock and getting the difference, But I am unable to figure it out.
#include <zephyr.h> #include <device.h> #include <devicetree.h> #include <drivers/gpio.h> #include <sys/util.h> #include <sys/printk.h> #include <hal/nrf_gpio.h> #include <zephyr/kernel.h> #include <sys_clock.h> #include <sys/time_units.h> #define Data 02 uint32_t start_time; uint32_t stop_time; uint32_t cycles_spent; uint32_t nanoseconds_spent; void Timer(uint32_t time){ start_time = k_cycle_get_32(); do{ stop_time = k_cycle_get_32(); cycles_spent = stop_time - start_time; nanoseconds_spent = k_cyc_to_ns_floor32(cycles_spent); }while(nanoseconds_spent>=time); } int main(void) { /* Configure board. */ nrf_gpio_cfg_output(Data); while(1){ nrf_gpio_pin_clear(Data); k_sleep(K_USEC(1)); nrf_gpio_pin_set(Data); Timer(1000); } }
I am new to RTOS and NCS also , any help would be appreciated .