hc32f460_timer4_cnt.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /*******************************************************************************
  2. * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
  3. *
  4. * This software component is licensed by HDSC under BSD 3-Clause license
  5. * (the "License"); You may not use this file except in compliance with the
  6. * License. You may obtain a copy of the License at:
  7. * opensource.org/licenses/BSD-3-Clause
  8. */
  9. /******************************************************************************/
  10. /** \file hc32f460_timer4_cnt.h
  11. **
  12. ** A detailed description is available at
  13. ** @link Timer4CntGroup Timer4CNT description @endlink
  14. **
  15. ** - 2018-11-02 CDT First version for Device Driver Library of Timer4CNT.
  16. **
  17. ******************************************************************************/
  18. #ifndef __HC32F460_TIMER4_CNT_H__
  19. #define __HC32F460_TIMER4_CNT_H__
  20. /*******************************************************************************
  21. * Include files
  22. ******************************************************************************/
  23. #include "hc32_common.h"
  24. #include "ddl_config.h"
  25. #if (DDL_TIMER4_CNT_ENABLE == DDL_ON)
  26. /* C binding of definitions if building with C++ compiler */
  27. #ifdef __cplusplus
  28. extern "C"
  29. {
  30. #endif
  31. /**
  32. *******************************************************************************
  33. ** \defgroup Timer4CntGroup Timer4 Counter(Timer4CNT)
  34. **
  35. ******************************************************************************/
  36. //@{
  37. /*******************************************************************************
  38. * Global type definitions ('typedef')
  39. ******************************************************************************/
  40. /**
  41. *******************************************************************************
  42. ** \brief Timer4 count mode enumeration
  43. **
  44. ******************************************************************************/
  45. typedef enum en_timer4_cnt_mode
  46. {
  47. Timer4CntSawtoothWave = 0u, ///< Timer4 count mode:sawtooth wave
  48. Timer4CntTriangularWave = 1u, ///< Timer4 count mode:triangular wave
  49. } en_timer4_cnt_mode_t;
  50. /**
  51. *******************************************************************************
  52. ** \brief CNT Clock Setting
  53. ******************************************************************************/
  54. /**
  55. *******************************************************************************
  56. ** \brief Timer4 CNT clock division enumeration
  57. **
  58. ******************************************************************************/
  59. typedef enum en_timer4_cnt_clk_div
  60. {
  61. Timer4CntPclkDiv1 = 0u, ///< Timer4 clock: PCLK
  62. Timer4CntPclkDiv2 = 1u, ///< Timer4 clock: PCLK/2
  63. Timer4CntPclkDiv4 = 2u, ///< Timer4 clock: PCLK/4
  64. Timer4CntPclkDiv8 = 3u, ///< Timer4 clock: PCLK/8
  65. Timer4CntPclkDiv16 = 4u, ///< Timer4 clock: PCLK/16
  66. Timer4CntPclkDiv32 = 5u, ///< Timer4 clock: PCLK/32
  67. Timer4CntPclkDiv64 = 6u, ///< Timer4 clock: PCLK/64
  68. Timer4CntPclkDiv128 = 7u, ///< Timer4 clock: PCLK/128
  69. Timer4CntPclkDiv256 = 8u, ///< Timer4 clock: PCLK/256
  70. Timer4CntPclkDiv512 = 9u, ///< Timer4 clock: PCLK/512
  71. Timer4CntPclkDiv1024 = 10u, ///< Timer4 clock: PCLK/1024
  72. } en_timer4_cnt_clk_div_t;
  73. /**
  74. *******************************************************************************
  75. ** \brief Timer4 CNT clock soucre selection enumeration
  76. **
  77. ******************************************************************************/
  78. typedef enum en_timer4_cnt_clk
  79. {
  80. Timer4CntPclk = 0u, ///< Uses the internal clock (PCLK) as CNT's count clock.
  81. Timer4CntExtclk = 1u, ///< Uses an external input clock (EXCK) as CNT's count clock.
  82. } en_timer4_cnt_clk_t;
  83. /**
  84. *******************************************************************************
  85. ** \brief Timer4 CNT interrupt selection enumeration
  86. **
  87. ******************************************************************************/
  88. typedef enum en_timer4_cnt_int
  89. {
  90. Timer4CntZeroMatchInt = (1ul << 8), ///< zero match interrupt
  91. Timer4CntPeakMatchInt = (1ul << 13), ///< peak match interrupt
  92. } en_timer4_cnt_int_t;
  93. /**
  94. *******************************************************************************
  95. ** \brief Timer4 CNT interrupt mask times enumeration
  96. **
  97. ******************************************************************************/
  98. typedef enum en_timer4_cnt_int_mask
  99. {
  100. Timer4CntIntMask0 = 0u, ///< CNT interrupt flag is always set(not masked) for every CNT count at "0x0000" or peak.
  101. Timer4CntIntMask1 = 1u, ///< CNT interrupt flag is set once for 2 every CNT counts at "0x0000" or peak (skiping 1 count).
  102. Timer4CntIntMask2 = 2u, ///< CNT interrupt flag is set once for 3 every CNT counts at "0x0000" or peak (skiping 2 count).
  103. Timer4CntIntMask3 = 3u, ///< CNT interrupt flag is set once for 4 every CNT counts at "0x0000" or peak (skiping 3 count).
  104. Timer4CntIntMask4 = 4u, ///< CNT interrupt flag is set once for 5 every CNT counts at "0x0000" or peak (skiping 4 count).
  105. Timer4CntIntMask5 = 5u, ///< CNT interrupt flag is set once for 6 every CNT counts at "0x0000" or peak (skiping 5 count).
  106. Timer4CntIntMask6 = 6u, ///< CNT interrupt flag is set once for 7 every CNT counts at "0x0000" or peak (skiping 6 count).
  107. Timer4CntIntMask7 = 7u, ///< CNT interrupt flag is set once for 8 every CNT counts at "0x0000" or peak (skiping 7 count).
  108. Timer4CntIntMask8 = 8u, ///< CNT interrupt flag is set once for 9 every CNT counts at "0x0000" or peak (skiping 8 count).
  109. Timer4CntIntMask9 = 9u, ///< CNT interrupt flag is set once for 10 every CNT counts at "0x0000" or peak (skiping 9 count).
  110. Timer4CntIntMask10 = 10u, ///< CNT interrupt flag is set once for 11 every CNT counts at "0x0000" or peak (skiping 10 count).
  111. Timer4CntIntMask11 = 11u, ///< CNT interrupt flag is set once for 12 every CNT counts at "0x0000" or peak (skiping 11 count).
  112. Timer4CntIntMask12 = 12u, ///< CNT interrupt flag is set once for 13 every CNT counts at "0x0000" or peak (skiping 12 count).
  113. Timer4CntIntMask13 = 13u, ///< CNT interrupt flag is set once for 14 every CNT counts at "0x0000" or peak (skiping 13 count).
  114. Timer4CntIntMask14 = 14u, ///< CNT interrupt flag is set once for 15 every CNT counts at "0x0000" or peak (skiping 14 count).
  115. Timer4CntIntMask15 = 15u, ///< CNT interrupt flag is set once for 16 every CNT counts at "0x0000" or peak (skiping 15 count).
  116. } en_timer4_cnt_int_mask_t;
  117. /**
  118. *******************************************************************************
  119. ** \brief Timer4 CNT initialization configuration
  120. **
  121. ******************************************************************************/
  122. typedef struct stc_timer4_cnt_init
  123. {
  124. uint16_t u16Cycle; ///< CNT cycle
  125. en_timer4_cnt_mode_t enCntMode; ///< CNT count mode and this parameter can be a value of @ref en_timer4_cnt_mode_t
  126. en_timer4_cnt_clk_t enClk; ///< CNT Count clock and this parameter can be a value of @ref en_timer4_cnt_clk_t
  127. en_timer4_cnt_clk_div_t enClkDiv; ///< CNT clock divide and this parameter can be a value of @ref en_timer4_cnt_clk_div_t
  128. en_functional_state_t enBufferCmd; ///< Disable: Disable buffer function; Enable:Enable buffer function
  129. en_functional_state_t enZeroIntCmd; ///< Disable: Disable zero match interrupt; Enable:zero match interrupt
  130. en_functional_state_t enPeakIntCmd; ///< Disable: Disable peak match interrupt; Enable:peak match interrupt
  131. en_timer4_cnt_int_mask_t enZeroIntMsk; ///< CNT zero interrupt mask times and this parameter can be a value of @ref en_timer4_cnt_int_mask_t
  132. en_timer4_cnt_int_mask_t enPeakIntMsk; ///< CNT peak interrupt mask times and this parameter can be a value of @ref en_timer4_cnt_int_mask_t
  133. } stc_timer4_cnt_init_t;
  134. /*******************************************************************************
  135. * Global pre-processor symbols/macros ('#define')
  136. ******************************************************************************/
  137. /*******************************************************************************
  138. * Global variable definitions ('extern')
  139. ******************************************************************************/
  140. /*******************************************************************************
  141. * Global function prototypes (definition in C source)
  142. ******************************************************************************/
  143. en_result_t TIMER4_CNT_Init(M4_TMR4_TypeDef *TMR4x,
  144. const stc_timer4_cnt_init_t *pstcInitCfg);
  145. en_result_t TIMER4_CNT_DeInit(M4_TMR4_TypeDef *TMR4x);
  146. en_result_t TIMER4_CNT_SetClock(M4_TMR4_TypeDef *TMR4x,
  147. en_timer4_cnt_clk_t enCntClk);
  148. en_timer4_cnt_clk_t TIMER4_CNT_GetClock(M4_TMR4_TypeDef *TMR4x);
  149. en_result_t TIMER4_CNT_SetClockDiv(M4_TMR4_TypeDef *TMR4x,
  150. en_timer4_cnt_clk_div_t enClkDiv);
  151. en_timer4_cnt_clk_div_t TIMER4_CNT_GetClockDiv(M4_TMR4_TypeDef *TMR4x);
  152. en_result_t TIMER4_CNT_SetMode(M4_TMR4_TypeDef *TMR4x,
  153. en_timer4_cnt_mode_t enMode);
  154. en_timer4_cnt_mode_t TIMER4_CNT_GetMode(M4_TMR4_TypeDef *TMR4x);
  155. en_result_t TIMER4_CNT_Start(M4_TMR4_TypeDef *TMR4x);
  156. en_result_t TIMER4_CNT_Stop(M4_TMR4_TypeDef *TMR4x);
  157. en_result_t TIMER4_CNT_IrqCmd(M4_TMR4_TypeDef *TMR4x,
  158. en_timer4_cnt_int_t enIntType,
  159. en_functional_state_t enCmd);
  160. en_flag_status_t TIMER4_CNT_GetIrqFlag(M4_TMR4_TypeDef *TMR4x,
  161. en_timer4_cnt_int_t enIntType);
  162. en_result_t TIMER4_CNT_ClearIrqFlag(M4_TMR4_TypeDef *TMR4x,
  163. en_timer4_cnt_int_t enIntType);
  164. en_result_t TIMER4_CNT_SetCycleVal(M4_TMR4_TypeDef *TMR4x, uint16_t u16Cycle);
  165. uint16_t TIMER4_CNT_GetCycleVal(const M4_TMR4_TypeDef *TMR4x);
  166. en_result_t TIMER4_CNT_ClearCountVal(M4_TMR4_TypeDef *TMR4x);
  167. en_result_t TIMER4_CNT_SetCountVal(M4_TMR4_TypeDef *TMR4x, uint16_t u16Count);
  168. uint16_t TIMER4_CNT_GetCountVal(const M4_TMR4_TypeDef *TMR4x);
  169. en_result_t TIMER4_CNT_SetIntMaskTimes(M4_TMR4_TypeDef *TMR4x,
  170. en_timer4_cnt_int_t enIntType,
  171. en_timer4_cnt_int_mask_t enMaskTimes);
  172. en_timer4_cnt_int_mask_t TIMER4_CNT_GetIntMaskTimes(M4_TMR4_TypeDef *TMR4x,
  173. en_timer4_cnt_int_t enIntType);
  174. //@} // Timer4CntGroup
  175. #ifdef __cplusplus
  176. }
  177. #endif
  178. #endif /* DDL_TIMER4_CNT_ENABLE */
  179. #endif /* __HC32F460_TIMER4_CNT_H__ */
  180. /*******************************************************************************
  181. * EOF (not truncated)
  182. ******************************************************************************/