2023-12-11 21:45:06 +08:00
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CH32V307VCT6 <EFBFBD> <EFBFBD> Դ <EFBFBD> ⣩ <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڹ ٷ <EFBFBD> SDK <EFBFBD> ӿ ڵ ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ <EFBFBD> <EFBFBD>
* Copyright ( c ) 2022 SEEKFREE <EFBFBD> <EFBFBD> <EFBFBD> ɿ Ƽ <EFBFBD>
*
2024-03-04 15:05:40 +08:00
* <EFBFBD> <EFBFBD> <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD> CH32V307VCT6 <EFBFBD> <EFBFBD> Դ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2023-12-11 21:45:06 +08:00
*
* CH32V307VCT6 <EFBFBD> <EFBFBD> Դ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2024-03-04 15:05:40 +08:00
* <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> GPL <EFBFBD> <EFBFBD> GNU General Public License <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> GNU ͨ <EFBFBD> ù <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֤ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> GPL <EFBFBD> ĵ <EFBFBD> 3 <EFBFBD> 棨 <EFBFBD> <EFBFBD> GPL3 .0 <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>
2023-12-11 21:45:06 +08:00
*
* <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> <EFBFBD> <EFBFBD> μ <EFBFBD> GPL
*
* <EFBFBD> <EFBFBD> Ӧ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> յ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ ʱ <EFBFBD> յ <EFBFBD> һ <EFBFBD> <EFBFBD> GPL <EFBFBD> ĸ <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û <EFBFBD> У <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> < https : //www.gnu.org/licenses/>
*
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ <EFBFBD> <EFBFBD> ʹ <EFBFBD> <EFBFBD> GPL3 .0 <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> libraries / doc <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> µ <EFBFBD> GPL3_permission_statement . txt <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֤ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> libraries <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> µ <EFBFBD> LICENSE <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> zf_driver_pit
* <EFBFBD> <EFBFBD> ˾ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɶ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɿ Ƽ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˾
* <EFBFBD> 汾 <EFBFBD> <EFBFBD> Ϣ <EFBFBD> 鿴 libraries / doc <EFBFBD> ļ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> version <EFBFBD> ļ <EFBFBD> <EFBFBD> 汾 ˵ <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> MounRiver Studio V1 .8 .1
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ƽ ̨ CH32V307VCT6
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> https : //seekfree.taobao.com/
*
* <EFBFBD> ļ <EFBFBD> ¼
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ע
2024-03-04 15:05:40 +08:00
* 2022 - 09 - 15 <EFBFBD> <EFBFBD> W first version
2023-12-11 21:45:06 +08:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "ch32v30x_rcc.h"
# include "zf_common_clock.h"
# include "zf_common_debug.h"
# include "zf_common_interrupt.h"
# include "zf_driver_timer.h"
# include "zf_driver_pit.h"
//-------------------------------------------------------------------------------------------------------------------
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PIT <20> ж<EFBFBD> ʹ <EFBFBD> <CAB9>
// <20> <> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> pit_n PIT <20> <> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ز<EFBFBD> <D8B2> <EFBFBD> void
// ʹ <> <CAB9> ʾ <EFBFBD> <CABE> pit_enable(TIM1_PIT);
//-------------------------------------------------------------------------------------------------------------------
void pit_enable ( pit_index_enum pit_n )
{
const uint32 irq_index [ ] =
{
TIM1_UP_IRQn ,
TIM2_IRQn ,
TIM3_IRQn ,
TIM4_IRQn ,
TIM5_IRQn ,
TIM6_IRQn ,
TIM7_IRQn ,
TIM8_UP_IRQn ,
TIM9_UP_IRQn ,
TIM10_UP_IRQn
} ;
interrupt_enable ( irq_index [ pit_n ] ) ; // ʹ <> <CAB9> <EFBFBD> ж<EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PIT <20> жϽ<D0B6> ֹ
// <20> <> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> pit_n PIT <20> <> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ز<EFBFBD> <D8B2> <EFBFBD> void
// ʹ <> <CAB9> ʾ <EFBFBD> <CABE> pit_disable(TIM1_PIT);
//-------------------------------------------------------------------------------------------------------------------
void pit_disable ( pit_index_enum pit_n )
{
const uint32 irq_index [ ] =
{
TIM1_UP_IRQn ,
TIM2_IRQn ,
TIM3_IRQn ,
TIM4_IRQn ,
TIM5_IRQn ,
TIM6_IRQn ,
TIM7_IRQn ,
TIM8_UP_IRQn ,
TIM9_UP_IRQn ,
TIM10_UP_IRQn
} ;
interrupt_disable ( irq_index [ pit_n ] ) ; // ʧ<> <CAA7> <EFBFBD> ж<EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> timer_ch <20> <> ʱ<EFBFBD> <CAB1> ͨ<EFBFBD> <CDA8>
2024-03-04 15:05:40 +08:00
// <20> <> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> us <20> <> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> (1-65535)
2023-12-11 21:45:06 +08:00
// <20> <> <EFBFBD> ز<EFBFBD> <D8B2> <EFBFBD> void
2024-03-04 15:05:40 +08:00
// <20> <> ע<EFBFBD> <D7A2> Ϣ pit_init(TIMER_1, 5); ʹ <> ö<EFBFBD> ʱ<EFBFBD> <CAB1> 1 <20> <> Ϊ 5ms һ <> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD>
2023-12-11 21:45:06 +08:00
//-------------------------------------------------------------------------------------------------------------------
void pit_init ( pit_index_enum pit_n , uint32 period )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˶<EFBFBD> <CBB6> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> ȥ<EFBFBD> 鿴<EFBFBD> <E9BFB4> <EFBFBD> <EFBFBD> ʲô<CAB2> ط<EFBFBD> <D8B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ĵ<EFBFBD> <C4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǽ<EFBFBD> <C7BC> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> ظ<EFBFBD> ʹ <EFBFBD> ö<EFBFBD> ʱ<EFBFBD> <CAB1>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> TIM1_PWM Ȼ<> <C8BB> <EFBFBD> ֳ<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> TIM1_PIT <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ÷<EFBFBD> <C3B7> Dz<EFBFBD> <C7B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
zf_assert ( timer_funciton_check ( ( timer_index_enum ) pit_n , TIMER_FUNCTION_TIMER ) ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> б <EFBFBD> <D0B1> <EFBFBD> <20> <> <EFBFBD> Ҿ͵<D2BE> <CDB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊʲô<CAB2> <C3B4> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> 0
zf_assert ( period ! = 0 ) ;
uint16 freq_div = ( period > > 15 ) ; // <20> <> <EFBFBD> <EFBFBD> Ԥ<EFBFBD> <D4A4> Ƶ
uint16 period_temp = ( period / ( freq_div + 1 ) ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> <EFBFBD> װ<EFBFBD> <D7B0> ֵ
timer_clock_enable ( pit_n ) ; // ʹ <> <CAB9> ʱ<EFBFBD> <CAB1>
TIM_TypeDef * tim_index = TIM1 ;
switch ( pit_n )
{
case TIM_1 : tim_index = ( ( TIM_TypeDef * ) TIM1_BASE ) ; break ;
case TIM_2 : tim_index = ( ( TIM_TypeDef * ) TIM2_BASE ) ; break ;
case TIM_3 : tim_index = ( ( TIM_TypeDef * ) TIM3_BASE ) ; break ;
case TIM_4 : tim_index = ( ( TIM_TypeDef * ) TIM4_BASE ) ; break ;
case TIM_5 : tim_index = ( ( TIM_TypeDef * ) TIM5_BASE ) ; break ;
case TIM_6 : tim_index = ( ( TIM_TypeDef * ) TIM6_BASE ) ; break ;
case TIM_7 : tim_index = ( ( TIM_TypeDef * ) TIM7_BASE ) ; break ;
case TIM_8 : tim_index = ( ( TIM_TypeDef * ) TIM8_BASE ) ; break ;
case TIM_9 : tim_index = ( ( TIM_TypeDef * ) TIM9_BASE ) ; break ;
case TIM_10 : tim_index = ( ( TIM_TypeDef * ) TIM10_BASE ) ; break ;
}
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure = { 0 } ;
TIM_TimeBaseStructure . TIM_Period = period_temp ;
TIM_TimeBaseStructure . TIM_Prescaler = freq_div ; // <20> <> Ƶֵ
TIM_TimeBaseStructure . TIM_ClockDivision = TIM_CKD_DIV1 ; // <20> <> <EFBFBD> <EFBFBD> ʱ<EFBFBD> ӷָ<D3B7> :TDTS = Tck_tim
2024-03-04 15:05:40 +08:00
TIM_TimeBaseStructure . TIM_CounterMode = TIM_CounterMode_Up ; // TIM <20> <> <EFBFBD> ϼ<EFBFBD> <CFBC> <EFBFBD> ģʽ
TIM_TimeBaseStructure . TIM_RepetitionCounter = 0 ; // <20> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ 0
TIM_TimeBaseInit ( tim_index , & TIM_TimeBaseStructure ) ; // <20> <> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> IJ<EFBFBD> <C4B2> <EFBFBD> <EFBFBD> <EFBFBD> ʼ <EFBFBD> <CABC> TIMx <20> <> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ
TIM_ITConfig ( tim_index , TIM_IT_Update , ENABLE ) ; // ʹ <> <CAB9> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> TIM <20> жϣ<D0B6> <CFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD>
2023-12-11 21:45:06 +08:00
TIM_ClearITPendingBit ( tim_index , TIM_IT_Update ) ;
const uint32 irq_index [ 10 ] =
{
TIM1_UP_IRQn ,
TIM2_IRQn ,
TIM3_IRQn ,
TIM4_IRQn ,
TIM5_IRQn ,
TIM6_IRQn ,
TIM7_IRQn ,
TIM8_UP_IRQn ,
TIM9_UP_IRQn ,
TIM10_UP_IRQn
} ;
2024-03-04 15:05:40 +08:00
interrupt_set_priority ( ( IRQn_Type ) irq_index [ ( uint8 ) pit_n ] , ( 1 < < 5 ) | 3 ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ж<EFBFBD> <D0B6> <EFBFBD> <EFBFBD> ȼ<EFBFBD>
2023-12-11 21:45:06 +08:00
interrupt_enable ( ( IRQn_Type ) irq_index [ pit_n ] ) ; // ʹ <> <CAB9> <EFBFBD> ж<EFBFBD>
TIM_Cmd ( tim_index , ENABLE ) ; // ʹ <> ܶ<EFBFBD> ʱ<EFBFBD> <CAB1>
}