libyggdrasil  v1.0.0
timer.h
Go to the documentation of this file.
1  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * _____.___. .___ .__.__ *
3  * \__ | | ____ ____ __| _/___________ _____|__| | *
4  * / | |/ ___\ / ___\ / __ |\_ __ \__ \ / ___/ | | *
5  * \____ / /_/ > /_/ > /_/ | | | \// __ \_\___ \| | |__ *
6  * / ______\___ /\___ /\____ | |__| (____ /____ >__|____/ *
7  * \/ /_____//_____/ \/ \/ \/ *
8  * - Midgard - *
9  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
10  * This software can be used by students and other personal of the *
11  * Bern University of Applied Sciences under the terms of the MIT *
12  * license. *
13  * For other persons this software is under the terms of the GNU *
14  * General Public License version 2. *
15  * *
16  * Copyright © 2021, Bern University of Applied Sciences. *
17  * All rights reserved. *
18  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
26 #include <c/common/types.h>
27 
28 #include <stm32f7xx_hal.h>
29 
33 typedef struct {
34  TIM_HandleTypeDef *interface;
35  size_t size;
36 } tim_t;
37 
41 typedef struct {
45 
46 
47 /* Basic timer functions */
48 
56 
64 
71 
78 
86 
94 
101 
110 
122 C_LINKAGE bool yggdrasil_TIM_SetPwmFrequency(tim_t tim, u32 f_hz, u32 resolution);
123 
124 
133 
142 
150 C_LINKAGE bool yggdrasil_TIM_Channel_SetPolarityHigh(tim_channel_t channel, bool highActive);
151 
159 C_LINKAGE bool yggdrasil_TIM_Channel_SetDutyCycle(tim_channel_t channel, float dutyCycle);
160 
161 
162 /* Profile counter functions */
163 
170 
177 
184 
192 
201 C_LINKAGE void yggdrasil_ProfileCounter_GetFormattedTimeToOverflow(tim_t tim, char *buffer, size_t size);
202 
210 
219 C_LINKAGE void yggdrasil_ProfileCounter_GetFormattedPassedTime(tim_t tim, char *buffer, size_t size);
220 
221 
222 /* Encoder functions */
229 };
230 
237 };
238 
247 
256 
265 
274 
282 
291 
299 
300 
yggdrasil_TIM_Disable
C_LINKAGE void yggdrasil_TIM_Disable(tim_t tim)
Timer disable.
Definition: timer.cpp:52
EncoderDirection_CounterClockwise
@ EncoderDirection_CounterClockwise
Definition: timer.h:228
EncoderDirection_Clockwise
@ EncoderDirection_Clockwise
Definition: timer.h:227
types.h
Commonly used type definitions and helper templates.
yggdrasil_ProfileCounter_Start
C_LINKAGE void yggdrasil_ProfileCounter_Start(tim_t tim)
Start the counter.
Definition: timer.cpp:304
u8
uint8_t u8
Unsigned integer definitions.
Definition: types.h:36
yggdrasil_TIM_GetPwmFrequency
C_LINKAGE u32 yggdrasil_TIM_GetPwmFrequency(tim_t tim)
Get the pwm frequency.
Definition: timer.cpp:95
tim_t::interface
TIM_HandleTypeDef * interface
Definition: timer.h:34
yggdrasil_TIM_Channel_SetDutyCycle
C_LINKAGE bool yggdrasil_TIM_Channel_SetDutyCycle(tim_channel_t channel, float dutyCycle)
Set the duty cycle as a float value.
Definition: timer.cpp:240
tim_t
Timer handle type.
Definition: timer.h:33
yggdrasil_TIM_Channel_StopPwm
C_LINKAGE bool yggdrasil_TIM_Channel_StopPwm(tim_channel_t channel)
Stop PWM generation for the channel.
Definition: timer.cpp:203
yggdrasil_TIM_Channel_SetPolarityHigh
C_LINKAGE bool yggdrasil_TIM_Channel_SetPolarityHigh(tim_channel_t channel, bool highActive)
Start set pwm polarity.
Definition: timer.cpp:216
EncoderMode
EncoderMode
Modes for the encoder, 48 odr 96 steps per turn are possible.
Definition: timer.h:234
u64
uint64_t u64
Definition: types.h:39
tim_t::size
size_t size
Definition: timer.h:35
yggdrasil_TIM_Deinit
C_LINKAGE bool yggdrasil_TIM_Deinit(tim_t tim)
Timer deinitialization.
Definition: timer.cpp:44
yggdrasil_ProfileCounter_Reset
C_LINKAGE void yggdrasil_ProfileCounter_Reset(tim_t tim)
Reset the counter to 0.
Definition: timer.cpp:312
yggdrasil_Encoder_Init
C_LINKAGE bool yggdrasil_Encoder_Init(tim_t tim)
Initialization function for the encoder.
Definition: timer.cpp:353
yggdrasil_ProfileCounter_GetTimeToOverflow
C_LINKAGE u64 yggdrasil_ProfileCounter_GetTimeToOverflow(tim_t tim)
Get the time to an overflow.
Definition: timer.cpp:316
yggdrasil_Encoder_Enable
C_LINKAGE bool yggdrasil_Encoder_Enable(tim_t tim)
Enable the encoder mode.
Definition: timer.cpp:361
yggdrasil_TIM_SetPwmFrequency
C_LINKAGE bool yggdrasil_TIM_SetPwmFrequency(tim_t tim, u32 f_hz, u32 resolution)
Set the pwm frequency and (optional) the maximal ticks within on cycle for all channels.
Definition: timer.cpp:119
yggdrasil_TIM_Init
C_LINKAGE bool yggdrasil_TIM_Init(tim_t tim)
Timer initialization.
Definition: timer.cpp:40
u32
uint32_t u32
Definition: types.h:38
yggdrasil_Encoder_SetMode
C_LINKAGE void yggdrasil_Encoder_SetMode(tim_t tim, enum EncoderMode mode)
Set the mode of the encoder (48 or 96 counts per turn)
Definition: timer.cpp:388
yggdrasil_Encoder_SetCount
C_LINKAGE void yggdrasil_Encoder_SetCount(tim_t tim, u32 cnt)
Set the encoder counter value.
Definition: timer.cpp:379
yggdrasil_TIM_GetCount
C_LINKAGE u32 yggdrasil_TIM_GetCount(tim_t tim)
Get the counter value.
Definition: timer.cpp:56
yggdrasil_ProfileCounter_Stop
C_LINKAGE void yggdrasil_ProfileCounter_Stop(tim_t tim)
Stop the counter.
Definition: timer.cpp:308
tim_channel_t::channel
u8 channel
Definition: timer.h:43
EncoderDirection
EncoderDirection
Last known turning direction of the encoder.
Definition: timer.h:226
tim_channel_t
Timer channel handle type.
Definition: timer.h:41
yggdrasil_ProfileCounter_GetPassedTime
C_LINKAGE u64 yggdrasil_ProfileCounter_GetPassedTime(tim_t tim)
Get the time passed time since the start.
Definition: timer.cpp:324
yggdrasil_Encoder_GetDirection
C_LINKAGE enum EncoderDirection yggdrasil_Encoder_GetDirection(tim_t tim)
Get the direction of the last rotation.
Definition: timer.cpp:383
yggdrasil_TIM_Enable
C_LINKAGE void yggdrasil_TIM_Enable(tim_t tim)
Timer enable.
Definition: timer.cpp:48
yggdrasil_Encoder_Disable
C_LINKAGE bool yggdrasil_Encoder_Disable(tim_t tim)
Disable the encoder mode.
Definition: timer.cpp:368
yggdrasil_TIM_ResetCount
C_LINKAGE void yggdrasil_TIM_ResetCount(tim_t tim)
Reset the counter value.
Definition: timer.cpp:64
yggdrasil_ProfileCounter_GetFormattedPassedTime
C_LINKAGE void yggdrasil_ProfileCounter_GetFormattedPassedTime(tim_t tim, char *buffer, size_t size)
Get the time passed time since the start.
Definition: timer.cpp:328
EncoderMode_96StepsPerTurn
@ EncoderMode_96StepsPerTurn
Definition: timer.h:236
tim_channel_t::timer
tim_t timer
Definition: timer.h:42
yggdrasil_TIM_SetCount
C_LINKAGE void yggdrasil_TIM_SetCount(tim_t tim, u32 cnt)
Set the counter value.
Definition: timer.cpp:60
C_LINKAGE
#define C_LINKAGE
Definition: attributes.h:43
yggdrasil_Encoder_GetCount
C_LINKAGE u32 yggdrasil_Encoder_GetCount(tim_t tim)
Get the counter value.
Definition: timer.cpp:375
yggdrasil_ProfileCounter_GetFormattedTimeToOverflow
C_LINKAGE void yggdrasil_ProfileCounter_GetFormattedTimeToOverflow(tim_t tim, char *buffer, size_t size)
Get the time to an overflow formatted as a string.
Definition: timer.cpp:320
EncoderMode_48StepsPerTurn
@ EncoderMode_48StepsPerTurn
Definition: timer.h:235
yggdrasil_TIM_Channel_StartPwm
C_LINKAGE bool yggdrasil_TIM_Channel_StartPwm(tim_channel_t channel)
Start PWM generation for the channel.
Definition: timer.cpp:190