CH58x_timer2.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name : CH58x_timer2.c
  3. * Author : WCH
  4. * Version : V1.2
  5. * Date : 2021/11/17
  6. * Description
  7. * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
  8. * SPDX-License-Identifier: Apache-2.0
  9. *******************************************************************************/
  10. #include "CH58x_common.h"
  11. /*********************************************************************
  12. * @fn TMR2_TimerInit
  13. *
  14. * @brief 定时功能初始化
  15. *
  16. * @param t - 定时时间,基于当前系统时钟Tsys, 最长定时周期 67108864
  17. *
  18. * @return none
  19. */
  20. void TMR2_TimerInit(uint32_t t)
  21. {
  22. R32_TMR2_CNT_END = t;
  23. R8_TMR2_CTRL_MOD = RB_TMR_ALL_CLEAR;
  24. R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN;
  25. }
  26. /*********************************************************************
  27. * @fn TMR2_EXTSingleCounterInit
  28. *
  29. * @brief 边沿计数功能初始化
  30. *
  31. * @param cap - 采集计数类型
  32. *
  33. * @return none
  34. */
  35. void TMR2_EXTSingleCounterInit(CapModeTypeDef cap)
  36. {
  37. R8_TMR2_CTRL_MOD = RB_TMR_ALL_CLEAR;
  38. R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN | RB_TMR_CAP_COUNT | RB_TMR_MODE_IN | (cap << 6);
  39. }
  40. /*********************************************************************
  41. * @fn TMR2_PWMInit
  42. *
  43. * @brief PWM 输出初始化
  44. *
  45. * @param pr - select wave polar, refer to PWMX_PolarTypeDef
  46. * @param ts - set pwm repeat times, refer to PWM_RepeatTsTypeDef
  47. *
  48. * @return none
  49. */
  50. void TMR2_PWMInit(PWMX_PolarTypeDef pr, PWM_RepeatTsTypeDef ts)
  51. {
  52. // R8_TMR2_CTRL_MOD = RB_TMR_ALL_CLEAR;
  53. R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN | RB_TMR_OUT_EN | (pr << 4) | (ts << 6);
  54. }
  55. /*********************************************************************
  56. * @fn TMR2_CapInit
  57. *
  58. * @brief 外部信号捕捉功能初始化
  59. *
  60. * @param cap - select capture mode, refer to CapModeTypeDef
  61. *
  62. * @return none
  63. */
  64. void TMR2_CapInit(CapModeTypeDef cap)
  65. {
  66. R8_TMR2_CTRL_MOD = RB_TMR_ALL_CLEAR;
  67. R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN | RB_TMR_MODE_IN | (cap << 6);
  68. }
  69. /*********************************************************************
  70. * @fn TMR2_DMACfg
  71. *
  72. * @brief 配置DMA功能
  73. *
  74. * @param s - 是否打开DMA功能
  75. * @param startAddr - DMA 起始地址
  76. * @param endAddr - DMA 结束地址
  77. * @param m - 配置DMA模式
  78. *
  79. * @return none
  80. */
  81. void TMR2_DMACfg(uint8_t s, uint16_t startAddr, uint16_t endAddr, DMAModeTypeDef m)
  82. {
  83. if(s == DISABLE)
  84. {
  85. R8_TMR2_CTRL_DMA = 0;
  86. }
  87. else
  88. {
  89. R16_TMR2_DMA_BEG = startAddr;
  90. R16_TMR2_DMA_END = endAddr;
  91. if(m)
  92. R8_TMR2_CTRL_DMA = RB_TMR_DMA_LOOP | RB_TMR_DMA_ENABLE;
  93. else
  94. R8_TMR2_CTRL_DMA = RB_TMR_DMA_ENABLE;
  95. }
  96. }