123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- #include "gd32f30x_ctc.h"
- #define CTC_FLAG_MASK ((uint32_t)0x00000700U)
- #define CTC_TRIMVALUE_OFFSET ((uint32_t)8U)
- #define CTC_TRIM_VALUE_OFFSET ((uint32_t)8U)
- #define CTC_REFCAP_OFFSET ((uint32_t)16U)
- #define CTC_LIMIT_VALUE_OFFSET ((uint32_t)16U)
- void ctc_deinit(void)
- {
-
- rcu_periph_reset_enable(RCU_CTCRST);
- rcu_periph_reset_disable(RCU_CTCRST);
- }
- void ctc_counter_enable(void)
- {
- CTC_CTL0 |= (uint32_t)CTC_CTL0_CNTEN;
- }
- void ctc_counter_disable(void)
- {
- CTC_CTL0 &= (uint32_t)(~CTC_CTL0_CNTEN);
- }
- void ctc_irc48m_trim_value_config(uint8_t trim_value)
- {
-
- CTC_CTL0 &= (~(uint32_t)CTC_CTL0_TRIMVALUE);
-
- CTC_CTL0 |= ((uint32_t)trim_value << CTC_TRIM_VALUE_OFFSET);
- }
- void ctc_software_refsource_pulse_generate(void)
- {
- CTC_CTL0 |= (uint32_t)CTC_CTL0_SWREFPUL;
- }
- void ctc_hardware_trim_mode_config(uint32_t hardmode)
- {
- CTC_CTL0 &= (uint32_t)(~CTC_CTL0_AUTOTRIM);
- CTC_CTL0 |= (uint32_t)hardmode;
- }
- void ctc_refsource_polarity_config(uint32_t polarity)
- {
- CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPOL);
- CTC_CTL1 |= (uint32_t)polarity;
- }
- void ctc_refsource_signal_select(uint32_t refs)
- {
- CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFSEL);
- CTC_CTL1 |= (uint32_t)refs;
- }
- void ctc_refsource_prescaler_config(uint32_t prescaler)
- {
- CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPSC);
- CTC_CTL1 |= (uint32_t)prescaler;
- }
- void ctc_clock_limit_value_config(uint8_t limit_value)
- {
- CTC_CTL1 &= (uint32_t)(~CTC_CTL1_CKLIM);
- CTC_CTL1 |= (uint32_t)((uint32_t)limit_value << CTC_LIMIT_VALUE_OFFSET);
- }
- void ctc_counter_reload_value_config(uint16_t reload_value)
- {
- CTC_CTL1 &= (uint32_t)(~CTC_CTL1_RLVALUE);
- CTC_CTL1 |= (uint32_t)reload_value;
- }
- uint16_t ctc_counter_capture_value_read(void)
- {
- uint16_t capture_value = 0U;
- capture_value = (uint16_t)((CTC_STAT & CTC_STAT_REFCAP)>> CTC_REFCAP_OFFSET);
- return (capture_value);
- }
- FlagStatus ctc_counter_direction_read(void)
- {
- if(RESET != (CTC_STAT & CTC_STAT_REFDIR)){
- return SET;
- }else{
- return RESET;
- }
- }
- uint16_t ctc_counter_reload_value_read(void)
- {
- uint16_t reload_value = 0U;
- reload_value = (uint16_t)(CTC_CTL1 & CTC_CTL1_RLVALUE);
- return (reload_value);
- }
- uint8_t ctc_irc48m_trim_value_read(void)
- {
- uint8_t trim_value = 0U;
- trim_value = (uint8_t)((CTC_CTL0 & CTC_CTL0_TRIMVALUE) >> CTC_TRIMVALUE_OFFSET);
- return (trim_value);
- }
- FlagStatus ctc_flag_get(uint32_t flag)
- {
- if(RESET != (CTC_STAT & flag)){
- return SET;
- }else{
- return RESET;
- }
- }
- void ctc_flag_clear(uint32_t flag)
- {
- if(RESET != (flag & CTC_FLAG_MASK)){
- CTC_INTC |= CTC_INTC_ERRIC;
- }else{
- CTC_INTC |= flag;
- }
- }
- void ctc_interrupt_enable(uint32_t interrupt)
- {
- CTC_CTL0 |= (uint32_t)interrupt;
- }
- void ctc_interrupt_disable(uint32_t interrupt)
- {
- CTC_CTL0 &= (uint32_t)(~interrupt);
- }
- FlagStatus ctc_interrupt_flag_get(uint32_t int_flag)
- {
- uint32_t interrupt_flag = 0U, intenable = 0U;
-
-
- if(RESET != (int_flag & CTC_FLAG_MASK)){
- intenable = CTC_CTL0 & CTC_CTL0_ERRIE;
- }else{
- intenable = CTC_CTL0 & int_flag;
- }
-
-
- interrupt_flag = CTC_STAT & int_flag;
- if(interrupt_flag && intenable){
- return SET;
- }else{
- return RESET;
- }
- }
-
- void ctc_interrupt_flag_clear(uint32_t int_flag)
- {
- if(RESET != (int_flag & CTC_FLAG_MASK)){
- CTC_INTC |= CTC_INTC_ERRIC;
- }else{
- CTC_INTC |= int_flag;
- }
- }
|