246 lines
7.0 KiB
C
246 lines
7.0 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @file ciu32l051_std_tim.c
|
|||
|
* @author MCU Ecosystem Development Team
|
|||
|
* @brief TIM STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* ʵ<EFBFBD><EFBFBD>TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚϵȹ<EFBFBD><EFBFBD>ܳ<EFBFBD>ʼ<EFBFBD><EFBFBD>API<EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
* @attention
|
|||
|
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup CIU32L051_STD_Driver
|
|||
|
* @{
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @addtogroup TIM
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/*------------------------------------------includes--------------------------------------------*/
|
|||
|
#include "ciu32l051_std.h"
|
|||
|
|
|||
|
#ifdef STD_TIM_PERIPHERAL_USED
|
|||
|
|
|||
|
/*-------------------------------------------functions------------------------------------------*/
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup TIM_External_Functions
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @brief TIM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @param timx TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param pvd_init_param TIM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>DIRλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>Ϊֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>Ҫֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD>
|
|||
|
* @retval std_status_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>APIִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_init(TIM_t *timx, std_tim_basic_init_t *pvd_init_param)
|
|||
|
{
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
std_tim_set_autoreload(timx, pvd_init_param->period);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽѡ<CABD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
/* <20>ļ<DEB8><C4BC><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DIR<49><52><EFBFBD><EFBFBD>λ */
|
|||
|
MODIFY_REG(timx->CR1, (TIM_CR1_ARPE | TIM_CR1_CMS), pvd_init_param->auto_reload_preload);
|
|||
|
|
|||
|
/* ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
std_tim_set_counter_mode(timx, pvd_init_param->counter_mode);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӷ<EFBFBD>Ƶ */
|
|||
|
std_tim_set_clock_div(timx, pvd_init_param->clock_div);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶֵ */
|
|||
|
std_tim_set_psc(timx, pvd_init_param->prescaler);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ԤԤ<D4A4><D4A4>Ƶֵ */
|
|||
|
std_tim_set_sw_trig_event(timx, TIM_EVENT_SRC_UPDATE);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־ */
|
|||
|
std_tim_clear_flag(timx, TIM_FLAG_ALL);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief TIMȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @param timx TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_deinit(TIM_t *timx)
|
|||
|
{
|
|||
|
std_tim_disable(timx);
|
|||
|
|
|||
|
/* <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> */
|
|||
|
if(TIM3 == timx)
|
|||
|
{
|
|||
|
std_rcc_apb1_reset(RCC_PERIPH_RESET_TIM3);
|
|||
|
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_TIM3);
|
|||
|
}
|
|||
|
else if(TIM4 == timx)
|
|||
|
{
|
|||
|
std_rcc_apb1_reset(RCC_PERIPH_RESET_TIM4);
|
|||
|
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_TIM4);
|
|||
|
}
|
|||
|
else if(TIM5 == timx)
|
|||
|
{
|
|||
|
std_rcc_apb1_reset(RCC_PERIPH_RESET_TIM5);
|
|||
|
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_TIM5);
|
|||
|
}
|
|||
|
else if(TIM8 == timx)
|
|||
|
{
|
|||
|
std_rcc_apb1_reset(RCC_PERIPH_RESET_TIM8);
|
|||
|
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_TIM8);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
;/* <20><><EFBFBD><EFBFBD><DEB2><EFBFBD> */
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>std_tim_basic_init_t<EFBFBD>ṹ<EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ
|
|||
|
* @param tim_init_struct TIM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_struct_init(std_tim_basic_init_t *tim_init_struct)
|
|||
|
{
|
|||
|
tim_init_struct->prescaler = 0x00U;
|
|||
|
tim_init_struct->counter_mode = TIM_COUNTER_MODE_UP;
|
|||
|
tim_init_struct->period = 0xFFFFU;
|
|||
|
tim_init_struct->clock_div = TIM_CLOCK_DTS_DIV1;
|
|||
|
tim_init_struct->auto_reload_preload = TIM_AUTORELOAD_PRE_DISABLE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TIM<EFBFBD><EFBFBD><EFBFBD>벶<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>
|
|||
|
* @param timx TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param input_config TIM <EFBFBD><EFBFBD><EFBFBD>벶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<EFBFBD><EFBFBD>
|
|||
|
* @param channel_id TIM ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg TIM_CHANNEL_1
|
|||
|
* @arg TIM_CHANNEL_2
|
|||
|
* @arg TIM_CHANNEL_3
|
|||
|
* @arg TIM_CHANNEL_4
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_input_capture_init(TIM_t *timx, std_tim_input_capture_init_t *input_config, uint32_t channel_id)
|
|||
|
{
|
|||
|
/* <20><>ֹCCxEλ */
|
|||
|
std_tim_ccx_channel_disable(timx, channel_id);
|
|||
|
|
|||
|
/* ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
std_tim_set_icmode(timx, channel_id, input_config->input_capture_sel);
|
|||
|
std_tim_set_icfilter(timx, channel_id, input_config->input_capture_filter);
|
|||
|
|
|||
|
/* ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
std_tim_set_input_pol(timx, channel_id, input_config->input_capture_pol);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>TIM<49><4D><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> */
|
|||
|
std_tim_set_channel_icxpsc(timx, channel_id, input_config->input_capture_prescaler);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>std_tim_input_capture_init_t<EFBFBD>ṹ<EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ
|
|||
|
* @param input_init_struct TIM<EFBFBD><EFBFBD><EFBFBD>벶<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_input_capture_struct_init(std_tim_input_capture_init_t *input_init_struct)
|
|||
|
{
|
|||
|
input_init_struct->input_capture_pol = TIM_INPUT_POL_RISING;
|
|||
|
input_init_struct->input_capture_sel = TIM_INPUT_CAPTURE_SEL_DIRECTTI;
|
|||
|
input_init_struct->input_capture_prescaler = TIM_INPUT_CAPTURE_PSC_DIV1;
|
|||
|
input_init_struct->input_capture_filter = 0x00U;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TIM<EFBFBD>Ƚ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param timx TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param output_config TIM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<EFBFBD><EFBFBD>
|
|||
|
* @param channel_id TIM ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg TIM_CHANNEL_1
|
|||
|
* @arg TIM_CHANNEL_2
|
|||
|
* @arg TIM_CHANNEL_3
|
|||
|
* @arg TIM_CHANNEL_4
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_output_compare_init(TIM_t *timx, std_tim_output_compare_init_t *output_config, uint32_t channel_id)
|
|||
|
{
|
|||
|
/* <20><>ֹCCxE<78><45>CCxNEλ */
|
|||
|
std_tim_ccx_channel_disable(timx, channel_id);
|
|||
|
|
|||
|
/* ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>ģʽ */
|
|||
|
std_tim_set_ocmode(timx, channel_id, output_config->output_compare_mode);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚϼ<C8BD><CFBC><EFBFBD> */
|
|||
|
std_tim_set_output_pol(timx, channel_id, output_config->output_pol);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>Ԥװ<D4A4><D7B0>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> */
|
|||
|
if (output_config->output_preloadccx == TIM_OUTPUT_PRECC_ENABLE)
|
|||
|
{
|
|||
|
std_tim_preloadccx_channel_enable(timx, channel_id);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
std_tim_preloadccx_channel_disable(timx, channel_id);
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> */
|
|||
|
if (output_config->output_fast_mode == TIM_OUTPUT_FAST_ENABLE)
|
|||
|
{
|
|||
|
std_tim_fastmode_channel_enable(timx, channel_id);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
std_tim_fastmode_channel_disable(timx, channel_id);
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD>ñȽ<C3B1>ƥ<EFBFBD><C6A5>ֵ */
|
|||
|
std_tim_set_ccx_value(timx, channel_id, output_config->pulse);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>std_tim_output_compare_init_t<EFBFBD>ṹ<EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ
|
|||
|
* @param output_init_struct TIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_tim_output_compare_struct_init(std_tim_output_compare_init_t *output_init_struct)
|
|||
|
{
|
|||
|
output_init_struct->output_compare_mode = TIM_OUTPUT_MODE_FROZEN;
|
|||
|
output_init_struct->pulse = 0x00U;
|
|||
|
output_init_struct->output_pol = TIM_OUTPUT_POL_HIGH;
|
|||
|
output_init_struct->output_preloadccx = TIM_OUTPUT_PRECC_DISABLE;
|
|||
|
output_init_struct->output_fast_mode = TIM_OUTPUT_FAST_DISABLE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
#endif /* STD_TIM_PERIPHERAL_USED */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|