stm32_ota/ABM开发板(APP源码)/YcOS版本/APPV3.0/USER/USER_TIMER/user_timer.c
2024-12-17 20:03:43 +08:00

104 lines
4.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "user_timer.h"
#include "ycos.h"
/********************************************************************************
* @file user_timer.c
* @author 晏诚科技 Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief timer封装
******************************************************************************
* @attention:
*******************************************************************************/
/*********应用层外部调用文件**************/
/*****************************************/
/*****************************************
*驱动内部使用常变量
****************************************/
volatile uint32_t systickCount = 0 ;
/**************************************************************************************************
* 名 称: void YcOSTimerSchedulerInit(TIMERFP pLowPrioTaskCallback, TIMERFP pHighPrioTaskCallback)
* 功 能: 使用TIMER5作为YcOS系统任务轮询时的调度器定时器负责轮询处理需要轮询的任务。
* 入口参数:
* @param1 pLowPrioTaskCallback 低优先级任务调度器的定时器中断回调函数这里我们设置中断回调函数为YcOSLowPrioSchedulerCallback
* @param2 pHighPrioTaskCallback 高优先级任务调度器的定时器中断回调函数这里我们设置中断回调函数为YcOSHighPrioSchedulerCallback
* 注 意: 定时器10ms中断一次。中断优先级设置为最低保证任何其他中断都能抢占因为所有任务都会在该定时器中断中运行。
***************************************************************************************************/
void YcOSTimerSchedulerInit(TIMERFP pLowPrioTaskCallback, TIMERFP pHighPrioTaskCallback)
{
Timerx_Init(TIMER5, 1000/YCOSTICK_RATE_HZ, INT_RANK_15, DISABLE) ; //10ms中断一次中断优先级设置最低且整个系统中无其他同优先级中断
Timer_RegHookCallback(TIMER5, pLowPrioTaskCallback) ;
Timerx_Init(TIMER4, 1000/YCOSTICK_RATE_HZ, INT_RANK_14, DISABLE) ; //10ms中断一次中断优先级设置次最低且整个系统中无其他同优先级中断
Timer_RegHookCallback(TIMER4, pHighPrioTaskCallback) ;
}
/**************************************************************************************************
* 名 称: void YcOSSchedulerStart(void)
* 功 能: 开启YcOS轮询任务调度器定时器
***************************************************************************************************/
void YcOSSchedulerStart(void)
{
Timerx_Open(TIMER5) ;
Timerx_Open(TIMER4) ;
}
/**************************************************************************************************
* 名 称: void YcOSSchedulerClose(void)
* 功 能: 关闭YcOS轮询任务调度器定时器
***************************************************************************************************/
void YcOSSchedulerClose(void)
{
Timerx_Close(TIMER5) ;
Timerx_Close(TIMER4) ;
}
/**************************************************************************************************
* 名 称: void Calculate_Timer_Init(void)
* 功 能: 使用TIMER7作为节拍计数器100ms中断一次
***************************************************************************************************/
void Calculate_Timer_Init(void)
{
Timerx_Init(TIMER7, 100, INT_RANK_12, DISABLE) ; //100ms中断一次
Timer_RegHookCallback(TIMER7, Calculate_Run_Time) ;
}
/**************************************************************************************************
* 名 称: void Calculate_Start(void)
* 功 能: 开启计时器
***************************************************************************************************/
void Calculate_Start(void)
{
Timerx_Open(TIMER7) ;
systickCount = 0 ;
}
/**************************************************************************************************
* 名 称: uint32_t Calculate_Over(void)
* 功 能: 结束节拍计时器并返回节拍数
***************************************************************************************************/
uint32_t Calculate_Over(void)
{
Timerx_Close(TIMER7) ;
return systickCount ;
}
/**************************************************************************************************
* 名 称: void Calculate_Run_Time(void)
* 功 能: 节拍计时器timer7中断回调函数
***************************************************************************************************/
void Calculate_Run_Time(void)
{
systickCount++ ;
if( systickCount >= 0xFFFFFFFF) //systickCount溢出
{
systickCount = 0 ;
}
}