pca.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. /******************************************************************************
  2. * Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
  3. *
  4. * This software is owned and published by:
  5. * Huada Semiconductor Co.,Ltd ("HDSC").
  6. *
  7. * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
  8. * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
  9. *
  10. * This software contains source code for use with HDSC
  11. * components. This software is licensed by HDSC to be adapted only
  12. * for use in systems utilizing HDSC components. HDSC shall not be
  13. * responsible for misuse or illegal use of this software for devices not
  14. * supported herein. HDSC is providing this software "AS IS" and will
  15. * not be responsible for issues arising from incorrect user implementation
  16. * of the software.
  17. *
  18. * Disclaimer:
  19. * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
  20. * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
  21. * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
  22. * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
  23. * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
  24. * WARRANTY OF NONINFRINGEMENT.
  25. * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
  26. * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
  27. * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
  28. * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
  29. * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
  30. * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
  31. * SAVINGS OR PROFITS,
  32. * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33. * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
  34. * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
  35. * FROM, THE SOFTWARE.
  36. *
  37. * This software may be replicated in part or whole for the licensed use,
  38. * with the restriction that this Disclaimer and Copyright notice must be
  39. * included with each copy of this software, whether used in part or whole,
  40. * at all times.
  41. */
  42. /*****************************************************************************/
  43. /** \file pca.h
  44. **
  45. ** PCA(可编程计数阵列)数据结构及API声明
  46. **
  47. **
  48. ** History:
  49. ** - 2017-04-15 Husj First version
  50. **
  51. *****************************************************************************/
  52. #ifndef __PCA_H__
  53. #define __PCA_H__
  54. /*****************************************************************************
  55. * Include files
  56. *****************************************************************************/
  57. #include "ddl.h"
  58. #include "interrupts_hc32l136.h"
  59. #ifdef __cplusplus
  60. extern "C"
  61. {
  62. #endif
  63. /**
  64. ******************************************************************************
  65. ** \defgroup PcaGroup Programmable Counter Array (PCA)
  66. **
  67. ******************************************************************************/
  68. //@{
  69. /******************************************************************************/
  70. /* Global pre-processor symbols/macros ('#define') */
  71. /******************************************************************************/
  72. /******************************************************************************
  73. * Global type definitions
  74. ******************************************************************************/
  75. /**
  76. ******************************************************************************
  77. ** \brief PCA 模块选择数据类型重定义
  78. *****************************************************************************/
  79. typedef enum en_pca_module
  80. {
  81. Module0 = 0u, ///< 模块0
  82. Module1 = 1u, ///< 模块1
  83. Module2 = 2u, ///< 模块2
  84. Module3 = 3u, ///< 模块3
  85. Module4 = 4u, ///< 模块4
  86. }en_pca_module_t;
  87. /**
  88. ******************************************************************************
  89. ** \brief PCA 计数启/停控制数据类型重定义 (CR)
  90. *****************************************************************************/
  91. typedef enum en_pca_start
  92. {
  93. CRStop = 0u, ///< 停止计数
  94. CRStart = 1u, ///< 开始计数
  95. }en_pca_start_t;
  96. /**
  97. ******************************************************************************
  98. ** \brief PCA IDLE 模式下启/停控制数据类型重定义 (CIDL)
  99. *****************************************************************************/
  100. typedef enum en_pca_cidl
  101. {
  102. IdleGoOn = 0u, ///< 休眠模式下 PCA继续工作
  103. IdleStop = 1u, ///< 休眠模式下 PCA停止工作
  104. }en_pca_cidl_t;
  105. /**
  106. ******************************************************************************
  107. ** \brief PCA 模块4 WDT功能控制数据类型重定义 (WDTE)
  108. *****************************************************************************/
  109. typedef enum en_pca_wdte
  110. {
  111. PCAWDTDisable = 0u, ///< 关闭 PCA模块4 WDT功能
  112. PCAWDTEnable = 1u, ///< 启动 PCA模块4 WDT功能
  113. }en_pca_wdte_t;
  114. /**
  115. ******************************************************************************
  116. ** \brief PCA 时钟分频及时钟源选择功能数据类型重定义 (CPS)
  117. *****************************************************************************/
  118. typedef enum en_pca_clksel
  119. {
  120. PCAPCLKDiv32 = 0u, ///< PCLK/32
  121. PCAPCLKDiv16 = 1u, ///< PCLK/16
  122. PCAPCLKDiv8 = 2u, ///< PCLK/8
  123. PCAPCLKDiv4 = 3u, ///< PCLK/4
  124. PCAPCLKDiv2 = 4u, ///< PCLK/2
  125. PCATimer0Over = 5u, ///< timer0 overflow
  126. PCATimer1Over = 6u, ///< timer1 overflow
  127. PCAECI = 7u, ///< ECI 外部时钟,时钟PCLK四分频采样
  128. }en_pca_clksel_t;
  129. /**
  130. ******************************************************************************
  131. ** \brief PCA 允许比较器功能控制数据类型重定义 (ECOM)
  132. *****************************************************************************/
  133. typedef enum en_pca_ecom
  134. {
  135. ECOMDisable = 0u, ///< 禁止比较器功能
  136. ECOMEnable = 1u, ///< 允许比较器功能
  137. }en_pca_ecom_t;
  138. /**
  139. ******************************************************************************
  140. ** \brief PCA 正沿捕获控制位数据类型重定义 (CAPP)
  141. *****************************************************************************/
  142. typedef enum en_pca_capp
  143. {
  144. CAPPDisable = 0u, ///< 禁止上升沿捕获
  145. CAPPEnable = 1u, ///< 允许上升沿捕获
  146. }en_pca_capp_t;
  147. /**
  148. ******************************************************************************
  149. ** \brief PCA 负沿捕获控制位数据类型重定义 (CAPN)
  150. *****************************************************************************/
  151. typedef enum en_pca_capn
  152. {
  153. CAPNDisable = 0u, ///< 禁止下降沿捕获
  154. CAPNEnable = 1u, ///< 允许下降沿捕获
  155. }en_pca_capn_t;
  156. /**
  157. ******************************************************************************
  158. ** \brief PCA 匹配控制位数据类型重定义 (MAT)
  159. *****************************************************************************/
  160. typedef enum en_pca_mat
  161. {
  162. MATDisable = 0u, ///< 禁止匹配
  163. MATEnable = 1u, ///< 允许匹配
  164. }en_pca_mat_t;
  165. /**
  166. ******************************************************************************
  167. ** \brief PCA 翻转控制位数据类型重定义 (TOG)
  168. *****************************************************************************/
  169. typedef enum en_pca_tog
  170. {
  171. TOGDisable = 0u, ///< 禁止翻转功能
  172. TOGEnable = 1u, ///< 允许翻转功能
  173. }en_pca_tog_t;
  174. /**
  175. ******************************************************************************
  176. ** \brief PCA 8bit脉宽调制控制数据类型重定义 (8bitPWM)
  177. *****************************************************************************/
  178. typedef enum en_pca_pwm_8_bit
  179. {
  180. PCA8bitPWMDisable = 0u, ///< 禁止 PWM功能
  181. PCA8bitPWMEnable = 1u, ///< 允许CCPx引脚作为PWM输出
  182. }en_pca_8bit_pwm_t;
  183. /**
  184. ******************************************************************************
  185. ** \brief PCA 16bit脉宽调制控制数据类型重定义 (16bitPWM)
  186. *****************************************************************************/
  187. typedef enum en_pca_pwm_16_bit
  188. {
  189. PCA16bitPWMDisable = 0u, ///< 16bitPWM 禁止
  190. PCA16bitPWMEnable = 1u, ///< 16bitPWM 使能
  191. }en_pca_16bit_pwm_t;
  192. /**
  193. ******************************************************************************
  194. ** \brief PCA 配置结构体定义
  195. *****************************************************************************/
  196. typedef struct stc_pca_config
  197. {
  198. en_pca_cidl_t enCIDL; ///< 模式下启/停控制
  199. en_pca_wdte_t enWDTE; ///< WDT功能控制
  200. en_pca_clksel_t enCPS; ///< 时钟分频及时钟源选择功能
  201. func_ptr_t pfnPcaCb; ///< Pca中断服务回调函数[void function(void)]
  202. }stc_pca_config_t;
  203. /**
  204. ******************************************************************************
  205. ** \brief PCA 捕获模式配置结构体定义
  206. *****************************************************************************/
  207. typedef struct stc_pca_capmodconfig
  208. {
  209. en_pca_ecom_t enECOM; ///< 允许比较器功能控制
  210. en_pca_capp_t enCAPP; ///< 正沿捕获控制
  211. en_pca_capn_t enCAPN; ///< 负沿捕获控制
  212. en_pca_mat_t enMAT; ///< 匹配控制
  213. en_pca_tog_t enTOG; ///< 翻转控制
  214. en_pca_8bit_pwm_t en8bitPWM; ///< 8位脉宽调制控制
  215. }stc_pca_capmodconfig_t;
  216. /******************************************************************************
  217. * Global variable declarations ('extern', definition in C source)
  218. *****************************************************************************/
  219. /******************************************************************************
  220. * Global function prototypes (definition in C source)
  221. *****************************************************************************/
  222. //Interrupt related
  223. //PCA中断标志获取
  224. boolean_t Pca_GetIntFlag(en_pca_module_t enModule);
  225. //PCA计数器中断标志获取
  226. boolean_t Pca_GetCntIntFlag(void);
  227. //PCA中断标志清除
  228. en_result_t Pca_ClearIntFlag(en_pca_module_t enModule);
  229. //PCA计数器中断标志清除
  230. en_result_t Pca_ClearCntIntFlag(void);
  231. //PCA中断使能
  232. en_result_t Pca_EnableIrq (en_pca_module_t enModule);
  233. //PCA计数器中断使能
  234. en_result_t Pca_EnableCntIrq (void);
  235. //PCA中断关闭
  236. en_result_t Pca_DisableIrq(en_pca_module_t enModule);
  237. //PCA计数器中断关闭
  238. en_result_t Pca_DisableCntIrq(void);
  239. //PCA配置及操作
  240. //PCA初始化
  241. en_result_t Pca_Init(stc_pca_config_t* pstcConfig);
  242. //PCA捕获模式配置
  243. en_result_t Pca_CapModConfig(en_pca_module_t enModule, stc_pca_capmodconfig_t* pstcCapMod);
  244. //PCA计数器启动/停止
  245. en_result_t Pca_Run(void);
  246. en_result_t Pca_Stop(void);
  247. //PCA16位比较数据设置
  248. en_result_t Pca_CmpData16Set(en_pca_module_t enModule, uint16_t u16Data);
  249. //PCA捕获16位数据获取
  250. uint16_t Pca_CapData16Get(en_pca_module_t enModule);
  251. //PCA比较数据高8位设置
  252. en_result_t Pca_CmpDataHSet(en_pca_module_t enModule, uint8_t u8Data);
  253. //PCA比较数据低8位设置
  254. en_result_t Pca_CmpDataLSet(en_pca_module_t enModule, uint8_t u8Data);
  255. //PCA计数值设置/获取
  256. en_result_t Pca_Cnt16Set(uint16_t u16Data);
  257. uint16_t Pca_Cnt16Get(void);
  258. //PCA周期重载值设置/获取
  259. en_result_t Pca_CARRSet(uint16_t u16Data);
  260. uint16_t Pca_CARRGet(void);
  261. //PCA 增强PWM功能使能/禁止
  262. en_result_t Pca_Enable16bitPWM(void);
  263. en_result_t Pca_Disable16bitPWM(void);
  264. //PCA比较高速输出标志获取
  265. boolean_t Pca_GetCmpHighFlag(en_pca_module_t enModule);
  266. //@} // PcaGroup
  267. #ifdef __cplusplus
  268. #endif
  269. #endif /* __PCA_H__ */
  270. /******************************************************************************
  271. * EOF (not truncated)
  272. *****************************************************************************/