Hello
Created in SDK v17 and simple_timer example.
I made a simple code to control the LED using a timer. Every 500 milliseconds, the LED turns on sequentially. LED ON and OFF works well when running one line at a time with debug, but the timer doesn't seem to be running.
In sdk_config.h, APP_TIMER_ENABLE is set to 1.
#include "app_timer.h"
#include <stdio.h>
#include "boards.h"
#include "app_error.h"
#include "nrf_delay.h"
#define TIMEOUT_VALUE 50000 /**< 50 mseconds timer time-out value. */
#define TOGGLE_LED_COUNTER (500 / (TIMEOUT_VALUE / 1000)) /**< Interval for toggling a LED. Yields to 500 mseconds. */
#define STATE_TRANSIT_COUNTER_INIT_VALUE (4 * TOGGLE_LED_COUNTER) /**< Initial value for the state transition counter. */
#define GENERIC_DELAY_TIME 1000 /**< Generic delay time used by application. */
APP_TIMER_DEF(m_timer_id);
void gpio_init(void)
{
nrf_gpio_cfg_output(BSP_LED_0); //board_led1
nrf_gpio_pin_set(BSP_LED_0);
nrf_gpio_cfg_output(BSP_LED_1); //board_led2
nrf_gpio_pin_set(BSP_LED_1);
nrf_gpio_cfg_output(BSP_LED_2); //board_led3
nrf_gpio_pin_set(BSP_LED_2);
nrf_gpio_cfg_output(BSP_LED_3); //board_led4
nrf_gpio_pin_set(BSP_LED_3);
}
char Move_LED[] = {BSP_LED_0, BSP_LED_1, BSP_LED_2, BSP_LED_3};
static void timer_handler(void * p_context)
{
nrf_gpio_pin_toggle(BSP_LED_3); //0.5 sec toggle
}
static void timers_init(void)
{
ret_code_t err_code;
// Initialize timer module.
err_code = app_timer_init();
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&m_timer_id,
APP_TIMER_MODE_SINGLE_SHOT, //SINGLE_SHOT or REPEATED //single shot timer
timer_handler);
APP_ERROR_CHECK(err_code);
}
static void timer_start()
{
ret_code_t err_code;
// Start application timers.
err_code = app_timer_start(m_timer_id, APP_TIMER_TICKS(500), NULL); //0.5sec delay
APP_ERROR_CHECK(err_code);
}
static void move()
{
for(int i=0; i<5; i++)
{
nrf_gpio_pin_set(BSP_LED_0); //led off
nrf_gpio_pin_set(BSP_LED_1);
nrf_gpio_pin_set(BSP_LED_2);
timer_start();
nrf_gpio_pin_clear(BSP_LED_0);
timer_start();
nrf_gpio_pin_clear(BSP_LED_1);
timer_start();
nrf_gpio_pin_clear(BSP_LED_2);
timer_start();
}
/*for(int i=0; i<5; i++) //not output
{
nrf_gpio_pin_set(BSP_LED_0); //led off
nrf_gpio_pin_set(BSP_LED_1);
nrf_gpio_pin_set(BSP_LED_2);
for(int j=0; j<3; j++)
{
nrf_gpio_pin_set(Move_LED[i]);
timer_start();
}
}*/
}
/**@brief Function for the Power Management.
*/
static void power_manage(void)
{
// Use directly __WFE and __SEV macros since the SoftDevice is not available.
// Wait for event.
__WFE();
// Clear Event Register.
__SEV();
__WFE();
}
int main(void)
{
timers_init();
gpio_init();
nrf_gpio_pin_set(BSP_LED_0); //led off
nrf_gpio_pin_set(BSP_LED_1);
nrf_gpio_pin_set(BSP_LED_2);
//move();
for (;;)
{
power_manage();
move();
}
}
Can I know the problem?
Thank you.