96 lines
3.6 KiB
C
96 lines
3.6 KiB
C
#include "../main/SystemInclude.h"
|
|
|
|
/*==================================================================================*/
|
|
/*BTimer0 */
|
|
/*==================================================================================*/
|
|
/**------------------------------------------------------------------------
|
|
* @brief 基础定时器初始化
|
|
* @note 只做初始化,不带启动
|
|
* @param btim_period : 计算方法(btim_period=t*syscklock)
|
|
**/
|
|
void BTIM0_Init(uint16_t btim_period)
|
|
{
|
|
BTIM_Base_InitTypeDef BTIM_InitStructure;
|
|
|
|
BTIM_InitStructure.MDIS = ENABLE; // 启用基础定时器
|
|
BTIM_InitStructure.FreezingMode = DISABLE;
|
|
BTIM_InitStructure.ChainedMode = DISABLE;
|
|
LHL_BTIM_Base_Init(BTIM, &BTIM_InitStructure);
|
|
LHL_BTIM_SetPeriod(BTIMER_0,btim_period );
|
|
LHL_BTIM_ITConfig(BTIMER_0, ENABLE);
|
|
// NVIC_EnableIRQ(TIM5_IRQn); // BTIMER0对应TIM5_IRQ
|
|
}
|
|
|
|
/**------------------------------------------------------------------------
|
|
* @brief 基础定时器
|
|
* @note 单独调用直接启用
|
|
* @param btim_period : 计算方法(btim_period=t*syscklock)
|
|
* @example: StartBtimer0(syscklock); //1s
|
|
**/
|
|
void StartBtimer0(uint16_t btim_period)
|
|
{
|
|
BTIM0_Init(btim_period);
|
|
BTIM->TCTRL_0 |= BTIM_TCTRL_TEN_Msk; //开启定时器 LHL_BTIM_Start(BTIMER_0,btim_period,0);
|
|
// NVIC_EnableIRQ(TIM5_IRQn); // BTIMER0对应TIM5_IRQ
|
|
}
|
|
void StopBtimer0(void)
|
|
{
|
|
// LHL_BTIM_Stop(BTIMER_0);
|
|
BTIM->TCTRL_0 &= ~BTIM_TCTRL_TEN_Msk;
|
|
}
|
|
/*==================================================================================*/
|
|
/*BTimer1 */
|
|
/*==================================================================================*/
|
|
void BTIM1_Init(uint16_t btim_period)
|
|
{
|
|
BTIM_Base_InitTypeDef BTIM_InitStructure;
|
|
|
|
BTIM_InitStructure.MDIS = ENABLE; // 启用基础定时器
|
|
BTIM_InitStructure.FreezingMode = DISABLE;
|
|
BTIM_InitStructure.ChainedMode = DISABLE;
|
|
LHL_BTIM_Base_Init(BTIM, &BTIM_InitStructure);
|
|
LHL_BTIM_SetPeriod(BTIMER_1,btim_period );
|
|
LHL_BTIM_ITConfig(BTIMER_1, ENABLE);
|
|
// NVIC_EnableIRQ(TIM6_IRQn); // BTIMER1对应TIM6_IRQ
|
|
}
|
|
|
|
void StartBtimer1(uint16_t btim_period)
|
|
{
|
|
BTIM1_Init(btim_period);
|
|
BTIM->TCTRL_1 |= BTIM_TCTRL_TEN_Msk; //开启定时器 LHL_BTIM_Start(BTIMER_0,btim_period,0);
|
|
// NVIC_EnableIRQ(TIM6_IRQn); // BTIMER1对应TIM6_IRQ
|
|
}
|
|
void StopBtimer1(void)
|
|
{
|
|
// LHL_BTIM_Stop(BTIMER_1);
|
|
BTIM->TCTRL_1 &= ~BTIM_TCTRL_TEN_Msk;
|
|
}
|
|
|
|
/*-=====================================================================================================
|
|
//定时器中断回调
|
|
-=====================================================================================================*/
|
|
|
|
static btimer_irq_callback_t btim0_irq_callback ,btim1_irq_callback ;
|
|
void Btimer_register_irq_callback(BTIM_ID_t timer, btimer_irq_callback_t btim_irq_callback)
|
|
{
|
|
if(timer == BTIMER_0) {btim0_irq_callback = btim_irq_callback; LHL_BTIM_ClearPending(BTIMER_0);NVIC_EnableIRQ(TIM5_IRQn);}
|
|
else if(timer == BTIMER_1) {btim1_irq_callback = btim_irq_callback; LHL_BTIM_ClearPending(BTIMER_1);NVIC_EnableIRQ(TIM6_IRQn);}
|
|
}
|
|
|
|
// BTIMER0对应TIM5_IRQ
|
|
void TIM5_IRQHandler(void)
|
|
{
|
|
if (btim0_irq_callback != NULL) btim0_irq_callback();// 调用用户注册的回调函数
|
|
|
|
LHL_BTIM_Stop(BTIMER_0); // 停止BTIM
|
|
LHL_BTIM_ClearPending(BTIMER_0); // 清中断标志
|
|
}
|
|
|
|
//BTIMER1对应TIM6_IRQ
|
|
void TIM6_IRQHandler(void)
|
|
{
|
|
if (btim1_irq_callback != NULL) btim1_irq_callback();// 调用用户注册的回调函数
|
|
LHL_BTIM_Stop(BTIMER_1); // 停止BTIM
|
|
LHL_BTIM_ClearPending(BTIMER_1); // 清中断标志
|
|
}
|