diff options
author | Alexander <trotsenkoa@gmail.com> | 2022-06-29 11:03:02 +0300 |
---|---|---|
committer | Alexander <trotsenkoa@gmail.com> | 2022-06-29 11:03:02 +0300 |
commit | 1702ce6ce430a66bb7af51644b91b7c196e719d9 (patch) | |
tree | 6039acbdf047873d32aaf55969286c5f0d55958f /Libraries/LTimers |
Создаю новый репозиторий. Программа для версии NixieClock_v2. Работает, часы тикают. Есть проблема, что скачет вторая сеносрная кнопка (она в другом канале). Поэтому на нее собираюсь сделать антидребезг.
Diffstat (limited to 'Libraries/LTimers')
-rw-r--r-- | Libraries/LTimers/ltimers.c | 137 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers.h | 28 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers_config.c | 82 | ||||
-rw-r--r-- | Libraries/LTimers/ltimers_config.h | 15 |
4 files changed, 262 insertions, 0 deletions
diff --git a/Libraries/LTimers/ltimers.c b/Libraries/LTimers/ltimers.c new file mode 100644 index 0000000..ccdbf00 --- /dev/null +++ b/Libraries/LTimers/ltimers.c @@ -0,0 +1,137 @@ +/* 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 new file mode 100644 index 0000000..9cb6eed --- /dev/null +++ b/Libraries/LTimers/ltimers.h @@ -0,0 +1,28 @@ +#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, + + 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 new file mode 100644 index 0000000..069a6ca --- /dev/null +++ b/Libraries/LTimers/ltimers_config.c @@ -0,0 +1,82 @@ +#include "ltimers_config.h" + +#include "stm32f0xx_conf.h" + + +// ---------------------------------------------------------------------------- +// 1 +// ---------------------------------------------------------------------------- +void LTimersConfig ( void ) +{ +// NVIC_InitTypeDef NVIC_InitStructure; +// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +// +// /* TIM6 clock enable */ +// RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM6 , ENABLE ); +// +// /* Enable the TIM6 global Interrupt */ +// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; +// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; +// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; +// NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn; +// NVIC_Init ( &NVIC_InitStructure ); +// +// /* Configure TIM6 to generate interrupt each 1ms */ +// TIM_TimeBaseStructure.TIM_Period = 1000; +// TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock/1000000)-1; +// TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; +// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; +// TIM_TimeBaseInit ( TIM6, &TIM_TimeBaseStructure ); +// +// /* TIM6 IT enable */ +// TIM_ITConfig ( TIM6, TIM_IT_Update , ENABLE ); +// +// /* TIM6 enable counter */ +// TIM_Cmd ( TIM6, ENABLE ); + + 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 new file mode 100644 index 0000000..7e8efe2 --- /dev/null +++ b/Libraries/LTimers/ltimers_config.h @@ -0,0 +1,15 @@ +#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 |