реклама на сайте
подробности

 
 
> Подскажите по хитрой функции работы с таймерами в lcp111x
Сергей Б
сообщение Jan 5 2014, 12:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 14-04-06
Из: Russia, Orel
Пользователь №: 16 115



Разбираюсь с проектом DMX512/RDM
Заинтересовала функция работы с таймером

Код
void bsp_get_sys_uptime(uint32_t *psec_cnt, uint16_t *pmsec_cnt)
{
    // we do not want to disable the systick interrupt, so we have to deal
    // with a systick during the execution of this function
    uint32_t sec_cnt_1  = sys_seconds_cnt;
    uint16_t msec_cnt_1 = sys_millisec_cnt;
    uint32_t sec_cnt_2  = sys_seconds_cnt;
    uint16_t msec_cnt_2 = sys_millisec_cnt;
    if ((sec_cnt_1 == sec_cnt_2) && (msec_cnt_2 < msec_cnt_1))
    {
        sec_cnt_2 += 1;
    }
    *psec_cnt  = sec_cnt_2;
    *pmsec_cnt = msec_cnt_2;
}


переменные sys_seconds_cnt и sys_millisec_cnt инкрементируются в SysTick прерывании.
Зачем нужна такая функция?

Предположим,
если сработало прерывание во время инициализации локальных переменных, то увеличить счетчик секунд?
не совсем понимаю назначение, подскажите может кто встречал такие варианты.

код перывания
Код
void TickHandler(void)
{
    uint32_t i;
    uint32_t millisec_increment = 1000 / SYS_TICK_RATE_HZ;

    sys_millisec_cnt += millisec_increment;
    if (sys_millisec_cnt >= 1000)
    {
        sys_millisec_cnt -= 1000;
        sys_seconds_cnt++;
    }
    for (i=0; i<NR_OF_MSEC_COUNTERS; i++)
    {
        app_millisec_cnt[i] += millisec_increment;
    }
}

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016