diff options
Diffstat (limited to 'Libraries/LTimers')
-rw-r--r-- | Libraries/LTimers/ltimers.c | 122 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers.h | 29 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers_config.c | 56 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers_config.h | 15 |
4 files changed, 0 insertions, 222 deletions
diff --git a/Libraries/LTimers/ltimers.c b/Libraries/LTimers/ltimers.c deleted file mode 100644 index 61c9e6f..0000000 --- a/Libraries/LTimers/ltimers.c +++ /dev/null @@ -1,122 +0,0 @@ -/* Описание модуля ltimers.c - - Этот модуль используется для создания неограниченного количества -программных таймеров для программы. Модуль использует аппаратный таймер, -который генерирует прерывание каждую 1мс (можно использовать любой другой -промежуток времени, просто 1 мс это очень удобно и хватает для многих -программных пауз, задержек, таймеров и тд. в программе). -В прерывании вызывается ф-я ProcessLTimers(), которая инкрементирует значения -всех таймеров. Таймеры создаются в файле ltimers.h. - Модуль универсален, прост и может использоваться на любой платформе, -компиляторе, любом МК. - Для подключения модуля настройте аппаратный таймер на прерывание в 1мс (или -любой другой нужный промежуток времени) и добавьте в обработчик прерывания -этого таймера ф-ю ProcessLTimers();. Затем добавьте #include "ltimers.h" в тот -файл программы, где будут использоваться ф-ии модуля. Собственно, -в всего нужны две функции для работы с таймерами: - -StartLTimer ( LTIMER_LED_BLINK ); // запустить таймер -GetLTimer ( LTIMER_LED_BLINK ); // получить текущее значение таймера - - Пример использования: -... -// Предварительно ltimers.h создаем перечисление, в котором создаем имена для -// программных таймеров, а также в конце перечисления всегда MAX_LTIMERS -#include "ltimers.h" -... - -int main () -{ - ... - // Настройка аппаратного таймера на прерывание раз в 1 мс - InitLTimersHardWare(); - - // Стартовая инициализация (просто обнуление) всех программных таймеров - InitLTimers (); - - // Запускаем таймер - StartLTimer ( LTIMER_LED_BLINK ); - - // Основной цикл программы - while (1) - { - // Проверяем значение таймера - if ( GetLTimer ( LTIMER_LED_BLINK ) >= 500 ) - { - LED_ON; - } - } -} - -***Примечание - - 1. Необходимо учитывать разрядность МК и атомарность при проверке значений -таймера. То есть, если произойдет прерывание в момент проверки полубайтов на -8-ми разрядном МК, то, возможно, могут быть трудноуловимые глюки. - - 2. Обратите внимание, что в ф-ии ProcessLTimers() значения таймеров -инкрементируются постоянно и не перестают изменяться. Ф-я StartLTimer только -сбрасывает значение таймера в ноль, а потом программа уже ловит тот момент, -когда это значение превысило или сравнялось с нужным. И когда мы провели -сравнение, то таймер все равно продолжает маслать. Но это не важно. Пусть себе -маслает. - - 3. Псевдоним для типа uint32_t можно заменить на необходимый в зависимости -от среды разработки и компилятора. -*/ - -#include "ltimers.h" -#include "ltimers_config.h" - -uint32_t LTimers [MAX_LTIMERS] = { 0 }; - - -// ---------------------------------------------------------------------------- -// Стартовая инициализация всех программных таймеров программиста. -// Ф-я вызывается при старте МК и просто устанавливает все значения таймеров -// в ноль. -// ---------------------------------------------------------------------------- -void InitLTimers (void) -{ - LTimersConfig (); -} - - -// ---------------------------------------------------------------------------- -// Ф-я получения значения программного счетчика -// Используется программистом для проверки значения запущенного таймера -// Ф-я принимает имя таймера из перечисления LTimerNum_t в файле ltimers.h -// Ф-я возвращает значение таймера, которое увеличивается каждую 1мс -// ---------------------------------------------------------------------------- -uint32_t GetLTimer ( LTimersNames_t LTimer ) -{ - return LTimers[ LTimer ]; -} - - -// ---------------------------------------------------------------------------- -// Ф-я запуска программного таймера для использования программистом для -// любых программных задержек разрешением 1мс -// Ф-я принимает имя таймера из перечисления LTimerNum_t в файле ltimers.h -// ---------------------------------------------------------------------------- -void StartLTimer ( LTimersNames_t LTimer ) -{ - LTimers[ LTimer ] = 0; -} - - -// ---------------------------------------------------------------------------- -// Ф-я, инкрементирующая значения программных таймеров. Количество этих -// программных таймеров нее ограничено и задается программистом в ltimers.h -// в тайпдефе LTimerNum_t. Просто дописываем в перечислении перед MAX_LTIMERS -// имя нового таймера. -// Вызывается эта ф-я в обреботчике TIM6_IRQHandler каждую 1 мс. -// 1 мс это удобный квант времени для разных программных задержек -// ---------------------------------------------------------------------------- -void ProcessLTimers (void) -{ - for ( uint32_t i = 0; i < MAX_LTIMERS; i++ ) - { - LTimers[i]++; - } -} diff --git a/Libraries/LTimers/ltimers.h b/Libraries/LTimers/ltimers.h deleted file mode 100644 index 4514841..0000000 --- a/Libraries/LTimers/ltimers.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef LTIMERS_H_INCLUDED -#define LTIMERS_H_INCLUDED - -#include <stdint.h> - -// Имена таймеров LTIMER_<TIMERNAME> ---------------------------------------- // -typedef enum { - - LTIMER_SENSE_PAD = 0, - LTIMER_PRGBAR_SPEED, - LTIMER_HL_CHANGE_BRIGHT_SPEED, - LTIMER_HL_BUT_LED, - LTIMER_BUTTON_LONG_PRESS, - LTIMER_INDIC_MODE_BLINK_OFF, - LTIMER_INDIC_MODE_BLINK_ON, - LTIMER_MENU_ADJ_TIME_OUT, - LTIMER_LIGHT_SENSOR, - LTIMER_SENSOR_BUT_DEBOUNCE, - - MAX_LTIMERS - -} LTimersNames_t; - -void InitLTimers ( void ); -void ProcessLTimers ( void ); -uint32_t GetLTimer ( LTimersNames_t LTIMER ); -void StartLTimer ( LTimersNames_t LTIMER ); - -#endif // LTIMERS_H_INCLUDED diff --git a/Libraries/LTimers/ltimers_config.c b/Libraries/LTimers/ltimers_config.c deleted file mode 100644 index a30b36f..0000000 --- a/Libraries/LTimers/ltimers_config.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "ltimers_config.h" - -#include "stm32f0xx_conf.h" - - -// ---------------------------------------------------------------------------- -// Инициализация аппаратного таймера для генерирования прерываний каждую 1мс -// ---------------------------------------------------------------------------- -void LTimersConfig ( void ) -{ - NVIC_InitTypeDef NVIC_InitStructure; - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; - - /* LTIMER_TIMx clock enable */ - LTIMER_RCC_APBxPeriphClockCmd ( LTIMER_TIM_RCC, ENABLE ); - - /* Enable the LTIMER_TIMx gloabal Interrupt */ - NVIC_InitStructure.NVIC_IRQChannel = LTIMER_TIM_IRQx; - NVIC_InitStructure.NVIC_IRQChannelPriority = 1; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init ( &NVIC_InitStructure ); - - /* ----------------------------------------------------------------------- - In this example TIM7 counter clock (TIM7CLK) is set to APB1 clock (PCLK1), since - APB1 prescaler is set to 1 and TIM7 prescaler is set to 0. - - In this example TIM7 input clock (TIM7CLK) is set to APB1 clock (PCLK1), - since APB1 prescaler is set to 1. - TIM7CLK = PCLK1 = HCLK = SystemCoreClock - - With Prescaler set to 479 and Period to 24999, the TIM7 counter is updated each 250 ms - (i.e. and interrupt is generated each 250 ms) - TIM7 counter clock = TIM7CLK /((Prescaler + 1)*(Period + 1)) - = 48 MHz / ((25000)*(480)) - = 4 Hz - ==> TIM7 counter period = 250 ms - - Note: - SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f0xx.c file. - Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() - function to update SystemCoreClock variable value. Otherwise, any configuration - based on this variable will be incorrect. - ----------------------------------------------------------------------- */ - /* Time base configuration */ - TIM_TimeBaseStructure.TIM_Period = 1000; //24999; - TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock/1000000)-1; //479; - TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseInit ( LTIMER_TIMx, &TIM_TimeBaseStructure ); - - /* LTIMER_TIMx Interrupts enable */ - TIM_ITConfig ( LTIMER_TIMx, TIM_IT_Update, ENABLE ); - - /* LTIMER_TIMx enable counter */ - TIM_Cmd ( LTIMER_TIMx, ENABLE ); -} diff --git a/Libraries/LTimers/ltimers_config.h b/Libraries/LTimers/ltimers_config.h deleted file mode 100644 index 50a75db..0000000 --- a/Libraries/LTimers/ltimers_config.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef LTIMERS_CONFIG_INCLUDED -#define LTIMERS_CONFIG_INCLUDED - -// Примечание -// Обратить внимание на то, что таймеры тактируются от разных шин APB1 или APB2 - -#define LTIMER_IRQHandler TIM17_IRQHandler -#define LTIMER_TIMx TIM17 -#define LTIMER_TIM_RCC RCC_APB2Periph_TIM17 -#define LTIMER_TIM_IRQx TIM17_IRQn -#define LTIMER_RCC_APBxPeriphClockCmd RCC_APB2PeriphClockCmd - -void LTimersConfig ( void ); - -#endif // LTIMERS_CONFIG_INCLUDED |