Files
CHJ/user/MCU/lhl_btim.c

96 lines
3.6 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
/*==================================================================================*/
/*BTimer0 */
/*==================================================================================*/
/**------------------------------------------------------------------------
2026-03-20 21:19:04 +08:00
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @note ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param btim_period : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(btim_period=t*syscklock)
2026-03-20 21:16:58 +08:00
**/
void BTIM0_Init(uint16_t btim_period)
{
BTIM_Base_InitTypeDef BTIM_InitStructure;
BTIM_InitStructure.MDIS = ENABLE; // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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<52><30>ӦTIM5_IRQ
}
/**------------------------------------------------------------------------
2026-03-20 21:19:04 +08:00
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param btim_period : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(btim_period=t*syscklock)
* @example: StartBtimer0(syscklock); //1s
2026-03-20 21:16:58 +08:00
**/
void StartBtimer0(uint16_t btim_period)
{
BTIM0_Init(btim_period);
BTIM->TCTRL_0 |= BTIM_TCTRL_TEN_Msk; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> LHL_BTIM_Start(BTIMER_0,btim_period,0);
// NVIC_EnableIRQ(TIM5_IRQn); // BTIMER0<52><30>Ӧ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; // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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<52><31>ӦTIM6_IRQ
}
2026-03-20 21:19:04 +08:00
2026-03-20 21:16:58 +08:00
void StartBtimer1(uint16_t btim_period)
{
BTIM1_Init(btim_period);
BTIM->TCTRL_1 |= BTIM_TCTRL_TEN_Msk; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> LHL_BTIM_Start(BTIMER_0,btim_period,0);
// NVIC_EnableIRQ(TIM6_IRQn); // BTIMER1<52><31>ӦTIM6_IRQ
}
void StopBtimer1(void)
{
// LHL_BTIM_Stop(BTIMER_1);
BTIM->TCTRL_1 &= ~BTIM_TCTRL_TEN_Msk;
}
/*-=====================================================================================================
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>жϻص<CFBB>
-=====================================================================================================*/
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);}
}
2026-03-20 21:19:04 +08:00
// BTIMER0<52><30>ӦTIM5_IRQ
2026-03-20 21:16:58 +08:00
void TIM5_IRQHandler(void)
{
if (btim0_irq_callback != NULL) btim0_irq_callback();// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
LHL_BTIM_Stop(BTIMER_0); // ֹͣBTIM
LHL_BTIM_ClearPending(BTIMER_0); // <20><><EFBFBD>жϱ<D0B6>־
}
2026-03-20 21:19:04 +08:00
//BTIMER1<52><31>ӦTIM6_IRQ
2026-03-20 21:16:58 +08:00
void TIM6_IRQHandler(void)
{
if (btim1_irq_callback != NULL) btim1_irq_callback();// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
LHL_BTIM_Stop(BTIMER_1); // ֹͣBTIM
LHL_BTIM_ClearPending(BTIMER_1); // <20><><EFBFBD>жϱ<D0B6>־
}