172 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @file	   hal_timer.h
 | |
|  *
 | |
|  * @copyright  Nehemis SARL reserves all rights even in the event of industrial
 | |
|  *             property rights. We reserve all rights of disposal such as
 | |
|  *             copying and passing on to third parties.
 | |
|  *
 | |
|  * @brief	   HAL layer for the TIMER module.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| 
 | |
| #ifndef __HAL_TIMER_H_
 | |
| #define __HAL_TIMER_H_
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Include Header Files
 | |
|  ******************************************************************************/
 | |
| #include "nms_types.h"
 | |
| #include "map_hal.h"
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Type declarations
 | |
|  ******************************************************************************/
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Extern Function Declarations
 | |
|  ******************************************************************************/
 | |
| /**
 | |
|  * @brief   Initializes the HAL timer module.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerInit(void);
 | |
| 
 | |
| /**
 | |
|  * @brief   Retrieves the current value of the TIM counter register.
 | |
|  *
 | |
|  * @param   htim  Pointer to the TIM handle containing the TIM instance.
 | |
|  *
 | |
|  * @return  The 16-bit or 32-bit value of the timer counter register (TIMx_CNT).
 | |
|  */
 | |
| uint32 HalTimerGetCounter(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Sets a specific value to the TIM counter register.
 | |
|  *
 | |
|  * @param   htim        Pointer to the TIM handle containing the TIM instance.
 | |
|  * @param   counter_u32 Value to set in the TIM counter register.
 | |
|  */
 | |
| void HalTimerSetCounter(MapHalTimerModule_en timerModule_en, uint32 counter_u32);
 | |
| 
 | |
| /**
 | |
|  * @brief   Set the compare value for a given timer channel.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module.
 | |
|  * 			channel      	Timer channel (e.g., TIM_CHANNEL_1, TIM_CHANNEL_2).
 | |
|  *			compareValue 	Value to set in the compare register.
 | |
|  *
 | |
|  * @note    This function abstracts the STM32 HAL macro __HAL_TIM_SET_COMPARE.
 | |
|  */
 | |
| void HalTimerSetCompare(MapHalTimerModule_en timerModule_en, uint32 channel_u32, uint32 compareValue_32);
 | |
| 
 | |
| /**
 | |
|  * @brief   Get the Auto-Reload value of the specified timer module.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module selection from MapHalTimerModule_en.
 | |
|  *
 | |
|  * @return  The auto-reload value of the selected timer module.
 | |
|  *          Returns 0 if the timer module is invalid.
 | |
|  */
 | |
| uint32 HalTimerGetAutoReload(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Starts the specified timer module in encoder mode.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be started in encoder mode.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerEncoderStart(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Stops the specified timer module in encoder mode.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be stopped in encoder mode.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerEncoderStop(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Stops the specified timer module in PWM mode.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be stopped in encoder mode.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerPwmStart(MapHalTimerModule_en timerModule_en, uint32 Channel_u32);
 | |
| 
 | |
| /**
 | |
|  * @brief   Stops the specified timer module in PWM mode.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be stopped in encoder mode.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerPwmStop(MapHalTimerModule_en timerModule_en, uint32 Channel_u32);
 | |
| 
 | |
| /**
 | |
|  * @brief   Starts the specified timer module.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be started.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerStart(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Stops the specified timer module.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be stopped.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerStop(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| /**
 | |
|  * @brief   Updates the timer's prescaler and counter value based on the given period.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to configure.
 | |
|  * @param   period_u64      Timer refresh period in microseconds.
 | |
|  *                          The value is rounded up to the nearest resolution divider.
 | |
|  *
 | |
|  * @note    The period cannot be 0, as it would imply an immediate event.
 | |
|  *          Instead, execute the event directly or call the stop function manually.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerReloadUs(MapHalTimerModule_en timerModule_en, uint64 period_u64);
 | |
| 
 | |
| /**
 | |
|  * @brief   Retrieves the remaining time for the specified timer in microseconds.
 | |
|  *
 | |
|  * @param   timerModule_en      Timer module to query.
 | |
|  * @param   remainingTime_u64   Pointer to store the remaining time in microseconds.
 | |
|  *                              The value is rounded up to the nearest resolution divider.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerGetRemainingTimeUs(MapHalTimerModule_en timerModule_en, uint64 *remainingTime_u64);
 | |
| 
 | |
| /**
 | |
|  * @brief   Configures a callback function for the specified timer module.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module for which the callback is being set.
 | |
|  * @param   callback_pfn    Pointer to the callback function.
 | |
|  *
 | |
|  * @return  Error code: 0 if successful, nonzero otherwise.
 | |
|  */
 | |
| uint32 HalTimerConfigureCallback(MapHalTimerModule_en timerModule_en, void (*callback_pfn)(void));
 | |
| 
 | |
| /**
 | |
|  * @brief   Deinitializes the specified timer module, stopping all active timers.
 | |
|  *          This is useful for transitioning between application and bootloader.
 | |
|  *
 | |
|  * @param   timerModule_en  Timer module to be deinitialized.
 | |
|  */
 | |
| void HalTimerDeinit(MapHalTimerModule_en timerModule_en);
 | |
| 
 | |
| #endif /* __HAL_TIMER_H_ */
 |