This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

why nrf51422 have problem with timer?

without timer it work fine but when i use timer it goes here. image description

my timer code is this

#define APP_TIMER_PRESCALER                  0                                          /**< Value of the RTC1 PRESCALER register. */
#define APP_TIMER_MAX_TIMERS                 6                                          /**< Maximum number of simultaneously created timers. */
#define APP_TIMER_OP_QUEUE_SIZE              4                                          /**< Size of timer operation queues. */


#define TIMER_PRESCALERS  6U       /**< Prescaler setting for timer. */

static app_timer_id_t                        m_battery_timer_id;                        /**< Battery timer. */

#define BATTERY_LEVEL_MEAS_INTERVAL          APP_TIMER_TICKS(1000, APP_TIMER_PRESCALER) /**< Battery level measurement interval (ticks). */
#define MIN_BATTERY_LEVEL                    81                                         /**< Minimum simulated battery level. */
#define MAX_BATTERY_LEVEL                    100                                        /**< Maximum simulated battery level. */
#define BATTERY_LEVEL_INCREMENT              1                                          /**< Increment between each simulated battery level measurement. */


static void battery_level_meas_timeout_handler(void * p_context)
{
    static int i = 0 ; 
		i++;
}



/**@brief Function for the Timer initialization.
 *
 * @details Initializes the timer module. This creates and starts application timers.
 */
static void timers_init(void)
{
    uint32_t err_code;

    // Initialize timer module.
    APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);

		// Create timers.
    err_code = app_timer_create(&m_battery_timer_id,
                                APP_TIMER_MODE_REPEATED,
                                battery_level_meas_timeout_handler);
    APP_ERROR_CHECK(err_code);
    
}

static void application_timers_start(void)
{
    uint32_t err_code;

    // Start application timers.
    err_code = app_timer_start(m_battery_timer_id, BATTERY_LEVEL_MEAS_INTERVAL, NULL);
    APP_ERROR_CHECK(err_code);
}

i found out that when interupt is trigered its going to that picture line

Parents
  • Hi navid

    Not sure actually. Have you tried to increase APP_TIMER_MAX_TIMERS or APP_TIMER_OP_QUEUE_SIZE constants, just to see if that makes a difference? Have you enabled the RTC1 in nrf_drv_config.h file (The application timer library uses RTC1 in the background). To find out what is wrong, you could check if there is any error code thrown. Start debugging as described on this thread and this thread. Also, make sure the priority of RTC1 is APP_IRQ_PRIORITY_LOW, which should be set in the nrf_drv_config.h file in your project folder.

Reply
  • Hi navid

    Not sure actually. Have you tried to increase APP_TIMER_MAX_TIMERS or APP_TIMER_OP_QUEUE_SIZE constants, just to see if that makes a difference? Have you enabled the RTC1 in nrf_drv_config.h file (The application timer library uses RTC1 in the background). To find out what is wrong, you could check if there is any error code thrown. Start debugging as described on this thread and this thread. Also, make sure the priority of RTC1 is APP_IRQ_PRIORITY_LOW, which should be set in the nrf_drv_config.h file in your project folder.

Children
Related