Skip to content

Commit

Permalink
timer: add IRAM_ATTR to spinlock give/take API
Browse files Browse the repository at this point in the history
  • Loading branch information
ESP-Marius authored and boborjan2 committed May 9, 2021
1 parent 710a2b8 commit 0d969ff
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
8 changes: 6 additions & 2 deletions components/driver/include/driver/timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,24 +432,28 @@ void timer_group_clr_intr_sta_in_isr(timer_group_t group_num, timer_intr_t intr_
bool timer_group_get_auto_reload_in_isr(timer_group_t group_num, timer_idx_t timer_num);

/** @brief Take timer spinlock to enter critical protect
*
* @note Deprecated, the recommended way is to use ISR callbacks instead, see timer_group_example_main
*
* @param group_num Timer group number, 0 for TIMERG0 or 1 for TIMERG1
*
* @return
* - ESP_OK Success
* - ESP_ERR_INVALID_ARG Parameter error
*/
esp_err_t timer_spinlock_take(timer_group_t group_num);
esp_err_t timer_spinlock_take(timer_group_t group_num) __attribute__ ((deprecated));

/** @brief Give timer spinlock to exit critical protect
*
* @note Deprecated, the recommended way is to use ISR callbacks instead, see timer_group_example_main
*
* @param group_num Timer group number, 0 for TIMERG0 or 1 for TIMERG1
*
* @return
* - ESP_OK Success
* - ESP_ERR_INVALID_ARG Parameter error
*/
esp_err_t timer_spinlock_give(timer_group_t group_num);
esp_err_t timer_spinlock_give(timer_group_t group_num) __attribute__ ((deprecated));

#ifdef __cplusplus
}
Expand Down
4 changes: 2 additions & 2 deletions components/driver/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -497,14 +497,14 @@ bool IRAM_ATTR timer_group_get_auto_reload_in_isr(timer_group_t group_num, timer
return timer_hal_get_auto_reload(&(p_timer_obj[group_num][timer_num]->hal));
}

esp_err_t timer_spinlock_take(timer_group_t group_num)
esp_err_t IRAM_ATTR timer_spinlock_take(timer_group_t group_num)
{
TIMER_CHECK(group_num < TIMER_GROUP_MAX, TIMER_GROUP_NUM_ERROR, ESP_ERR_INVALID_ARG);
TIMER_ENTER_CRITICAL(&timer_spinlock[group_num]);
return ESP_OK;
}

esp_err_t timer_spinlock_give(timer_group_t group_num)
esp_err_t IRAM_ATTR timer_spinlock_give(timer_group_t group_num)
{
TIMER_CHECK(group_num < TIMER_GROUP_MAX, TIMER_GROUP_NUM_ERROR, ESP_ERR_INVALID_ARG);
TIMER_EXIT_CRITICAL(&timer_spinlock[group_num]);
Expand Down

0 comments on commit 0d969ff

Please sign in to comment.