py32f002b_ll_rcc.h 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540
  1. /**
  2. ******************************************************************************
  3. * @file py32f002b_ll_rcc.h
  4. * @author MCU Application Team
  5. * @brief Header file of RCC LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2023 Puya Semiconductor Co.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by Puya under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. * @attention
  19. *
  20. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  21. * All rights reserved.</center></h2>
  22. *
  23. * This software component is licensed by ST under BSD 3-Clause license,
  24. * the "License"; You may not use this file except in compliance with the
  25. * License. You may obtain a copy of the License at:
  26. * opensource.org/licenses/BSD-3-Clause
  27. *
  28. ******************************************************************************
  29. */
  30. /* Define to prevent recursive inclusion -------------------------------------*/
  31. #ifndef __PY32F002B_LL_RCC_H
  32. #define __PY32F002B_LL_RCC_H
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36. /* Includes ------------------------------------------------------------------*/
  37. #include "py32f0xx.h"
  38. /** @addtogroup PY32F002B_LL_Driver
  39. * @{
  40. */
  41. #if defined(RCC)
  42. /** @defgroup RCC_LL RCC
  43. * @{
  44. */
  45. /* Private types -------------------------------------------------------------*/
  46. /* Private variables ---------------------------------------------------------*/
  47. /** @defgroup RCC_LL_Private_Variables RCC Private Variables
  48. * @{
  49. */
  50. /**
  51. * @}
  52. */
  53. /* Private constants ---------------------------------------------------------*/
  54. /* Private macros ------------------------------------------------------------*/
  55. #if defined(USE_FULL_LL_DRIVER)
  56. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  57. * @{
  58. */
  59. /**
  60. * @}
  61. */
  62. #endif /*USE_FULL_LL_DRIVER*/
  63. /* Exported types ------------------------------------------------------------*/
  64. #if defined(USE_FULL_LL_DRIVER)
  65. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  66. * @{
  67. */
  68. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  69. * @{
  70. */
  71. /**
  72. * @brief RCC Clocks Frequency Structure
  73. */
  74. typedef struct
  75. {
  76. uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
  77. uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
  78. uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
  79. } LL_RCC_ClocksTypeDef;
  80. /**
  81. * @}
  82. */
  83. /**
  84. * @}
  85. */
  86. #endif /* USE_FULL_LL_DRIVER */
  87. /* Exported constants --------------------------------------------------------*/
  88. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  89. * @{
  90. */
  91. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  92. * @brief Defines used to adapt values of different oscillators
  93. * @note These values could be modified in the user environment according to
  94. * HW set-up.
  95. * @{
  96. */
  97. #if !defined (HSE_VALUE)
  98. #define HSE_VALUE 24000000U /*!< Value of the HSE oscillator in Hz */
  99. #endif /* HSE_VALUE */
  100. #if !defined (HSI_VALUE)
  101. #define HSI_VALUE 24000000U /*!< Value of the HSI oscillator in Hz */
  102. #endif /* HSI_VALUE */
  103. #if defined(RCC_LSE_SUPPORT)
  104. #if !defined (LSE_VALUE)
  105. #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
  106. #endif /* LSE_VALUE */
  107. #endif
  108. #if !defined (LSI_VALUE)
  109. #define LSI_VALUE 32768U /*!< Value of the LSI oscillator in Hz */
  110. #endif /* LSI_VALUE */
  111. /**
  112. * @}
  113. */
  114. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  115. * @brief Flags defines which can be used with LL_RCC_WriteReg function
  116. * @{
  117. */
  118. #define LL_RCC_CICR_LSIRDYC RCC_CICR_LSIRDYC /*!< LSI Ready Interrupt Clear */
  119. #define LL_RCC_CICR_HSIRDYC RCC_CICR_HSIRDYC /*!< HSI Ready Interrupt Clear */
  120. #if defined(RCC_LSE_SUPPORT)
  121. #define LL_RCC_CICR_LSERDYC RCC_CICR_LSERDYC /*!< LSE Ready Interrupt Clear */
  122. #define LL_RCC_CICR_LSECSSC RCC_CICR_LSECSSC /*!< LSE Clock Security System Interrupt Clear */
  123. #endif
  124. /**
  125. * @}
  126. */
  127. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  128. * @brief Flags defines which can be used with LL_RCC_ReadReg function
  129. * @{
  130. */
  131. #define LL_RCC_CIFR_LSIRDYF RCC_CIFR_LSIRDYF /*!< LSI Ready Interrupt flag */
  132. #define LL_RCC_CIFR_HSIRDYF RCC_CIFR_HSIRDYF /*!< HSI Ready Interrupt flag */
  133. #if defined(RCC_LSE_SUPPORT)
  134. #define LL_RCC_CIFR_LSERDYF RCC_CIFR_LSERDYF /*!< LSE Ready Interrupt flag */
  135. #define LL_RCC_CIFR_LSECSSF RCC_CIFR_LSECSSF /*!< LSE Clock Security System Interrupt flag */
  136. #endif
  137. #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */
  138. #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
  139. #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
  140. #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
  141. #define LL_RCC_CSR_PWRRSTF RCC_CSR_PWRRSTF /*!< BOR or POR/PDR reset flag */
  142. /**
  143. * @}
  144. */
  145. /** @defgroup RCC_LL_EC_IT IT Defines
  146. * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
  147. * @{
  148. */
  149. #define LL_RCC_CIER_LSIRDYIE RCC_CIER_LSIRDYIE /*!< LSI Ready Interrupt Enable */
  150. #if defined(RCC_LSE_SUPPORT)
  151. #define LL_RCC_CIER_LSERDYIE RCC_CIER_LSERDYIE /*!< LSE Ready Interrupt Enable */
  152. #endif
  153. #define LL_RCC_CIER_HSIRDYIE RCC_CIER_HSIRDYIE /*!< HSI Ready Interrupt Enable */
  154. /**
  155. * @}
  156. */
  157. #if defined(RCC_LSE_SUPPORT)
  158. /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
  159. * @{
  160. */
  161. #define LL_RCC_LSEDRIVE_CLOSE 0x00000000 /*!< LSE driving capability closed */
  162. #define LL_RCC_LSEDRIVE_LOW RCC_ECSCR_LSE_DRIVER_0 /*!< LSE lower driving capability */
  163. #define LL_RCC_LSEDRIVE_MEDIUM RCC_ECSCR_LSE_DRIVER_1 /*!< LSE medium driving capability */
  164. #define LL_RCC_LSEDRIVE_HIGH RCC_ECSCR_LSE_DRIVER /*!< LSE higher driving capability */
  165. /**
  166. * @}
  167. */
  168. /** @defgroup RCC_LL_EC_LSESTARTUP LSE oscillator startup time
  169. * @{
  170. */
  171. #define LL_RCC_LSESTARTUP_DELAY_LOW RCC_ECSCR_LSE_STARTUP /*!< LSE Startup none delay */
  172. #define LL_RCC_LSESTARTUP_DELAY_MEDIUM RCC_ECSCR_LSE_STARTUP_0 /*!< LSE Startup short delay */
  173. #define LL_RCC_LSESTARTUP_DELAY_HIGH 0x00000000 /*!< LSE Startup long delay */
  174. #define LL_RCC_LSESTARTUP_DELAY_VERY_HIGH RCC_ECSCR_LSE_STARTUP_1 /*!< LSE Startup very long delay */
  175. /**
  176. * @}
  177. */
  178. #endif
  179. #if defined(RCC_BDCR_LSCOSEL)
  180. /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE LSCO Selection
  181. * @{
  182. */
  183. #define LL_RCC_LSCO_CLKSOURCE_LSI 0x00000000U /*!< LSI selection for low speed clock */
  184. #define LL_RCC_LSCO_CLKSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock */
  185. #endif
  186. /**
  187. * @}
  188. */
  189. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
  190. * @{
  191. */
  192. #define LL_RCC_SYS_CLKSOURCE_HSISYS 0x00000000U /*!< HSISYS selection as system clock */
  193. #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_0 /*!< HSE selection as system clock */
  194. #define LL_RCC_SYS_CLKSOURCE_LSI (RCC_CFGR_SW_1 | RCC_CFGR_SW_0) /*!< LSI selection used as system clock */
  195. #if defined(RCC_LSE_SUPPORT)
  196. #define LL_RCC_SYS_CLKSOURCE_LSE RCC_CFGR_SW_2 /*!< LSE selection used as system clock */
  197. #endif
  198. /**
  199. * @}
  200. */
  201. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
  202. * @{
  203. */
  204. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSISYS 0x00000000U /*!< HSISYS used as system clock */
  205. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_0 /*!< HSE used as system clock */
  206. #define LL_RCC_SYS_CLKSOURCE_STATUS_LSI (RCC_CFGR_SWS_1 | RCC_CFGR_SWS_0) /*!< LSI used as system clock */
  207. #if defined(RCC_LSE_SUPPORT)
  208. #define LL_RCC_SYS_CLKSOURCE_STATUS_LSE RCC_CFGR_SWS_2 /*!< LSE used as system clock */
  209. #endif
  210. /**
  211. * @}
  212. */
  213. /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
  214. * @{
  215. */
  216. #define LL_RCC_SYSCLK_DIV_1 0x00000000U /*!< SYSCLK not divided */
  217. #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_3 /*!< SYSCLK divided by 2 */
  218. #define LL_RCC_SYSCLK_DIV_4 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_0) /*!< SYSCLK divided by 4 */
  219. #define LL_RCC_SYSCLK_DIV_8 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_1) /*!< SYSCLK divided by 8 */
  220. #define LL_RCC_SYSCLK_DIV_16 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_1 | RCC_CFGR_HPRE_0) /*!< SYSCLK divided by 16 */
  221. #define LL_RCC_SYSCLK_DIV_64 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2) /*!< SYSCLK divided by 64 */
  222. #define LL_RCC_SYSCLK_DIV_128 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_0) /*!< SYSCLK divided by 128 */
  223. #define LL_RCC_SYSCLK_DIV_256 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_1) /*!< SYSCLK divided by 256 */
  224. #define LL_RCC_SYSCLK_DIV_512 (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_1 | RCC_CFGR_HPRE_0) /*!< SYSCLK divided by 512 */
  225. /**
  226. * @}
  227. */
  228. /** @defgroup RCC_LL_EC_APB1_DIV APB1 low-speed prescaler (APB1)
  229. * @{
  230. */
  231. #define LL_RCC_APB1_DIV_1 0x00000000U /*!< HCLK not divided */
  232. #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE_2 /*!< HCLK divided by 2 */
  233. #define LL_RCC_APB1_DIV_4 (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_0) /*!< HCLK divided by 4 */
  234. #define LL_RCC_APB1_DIV_8 (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_1) /*!< HCLK divided by 8 */
  235. #define LL_RCC_APB1_DIV_16 (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_1 | RCC_CFGR_PPRE_0) /*!< HCLK divided by 16 */
  236. /**
  237. * @}
  238. */
  239. /** @defgroup RCC_LL_EC_HSI_DIV HSI division factor
  240. * @{
  241. */
  242. #define LL_RCC_HSI_DIV_1 0x00000000U /*!< HSI not divided */
  243. #define LL_RCC_HSI_DIV_2 RCC_CR_HSIDIV_0 /*!< HSI divided by 2 */
  244. #define LL_RCC_HSI_DIV_4 RCC_CR_HSIDIV_1 /*!< HSI divided by 4 */
  245. #define LL_RCC_HSI_DIV_8 (RCC_CR_HSIDIV_1 | RCC_CR_HSIDIV_0) /*!< HSI divided by 8 */
  246. #define LL_RCC_HSI_DIV_16 RCC_CR_HSIDIV_2 /*!< HSI divided by 16 */
  247. #define LL_RCC_HSI_DIV_32 (RCC_CR_HSIDIV_2 | RCC_CR_HSIDIV_0) /*!< HSI divided by 32 */
  248. #define LL_RCC_HSI_DIV_64 (RCC_CR_HSIDIV_2 | RCC_CR_HSIDIV_1) /*!< HSI divided by 64 */
  249. #define LL_RCC_HSI_DIV_128 RCC_CR_HSIDIV /*!< HSI divided by 128 */
  250. /**
  251. * @}
  252. */
  253. /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
  254. * @{
  255. */
  256. #define LL_RCC_MCO1SOURCE_NOCLOCK 0x00000000U /*!< MCO output disabled, no clock on MCO */
  257. #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_0 /*!< SYSCLK selection as MCO1 source */
  258. #define LL_RCC_MCO1SOURCE_HSI (RCC_CFGR_MCOSEL_0| RCC_CFGR_MCOSEL_1) /*!< HSI selection as MCO1 source */
  259. #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_2 /*!< HSE selection as MCO1 source */
  260. #define LL_RCC_MCO1SOURCE_LSI (RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSI selection as MCO1 source */
  261. #if defined(RCC_LSE_SUPPORT)
  262. #define LL_RCC_MCO1SOURCE_LSE (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSE selection as MCO1 source */
  263. #endif
  264. /**
  265. * @}
  266. */
  267. /** @defgroup RCC_LL_EC_MCO Peripheral MCO get clock source
  268. * @{
  269. */
  270. #define LL_RCC_MCO1_CLKSOURCE RCC_CFGR_MCOSEL /*!< MCO1 Clock source selection */
  271. /**
  272. * @}
  273. */
  274. /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
  275. * @{
  276. */
  277. #define LL_RCC_MCO1_DIV_1 0x00000000U /*!< MCO1 not divided */
  278. #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_0 /*!< MCO1 divided by 2 */
  279. #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_1 /*!< MCO1 divided by 4 */
  280. #define LL_RCC_MCO1_DIV_8 (RCC_CFGR_MCOPRE_1 | RCC_CFGR_MCOPRE_0) /*!< MCO1 divided by 8 */
  281. #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_2 /*!< MCO1 divided by 16 */
  282. #define LL_RCC_MCO1_DIV_32 (RCC_CFGR_MCOPRE_2 | RCC_CFGR_MCOPRE_0) /*!< MCO1 divided by 32 */
  283. #define LL_RCC_MCO1_DIV_64 (RCC_CFGR_MCOPRE_2 | RCC_CFGR_MCOPRE_1) /*!< MCO1 divided by 64 */
  284. #define LL_RCC_MCO1_DIV_128 (RCC_CFGR_MCOPRE_2 | RCC_CFGR_MCOPRE_1 | RCC_CFGR_MCOPRE_0) /*!< MCO1 divided by 128 */
  285. /**
  286. * @}
  287. */
  288. #if defined(USE_FULL_LL_DRIVER)
  289. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  290. * @{
  291. */
  292. #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
  293. #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
  294. /**
  295. * @}
  296. */
  297. #endif /* USE_FULL_LL_DRIVER */
  298. #if defined(COMP1)
  299. /** @defgroup RCC_LL_EC_COMPx_CLKSOURCE Peripheral COMP clock source selection
  300. * @{
  301. */
  302. #define LL_RCC_COMP1_CLKSOURCE_PCLK1 (RCC_CCIPR_COMP1SEL | (0x00000000U >> 8U)) /*!< PCLK1 selected as COMP1 clock */
  303. #define LL_RCC_COMP1_CLKSOURCE_LSC (RCC_CCIPR_COMP1SEL | (RCC_CCIPR_COMP1SEL >> 8U)) /*!< LSC selected as COMP1 clock */
  304. #if defined(COMP2)
  305. #define LL_RCC_COMP2_CLKSOURCE_PCLK1 (RCC_CCIPR_COMP2SEL | (0x00000000U >> 8U)) /*!< PCLK1 selected as COMP2 clock */
  306. #define LL_RCC_COMP2_CLKSOURCE_LSC (RCC_CCIPR_COMP2SEL | (RCC_CCIPR_COMP2SEL >> 8U)) /*!< LSC selected as COMP2 clock */
  307. #endif
  308. /**
  309. * @}
  310. */
  311. #endif /* COMP1 && COMP2 */
  312. #if defined(RCC_CCIPR_LPTIMSEL)
  313. /** @defgroup RCC_LL_EC_LPTIMx_CLKSOURCE Peripheral LPTIM clock source selection
  314. * @{
  315. */
  316. #define LL_RCC_LPTIM1_CLKSOURCE_NONE RCC_CCIPR_LPTIMSEL_1 /*!< No clock used as LPTIM1 clock */
  317. #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 selected as LPTIM1 clock */
  318. #define LL_RCC_LPTIM1_CLKSOURCE_LSI RCC_CCIPR_LPTIMSEL_0 /*!< LSI selected as LPTIM1 clock */
  319. #if defined(RCC_LSE_SUPPORT)
  320. #define LL_RCC_LPTIM1_CLKSOURCE_LSE RCC_CCIPR_LPTIMSEL /*!< LSE selected as LPTIM1 clock */
  321. #endif
  322. /**
  323. * @}
  324. */
  325. #endif /* RCC_CCIPR_LPTIMSEL */
  326. #if defined(COMP1)
  327. /** @defgroup RCC_LL_EC_COMP Peripheral COMP get clock source
  328. * @{
  329. */
  330. #define LL_RCC_COMP1_CLKSOURCE RCC_CCIPR_COMP1SEL /*!< COMP1 Clock source selection */
  331. #if defined(COMP2)
  332. #define LL_RCC_COMP2_CLKSOURCE RCC_CCIPR_COMP2SEL /*!< COMP2 Clock source selection */
  333. #endif /* COMP2 */
  334. /**
  335. * @}
  336. */
  337. #endif /* COMP1 */
  338. #if defined(RCC_CCIPR_LPTIMSEL)
  339. /** @defgroup RCC_LL_EC_LPTIM Peripheral LPTIM get clock source
  340. * @{
  341. */
  342. #define LL_RCC_LPTIM1_CLKSOURCE RCC_CCIPR_LPTIMSEL /*!< LPTIM1 Clock source selection */
  343. /**
  344. * @}
  345. */
  346. #endif /* RCC_CCIPR_LPTIMSEL */
  347. /** @defgroup RCC_HSI_EC_Calibration HSI Calibration
  348. * @{
  349. */
  350. #define LL_RCC_HSICALIBRATION_24MHz ((*(uint32_t *)(0x1FFF0100)) & 0xFFFF) /*!< 24MHz HSI calibration trimming value */
  351. #if defined(RCC_HSI48M_SUPPORT)
  352. #define LL_RCC_HSICALIBRATION_48MHz ((*(uint32_t *)(0x1FFF0104)) & 0xFFFF) /*!< 48MHz HSI calibration trimming value */
  353. #endif
  354. /**
  355. * @}
  356. */
  357. /** @defgroup RCC_LSI_EC_Calibration LSI Calibration
  358. * @{
  359. */
  360. #define LL_RCC_LSICALIBRATION_32768Hz ((*(uint32_t *)(0x1FFF0144)) & 0x1FF) /*!< 32.768KHz LSI calibration trimming value */
  361. #define LL_RCC_LSICALIBRATION_38400Hz ((*(uint32_t *)(0x1FFF0148)) & 0x1FF) /*!< 38.4KHz LSI calibration trimming value */
  362. /**
  363. * @}
  364. */
  365. /**
  366. * @}
  367. */
  368. /* Exported macro ------------------------------------------------------------*/
  369. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  370. * @{
  371. */
  372. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  373. * @{
  374. */
  375. /**
  376. * @brief Write a value in RCC register
  377. * @param __REG__ Register to be written
  378. * @param __VALUE__ Value to be written in the register
  379. * @retval None
  380. */
  381. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG((RCC->__REG__), (__VALUE__))
  382. /**
  383. * @brief Read a value in RCC register
  384. * @param __REG__ Register to be read
  385. * @retval Register value
  386. */
  387. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  388. /**
  389. * @}
  390. */
  391. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  392. * @{
  393. */
  394. /**
  395. * @brief Helper macro to calculate the HCLK frequency
  396. * @param __SYSCLKFREQ__ SYSCLK frequency
  397. * @param __AHBPRESCALER__ This parameter can be one of the following values:
  398. * @arg @ref LL_RCC_SYSCLK_DIV_1
  399. * @arg @ref LL_RCC_SYSCLK_DIV_2
  400. * @arg @ref LL_RCC_SYSCLK_DIV_4
  401. * @arg @ref LL_RCC_SYSCLK_DIV_8
  402. * @arg @ref LL_RCC_SYSCLK_DIV_16
  403. * @arg @ref LL_RCC_SYSCLK_DIV_64
  404. * @arg @ref LL_RCC_SYSCLK_DIV_128
  405. * @arg @ref LL_RCC_SYSCLK_DIV_256
  406. * @arg @ref LL_RCC_SYSCLK_DIV_512
  407. * @retval HCLK clock frequency (in Hz)
  408. */
  409. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__,__AHBPRESCALER__) \
  410. ((__SYSCLKFREQ__) >> (AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos] & 0x1FU))
  411. /**
  412. * @brief Helper macro to calculate the PCLK1 frequency (APB1)
  413. * @param __HCLKFREQ__ HCLK frequency
  414. * @param __APB1PRESCALER__ This parameter can be one of the following values:
  415. * @arg @ref LL_RCC_APB1_DIV_1
  416. * @arg @ref LL_RCC_APB1_DIV_2
  417. * @arg @ref LL_RCC_APB1_DIV_4
  418. * @arg @ref LL_RCC_APB1_DIV_8
  419. * @arg @ref LL_RCC_APB1_DIV_16
  420. * @retval PCLK1 clock frequency (in Hz)
  421. */
  422. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) \
  423. ((__HCLKFREQ__) >> (APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE_Pos] & 0x1FU))
  424. /**
  425. * @brief Helper macro to calculate the HSISYS frequency
  426. * @param __HSIDIV__ This parameter can be one of the following values:
  427. * @arg @ref LL_RCC_HSI_DIV_1
  428. * @arg @ref LL_RCC_HSI_DIV_2
  429. * @arg @ref LL_RCC_HSI_DIV_4
  430. * @arg @ref LL_RCC_HSI_DIV_8
  431. * @arg @ref LL_RCC_HSI_DIV_16
  432. * @arg @ref LL_RCC_HSI_DIV_32
  433. * @arg @ref LL_RCC_HSI_DIV_64
  434. * @arg @ref LL_RCC_HSI_DIV_128
  435. * @retval HSISYS clock frequency (in Hz)
  436. */
  437. #define __LL_RCC_CALC_HSI_FREQ(__HSIDIV__) \
  438. (HSIFreqTable[(RCC->ICSCR & RCC_ICSCR_HSI_FS) >> RCC_ICSCR_HSI_FS_Pos] / (1U << ((__HSIDIV__)>> RCC_CR_HSIDIV_Pos)))
  439. /**
  440. * @}
  441. */
  442. /**
  443. * @}
  444. */
  445. /* Exported functions --------------------------------------------------------*/
  446. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  447. * @{
  448. */
  449. /** @defgroup RCC_LL_EF_HSI HSI
  450. * @{
  451. */
  452. /**
  453. * @brief Enable HSI oscillator
  454. * @rmtoll CR HSION LL_RCC_HSI_Enable
  455. * @retval None
  456. */
  457. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  458. {
  459. SET_BIT(RCC->CR, RCC_CR_HSION);
  460. }
  461. /**
  462. * @brief Disable HSI oscillator
  463. * @rmtoll CR HSION LL_RCC_HSI_Disable
  464. * @retval None
  465. */
  466. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  467. {
  468. CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  469. }
  470. /**
  471. * @brief Check if HSI clock is ready
  472. * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
  473. * @retval State of bit (1 or 0).
  474. */
  475. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  476. {
  477. return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)) ? 1UL : 0UL);
  478. }
  479. /**
  480. * @brief Set HSI Calibration trimming
  481. * @param Value Between Min_Data = 0 and Max_Data = 0x1FFF
  482. * @retval None
  483. */
  484. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  485. {
  486. MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSI_TRIM, Value << RCC_ICSCR_HSI_TRIM_Pos);
  487. }
  488. /**
  489. * @brief Get HSI Calibration trimming
  490. * @rmtoll ICSCR HSITRIM LL_RCC_HSI_GetCalibTrimming
  491. * @retval Between Min_Data = 0 and Max_Data = 0x1FFF
  492. */
  493. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  494. {
  495. return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSI_TRIM) >> RCC_ICSCR_HSI_TRIM_Pos);
  496. }
  497. /**
  498. * @brief Set HSI Calibration Frequency
  499. * @param Value This parameter can be one of the following values:
  500. * @arg @ref LL_RCC_HSICALIBRATION_24MHz
  501. * @arg @ref LL_RCC_HSICALIBRATION_48MHz
  502. * @note Depending on devices and packages, some calibration values may not be available.
  503. * Refer to device datasheet for calibration values availability.
  504. * @retval None
  505. */
  506. __STATIC_INLINE void LL_RCC_HSI_SetCalibFreq(uint32_t Value)
  507. {
  508. MODIFY_REG(RCC->ICSCR, (RCC_ICSCR_HSI_FS | RCC_ICSCR_HSI_TRIM), (Value << RCC_ICSCR_HSI_TRIM_Pos));
  509. }
  510. /**
  511. * @brief Get HSI Frequency
  512. * @retval HSI clock frequency (in Hz)
  513. */
  514. __STATIC_INLINE uint32_t LL_RCC_HSI_GetFreq(void)
  515. {
  516. return (uint32_t)HSIFreqTable[(RCC->ICSCR & RCC_ICSCR_HSI_FS) >> RCC_ICSCR_HSI_FS_Pos];
  517. }
  518. /**
  519. * @}
  520. */
  521. /** @defgroup RCC_LL_EF_HSE HSE
  522. * @{
  523. */
  524. /**
  525. * @brief Enable external clock source (HSE bypass).
  526. * @rmtoll CR HSEEN LL_RCC_HSE_EnableBypass
  527. * @retval None
  528. */
  529. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  530. {
  531. SET_BIT(RCC->CR, RCC_CR_HSEEN);
  532. }
  533. /**
  534. * @brief Disable external clock source (HSE bypass).
  535. * @rmtoll CR HSEEN LL_RCC_HSE_DisableBypass
  536. * @retval None
  537. */
  538. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  539. {
  540. CLEAR_BIT(RCC->CR, RCC_CR_HSEEN);
  541. }
  542. /**
  543. * @brief Check if HSE Bypass clock is on
  544. * @rmtoll CR HSEEN LL_RCC_HSE_IsBypass
  545. * @retval State of bit (1 or 0).
  546. */
  547. __STATIC_INLINE uint32_t LL_RCC_HSE_IsBypass(void)
  548. {
  549. return ((READ_BIT(RCC->CR, RCC_CR_HSEEN) == (RCC_CR_HSEEN)) ? 1UL : 0UL);
  550. }
  551. /**
  552. * @}
  553. */
  554. #if defined(RCC_LSE_SUPPORT)
  555. /** @defgroup RCC_LL_EF_LSE LSE
  556. * @{
  557. */
  558. /**
  559. * @brief Enable Low Speed External (LSE) crystal.
  560. * @rmtoll BDCR LSEON LL_RCC_LSE_Enable
  561. * @retval None
  562. */
  563. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  564. {
  565. SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  566. }
  567. /**
  568. * @brief Disable Low Speed External (LSE) crystal.
  569. * @rmtoll BDCR LSEON LL_RCC_LSE_Disable
  570. * @retval None
  571. */
  572. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  573. {
  574. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  575. }
  576. /**
  577. * @brief Enable external clock source (LSE bypass).
  578. * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass
  579. * @retval None
  580. */
  581. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  582. {
  583. SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  584. }
  585. /**
  586. * @brief Disable external clock source (LSE bypass).
  587. * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass
  588. * @retval None
  589. */
  590. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  591. {
  592. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  593. }
  594. /**
  595. * @brief Set LSE oscillator drive capability
  596. * @note The oscillator is in Xtal mode when it is not in bypass mode.
  597. * @param LSEDrive This parameter can be one of the following values:
  598. * @arg @ref LL_RCC_LSEDRIVE_CLOSE
  599. * @arg @ref LL_RCC_LSEDRIVE_LOW
  600. * @arg @ref LL_RCC_LSEDRIVE_MEDIUM
  601. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  602. * @retval None
  603. */
  604. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  605. {
  606. MODIFY_REG(RCC->ECSCR, RCC_ECSCR_LSE_DRIVER, LSEDrive);
  607. }
  608. /**
  609. * @brief Get LSE oscillator drive capability
  610. * @retval Returned value can be one of the following values:
  611. * @arg @ref LL_RCC_LSEDRIVE_CLOSE
  612. * @arg @ref LL_RCC_LSEDRIVE_LOW
  613. * @arg @ref LL_RCC_LSEDRIVE_MEDIUM
  614. * @arg @ref LL_RCC_LSEDRIVE_HIGH
  615. */
  616. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  617. {
  618. return (uint32_t)(READ_BIT(RCC->ECSCR, RCC_ECSCR_LSE_DRIVER));
  619. }
  620. /**
  621. * @brief Set LSE startup time
  622. * @param LSEStartup This parameter can be one of the following values:
  623. * @arg @ref LL_RCC_LSESTARTUP_DELAY_LOW
  624. * @arg @ref LL_RCC_LSESTARTUP_DELAY_MEDIUM
  625. * @arg @ref LL_RCC_LSESTARTUP_DELAY_HIGH
  626. * @arg @ref LL_RCC_LSESTARTUP_DELAY_VERY_HIGH
  627. * @retval None
  628. */
  629. __STATIC_INLINE void LL_RCC_LSE_SetStartupTime(uint32_t LSEStartup)
  630. {
  631. MODIFY_REG(RCC->ECSCR, RCC_ECSCR_LSE_STARTUP, LSEStartup);
  632. }
  633. /**
  634. * @brief Get LSE startup time
  635. * @retval Returned value can be one of the following values:
  636. * @arg @ref LL_RCC_LSESTARTUP_DELAY_LOW
  637. * @arg @ref LL_RCC_LSESTARTUP_DELAY_MEDIUM
  638. * @arg @ref LL_RCC_LSESTARTUP_DELAY_HIGH
  639. * @arg @ref LL_RCC_LSESTARTUP_DELAY_VERY_HIGH
  640. */
  641. __STATIC_INLINE uint32_t LL_RCC_LSE_GetStartupTime(void)
  642. {
  643. return (uint32_t)(READ_BIT(RCC->ECSCR, RCC_ECSCR_LSE_STARTUP));
  644. }
  645. /**
  646. * @brief Enable Clock security system on LSE.
  647. * @rmtoll BDCR LSECSSON LL_RCC_LSE_EnableCSS
  648. * @retval None
  649. */
  650. __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
  651. {
  652. SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
  653. }
  654. /**
  655. * @brief Disable Clock security system on LSE.
  656. * @note Clock security system can be disabled only after a LSE
  657. * failure detection. In that case it MUST be disabled by software.
  658. * @rmtoll BDCR LSECSSON LL_RCC_LSE_DisableCSS
  659. * @retval None
  660. */
  661. __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void)
  662. {
  663. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
  664. }
  665. /**
  666. * @brief Check if LSE oscillator Ready
  667. * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady
  668. * @retval State of bit (1 or 0).
  669. */
  670. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  671. {
  672. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)) ? 1UL : 0UL);
  673. }
  674. /**
  675. * @brief Check if CSS on LSE failure Detection
  676. * @rmtoll BDCR LSECSSD LL_RCC_LSE_IsCSSDetected
  677. * @retval State of bit (1 or 0).
  678. */
  679. __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
  680. {
  681. return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD)) ? 1UL : 0UL);
  682. }
  683. /**
  684. * @}
  685. */
  686. #endif
  687. /** @defgroup RCC_LL_EF_LSI LSI
  688. * @{
  689. */
  690. /**
  691. * @brief Enable LSI Oscillator
  692. * @rmtoll CSR LSION LL_RCC_LSI_Enable
  693. * @retval None
  694. */
  695. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  696. {
  697. SET_BIT(RCC->CSR, RCC_CSR_LSION);
  698. }
  699. /**
  700. * @brief Disable LSI Oscillator
  701. * @rmtoll CSR LSION LL_RCC_LSI_Disable
  702. * @retval None
  703. */
  704. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  705. {
  706. CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  707. }
  708. /**
  709. * @brief Check if LSI is Ready
  710. * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
  711. * @retval State of bit (1 or 0).
  712. */
  713. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  714. {
  715. return ((READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY)) ? 1UL : 0UL);
  716. }
  717. /**
  718. * @brief Set LSI Calibration trimming
  719. * @param Value This parameter can be one of the following values:
  720. * @arg @ref LL_RCC_LSICALIBRATION_32768Hz
  721. * @arg @ref LL_RCC_LSICALIBRATION_38400Hz
  722. * @retval None
  723. */
  724. __STATIC_INLINE void LL_RCC_LSI_SetCalibTrimming(uint32_t Value)
  725. {
  726. MODIFY_REG(RCC->ICSCR, RCC_ICSCR_LSI_TRIM, (Value << RCC_ICSCR_LSI_TRIM_Pos));
  727. }
  728. /**
  729. * @brief Get LSI Calibration trimming
  730. * @rmtoll ICSCR LSI_TRIM LL_RCC_LSI_GetCalibTrimming
  731. * @retval Between Min_Data = 0 and Max_Data = 0x1FFF
  732. */
  733. __STATIC_INLINE uint32_t LL_RCC_LSI_GetCalibTrimming(void)
  734. {
  735. return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_LSI_TRIM) >> RCC_ICSCR_LSI_TRIM_Pos);
  736. }
  737. /**
  738. * @brief Get LSI Frequency
  739. * @retval HSI clock frequency (in Hz)
  740. */
  741. __STATIC_INLINE uint32_t LL_RCC_LSI_GetFreq(void)
  742. {
  743. return ((LL_RCC_LSI_GetCalibTrimming() == LL_RCC_LSICALIBRATION_32768Hz) ? 32768UL : \
  744. ((LL_RCC_LSI_GetCalibTrimming() == LL_RCC_LSICALIBRATION_38400Hz) ? 38400UL : 0));
  745. }
  746. /**
  747. * @}
  748. */
  749. #if defined(RCC_BDCR_LSCOEN)
  750. /** @defgroup RCC_LL_EF_LSCO LSCO
  751. * @{
  752. */
  753. /**
  754. * @brief Enable Low speed clock
  755. * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Enable
  756. * @retval None
  757. */
  758. __STATIC_INLINE void LL_RCC_LSCO_Enable(void)
  759. {
  760. SET_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
  761. }
  762. /**
  763. * @brief Disable Low speed clock
  764. * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Disable
  765. * @retval None
  766. */
  767. __STATIC_INLINE void LL_RCC_LSCO_Disable(void)
  768. {
  769. CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
  770. }
  771. #if defined(RCC_BDCR_LSCOSEL)
  772. /**
  773. * @brief Configure Low speed clock selection
  774. * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_SetSource
  775. * @param Source This parameter can be one of the following values:
  776. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
  777. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
  778. * @retval None
  779. */
  780. __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
  781. {
  782. MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL, Source);
  783. }
  784. /**
  785. * @brief Get Low speed clock selection
  786. * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_GetSource
  787. * @retval Returned value can be one of the following values:
  788. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
  789. * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
  790. */
  791. __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
  792. {
  793. return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSCOSEL));
  794. }
  795. /**
  796. * @}
  797. */
  798. #endif
  799. #endif
  800. /** @defgroup RCC_LL_EF_System System
  801. * @{
  802. */
  803. /**
  804. * @brief Configure the system clock source
  805. * @rmtoll CFGR SW LL_RCC_SetSysClkSource
  806. * @param Source This parameter can be one of the following values:
  807. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSISYS
  808. * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  809. * @arg @ref LL_RCC_SYS_CLKSOURCE_LSI
  810. * @arg @ref LL_RCC_SYS_CLKSOURCE_LSE
  811. * @note Depending on devices and packages, some clocks may not be available.
  812. * Refer to device datasheet for clocks availability.
  813. * @retval None
  814. */
  815. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  816. {
  817. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  818. }
  819. /**
  820. * @brief Get the system clock source
  821. * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
  822. * @retval Returned value can be one of the following values:
  823. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSISYS
  824. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  825. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_LSI
  826. * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_LSE
  827. * @note Depending on devices and packages, some clocks may not be available.
  828. * Refer to device datasheet for clocks availability.
  829. */
  830. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  831. {
  832. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  833. }
  834. /**
  835. * @brief Set AHB prescaler
  836. * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
  837. * @param Prescaler This parameter can be one of the following values:
  838. * @arg @ref LL_RCC_SYSCLK_DIV_1
  839. * @arg @ref LL_RCC_SYSCLK_DIV_2
  840. * @arg @ref LL_RCC_SYSCLK_DIV_4
  841. * @arg @ref LL_RCC_SYSCLK_DIV_8
  842. * @arg @ref LL_RCC_SYSCLK_DIV_16
  843. * @arg @ref LL_RCC_SYSCLK_DIV_64
  844. * @arg @ref LL_RCC_SYSCLK_DIV_128
  845. * @arg @ref LL_RCC_SYSCLK_DIV_256
  846. * @arg @ref LL_RCC_SYSCLK_DIV_512
  847. * @retval None
  848. */
  849. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  850. {
  851. MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  852. }
  853. /**
  854. * @brief Set APB1 prescaler
  855. * @rmtoll CFGR PPRE LL_RCC_SetAPB1Prescaler
  856. * @param Prescaler This parameter can be one of the following values:
  857. * @arg @ref LL_RCC_APB1_DIV_1
  858. * @arg @ref LL_RCC_APB1_DIV_2
  859. * @arg @ref LL_RCC_APB1_DIV_4
  860. * @arg @ref LL_RCC_APB1_DIV_8
  861. * @arg @ref LL_RCC_APB1_DIV_16
  862. * @retval None
  863. */
  864. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  865. {
  866. MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, Prescaler);
  867. }
  868. /**
  869. * @brief Set HSI division factor
  870. * @rmtoll CR HSIDIV LL_RCC_SetHSIDiv
  871. * @note HSIDIV parameter is only applied to SYSCLK_Frequency when HSI is used as
  872. * system clock source.
  873. * @param HSIDiv This parameter can be one of the following values:
  874. * @arg @ref LL_RCC_HSI_DIV_1
  875. * @arg @ref LL_RCC_HSI_DIV_2
  876. * @arg @ref LL_RCC_HSI_DIV_4
  877. * @arg @ref LL_RCC_HSI_DIV_8
  878. * @arg @ref LL_RCC_HSI_DIV_16
  879. * @arg @ref LL_RCC_HSI_DIV_32
  880. * @arg @ref LL_RCC_HSI_DIV_64
  881. * @arg @ref LL_RCC_HSI_DIV_128
  882. * @retval None
  883. */
  884. __STATIC_INLINE void LL_RCC_SetHSIDiv(uint32_t HSIDiv)
  885. {
  886. MODIFY_REG(RCC->CR, RCC_CR_HSIDIV, HSIDiv);
  887. }
  888. /**
  889. * @brief Get AHB prescaler
  890. * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
  891. * @retval Returned value can be one of the following values:
  892. * @arg @ref LL_RCC_SYSCLK_DIV_1
  893. * @arg @ref LL_RCC_SYSCLK_DIV_2
  894. * @arg @ref LL_RCC_SYSCLK_DIV_4
  895. * @arg @ref LL_RCC_SYSCLK_DIV_8
  896. * @arg @ref LL_RCC_SYSCLK_DIV_16
  897. * @arg @ref LL_RCC_SYSCLK_DIV_64
  898. * @arg @ref LL_RCC_SYSCLK_DIV_128
  899. * @arg @ref LL_RCC_SYSCLK_DIV_256
  900. * @arg @ref LL_RCC_SYSCLK_DIV_512
  901. */
  902. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  903. {
  904. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  905. }
  906. /**
  907. * @brief Get APB1 prescaler
  908. * @rmtoll CFGR PPRE LL_RCC_GetAPB1Prescaler
  909. * @retval Returned value can be one of the following values:
  910. * @arg @ref LL_RCC_APB1_DIV_1
  911. * @arg @ref LL_RCC_APB1_DIV_2
  912. * @arg @ref LL_RCC_APB1_DIV_4
  913. * @arg @ref LL_RCC_APB1_DIV_8
  914. * @arg @ref LL_RCC_APB1_DIV_16
  915. */
  916. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  917. {
  918. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE));
  919. }
  920. /**
  921. * @brief Get HSI division factor
  922. * @rmtoll CR HSIDIV LL_RCC_GetHSIDiv
  923. * @note HSIDIV parameter is only applied to SYSCLK_Frequency when HSI is used as
  924. * system clock source.
  925. * @retval Returned value can be one of the following values:
  926. * @arg @ref LL_RCC_HSI_DIV_1
  927. * @arg @ref LL_RCC_HSI_DIV_2
  928. * @arg @ref LL_RCC_HSI_DIV_4
  929. * @arg @ref LL_RCC_HSI_DIV_8
  930. * @arg @ref LL_RCC_HSI_DIV_16
  931. * @arg @ref LL_RCC_HSI_DIV_32
  932. * @arg @ref LL_RCC_HSI_DIV_64
  933. * @arg @ref LL_RCC_HSI_DIV_128
  934. */
  935. __STATIC_INLINE uint32_t LL_RCC_GetHSIDiv(void)
  936. {
  937. return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSIDIV));
  938. }
  939. /**
  940. * @}
  941. */
  942. /** @defgroup RCC_LL_EF_MCO MCO
  943. * @{
  944. */
  945. /**
  946. * @brief Configure MCOx
  947. * @rmtoll CFGR MCOSEL LL_RCC_ConfigMCO\n
  948. * CFGR MCOPRE LL_RCC_ConfigMCO
  949. * @param MCOxSource This parameter can be one of the following values:
  950. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  951. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  952. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  953. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  954. * @arg @ref LL_RCC_MCO1SOURCE_LSI
  955. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  956. * @note Depending on devices and packages, some clocks may not be available.
  957. * Refer to device datasheet for clocks availability.
  958. * @param MCOxPrescaler This parameter can be one of the following values:
  959. * @arg @ref LL_RCC_MCO1_DIV_1
  960. * @arg @ref LL_RCC_MCO1_DIV_2
  961. * @arg @ref LL_RCC_MCO1_DIV_4
  962. * @arg @ref LL_RCC_MCO1_DIV_8
  963. * @arg @ref LL_RCC_MCO1_DIV_16
  964. * @arg @ref LL_RCC_MCO1_DIV_32
  965. * @arg @ref LL_RCC_MCO1_DIV_64
  966. * @arg @ref LL_RCC_MCO1_DIV_128
  967. * @retval None
  968. */
  969. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  970. {
  971. MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
  972. }
  973. /**
  974. * @brief Get MCO clock source
  975. * @rmtoll CFGR MCOSEL LL_RCC_GetMCOClockSource
  976. * @param MCOx This parameter can be one of the following values:
  977. * @arg @ref LL_RCC_MCO1_CLKSOURCE
  978. * @retval Returned value can be one of the following values:
  979. * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  980. * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  981. * @arg @ref LL_RCC_MCO1SOURCE_HSI
  982. * @arg @ref LL_RCC_MCO1SOURCE_HSE
  983. * @arg @ref LL_RCC_MCO1SOURCE_LSI
  984. * @arg @ref LL_RCC_MCO1SOURCE_LSE
  985. * @note Depending on devices and packages, some clocks may not be available.
  986. * Refer to device datasheet for clocks availability.
  987. */
  988. __STATIC_INLINE uint32_t LL_RCC_GetMCOClockSource(uint32_t MCOx)
  989. {
  990. return (uint32_t)(READ_BIT(RCC->CFGR, MCOx));
  991. }
  992. /**
  993. * @brief Get MCO division factor
  994. * @rmtoll CFGR MCOPRE LL_RCC_GetMCODiv
  995. * @param MCOx This parameter can be one of the following values:
  996. * @arg @ref LL_RCC_MCO1_CLKSOURCE
  997. * @retval Returned value can be one of the following values:
  998. * @arg @ref LL_RCC_MCO1_DIV_1
  999. * @arg @ref LL_RCC_MCO1_DIV_2
  1000. * @arg @ref LL_RCC_MCO1_DIV_4
  1001. * @arg @ref LL_RCC_MCO1_DIV_8
  1002. * @arg @ref LL_RCC_MCO1_DIV_16
  1003. * @arg @ref LL_RCC_MCO1_DIV_32
  1004. * @arg @ref LL_RCC_MCO1_DIV_64
  1005. * @arg @ref LL_RCC_MCO1_DIV_128
  1006. */
  1007. __STATIC_INLINE uint32_t LL_RCC_GetMCODiv(uint32_t MCOx)
  1008. {
  1009. return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_MCOPRE));
  1010. }
  1011. /**
  1012. * @}
  1013. */
  1014. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1015. * @{
  1016. */
  1017. #if defined(COMP1)
  1018. /**
  1019. * @brief Configure COMPx clock source
  1020. * @rmtoll CCIPR COMPxSEL LL_RCC_SetCOMPClockSource
  1021. * @param COMPxSource This parameter can be one of the following values:
  1022. * @arg @ref LL_RCC_COMP1_CLKSOURCE_PCLK1
  1023. * @arg @ref LL_RCC_COMP1_CLKSOURCE_LSC
  1024. * @arg @ref LL_RCC_COMP2_CLKSOURCE_PCLK1
  1025. * @arg @ref LL_RCC_COMP2_CLKSOURCE_LSC
  1026. * @note Depending on devices and packages,some COMP may not be available.
  1027. * Refer to device datasheet for COMP availability.
  1028. * @retval None
  1029. */
  1030. __STATIC_INLINE void LL_RCC_SetCOMPClockSource(uint32_t COMPxSource)
  1031. {
  1032. register uint32_t regTmp1 = (RCC->CCIPR & 0x0000FF00U) & (~(COMPxSource & 0x0000FF00U));
  1033. regTmp1 = regTmp1 | (regTmp1 >> 2);
  1034. register uint32_t regTmp2 = ((COMPxSource & 0xFFU) | ((COMPxSource & 0xFFU) >> 2)) << 8U;
  1035. MODIFY_REG(RCC->CCIPR, (COMPxSource & 0x0000FF00U), (regTmp1 | regTmp2));
  1036. }
  1037. #endif /* COMP1 */
  1038. #if defined(COMP1)
  1039. /**
  1040. * @brief Get COMPx clock source
  1041. * @rmtoll CCIPR COMPxSEL LL_RCC_GetCOMPClockSource
  1042. * @param COMPx This parameter can be one of the following values:
  1043. * @arg @ref LL_RCC_COMP1_CLKSOURCE
  1044. * @arg @ref LL_RCC_COMP2_CLKSOURCE
  1045. * @retval Returned value can be one of the following values:
  1046. * @arg @ref LL_RCC_COMP1_CLKSOURCE_PCLK1
  1047. * @arg @ref LL_RCC_COMP1_CLKSOURCE_LSC
  1048. * @arg @ref LL_RCC_COMP2_CLKSOURCE_PCLK1
  1049. * @arg @ref LL_RCC_COMP2_CLKSOURCE_LSC
  1050. * @note Depending on devices and packages,some COMP may not be available.
  1051. * Refer to device datasheet for COMP availability.
  1052. */
  1053. __STATIC_INLINE uint32_t LL_RCC_GetCOMPClockSource(uint32_t COMPx)
  1054. {
  1055. return (uint32_t)((READ_BIT(RCC->CCIPR, COMPx) >> 8U) | COMPx);
  1056. }
  1057. #endif /* COMP1 */
  1058. #if defined(RCC_CCIPR_LPTIMSEL)
  1059. /**
  1060. * @brief Configure LPTIMx clock source
  1061. * @rmtoll CCIPR LPTIMxSEL LL_RCC_SetLPTIMClockSource
  1062. * @param LPTIMxSource This parameter can be one of the following values:
  1063. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  1064. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  1065. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_NONE
  1066. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  1067. * @note Depending on devices and packages, some clocks may not be available.
  1068. * Refer to device datasheet for clocks availability.
  1069. * @retval None
  1070. */
  1071. __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)
  1072. {
  1073. register uint32_t regTmp1 = (RCC->CCIPR & 0x0000FF00U);
  1074. register uint32_t regTmp2 = ((RCC->CCIPR & 0x0000FF00U) >> 2);
  1075. register uint32_t regTmp = regTmp1 | regTmp2;
  1076. MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIMSEL, (LPTIMxSource | regTmp));
  1077. }
  1078. /**
  1079. * @brief Get LPTIMx clock source
  1080. * @rmtoll CCIPR LPTIMxSEL LL_RCC_GetLPTIMClockSource
  1081. * @param LPTIMx This parameter can be one of the following values:
  1082. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE
  1083. * @retval Returned value can be one of the following values:
  1084. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
  1085. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
  1086. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_NONE
  1087. * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
  1088. * @note Depending on devices and packages, some clocks may not be available.
  1089. * Refer to device datasheet for clocks availability.
  1090. */
  1091. __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)
  1092. {
  1093. return (uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIMSEL));
  1094. }
  1095. #endif /* RCC_CCIPR_LPTIMSEL */
  1096. /**
  1097. * @}
  1098. */
  1099. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  1100. * @{
  1101. */
  1102. /**
  1103. * @brief Clear LSI ready interrupt flag
  1104. * @rmtoll CICR LSIRDYC LL_RCC_ClearFlag_LSIRDY
  1105. * @retval None
  1106. */
  1107. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  1108. {
  1109. SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC);
  1110. }
  1111. #if defined(RCC_LSE_SUPPORT)
  1112. /**
  1113. * @brief Clear LSE ready interrupt flag
  1114. * @rmtoll CICR LSERDYC LL_RCC_ClearFlag_LSERDY
  1115. * @retval None
  1116. */
  1117. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  1118. {
  1119. SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
  1120. }
  1121. #endif
  1122. /**
  1123. * @brief Clear HSI ready interrupt flag
  1124. * @rmtoll CICR HSIRDYC LL_RCC_ClearFlag_HSIRDY
  1125. * @retval None
  1126. */
  1127. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  1128. {
  1129. SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
  1130. }
  1131. #if defined(RCC_LSE_SUPPORT)
  1132. /**
  1133. * @brief Clear LSE Clock security system interrupt flag
  1134. * @rmtoll CICR LSECSSC LL_RCC_ClearFlag_LSECSS
  1135. * @retval None
  1136. */
  1137. __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
  1138. {
  1139. SET_BIT(RCC->CICR, RCC_CICR_LSECSSC);
  1140. }
  1141. #endif
  1142. /**
  1143. * @brief Check if LSI ready interrupt occurred or not
  1144. * @rmtoll CIFR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
  1145. * @retval State of bit (1 or 0).
  1146. */
  1147. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  1148. {
  1149. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF)) ? 1UL : 0UL);
  1150. }
  1151. #if defined(RCC_LSE_SUPPORT)
  1152. /**
  1153. * @brief Check if LSE ready interrupt occurred or not
  1154. * @rmtoll CIFR LSERDYF LL_RCC_IsActiveFlag_LSERDY
  1155. * @retval State of bit (1 or 0).
  1156. */
  1157. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  1158. {
  1159. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF)) ? 1UL : 0UL);
  1160. }
  1161. #endif
  1162. /**
  1163. * @brief Check if HSI ready interrupt occurred or not
  1164. * @rmtoll CIFR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
  1165. * @retval State of bit (1 or 0).
  1166. */
  1167. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  1168. {
  1169. return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF)) ? 1UL : 0UL);
  1170. }
  1171. #if defined(RCC_LSE_SUPPORT)
  1172. /**
  1173. * @brief Check if LSE Clock security system interrupt occurred or not
  1174. * @rmtoll CIFR LSECSSF LL_RCC_IsActiveFlag_LSECSS
  1175. * @retval State of bit (1 or 0).
  1176. */
  1177. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
  1178. {
  1179. return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF)) ? 1UL : 0UL);
  1180. }
  1181. #endif
  1182. /**
  1183. * @brief Check if RCC flag Independent Watchdog reset is set or not.
  1184. * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
  1185. * @retval State of bit (1 or 0).
  1186. */
  1187. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  1188. {
  1189. return ((READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)) ? 1UL : 0UL);
  1190. }
  1191. /**
  1192. * @brief Check if RCC flag Option byte reset is set or not.
  1193. * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
  1194. * @retval State of bit (1 or 0).
  1195. */
  1196. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
  1197. {
  1198. return ((READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF)) ? 1UL : 0UL);
  1199. }
  1200. /**
  1201. * @brief Check if RCC flag Pin reset is set or not.
  1202. * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
  1203. * @retval State of bit (1 or 0).
  1204. */
  1205. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  1206. {
  1207. return ((READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)) ? 1UL : 0UL);
  1208. }
  1209. /**
  1210. * @brief Check if RCC flag Software reset is set or not.
  1211. * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
  1212. * @retval State of bit (1 or 0).
  1213. */
  1214. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  1215. {
  1216. return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)) ? 1UL : 0UL);
  1217. }
  1218. /**
  1219. * @brief Check if RCC flag BOR or POR/PDR reset is set or not.
  1220. * @rmtoll CSR PWRRSTF LL_RCC_IsActiveFlag_PWRRST
  1221. * @retval State of bit (1 or 0).
  1222. */
  1223. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PWRRST(void)
  1224. {
  1225. return ((READ_BIT(RCC->CSR, RCC_CSR_PWRRSTF) == (RCC_CSR_PWRRSTF)) ? 1UL : 0UL);
  1226. }
  1227. /**
  1228. * @brief Set RMVF bit to clear the reset flags.
  1229. * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
  1230. * @retval None
  1231. */
  1232. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  1233. {
  1234. SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  1235. }
  1236. /**
  1237. * @brief Enable NRST filter
  1238. * @rmtoll CSR NRST_FLTDIS LL_RCC_EnableNRSTFilter
  1239. * @retval None
  1240. */
  1241. __STATIC_INLINE void LL_RCC_EnableNRSTFilter(void)
  1242. {
  1243. CLEAR_BIT(RCC->CSR, RCC_CSR_NRST_FLTDIS);
  1244. }
  1245. /**
  1246. * @brief Disable NRST filter
  1247. * @rmtoll CSR NRST_FLTDIS LL_RCC_DisableNRSTFilter
  1248. * @retval None
  1249. */
  1250. __STATIC_INLINE void LL_RCC_DisableNRSTFilter(void)
  1251. {
  1252. SET_BIT(RCC->CSR, RCC_CSR_NRST_FLTDIS);
  1253. }
  1254. /**
  1255. * @brief Check if NRST filter is enable
  1256. * @rmtoll CSR NRST_FLTDIS LL_RCC_IsEnableNRSTFilter
  1257. * @retval State of bit (1 or 0).
  1258. */
  1259. __STATIC_INLINE uint32_t LL_RCC_IsEnableNRSTFilter(void)
  1260. {
  1261. return ((READ_BIT(RCC->CSR, RCC_CSR_NRST_FLTDIS) == (RCC_CSR_NRST_FLTDIS)) ? 0UL : 1UL);
  1262. }
  1263. /**
  1264. * @}
  1265. */
  1266. /** @defgroup RCC_LL_EF_IT_Management IT Management
  1267. * @{
  1268. */
  1269. /**
  1270. * @brief Enable LSI ready interrupt
  1271. * @rmtoll CIER LSIRDYIE LL_RCC_EnableIT_LSIRDY
  1272. * @retval None
  1273. */
  1274. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  1275. {
  1276. SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  1277. }
  1278. #if defined(RCC_LSE_SUPPORT)
  1279. /**
  1280. * @brief Enable LSE ready interrupt
  1281. * @rmtoll CIER LSERDYIE LL_RCC_EnableIT_LSERDY
  1282. * @retval None
  1283. */
  1284. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  1285. {
  1286. SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  1287. }
  1288. #endif
  1289. /**
  1290. * @brief Enable HSI ready interrupt
  1291. * @rmtoll CIER HSIRDYIE LL_RCC_EnableIT_HSIRDY
  1292. * @retval None
  1293. */
  1294. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  1295. {
  1296. SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  1297. }
  1298. /**
  1299. * @brief Disable LSI ready interrupt
  1300. * @rmtoll CIER LSIRDYIE LL_RCC_DisableIT_LSIRDY
  1301. * @retval None
  1302. */
  1303. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  1304. {
  1305. CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
  1306. }
  1307. #if defined(RCC_LSE_SUPPORT)
  1308. /**
  1309. * @brief Disable LSE ready interrupt
  1310. * @rmtoll CIER LSERDYIE LL_RCC_DisableIT_LSERDY
  1311. * @retval None
  1312. */
  1313. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  1314. {
  1315. CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
  1316. }
  1317. #endif
  1318. /**
  1319. * @brief Disable HSI ready interrupt
  1320. * @rmtoll CIER HSIRDYIE LL_RCC_DisableIT_HSIRDY
  1321. * @retval None
  1322. */
  1323. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  1324. {
  1325. CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
  1326. }
  1327. /**
  1328. * @brief Checks if LSI ready interrupt source is enabled or disabled.
  1329. * @rmtoll CIER LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
  1330. * @retval State of bit (1 or 0).
  1331. */
  1332. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  1333. {
  1334. return ((READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE)) ? 1UL : 0UL);
  1335. }
  1336. #if defined(RCC_LSE_SUPPORT)
  1337. /**
  1338. * @brief Checks if LSE ready interrupt source is enabled or disabled.
  1339. * @rmtoll CIER LSERDYIE LL_RCC_IsEnabledIT_LSERDY
  1340. * @retval State of bit (1 or 0).
  1341. */
  1342. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  1343. {
  1344. return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE)) ? 1UL : 0UL);
  1345. }
  1346. #endif
  1347. /**
  1348. * @brief Checks if HSI ready interrupt source is enabled or disabled.
  1349. * @rmtoll CIER HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
  1350. * @retval State of bit (1 or 0).
  1351. */
  1352. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  1353. {
  1354. return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE)) ? 1UL : 0UL);
  1355. }
  1356. /**
  1357. * @}
  1358. */
  1359. #if defined(USE_FULL_LL_DRIVER)
  1360. /** @defgroup RCC_LL_EF_Init De-initialization function
  1361. * @{
  1362. */
  1363. ErrorStatus LL_RCC_DeInit(void);
  1364. /**
  1365. * @}
  1366. */
  1367. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  1368. * @{
  1369. */
  1370. void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  1371. uint32_t LL_RCC_GetMCOClockFreq(uint32_t MCOx);
  1372. uint32_t LL_RCC_GetLSCClockFreq(void);
  1373. #if defined(COMP1)
  1374. uint32_t LL_RCC_GetCOMPClockFreq(uint32_t COMPx);
  1375. #endif
  1376. #if defined(LPTIM1)
  1377. uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMx);
  1378. #endif
  1379. /**
  1380. * @}
  1381. */
  1382. #endif /* USE_FULL_LL_DRIVER */
  1383. /**
  1384. * @}
  1385. */
  1386. /**
  1387. * @}
  1388. */
  1389. #endif /* defined(RCC) */
  1390. /**
  1391. * @}
  1392. */
  1393. #ifdef __cplusplus
  1394. }
  1395. #endif
  1396. #endif /* __PY32F002B_LL_RCC_H */
  1397. /************************ (C) COPYRIGHT Puya *****END OF FILE****/