apm32f4xx_tmr.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. /*!
  2. * @file apm32f4xx_tmr.h
  3. *
  4. * @brief This file contains all the functions prototypes for the TMR firmware library.
  5. *
  6. * @version V1.0.2
  7. *
  8. * @date 2022-06-23
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2021-2022 Geehy Semiconductor
  13. *
  14. * You may not use this file except in compliance with the
  15. * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
  16. *
  17. * The program is only for reference, which is distributed in the hope
  18. * that it will be usefull and instructional for customers to develop
  19. * their software. Unless required by applicable law or agreed to in
  20. * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
  21. * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
  22. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
  23. * and limitations under the License.
  24. */
  25. /* Define to prevent recursive inclusion */
  26. #ifndef __APM32F4XX_TMR_H
  27. #define __APM32F4XX_TMR_H
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. /* Includes */
  32. #include "apm32f4xx.h"
  33. /** @addtogroup APM32F4xx_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup TMR_Driver
  37. @{
  38. */
  39. /** @defgroup TMR_Enumerations
  40. @{
  41. */
  42. /**
  43. * @brief TMR Output Compare and PWM modes
  44. */
  45. typedef enum
  46. {
  47. TMR_OC_MODE_TMRING = 0x00, /*!< Frozen TMR output compare mode */
  48. TMR_OC_MODE_ACTIVE = 0x01, /*!< Set output to high when matching */
  49. TMR_OC_MODE_INACTIVE = 0x02, /*!< Set output to low when matching */
  50. TMR_OC_MODE_TOGGLE = 0x03, /*!< Toggle output when matching */
  51. TMR_OC_MODE_LOWLEVEL = 0x04, /*!< Force output to be low */
  52. TMR_OC_MODE_HIGHLEVEL = 0x05, /*!< Force output to be high */
  53. TMR_OC_MODE_PWM1 = 0x06, /*!< PWM1 mode */
  54. TMR_OC_MODE_PWM2 = 0x07 /*!< PWM2 mode */
  55. } TMR_OC_MODE_T;
  56. /**
  57. * @brief TMR Single Pulse Mode
  58. */
  59. typedef enum
  60. {
  61. TMR_SPM_REPETITIVE, /*!< Enable repetitive pulse mode */
  62. TMR_SPM_SINGLE /*!< Enable single pulse mode */
  63. } TMR_SPM_T;
  64. /**
  65. * @brief TMR Input Capture Init structure definition
  66. */
  67. typedef enum
  68. {
  69. TMR_CHANNEL_1 = 0x0000, /*!< Timer Channel 1 */
  70. TMR_CHANNEL_2 = 0x0004, /*!< Timer Channel 2 */
  71. TMR_CHANNEL_3 = 0x0008, /*!< Timer Channel 3 */
  72. TMR_CHANNEL_4 = 0x000C /*!< Timer Channel 4 */
  73. } TMR_CHANNEL_T;
  74. /**
  75. * @brief TMR Clock division
  76. */
  77. typedef enum
  78. {
  79. TMR_CLOCK_DIV_1, /*!< TDTS = Tck_tim */
  80. TMR_CLOCK_DIV_2, /*!< TDTS = 2 * Tck_tim */
  81. TMR_CLOCK_DIV_4 /*!< TDTS = 4 * Tck_tim */
  82. } TMR_CLOCK_DIV_T;
  83. /**
  84. * @brief TMR Counter Mode
  85. */
  86. typedef enum
  87. {
  88. TMR_COUNTER_MODE_UP = 0x00, /*!< Timer Up Counting Mode */
  89. TMR_COUNTER_MODE_DOWN = 0x01, /*!< Timer Down Counting Mode */
  90. TMR_COUNTER_MODE_CENTER_ALIGNED1 = 0x10, /*!< Timer Center Aligned Mode1 */
  91. TMR_COUNTER_MODE_CENTER_ALIGNED2 = 0x20, /*!< Timer Center Aligned Mode2 */
  92. TMR_COUNTER_MODE_CENTER_ALIGNED3 = 0x30 /*!< Timer Center Aligned Mode3 */
  93. } TMR_COUNTER_MODE_T;
  94. /**
  95. * @brief TMR Output Compare Polarity
  96. */
  97. typedef enum
  98. {
  99. TMR_OC_POLARITY_HIGH, /*!< Output Compare active high */
  100. TMR_OC_POLARITY_LOW /*!< Output Compare active low */
  101. } TMR_OC_POLARITY_T;
  102. /**
  103. * @brief TMR Output Compare N Polarity
  104. */
  105. typedef enum
  106. {
  107. TMR_OC_NPOLARITY_HIGH, /*!< Output Compare active high */
  108. TMR_OC_NPOLARITY_LOW /*!< Output Compare active low */
  109. } TMR_OC_NPOLARITY_T;
  110. /**
  111. * @brief TMR Output Compare state
  112. */
  113. typedef enum
  114. {
  115. TMR_OC_STATE_DISABLE, /*!< Disable output compare */
  116. TMR_OC_STATE_ENABLE /*!< Enable output compare */
  117. } TMR_OC_STATE_T;
  118. /**
  119. * @brief TMR Output Compare N state
  120. */
  121. typedef enum
  122. {
  123. TMR_OC_NSTATE_DISABLE, /*!< Disable complementary output */
  124. TMR_OC_NSTATE_ENABLE /*!< Enable complementary output */
  125. } TMR_OC_NSTATE_T;
  126. /**
  127. * @brief TMR BRK state
  128. */
  129. typedef enum
  130. {
  131. TMR_BRK_STATE_DISABLE, /*!< Disable brake function */
  132. TMR_BRK_STATE_ENABLE /*!< Enable brake function */
  133. } TMR_BRK_STATE_T;
  134. /**
  135. * @brief TMR Specifies the Break Input pin polarity.
  136. */
  137. typedef enum
  138. {
  139. TMR_BRK_POLARITY_LOW, /*!< BRK low level valid */
  140. TMR_BRK_POLARITY_HIGH /*!< BRK high level valid */
  141. } TMR_BRK_POLARITY_T;
  142. /**
  143. * @brief TMR Specifies the Break Input pin polarity.
  144. */
  145. typedef enum
  146. {
  147. TMR_AUTOMATIC_OUTPUT_DISABLE, /*!< Disable automatic output */
  148. TMR_AUTOMATIC_OUTPUT_ENABLE /*!< Enable automatic output */
  149. } TMR_AUTOMATIC_OUTPUT_T;
  150. /**
  151. * @brief TMR Protect mode configuration values
  152. */
  153. typedef enum
  154. {
  155. TMR_LOCK_LEVEL_OFF, /*!< No lock write protection */
  156. TMR_LOCK_LEVEL_1, /*!< Lock write protection level 1 */
  157. TMR_LOCK_LEVEL_2, /*!< Lock write protection level 2 */
  158. TMR_LOCK_LEVEL_3 /*!< Lock write protection level 3 */
  159. } TMR_LOCK_LEVEL_T;
  160. /**
  161. * @brief TMR Specifies the Off-State selection used in Run mode
  162. */
  163. typedef enum
  164. {
  165. TMR_RMOS_STATE_DISABLE, /*!< Disable run mode off-state */
  166. TMR_RMOS_STATE_ENABLE /*!< Enable run mode off-state */
  167. } TMR_RMOS_STATE_T;
  168. /**
  169. * @brief TMR Closed state configuration in idle mode
  170. */
  171. typedef enum
  172. {
  173. TMR_IMOS_STATE_DISABLE, /*!< Disable idle mode off-state */
  174. TMR_IMOS_STATE_ENABLE /*!< Enable idle mode off-state */
  175. } TMR_IMOS_STATE_T;
  176. /**
  177. * @brief TMR Output Compare Idle State
  178. */
  179. typedef enum
  180. {
  181. TMR_OC_IDLE_STATE_RESET, /*!< Reset output compare idle state */
  182. TMR_OC_IDLE_STATE_SET /*!< Set output compare idle state */
  183. } TMR_OC_IDLE_STATE_T;
  184. /**
  185. * @brief TMR Output Compare N Idle State
  186. */
  187. typedef enum
  188. {
  189. TMR_OC_NIDLE_STATE_RESET, /*!< Reset output complementary idle state */
  190. TMR_OC_NIDLE_STATE_SET /*!< Set output complementary idle state */
  191. } TMR_OC_NIDLE_STATE_T;
  192. /**
  193. * @brief TMR Input Capture Polarity
  194. */
  195. typedef enum
  196. {
  197. TMR_IC_POLARITY_RISING = 0x00, /*!< Rising edge */
  198. TMR_IC_POLARITY_FALLING = 0x02, /*!< Falling edge */
  199. TMR_IC_POLARITY_BOTHEDGE = 0x0A /*!< Both rising and falling edge */
  200. } TMR_IC_POLARITY_T;
  201. /**
  202. * @brief TMR Input Capture Selection
  203. */
  204. typedef enum
  205. {
  206. TMR_IC_SELECTION_DIRECT_TI = 0x01, /*!< Input capture mapping in TI1 */
  207. TMR_IC_SELECTION_INDIRECT_TI = 0x02, /*!< Input capture mapping in TI2 */
  208. TMR_IC_SELECTION_TRC = 0x03 /*!< Input capture mapping in TRC */
  209. } TMR_IC_SELECTION_T;
  210. /**
  211. * @brief TMR Input Capture Prescaler
  212. */
  213. typedef enum
  214. {
  215. TMR_IC_PSC_1, /*!< No prescaler */
  216. TMR_IC_PSC_2, /*!< Capture is done once every 2 events */
  217. TMR_IC_PSC_4, /*!< capture is done once every 4 events */
  218. TMR_IC_PSC_8 /*!< capture is done once every 8 events */
  219. } TMR_IC_PSC_T;
  220. /**
  221. * @brief TMR_interrupt_sources
  222. */
  223. typedef enum
  224. {
  225. TMR_INT_UPDATE = 0x0001, /*!< Timer update Interrupt source */
  226. TMR_INT_CC1 = 0x0002, /*!< Timer Capture Compare 1 Interrupt source */
  227. TMR_INT_CC2 = 0x0004, /*!< Timer Capture Compare 2 Interrupt source */
  228. TMR_INT_CC3 = 0x0008, /*!< Timer Capture Compare 3 Interrupt source */
  229. TMR_INT_CC4 = 0x0010, /*!< Timer Capture Compare 4 Interrupt source */
  230. TMR_INT_COM = 0x0020, /*!< Timer Commutation Interrupt source (Only for TMR1 and TMR8) */
  231. TMR_INT_TRG = 0x0040, /*!< Timer Trigger Interrupt source */
  232. TMR_INT_BRK = 0x0080 /*!< Timer Break Interrupt source (Only for TMR1 and TMR8) */
  233. } TMR_INT_T;
  234. /**
  235. * @brief TMR DMA Base Address
  236. */
  237. typedef enum
  238. {
  239. TMR_DMA_BASE_CTRL1 = 0x0000, /*!< TMR CTRL1 DMA base address setup */
  240. TMR_DMA_BASE_CTRL2 = 0x0001, /*!< TMR CTRL2 DMA base address setup */
  241. TMR_DMA_BASE_SMCTRL = 0x0002, /*!< TMR SMCTRL DMA base address setup */
  242. TMR_DMA_BASE_DIEN = 0x0003, /*!< TMR DIEN DMA base address setup */
  243. TMR_DMA_BASE_STS = 0x0004, /*!< TMR STS DMA base address setup */
  244. TMR_DMA_BASE_CEG = 0x0005, /*!< TMR CEG DMA base address setup */
  245. TMR_DMA_BASE_CCM1 = 0x0006, /*!< TMR CCM1 DMA base address setup */
  246. TMR_DMA_BASE_CCM2 = 0x0007, /*!< TMR CCM2 DMA base address setup */
  247. TMR_DMA_BASE_CCEN = 0x0008, /*!< TMR CCEN DMA base address setup */
  248. TMR_DMA_BASE_CNT = 0x0009, /*!< TMR CNT DMA base address setup */
  249. TMR_DMA_BASE_PSC = 0x000A, /*!< TMR PSC DMA base address setup */
  250. TMR_DMA_BASE_AUTORLD = 0x000B, /*!< TMR AUTORLD DMA base address setup */
  251. TMR_DMA_BASE_REPCNT = 0x000C, /*!< TMR REPCNT DMA base address setup */
  252. TMR_DMA_BASE_CC1 = 0x000D, /*!< TMR CC1 DMA base address setup */
  253. TMR_DMA_BASE_CC2 = 0x000E, /*!< TMR CC2 DMA base address setup */
  254. TMR_DMA_BASE_CC3 = 0x000F, /*!< TMR CC3 DMA base address setup */
  255. TMR_DMA_BASE_CC4 = 0x0010, /*!< TMR CC4 DMA base address setup */
  256. TMR_DMA_BASE_BDT = 0x0011, /*!< TMR BDT DMA base address setup */
  257. TMR_DMA_BASE_DCTRL = 0x0012 /*!< TMR DCTRL DMA base address setup */
  258. } TMR_DMA_BASE_T;
  259. /**
  260. * @brief TMR DMA Soueces
  261. */
  262. typedef enum
  263. {
  264. TMR_DMA_SOURCE_UPDATE = 0x0100, /*!< TMR update DMA souces */
  265. TMR_DMA_SOURCE_CH1 = 0x0200, /*!< TMR Capture Compare 1 DMA souces */
  266. TMR_DMA_SOURCE_CH2 = 0x0400, /*!< TMR Capture Compare 2 DMA souces */
  267. TMR_DMA_SOURCE_CH3 = 0x0800, /*!< TMR Capture Compare 3 DMA souces */
  268. TMR_DMA_SOURCE_CH4 = 0x1000, /*!< TMR Capture Compare 4 DMA souces */
  269. TMR_DMA_SOURCE_COM = 0x2000, /*!< TMR Commutation DMA souces */
  270. TMR_DMA_SOURCE_TRG = 0x4000 /*!< TMR Trigger DMA souces */
  271. } TMR_DMA_SOURCE_T;
  272. /**
  273. * @brief TMR The external Trigger Prescaler.
  274. */
  275. typedef enum
  276. {
  277. TMR_EXTTRG_PSC_OFF = 0x00, /*!< ETRP Prescaler OFF */
  278. TMR_EXTTRG_PSC_DIV2 = 0x01, /*!< ETRP frequency divided by 2 */
  279. TMR_EXTTRG_PSC_DIV4 = 0x02, /*!< ETRP frequency divided by 4 */
  280. TMR_EXTTRG_PSC_DIV8 = 0x03 /*!< ETRP frequency divided by 8 */
  281. } TMR_EXTTRG_PSC_T;
  282. /**
  283. * @brief TMR Internal Trigger Selection
  284. */
  285. typedef enum
  286. {
  287. TMR_TRIGGER_SOURCE_ITR0 = 0x00, /*!< Internal Trigger 0 */
  288. TMR_TRIGGER_SOURCE_ITR1 = 0x01, /*!< Internal Trigger 1 */
  289. TMR_TRIGGER_SOURCE_ITR2 = 0x02, /*!< Internal Trigger 2 */
  290. TMR_TRIGGER_SOURCE_ITR3 = 0x03, /*!< Internal Trigger 3 */
  291. TMR_TRIGGER_SOURCE_TI1F_ED = 0x04, /*!< TI1 Edge Detector */
  292. TMR_TRIGGER_SOURCE_TI1FP1 = 0x05, /*!< Filtered Timer Input 1 */
  293. TMR_TRIGGER_SOURCE_TI2FP2 = 0x06, /*!< Filtered Timer Input 2 */
  294. TMR_TRIGGER_SOURCE_ETRF = 0x07 /*!< External Trigger input */
  295. } TMR_TRIGGER_SOURCE_T;
  296. /**
  297. * @brief TMR External Trigger Polarity
  298. */
  299. typedef enum
  300. {
  301. TMR_EXTTGR_POL_NONINVERTED, /*!< Active high or rising edge active */
  302. TMR_EXTTRG_POL_INVERTED /*!< Active low or falling edge active */
  303. } TMR_EXTTRG_POL_T;
  304. /**
  305. * @brief TMR Prescaler Reload Mode
  306. */
  307. typedef enum
  308. {
  309. TMR_PSC_RELOAD_UPDATE, /*!< The Prescaler reload at the update event */
  310. TMR_PSC_RELOAD_IMMEDIATE /*!< The Prescaler reload immediately */
  311. } TMR_PSC_RELOAD_T;
  312. /**
  313. * @brief TMR Forced Action
  314. */
  315. typedef enum
  316. {
  317. TMR_FORCED_ACTION_INACTIVE = 0x04, /*!< Force inactive level on OC1REF */
  318. TMR_FORCED_ACTION_ACTIVE = 0x05 /*!< Force active level on OC1REF */
  319. } TMR_FORCED_ACTION_T;
  320. /**
  321. * @brief TMR Encoder Mode
  322. */
  323. typedef enum
  324. {
  325. TMR_ENCODER_MODE_TI1 = 0x01, /*!< Encoder mode 1 */
  326. TMR_ENCODER_MODE_TI2 = 0x02, /*!< Encoder mode 2 */
  327. TMR_ENCODER_MODE_TI12 = 0x03 /*!< Encoder mode 3 */
  328. } TMR_ENCODER_MODE_T;
  329. /**
  330. * @brief TMR event sources
  331. */
  332. typedef enum
  333. {
  334. TMR_EVENT_UPDATE = 0x001, /*!< Timer update Interrupt source */
  335. TMR_EVENT_CH1 = 0x002, /*!< Timer Capture Compare 1 Event source */
  336. TMR_EVENT_CH2 = 0x004, /*!< Timer Capture Compare 1 Event source */
  337. TMR_EVENT_CH3 = 0x008, /*!< Timer Capture Compare 3 Event source */
  338. TMR_EVENT_CH4 = 0x010, /*!< Timer Capture Compare 4 Event source */
  339. TMR_EVENT_COM = 0x020, /*!< Timer Commutation Event source (Only for TMR1 and TMR8) */
  340. TMR_EVENT_TRG = 0x040, /*!< Timer Trigger Event source */
  341. TMR_EVENT_BRK = 0x080 /*!< Timer Break Event source (Only for TMR1 and TMR8) */
  342. } TMR_EVENT_T;
  343. /**
  344. * @brief TMR UpdateSource
  345. */
  346. typedef enum
  347. {
  348. TMR_UPDATE_SOURCE_GLOBAL, /*!< Source of update is
  349. - Counter overflow/underflow.
  350. - UEG bit of Control event generation register(CEG) is set.
  351. - Update generation through the slave mode controller. */
  352. TMR_UPDATE_SOURCE_REGULAR /*!< Source of update is Counter overflow/underflow */
  353. } TMR_UPDATE_SOURCE_T;
  354. /**
  355. * @brief TMR Output Compare Preload State
  356. */
  357. typedef enum
  358. {
  359. TMR_OC_PRELOAD_DISABLE, /*!< Enable preload */
  360. TMR_OC_PRELOAD_ENABLE /*!< Disable preload */
  361. } TMR_OC_PRELOAD_T;
  362. /**
  363. * @brief TMR Output Compare Preload State
  364. */
  365. typedef enum
  366. {
  367. TMR_OC_FAST_DISABLE, /*!< Disable fast output compare */
  368. TMR_OC_FAST_ENABLE /*!< Enable fast output compare */
  369. } TMR_OC_FAST_T;
  370. /**
  371. * @brief TMR Output Compare Preload State
  372. */
  373. typedef enum
  374. {
  375. TMR_OC_CLEAR_DISABLE, /*!< Disable output compare clear */
  376. TMR_OC_CLEAR_ENABLE /*!< Enable output compare clear */
  377. } TMR_OC_CLEAR_T;
  378. /**
  379. * @brief TMR Trigger Output Source
  380. */
  381. typedef enum
  382. {
  383. TMR_TRGO_SOURCE_RESET, /*!< Select reset signal as TRGO source */
  384. TMR_TRGO_SOURCE_ENABLE, /*!< Select enable signal as TRGO source */
  385. TMR_TRGO_SOURCE_UPDATE, /*!< Select update signal as TRGO source */
  386. TMR_TRGO_SOURCE_OC1, /*!< Select OC1 signal as TRGO source */
  387. TMR_TRGO_SOURCE_OC1REF, /*!< Select OC1REF signal as TRGO source */
  388. TMR_TRGO_SOURCE_OC2REF, /*!< Select OC2REF signal as TRGO source */
  389. TMR_TRGO_SOURCE_OC3REF, /*!< Select OC3REF signal as TRGO source */
  390. TMR_TRGO_SOURCE_OC4REF /*!< Select OC4REF signal as TRGO source */
  391. } TMR_TRGO_SOURCE_T;
  392. /**
  393. * @brief TMR Slave Mode
  394. */
  395. typedef enum
  396. {
  397. TMR_SLAVE_MODE_RESET = 0x04, /*!< Reset mode */
  398. TMR_SLAVE_MODE_GATED = 0x05, /*!< Gated mode */
  399. TMR_SLAVE_MODE_TRIGGER = 0x06, /*!< Trigger mode */
  400. TMR_SLAVE_MODE_EXTERNAL1 = 0x07 /*!< External 1 mode */
  401. } TMR_SLAVE_MODE_T;
  402. /**
  403. * @brief TMR Remap
  404. */
  405. typedef enum
  406. {
  407. TMR2_TMR8_TRGO = 0x0000, /*!< TMR2 ITR1 input is connected to TMR8 Trigger output(default) */
  408. TMR2_PTP_TRG = 0x0400, /*!< TMR2 ITR1 input is connected to ETH PTP trigger output */
  409. TMR2_OTG_FSUSB_SOF = 0x0800, /*!< TMR2 ITR1 input is connected to OTG FS SOF */
  410. TMR2_OTG_HSUSB_SOF = 0x0C00, /*!< TMR2 ITR1 input is connected to OTG HS SOF */
  411. TMR5_GPIO = 0x0000, /*!< TMR5 CH4 input is connected to GPIO */
  412. TMR5_LSI = 0x0040, /*!< TMR5 CH4 input is connected to LSI clock */
  413. TMR5_LSE = 0x0080, /*!< TMR5 CH4 input is connected to LSE clock */
  414. TMR5_RTC = 0x00C0, /*!< TMR5 CH4 input is connected to RTC Output event */
  415. TMRx_GPIO = 0x0000, /*!< TMR10/11/13/14 CH1 input is connected to GPIO */
  416. TMRx_RTCCLK = 0x0001, /*!< TMR10/11/13/14 CH1 input is connected to RTC clock */
  417. TMRx_HSECLK = 0x0002, /*!< TMR10/11/13/14 CH1 input is connected to HSE clock/32 */
  418. TMRx_MCO = 0x0003 /*!< TMR10/11/13/14 CH1 input is connected to MCO */
  419. } TMR_REMAP_T;
  420. /**
  421. * @brief TMR Flag
  422. */
  423. typedef enum
  424. {
  425. TMR_FLAG_UPDATE = 0x0001, /*!< Timer update Flag */
  426. TMR_FLAG_CC1 = 0x0002, /*!< Timer Capture Compare 1 Flag */
  427. TMR_FLAG_CC2 = 0x0004, /*!< Timer Capture Compare 2 Flag */
  428. TMR_FLAG_CC3 = 0x0008, /*!< Timer Capture Compare 3 Flag */
  429. TMR_FLAG_CC4 = 0x0010, /*!< Timer Capture Compare 4 Flag */
  430. TMR_FLAG_COM = 0x0020, /*!< Timer Commutation Flag (Only for TMR1 and TMR8) */
  431. TMR_FLAG_TRG = 0x0040, /*!< Timer Trigger Flag */
  432. TMR_FLAG_BRK = 0x0080, /*!< Timer Break Flag (Only for TMR1 and TMR8) */
  433. TMR_FLAG_CC1RC = 0x0200, /*!< Timer Capture Compare 1 Repetition Flag */
  434. TMR_FLAG_CC2RC = 0x0400, /*!< Timer Capture Compare 2 Repetition Flag */
  435. TMR_FLAG_CC3RC = 0x0800, /*!< Timer Capture Compare 3 Repetition Flag */
  436. TMR_FLAG_CC4RC = 0x1000 /*!< Timer Capture Compare 4 Repetition Flag */
  437. } TMR_FLAG_T;
  438. /**
  439. * @brief TMR DMA Burst Length
  440. */
  441. typedef enum
  442. {
  443. TMR_DMA_BURSTLENGTH_1TRANSFER = 0x0000, /*!< Select TMR DMA burst Length 1 */
  444. TMR_DMA_BURSTLENGTH_2TRANSFERS = 0x0100, /*!< Select TMR DMA burst Length 2 */
  445. TMR_DMA_BURSTLENGTH_3TRANSFERS = 0x0200, /*!< Select TMR DMA burst Length 3 */
  446. TMR_DMA_BURSTLENGTH_4TRANSFERS = 0x0300, /*!< Select TMR DMA burst Length 4 */
  447. TMR_DMA_BURSTLENGTH_5TRANSFERS = 0x0400, /*!< Select TMR DMA burst Length 5 */
  448. TMR_DMA_BURSTLENGTH_6TRANSFERS = 0x0500, /*!< Select TMR DMA burst Length 6 */
  449. TMR_DMA_BURSTLENGTH_7TRANSFERS = 0x0600, /*!< Select TMR DMA burst Length 7 */
  450. TMR_DMA_BURSTLENGTH_8TRANSFERS = 0x0700, /*!< Select TMR DMA burst Length 8 */
  451. TMR_DMA_BURSTLENGTH_9TRANSFERS = 0x0800, /*!< Select TMR DMA burst Length 9 */
  452. TMR_DMA_BURSTLENGTH_10TRANSFERS = 0x0900, /*!< Select TMR DMA burst Length 10 */
  453. TMR_DMA_BURSTLENGTH_11TRANSFERS = 0x0A00, /*!< Select TMR DMA burst Length 11 */
  454. TMR_DMA_BURSTLENGTH_12TRANSFERS = 0x0B00, /*!< Select TMR DMA burst Length 12 */
  455. TMR_DMA_BURSTLENGTH_13TRANSFERS = 0x0C00, /*!< Select TMR DMA burst Length 13 */
  456. TMR_DMA_BURSTLENGTH_14TRANSFERS = 0x0D00, /*!< Select TMR DMA burst Length 14 */
  457. TMR_DMA_BURSTLENGTH_15TRANSFERS = 0x0E00, /*!< Select TMR DMA burst Length 15 */
  458. TMR_DMA_BURSTLENGTH_16TRANSFERS = 0x0F00, /*!< Select TMR DMA burst Length 16 */
  459. TMR_DMA_BURSTLENGTH_17TRANSFERS = 0x1000, /*!< Select TMR DMA burst Length 17 */
  460. TMR_DMA_BURSTLENGTH_18TRANSFERS = 0x1100 /*!< Select TMR DMA burst Length 18 */
  461. } TMR_DMA_BURSTLENGTH_T;
  462. /**@} end of group TMR_Enumerations*/
  463. /** @addtogroup TMR_Structure Data Structure
  464. @{
  465. */
  466. /**
  467. * @brief TMR Time Base Init structure definition
  468. * @note This structure is used with all TMR except for TMR6 and TMR7.
  469. */
  470. typedef struct
  471. {
  472. TMR_COUNTER_MODE_T countMode; /*!< TMR counter mode selection */
  473. TMR_CLOCK_DIV_T clockDivision; /*!< TMR clock division selection */
  474. uint16_t period; /*!< This must between 0x0000 and 0xFFFF */
  475. uint16_t division; /*!< This must between 0x0000 and 0xFFFF */
  476. uint8_t repetitionCounter; /*!< This must between 0x00 and 0xFF, only for TMR1 and TMR8. */
  477. } TMR_BaseConfig_T;
  478. /**
  479. * @brief TMR Config struct definition
  480. */
  481. typedef struct
  482. {
  483. TMR_OC_MODE_T mode; /*!< TMR Output Compare and PWM modes selection */
  484. TMR_OC_STATE_T outputState; /*!< TMR Output Compare state selection */
  485. TMR_OC_NSTATE_T outputNState; /*!< TMR Output Compare N state selection */
  486. TMR_OC_POLARITY_T polarity; /*!< TMR Output Compare Polarity selection */
  487. TMR_OC_NPOLARITY_T nPolarity; /*!< TMR Output Compare N Polarity selection */
  488. TMR_OC_IDLE_STATE_T idleState; /*!< TMR Output Compare Idle State selection */
  489. TMR_OC_NIDLE_STATE_T nIdleState; /*!< TMR Output Compare N Idle State selection */
  490. uint16_t pulse; /*!< This must between 0x0000 and 0xFFFF */
  491. } TMR_OCConfig_T;
  492. /**
  493. * @brief TMR Input Capture Config struct definition
  494. */
  495. typedef struct
  496. {
  497. TMR_CHANNEL_T channel; /*!< Timer channel selection */
  498. TMR_IC_POLARITY_T polarity; /*!< TMR input capture polarity selection */
  499. TMR_IC_SELECTION_T selection; /*!< TMR Input capture selection */
  500. TMR_IC_PSC_T prescaler; /*!< TMR Input Capture selection */
  501. uint16_t filter; /*!< This must between 0x00 and 0x0F */
  502. } TMR_ICConfig_T;
  503. /**
  504. * @brief TMR BDT structure definition
  505. */
  506. typedef struct
  507. {
  508. TMR_RMOS_STATE_T RMOS; /*!< TMR Specifies the Off-State selection used in Run mode selection */
  509. TMR_IMOS_STATE_T IMOS; /*!< TMR Closed state configuration in idle mode selection */
  510. TMR_LOCK_LEVEL_T lockLevel; /*!< TMR Protect mode configuration values selection */
  511. uint16_t deadTime; /*!< Setup dead time */
  512. TMR_BRK_STATE_T BRKState; /*!< Setup TMR BRK state */
  513. TMR_BRK_POLARITY_T BRKPolarity; /*!< Setup TMR BRK polarity */
  514. TMR_AUTOMATIC_OUTPUT_T automaticOutput; /*!< Setup break input pin polarity */
  515. } TMR_BDTConfig_T;
  516. /**@} end of group TMR_Structure*/
  517. /** @defgroup TMR_Functions
  518. @{
  519. */
  520. /* Reset and Configuration */
  521. void TMR_Reset(TMR_T* tmr);
  522. void TMR_ConfigTimeBase(TMR_T* tmr, TMR_BaseConfig_T* baseConfig);
  523. void TMR_ConfigTimeBaseStructInit(TMR_BaseConfig_T* baseConfig);
  524. void TMR_ConfigPrescaler(TMR_T* tmr, uint16_t prescaler, TMR_PSC_RELOAD_T reload);
  525. void TMR_ConfigCounterMode(TMR_T* tmr, TMR_COUNTER_MODE_T countMode);
  526. void TMR_ConfigCounter(TMR_T* tmr, uint16_t counter);
  527. void TMR_ConfigAutoreload(TMR_T* tmr, uint16_t autoReload);
  528. uint16_t TMR_ReadCounter(TMR_T* tmr);
  529. uint16_t TMR_ReadPrescaler(TMR_T* tmr);
  530. void TMR_EnableUpdate(TMR_T* tmr);
  531. void TMR_DisableUpdate(TMR_T* tmr);
  532. void TMR_ConfigUpdateRequest(TMR_T* tmr, TMR_UPDATE_SOURCE_T updateSource);
  533. void TMR_EnableAutoReload(TMR_T* tmr);
  534. void TMR_DisableAutoReload(TMR_T* tmr);
  535. void TMR_ConfigSinglePulseMode(TMR_T* tmr, TMR_SPM_T singlePulseMode);
  536. void TMR_ConfigClockDivision(TMR_T* tmr, TMR_CLOCK_DIV_T clockDivision);
  537. void TMR_Enable(TMR_T* tmr);
  538. void TMR_Disable(TMR_T* tmr);
  539. /* Output Compare */
  540. void TMR_ConfigOC1(TMR_T* tmr, TMR_OCConfig_T* OCConfig);
  541. void TMR_ConfigOC2(TMR_T* tmr, TMR_OCConfig_T* OCConfig);
  542. void TMR_ConfigOC3(TMR_T* tmr, TMR_OCConfig_T* OCConfig);
  543. void TMR_ConfigOC4(TMR_T* tmr, TMR_OCConfig_T* OCConfig);
  544. void TMR_ConfigOCStructInit(TMR_OCConfig_T* OCConfig);
  545. void TMR_SelectOCxMode(TMR_T* tmr, TMR_CHANNEL_T channel, TMR_OC_MODE_T mode);
  546. void TMR_ConfigCompare1(TMR_T* tmr, uint32_t compare1);
  547. void TMR_ConfigCompare2(TMR_T* tmr, uint32_t compare2);
  548. void TMR_ConfigCompare3(TMR_T* tmr, uint32_t compare3);
  549. void TMR_ConfigCompare4(TMR_T* tmr, uint32_t compare4);
  550. void TMR_ConfigForcedOC1(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction);
  551. void TMR_ConfigForcedOC2(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction);
  552. void TMR_ConfigForcedOC3(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction);
  553. void TMR_ConfigForcedOC4(TMR_T* tmr, TMR_FORCED_ACTION_T forcesAction);
  554. void TMR_ConfigOC1Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload);
  555. void TMR_ConfigOC2Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload);
  556. void TMR_ConfigOC3Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload);
  557. void TMR_ConfigOC4Preload(TMR_T* tmr, TMR_OC_PRELOAD_T OCPreload);
  558. void TMR_ConfigOC1Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast);
  559. void TMR_ConfigOC2Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast);
  560. void TMR_ConfigOC3Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast);
  561. void TMR_ConfigOC4Fast(TMR_T* tmr, TMR_OC_FAST_T OCFast);
  562. void TMR_ClearOC1Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear);
  563. void TMR_ClearOC2Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear);
  564. void TMR_ClearOC3Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear);
  565. void TMR_ClearOC4Ref(TMR_T* tmr, TMR_OC_CLEAR_T OCClear);
  566. void TMR_ConfigOC1Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity);
  567. void TMR_ConfigOC1NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity);
  568. void TMR_ConfigOC2Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity);
  569. void TMR_ConfigOC2NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity);
  570. void TMR_ConfigOC3Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity);
  571. void TMR_ConfigOC3NPolarity(TMR_T* tmr, TMR_OC_NPOLARITY_T OCNPolarity);
  572. void TMR_ConfigOC4Polarity(TMR_T* tmr, TMR_OC_POLARITY_T OCPolarity);
  573. void TMR_EnableCCxChannel(TMR_T* tmr, TMR_CHANNEL_T channel);
  574. void TMR_DisableCCxChannel(TMR_T* tmr, TMR_CHANNEL_T channel);
  575. void TMR_EnableCCxNChannel(TMR_T* tmr, TMR_CHANNEL_T channel);
  576. void TMR_DisableCCxNChannel(TMR_T* tmr, TMR_CHANNEL_T channel);
  577. /* Input Capture */
  578. void TMR_ConfigIC(TMR_T* tmr, TMR_ICConfig_T* ICConfig);
  579. void TMR_ConfigICStructInit(TMR_ICConfig_T* ICConfig);
  580. void TMR_ConfigPWM(TMR_T* tmr, TMR_ICConfig_T* PWMConfig);
  581. uint32_t TMR_ReadCaputer1(TMR_T* tmr);
  582. uint32_t TMR_ReadCaputer2(TMR_T* tmr);
  583. uint32_t TMR_ReadCaputer3(TMR_T* tmr);
  584. uint32_t TMR_ReadCaputer4(TMR_T* tmr);
  585. void TMR_ConfigIC1Prescaler(TMR_T* tmr, TMR_IC_PSC_T prescaler);
  586. void TMR_ConfigIC2Prescaler(TMR_T* tmr, TMR_IC_PSC_T prescaler);
  587. void TMR_ConfigIC3Prescaler(TMR_T* tmr, TMR_IC_PSC_T prescaler);
  588. void TMR_ConfigIC4Prescaler(TMR_T* tmr, TMR_IC_PSC_T prescaler);
  589. /* Advanced-control timers (TMR1 and TMR8) specific features */
  590. void TMR_ConfigBDT(TMR_T* tmr, TMR_BDTConfig_T* BDTConfig);
  591. void TMR_ConfigBDTStructInit( TMR_BDTConfig_T* BDTConfig);
  592. void TMR_EnablePWMOutputs(TMR_T* tmr);
  593. void TMR_DisablePWMOutputs(TMR_T* tmr);
  594. void TMR_EnableSelectCOM(TMR_T* tmr);
  595. void TMR_DisableSelectCOM(TMR_T* tmr);
  596. void TMR_EnableCCPreload(TMR_T* tmr);
  597. void TMR_DisableCCPreload(TMR_T* tmr);
  598. /* DMA management */
  599. void TMR_ConfigDMA(TMR_T* tmr, TMR_DMA_BASE_T baseAddress, TMR_DMA_BURSTLENGTH_T burstLength);
  600. void TMR_EnableDMASoure(TMR_T* tmr, uint16_t dmaSource);
  601. void TMR_DisableDMASoure(TMR_T* tmr, uint16_t dmaSource);
  602. void TMR_EnableCCDMA(TMR_T* tmr);
  603. void TMR_DisableCCDMA(TMR_T* tmr);
  604. /* Clocks management */
  605. void TMR_ConfigInternalClock(TMR_T* tmr);
  606. void TMR_ConfigIntTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource);
  607. void TMR_ConfigTrigExternalClock(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource,
  608. TMR_IC_POLARITY_T ICpolarity, uint16_t ICfilter);
  609. void TMR_ConfigETRClockMode1(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler,
  610. TMR_EXTTRG_POL_T polarity, uint16_t filter);
  611. void TMR_ConfigETRClockMode2(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler,
  612. TMR_EXTTRG_POL_T polarity, uint16_t filter);
  613. /* Synchronization management */
  614. void TMR_SelectInputTrigger(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource);
  615. void TMR_SelectOutputTrigger(TMR_T* tmr, TMR_TRGO_SOURCE_T TRGOSource);
  616. void TMR_SelectSlaveMode(TMR_T* tmr, TMR_SLAVE_MODE_T slaveMode);
  617. void TMR_EnableMasterSlaveMode(TMR_T* tmr);
  618. void TMR_DisableMasterSlaveMode(TMR_T* tmr);
  619. void TMR_ConfigETR(TMR_T* tmr, TMR_EXTTRG_PSC_T prescaler,
  620. TMR_EXTTRG_POL_T polarity, uint16_t filter);
  621. /* Interface */
  622. void TMR_ConfigEncodeInterface(TMR_T* tmr, TMR_ENCODER_MODE_T encodeMode, \
  623. TMR_IC_POLARITY_T IC1Polarity,TMR_IC_POLARITY_T IC2Polarity);
  624. void TMR_EnableHallSensor(TMR_T* tmr);
  625. void TMR_DisableHallSensor(TMR_T* tmr);
  626. /* Remapping */
  627. void TMR_ConfigRemap(TMR_T* tmr, uint32_t remap);
  628. /* Interrupts and flags */
  629. void TMR_EnableInterrupt(TMR_T* tmr, uint16_t interrupt);
  630. void TMR_DisableInterrupt(TMR_T* tmr, uint16_t interrupt);
  631. void TMR_GenerateEvent(TMR_T* tmr, uint16_t eventSources);
  632. uint16_t TMR_ReadStatusFlag(TMR_T* tmr, TMR_FLAG_T flag);
  633. void TMR_ClearStatusFlag(TMR_T* tmr, uint16_t flag);
  634. uint16_t TMR_ReadIntFlag(TMR_T* tmr, TMR_INT_T flag);
  635. void TMR_ClearIntFlag(TMR_T* tmr, uint16_t flag);
  636. #ifdef __cplusplus
  637. }
  638. #endif
  639. #endif /*__APM32F4XX_TMR_H */
  640. /**@} end of group TMR_Enumerations */
  641. /**@} end of group TMR_Driver */
  642. /**@} end of group APM32F4xx_StdPeriphDriver */