tim.h
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:13k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : tim.h
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 08/09/2003
  5. * Description        : This file contains all the functions prototypes for the
  6. *                      TIM software library.
  7. ********************************************************************************
  8. * History:
  9. *  01/01/2004 : V1.2
  10. *  14/07/2004 : V1.3
  11. *******************************************************************************/
  12. #ifndef __TIM_H
  13. #define __TIM_H
  14. #include "71x_map.h"
  15. typedef enum { TIM_EXTERNAL,
  16.                TIM_INTERNAL
  17.              } TIM_Clocks;
  18. typedef enum { TIM_RISING,
  19.                TIM_FALLING
  20.              } TIM_Clock_Edges;
  21. typedef enum { TIM_CHANNEL_A,
  22.                TIM_CHANNEL_B
  23.              } TIM_Channels;
  24. typedef enum { TIM_WITH_IT,
  25.                TIM_WITHOUT_IT
  26.              } TIM_IT_Mode;
  27. typedef enum { TIM_TIMING,
  28.                TIM_WAVE
  29.              } TIM_OC_Modes;
  30. typedef enum { TIM_HIGH,
  31.                TIM_LOW
  32.              } TIM_Logic_Levels;
  33. typedef enum { TIM_START,
  34.                TIM_STOP,
  35.                TIM_CLEAR
  36.              } TIM_CounterOperations;
  37. typedef enum { TIM_ICFA = 0x8000,
  38.                TIM_OCFA = 0x4000,
  39.                TIM_TOF  = 0x2000,
  40.                TIM_ICFB = 0x1000,
  41.                TIM_OCFB = 0x0800
  42.              } TIM_Flags;
  43. typedef struct { u16 Pulse;
  44.                  u16 Period;
  45.                } PWMI_parameters;
  46. #define TIM_ECKEN_Mask  0x0001
  47. #define TIM_EXEDG_Mask  0x0002
  48. #define TIM_IEDGA_Mask  0x0004
  49. #define TIM_IEDGB_Mask  0x0008
  50. #define TIM_PWM_Mask    0x0010
  51. #define TIM_OMP_Mask    0x0020
  52. #define TIM_OCAE_Mask   0x0040
  53. #define TIM_OCBE_Mask   0x0080
  54. #define TIM_OLVLA_Mask  0x0100
  55. #define TIM_OLVLB_Mask  0x0200
  56. #define TIM_FOLVA_Mask  0x0400
  57. #define TIM_FOLVB_Mask  0x0800
  58. #define TIM_PWMI_Mask   0x4000
  59. #define TIM_EN_Mask     0x8000
  60. #define TIM_OCBIE_mask  0x0080
  61. #define TIM_ICBIE_Mask  0x1000
  62. #define TIM_TOE_Mask    0x2000
  63. #define TIM_ICAIE_Mask  0x8000
  64. #define TIM_OCAIE_mask  0x4000
  65. #define TIM_ICA_IT   0x8000 // Input Capture Channel A
  66. #define TIM_OCA_IT   0x4000 // Output Compare Channel A
  67. #define TIM_TO_IT    0x2000 // Timer OverFlow
  68. #define TIM_ICB_IT   0x1000 // Input Capture Channel B
  69. #define TIM_OCB_IT   0x0800 // Input Capture Channel A
  70. /*******************************************************************************
  71. * Function Name  : TIM_Init
  72. * Description    : This routine is used to Initialize the TIM peripheral
  73. * Input          : TIM Timer to Initialize
  74. * Return         : None
  75. *******************************************************************************/
  76. void TIM_Init( TIM_TypeDef *TIMx );
  77. /*******************************************************************************
  78. * Function Name  : TIM_ClockSourceConfig
  79. * Description    : This routine is used to configure the TIM clock source
  80. * Input          : (1) TIM Timer
  81. *                : (2) TIM_Clocks : Specifies the TIM source clock
  82. *                       - TIM_INTERNAL : The TIM is clocked by the APB2 frequency
  83. *                                    divided by the prescaler value.
  84. *                       - TIM_EXTERNAL : The TIM is clocked by an external Clock
  85. * Return         : None
  86. *******************************************************************************/
  87. inline void TIM_ClockSourceConfig ( TIM_TypeDef *TIMx, TIM_Clocks Xclock )
  88. {
  89. if (Xclock==TIM_EXTERNAL) TIMx->CR1|=TIM_ECKEN_Mask; else TIMx->CR1&=~TIM_ECKEN_Mask;
  90. }
  91. /*******************************************************************************
  92. * Function Name  : TIM_ClockSourceValue
  93. * Description    : This routine is used to get the TIM clock source
  94. * Input          : TIM Timer
  95. * Return         : TIM_Clocks : Specifies the TIM source clock
  96. *                       - TIM_INTERNAL : The TIM is clocked by the APB2 frequency
  97. *                                    divided by the prescaler value.
  98. *                       - TIM_EXTERNAL : The TIM is clocked by an external Clock
  99. *******************************************************************************/
  100. inline TIM_Clocks TIM_ClockSourceValue ( TIM_TypeDef *TIMx )
  101. {
  102. return ( TIMx->CR1 & TIM_ECKEN_Mask) == 0 ? TIM_INTERNAL : TIM_EXTERNAL;
  103. }
  104. /*******************************************************************************
  105. * Function Name  : TIM_PrescalerConfig
  106. * Description    : This routine is used to configure the TIM prescaler value
  107. *                  ( using an internal clock )
  108. * Input          : (1) TIM Timer
  109. *                : (2) Prescaler ( u8 )
  110. * Return         : None
  111. *******************************************************************************/
  112. inline void TIM_PrescalerConfig ( TIM_TypeDef *TIMx, u8 Xprescaler )
  113. {
  114. TIMx->CR2 = ( TIMx->CR2 & 0xFF00 ) | Xprescaler;
  115. }
  116. /*******************************************************************************
  117. * Function Name  : TIM_PrescalerValue
  118. * Description    : This routine is used to get the TIM prescaler value
  119. *                  ( when using using an internal clock )
  120. * Input          : TIM Timer
  121. * Return         : Prescaler ( u8 )
  122. *******************************************************************************/
  123. inline u8 TIM_PrescalerValue ( TIM_TypeDef *TIMx )
  124. {
  125. return TIMx->CR2 & 0x00FF;
  126. }
  127. /*******************************************************************************
  128. * Function Name  : TIM_ClockLevelConfig
  129. * Description    : This routine is used to configure the TIM clock level
  130. *                  ( using an external clock )
  131. * Input          : TIM Timer
  132. *                : TIM_Clock_Edges : Specifies the active adge of the external clock
  133. *                  - TIM_RISING  : The rising  edge
  134. *                  - TIM_FALLING : The falling edge
  135. * Return         : None
  136. *******************************************************************************/
  137. inline void TIM_ClockLevelConfig ( TIM_TypeDef *TIMx, TIM_Clock_Edges Xedge )
  138. {
  139. if (Xedge == TIM_RISING) TIMx->CR1 |= TIM_EXEDG_Mask; else TIMx->CR1 &= ~TIM_EXEDG_Mask;
  140. }
  141. /*******************************************************************************
  142. * Function Name  : TIM_ClockLevelValue
  143. * Description    : This routine is used to get the TIM clock level
  144. * Input          : TIM Timer
  145. * Output         : TIM_Clock_Edges : Specifies the active adge of the external clock
  146. *                  - TIM_RISING  : The rising  edge
  147. *                  - TIM_FALLING : The falling edge
  148. *******************************************************************************/
  149. inline TIM_Clock_Edges TIM_ClockLevelValue ( TIM_TypeDef *TIMx )
  150. {
  151. return ( TIMx->CR1 & TIM_EXEDG_Mask ) == 0 ? TIM_FALLING : TIM_RISING;
  152. }
  153. /*******************************************************************************
  154. * Function Name  : TIM_ICAPModeConfig
  155. * Description    : This routine is used to configure the input capture feature
  156. * Input          : (1) TIM Timer
  157. *                : (2) Input Capture Channel ( Channel_A or Channel_B )
  158. *                : (3) Active Edge : Rising edge or Falling edge.
  159. * Output         : None
  160. *******************************************************************************/
  161. void TIM_ICAPModeConfig ( TIM_TypeDef  *TIMx,
  162.                           TIM_Channels Xchannel,
  163.                           TIM_Clock_Edges  Xedge );
  164. /*******************************************************************************
  165. * Function Name  : TIM_ICAPValue
  166. * Description    : This routine is used to get the Input Capture value
  167. * Input          : (1) TIM Timer
  168. *                : (2) Input Capture Channel ( Channel_A or Channel_B )
  169. * Output         : None
  170. *******************************************************************************/
  171. inline u16 TIM_ICAPValue ( TIM_TypeDef *TIMx, TIM_Channels Xchannel )
  172. {
  173. return Xchannel == TIM_CHANNEL_A ? TIMx->ICAR : TIMx->ICBR;
  174. }
  175. /*******************************************************************************
  176. * Function Name  : TIM_OCMPModeConfig
  177. * Description    : This routine is used to configure the output compare feature
  178. * Input          : (1) TIM Timer
  179. *                : (2) OCMP Channel ( Channel_A or Channel_B )
  180. *                : (3) Pulse Length
  181. *                : (4) OC_Mode     : output wave, or only timing.
  182. *                : (5) Level       : Rising edge or Falling edge after the ==
  183. * Output         : None
  184. *******************************************************************************/
  185. void TIM_OCMPModeConfig (  TIM_TypeDef  *TIMx,
  186.                            TIM_Channels Xchannel,
  187.                            u16          XpulseLength,
  188.                            TIM_OC_Modes     Xmode,
  189.                            TIM_Logic_Levels Xlevel );
  190. /*******************************************************************************
  191. * Function Name  : TIM_OPModeConfig
  192. * Description    : This routine is used to configure the one pulse mode
  193. * Input          : (1) TIM Timer
  194. *                : (3) XpulseLength      : Length of the pulse
  195. *                : (4) Level1            : Level during the pulse
  196. *                : (5) Level2            : Level after the pulse
  197. *                : (6) Activation Edge   : High or Low on ICAP A
  198. * Output         : None
  199. *******************************************************************************/
  200. void TIM_OPModeConfig ( TIM_TypeDef  *TIMx,
  201.                         u16          XpulseLength,
  202.                         TIM_Logic_Levels XLevel1,
  203.                         TIM_Logic_Levels XLevel2,
  204.                         TIM_Clock_Edges  Xedge );
  205. /*******************************************************************************
  206. * Function Name  : TIM_PWMOModeConfig
  207. * Description    : This routine is used to configure the PWM in output mode
  208. * Input          : (1) TIM Timer
  209. *                : (2) DutyCycle   : u16
  210. *                : (3) Level 1     : During the Duty Cycle
  211. *                : (4) Level 2     : During the after the pulse
  212. *                : (5) Full period : u16
  213. * Output         : None
  214. *******************************************************************************/
  215. void TIM_PWMOModeConfig ( TIM_TypeDef  *TIMx,
  216.                           u16          XDutyCycle,
  217.                           TIM_Logic_Levels XLevel1,
  218.                           u16          XFullperiod,
  219.                           TIM_Logic_Levels XLevel2
  220.                         );
  221. /*******************************************************************************
  222. * Function Name  : TIM_PWMInputConfig
  223. * Description    : This routine is used to configure the PWM in input mode
  224. * Input          : (1) TIM Timer
  225. *                : (2) First Activation Edge
  226. * Output         : None
  227. *******************************************************************************/
  228. void TIM_PWMIModeConfig ( TIM_TypeDef *TIMx, TIM_Clock_Edges Xedge );
  229. /*******************************************************************************
  230. * Function Name  : TIM_PWMIValue
  231. * Description    : This routine is used to get the PWMI values
  232. * Input          : (1) TIM Timer
  233. * Output         : PWMI_parameters : - u16 Dyty cycle
  234.                                      - u16 Full period
  235. *******************************************************************************/
  236. PWMI_parameters TIM_PWMIValue (TIM_TypeDef *TIMx );
  237. /*******************************************************************************
  238. * Function Name  : TIM_PWMInputConfig
  239. * Description    : This routine is used to configure the PWM in input mode
  240. * Input          : (1) TIM Timer
  241. *                : (2) First Activation Edge
  242. * Output         : None
  243. *******************************************************************************/
  244. void TIM_CounterConfig ( TIM_TypeDef *TIMx, TIM_CounterOperations Xoperation );
  245. /*******************************************************************************
  246. * Function Name  : TIM_ITConfig
  247. * Description    : This routine is used to configure the TIM IT
  248. * Input          : (1) TIM Timer
  249. *                : (2) TIM interrupt
  250. *                : (2) ENABLE / DISABLE
  251. * Output         : None
  252. *******************************************************************************/
  253. inline void TIM_ITConfig ( TIM_TypeDef *TIMx, u16 New_IT, FunctionalState NewState )
  254. {
  255. if (NewState == ENABLE) TIMx->CR2 |= New_IT; else TIMx->CR2 &= ~New_IT;
  256. }
  257. /*******************************************************************************
  258. * Function Name  : TIM_FlagStatus
  259. * Description    : This routine is used to check whether a Flag is Set.
  260. * Input          : (1) TIM Timer
  261. *                : (2) The TIM FLag
  262. * Output         : Flag NewState
  263. *******************************************************************************/
  264. inline FlagStatus TIM_FlagStatus ( TIM_TypeDef *TIMx, TIM_Flags Xflag )
  265. {
  266. return (TIMx->SR & Xflag) == 0 ? RESET : SET;
  267. }
  268. /*******************************************************************************
  269. * Function Name  : TIM_FlagClear
  270. * Description    : This routine is used to clear Flags.
  271. * Input          : (1) TIM Timer
  272. *                : (2) The TIM FLag
  273. * Output         : None
  274. *******************************************************************************/
  275. inline void TIM_FlagClear ( TIM_TypeDef *TIMx, TIM_Flags Xflag )
  276. {
  277. TIMx->SR &= ~Xflag;
  278. }
  279. #endif // __TIM_H
  280. /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/