Fixed ets_timer.c review comments
Rename sdk_ets_handler_isr to process_pending_timers Add function for microseconds Simplify time to ticks conversion
This commit is contained in:
parent
611bbca7a5
commit
7ae344740c
1 changed files with 17 additions and 21 deletions
|
@ -12,13 +12,14 @@
|
|||
* from the real FRC2 timer ISR handler and calls former ISR handler.
|
||||
* So, timer callbacks are called from the task context rather than an interrupt.
|
||||
*
|
||||
* Modifications from the original reverese engineered version:
|
||||
* Modifications from the original reverse engineered version:
|
||||
* - FreeRTOS queue is replaced with Task notifications.
|
||||
* - Removed unknown queue lenght monitoring and parameters allocation.
|
||||
* - Removed unknown queue length monitoring and parameters allocation.
|
||||
* - Removed unused debug variables
|
||||
* - xTaskGenericCreate is replaced with xTaskCreate
|
||||
* - simplified time to ticks conversion (simply multiply by 5)
|
||||
*
|
||||
* This timer should be used with coution together with other tasks. As the
|
||||
* This timer should be used with caution together with other tasks. As the
|
||||
* timer callback is executed within timer task context, access to data that
|
||||
* other tasks accessing should be protected.
|
||||
*/
|
||||
|
@ -175,20 +176,9 @@ void sdk_ets_timer_arm_ms_us(ets_timer_t *timer, uint32_t value,
|
|||
}
|
||||
|
||||
if (value_in_ms) {
|
||||
value *= 1000;
|
||||
}
|
||||
|
||||
if (value != 0) {
|
||||
// Why to do multiplication for values greater than 858
|
||||
// and do 'shift and add' for other?
|
||||
// What is the magic number 858 ?
|
||||
if (858 < value) {
|
||||
ticks = (value << 2) + value; // ticks = value * 5
|
||||
} else {
|
||||
// It is the same as just multiply by 5
|
||||
// No idea why to do it this way
|
||||
ticks = (value * 5000000) / 1000000;
|
||||
}
|
||||
ticks = value * 5000;
|
||||
} else {
|
||||
ticks = value * 5;
|
||||
}
|
||||
|
||||
if (repeat_flag) {
|
||||
|
@ -206,6 +196,13 @@ void sdk_ets_timer_arm(ets_timer_t *timer, uint32_t milliseconds,
|
|||
/*value in ms=*/true);
|
||||
}
|
||||
|
||||
void sdk_ets_timer_arm_us(ets_timer_t *timer, uint32_t useconds,
|
||||
bool repeat_flag)
|
||||
{
|
||||
sdk_ets_timer_arm_ms_us(timer, useconds, repeat_flag,
|
||||
/*value in ms=*/false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function removes a timer from the pending timers list.
|
||||
*/
|
||||
|
@ -233,9 +230,8 @@ void sdk_ets_timer_disarm(ets_timer_t *timer)
|
|||
|
||||
/**
|
||||
* Check the list of pending timers for expired ones and process them.
|
||||
* This function is not called from the interrupt regardless of its name.
|
||||
*/
|
||||
void IRAM sdk_ets_timer_handler_isr()
|
||||
static inline void process_pending_timers()
|
||||
{
|
||||
vPortEnterCritical();
|
||||
int32_t ticks = TIMER_FRC2.COUNT;
|
||||
|
@ -290,7 +286,7 @@ static void timer_task(void* param)
|
|||
{
|
||||
while (true) {
|
||||
if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) == pdTRUE) {
|
||||
sdk_ets_timer_handler_isr();
|
||||
process_pending_timers();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -305,7 +301,7 @@ void sdk_ets_timer_init()
|
|||
* xTaskGenericCreate(task_handle, "rtc_timer_task", 200, 0, 12, &handle,
|
||||
* NULL, NULL);
|
||||
*/
|
||||
xTaskCreate(timer_task, "rtc_timer_task", 200, 0, 12, &task_handle);
|
||||
xTaskCreate(timer_task, "ets_timer_task", 200, 0, 12, &task_handle);
|
||||
printf("frc2_timer_task_hdl:%p, prio:%d, stack:%d\n", task_handle, 12, 200);
|
||||
|
||||
TIMER_FRC2.ALARM = 0;
|
||||
|
|
Loading…
Reference in a new issue