104 lines
4.2 KiB
C
104 lines
4.2 KiB
C
#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 ;
|
||
}
|
||
}
|
||
|