0% found this document useful (0 votes)
126 views

stm32f10x RCC

This document contains ARM assembly code for various functions related to configuring the reset and clock control (RCC) peripheral on the STM32 microcontroller. The code implements functions for enabling/disabling clocks to peripherals on different buses, resetting peripherals, and adjusting the internal high-speed oscillator calibration value.

Uploaded by

aykut ulusan
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
126 views

stm32f10x RCC

This document contains ARM assembly code for various functions related to configuring the reset and clock control (RCC) peripheral on the STM32 microcontroller. The code implements functions for enabling/disabling clocks to peripherals on different buses, resetting peripherals, and adjusting the internal high-speed oscillator calibration value.

Uploaded by

aykut ulusan
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 25

; generated by ARM C/C++ Compiler, 5.

03 [Build 76]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave
-o.\flash\obj\stm32f10x_rcc.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\
--depend=.\flash\obj\stm32f10x_rcc.d --cpu=Cortex-M3 --apcs=interwork -O0
--diag_suppress=870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include
-I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\User\bsp
-I..\..\User\bsp\inc -I..\..\uCOS-II\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView
-I..\..\uCOS-II\uCOS-II\Source -I..\..\uCOS-II\uC-LIB -I..\..\uCOS-II\uC-
LIB\Ports\ARM-Cortex-M3\RealView -I..\..\uCOS-II\uC-CPU -I..\..\uCOS-II\uC-CPU\ARM-
Cortex-M3\RealView -I..\..\User -I..\..\Libraries\CMSIS\Include
-IC:\Keil\ARM\RV31\INC -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\ST\STM32F10x
-D__MICROLIB -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD
..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c]
THUMB

AREA ||i.RCC_ADCCLKConfig||, CODE, READONLY, ALIGN=2

RCC_ADCCLKConfig PROC
;;;771 */
;;;772 void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
000000 4601 MOV r1,r0
;;;773 {
;;;774 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;775 /* Check the parameters */
;;;776 assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
;;;777 tmpreg = RCC->CFGR;
000004 4a03 LDR r2,|L1.20|
000006 6850 LDR r0,[r2,#4]
;;;778 /* Clear ADCPRE[1:0] bits */
;;;779 tmpreg &= CFGR_ADCPRE_Reset_Mask;
000008 f4204040 BIC r0,r0,#0xc000
;;;780 /* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
;;;781 tmpreg |= RCC_PCLK2;
00000c 4308 ORRS r0,r0,r1
;;;782 /* Store the new value */
;;;783 RCC->CFGR = tmpreg;
00000e 6050 STR r0,[r2,#4]
;;;784 }
000010 4770 BX lr
;;;785
ENDP

000012 0000 DCW 0x0000


|L1.20|
DCD 0x40021000

AREA ||i.RCC_AHBPeriphClockCmd||, CODE, READONLY, ALIGN=2

RCC_AHBPeriphClockCmd PROC
;;;1069 */
;;;1070 void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState
NewState)
000000 b129 CBZ r1,|L2.14|
;;;1071 {
;;;1072 /* Check the parameters */
;;;1073 assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
;;;1074 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1075
;;;1076 if (NewState != DISABLE)
;;;1077 {
;;;1078 RCC->AHBENR |= RCC_AHBPeriph;
000002 4a06 LDR r2,|L2.28|
000004 6952 LDR r2,[r2,#0x14]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L2.28|
00000a 615a STR r2,[r3,#0x14]
00000c e004 B |L2.24|
|L2.14|
;;;1079 }
;;;1080 else
;;;1081 {
;;;1082 RCC->AHBENR &= ~RCC_AHBPeriph;
00000e 4a03 LDR r2,|L2.28|
000010 6952 LDR r2,[r2,#0x14]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L2.28|
000016 615a STR r2,[r3,#0x14]
|L2.24|
;;;1083 }
;;;1084 }
000018 4770 BX lr
;;;1085
ENDP

00001a 0000 DCW 0x0000


|L2.28|
DCD 0x40021000

AREA ||i.RCC_APB1PeriphClockCmd||, CODE, READONLY,


ALIGN=2

RCC_APB1PeriphClockCmd PROC
;;;1131 */
;;;1132 void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState
NewState)
000000 b129 CBZ r1,|L3.14|
;;;1133 {
;;;1134 /* Check the parameters */
;;;1135 assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
;;;1136 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1137 if (NewState != DISABLE)
;;;1138 {
;;;1139 RCC->APB1ENR |= RCC_APB1Periph;
000002 4a06 LDR r2,|L3.28|
000004 69d2 LDR r2,[r2,#0x1c]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L3.28|
00000a 61da STR r2,[r3,#0x1c]
00000c e004 B |L3.24|
|L3.14|
;;;1140 }
;;;1141 else
;;;1142 {
;;;1143 RCC->APB1ENR &= ~RCC_APB1Periph;
00000e 4a03 LDR r2,|L3.28|
000010 69d2 LDR r2,[r2,#0x1c]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L3.28|
000016 61da STR r2,[r3,#0x1c]
|L3.24|
;;;1144 }
;;;1145 }
000018 4770 BX lr
;;;1146
ENDP

00001a 0000 DCW 0x0000


|L3.28|
DCD 0x40021000

AREA ||i.RCC_APB1PeriphResetCmd||, CODE, READONLY,


ALIGN=2

RCC_APB1PeriphResetCmd PROC
;;;1221 */
;;;1222 void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState
NewState)
000000 b129 CBZ r1,|L4.14|
;;;1223 {
;;;1224 /* Check the parameters */
;;;1225 assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
;;;1226 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1227 if (NewState != DISABLE)
;;;1228 {
;;;1229 RCC->APB1RSTR |= RCC_APB1Periph;
000002 4a06 LDR r2,|L4.28|
000004 6912 LDR r2,[r2,#0x10]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L4.28|
00000a 611a STR r2,[r3,#0x10]
00000c e004 B |L4.24|
|L4.14|
;;;1230 }
;;;1231 else
;;;1232 {
;;;1233 RCC->APB1RSTR &= ~RCC_APB1Periph;
00000e 4a03 LDR r2,|L4.28|
000010 6912 LDR r2,[r2,#0x10]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L4.28|
000016 611a STR r2,[r3,#0x10]
|L4.24|
;;;1234 }
;;;1235 }
000018 4770 BX lr
;;;1236
ENDP

00001a 0000 DCW 0x0000


|L4.28|
DCD 0x40021000

AREA ||i.RCC_APB2PeriphClockCmd||, CODE, READONLY,


ALIGN=2

RCC_APB2PeriphClockCmd PROC
;;;1100 */
;;;1101 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState
NewState)
000000 b129 CBZ r1,|L5.14|
;;;1102 {
;;;1103 /* Check the parameters */
;;;1104 assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
;;;1105 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1106 if (NewState != DISABLE)
;;;1107 {
;;;1108 RCC->APB2ENR |= RCC_APB2Periph;
000002 4a06 LDR r2,|L5.28|
000004 6992 LDR r2,[r2,#0x18]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L5.28|
00000a 619a STR r2,[r3,#0x18]
00000c e004 B |L5.24|
|L5.14|
;;;1109 }
;;;1110 else
;;;1111 {
;;;1112 RCC->APB2ENR &= ~RCC_APB2Periph;
00000e 4a03 LDR r2,|L5.28|
000010 6992 LDR r2,[r2,#0x18]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L5.28|
000016 619a STR r2,[r3,#0x18]
|L5.24|
;;;1113 }
;;;1114 }
000018 4770 BX lr
;;;1115
ENDP

00001a 0000 DCW 0x0000


|L5.28|
DCD 0x40021000

AREA ||i.RCC_APB2PeriphResetCmd||, CODE, READONLY,


ALIGN=2

RCC_APB2PeriphResetCmd PROC
;;;1190 */
;;;1191 void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState
NewState)
000000 b129 CBZ r1,|L6.14|
;;;1192 {
;;;1193 /* Check the parameters */
;;;1194 assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
;;;1195 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1196 if (NewState != DISABLE)
;;;1197 {
;;;1198 RCC->APB2RSTR |= RCC_APB2Periph;
000002 4a06 LDR r2,|L6.28|
000004 68d2 LDR r2,[r2,#0xc]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L6.28|
00000a 60da STR r2,[r3,#0xc]
00000c e004 B |L6.24|
|L6.14|
;;;1199 }
;;;1200 else
;;;1201 {
;;;1202 RCC->APB2RSTR &= ~RCC_APB2Periph;
00000e 4a03 LDR r2,|L6.28|
000010 68d2 LDR r2,[r2,#0xc]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L6.28|
000016 60da STR r2,[r3,#0xc]
|L6.24|
;;;1203 }
;;;1204 }
000018 4770 BX lr
;;;1205
ENDP

00001a 0000 DCW 0x0000


|L6.28|
DCD 0x40021000

AREA ||i.RCC_AdjustHSICalibrationValue||, CODE, READONLY,


ALIGN=2

RCC_AdjustHSICalibrationValue PROC
;;;339 */
;;;340 void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
000000 4601 MOV r1,r0
;;;341 {
;;;342 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;343 /* Check the parameters */
;;;344 assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue));
;;;345 tmpreg = RCC->CR;
000004 4a03 LDR r2,|L7.20|
000006 6810 LDR r0,[r2,#0]
;;;346 /* Clear HSITRIM[4:0] bits */
;;;347 tmpreg &= CR_HSITRIM_Mask;
000008 f02000f8 BIC r0,r0,#0xf8
;;;348 /* Set the HSITRIM[4:0] bits according to HSICalibrationValue value */
;;;349 tmpreg |= (uint32_t)HSICalibrationValue << 3;
00000c ea4000c1 ORR r0,r0,r1,LSL #3
;;;350 /* Store the new value */
;;;351 RCC->CR = tmpreg;
000010 6010 STR r0,[r2,#0]
;;;352 }
000012 4770 BX lr
;;;353
ENDP

|L7.20|
DCD 0x40021000

AREA ||i.RCC_BackupResetCmd||, CODE, READONLY, ALIGN=2

RCC_BackupResetCmd PROC
;;;1242 */
;;;1243 void RCC_BackupResetCmd(FunctionalState NewState)
000000 4901 LDR r1,|L8.8|
;;;1244 {
;;;1245 /* Check the parameters */
;;;1246 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1247 *(__IO uint32_t *) BDCR_BDRST_BB = (uint32_t)NewState;
000002 6008 STR r0,[r1,#0]
;;;1248 }
000004 4770 BX lr
;;;1249
ENDP

000006 0000 DCW 0x0000


|L8.8|
DCD 0x42420440

AREA ||i.RCC_ClearFlag||, CODE, READONLY, ALIGN=2

RCC_ClearFlag PROC
;;;1376 */
;;;1377 void RCC_ClearFlag(void)
000000 4803 LDR r0,|L9.16|
;;;1378 {
;;;1379 /* Set RMVF bit to clear the reset flags */
;;;1380 RCC->CSR |= CSR_RMVF_Set;
000002 6a40 LDR r0,[r0,#0x24]
000004 f0407080 ORR r0,r0,#0x1000000
000008 4901 LDR r1,|L9.16|
00000a 6248 STR r0,[r1,#0x24]
;;;1381 }
00000c 4770 BX lr
;;;1382
ENDP

00000e 0000 DCW 0x0000


|L9.16|
DCD 0x40021000

AREA ||i.RCC_ClearITPendingBit||, CODE, READONLY, ALIGN=2

RCC_ClearITPendingBit PROC
;;;1453 */
;;;1454 void RCC_ClearITPendingBit(uint8_t RCC_IT)
000000 4901 LDR r1,|L10.8|
;;;1455 {
;;;1456 /* Check the parameters */
;;;1457 assert_param(IS_RCC_CLEAR_IT(RCC_IT));
;;;1458
;;;1459 /* Perform Byte access to RCC_CIR[23:16] bits to clear the selected
interrupt
;;;1460 pending bits */
;;;1461 *(__IO uint8_t *) CIR_BYTE3_ADDRESS = RCC_IT;
000002 7288 STRB r0,[r1,#0xa]
;;;1462 }
000004 4770 BX lr
;;;1463
ENDP

000006 0000 DCW 0x0000


|L10.8|
DCD 0x40021000
AREA ||i.RCC_ClockSecuritySystemCmd||, CODE, READONLY,
ALIGN=2

RCC_ClockSecuritySystemCmd PROC
;;;1255 */
;;;1256 void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
000000 4901 LDR r1,|L11.8|
;;;1257 {
;;;1258 /* Check the parameters */
;;;1259 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;1260 *(__IO uint32_t *) CR_CSSON_BB = (uint32_t)NewState;
000002 64c8 STR r0,[r1,#0x4c]
;;;1261 }
000004 4770 BX lr
;;;1262
ENDP

000006 0000 DCW 0x0000


|L11.8|
DCD 0x42420000

AREA ||i.RCC_DeInit||, CODE, READONLY, ALIGN=2

RCC_DeInit PROC
;;;222 */
;;;223 void RCC_DeInit(void)
000000 480f LDR r0,|L12.64|
;;;224 {
;;;225 /* Set HSION bit */
;;;226 RCC->CR |= (uint32_t)0x00000001;
000002 6800 LDR r0,[r0,#0]
000004 f0400001 ORR r0,r0,#1
000008 490d LDR r1,|L12.64|
00000a 6008 STR r0,[r1,#0]
;;;227
;;;228 /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
;;;229 #ifndef STM32F10X_CL
;;;230 RCC->CFGR &= (uint32_t)0xF8FF0000;
00000c 4608 MOV r0,r1
00000e 6840 LDR r0,[r0,#4]
000010 490c LDR r1,|L12.68|
000012 4008 ANDS r0,r0,r1
000014 490a LDR r1,|L12.64|
000016 6048 STR r0,[r1,#4]
;;;231 #else
;;;232 RCC->CFGR &= (uint32_t)0xF0FF0000;
;;;233 #endif /* STM32F10X_CL */
;;;234
;;;235 /* Reset HSEON, CSSON and PLLON bits */
;;;236 RCC->CR &= (uint32_t)0xFEF6FFFF;
000018 4608 MOV r0,r1
00001a 6800 LDR r0,[r0,#0]
00001c 490a LDR r1,|L12.72|
00001e 4008 ANDS r0,r0,r1
000020 4907 LDR r1,|L12.64|
000022 6008 STR r0,[r1,#0]
;;;237
;;;238 /* Reset HSEBYP bit */
;;;239 RCC->CR &= (uint32_t)0xFFFBFFFF;
000024 4608 MOV r0,r1
000026 6800 LDR r0,[r0,#0]
000028 f4202080 BIC r0,r0,#0x40000
00002c 6008 STR r0,[r1,#0]
;;;240
;;;241 /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
;;;242 RCC->CFGR &= (uint32_t)0xFF80FFFF;
00002e 4608 MOV r0,r1
000030 6840 LDR r0,[r0,#4]
000032 f42000fe BIC r0,r0,#0x7f0000
000036 6048 STR r0,[r1,#4]
;;;243
;;;244 #ifdef STM32F10X_CL
;;;245 /* Reset PLL2ON and PLL3ON bits */
;;;246 RCC->CR &= (uint32_t)0xEBFFFFFF;
;;;247
;;;248 /* Disable all interrupts and clear pending bits */
;;;249 RCC->CIR = 0x00FF0000;
;;;250
;;;251 /* Reset CFGR2 register */
;;;252 RCC->CFGR2 = 0x00000000;
;;;253 #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined
(STM32F10X_HD_VL)
;;;254 /* Disable all interrupts and clear pending bits */
;;;255 RCC->CIR = 0x009F0000;
;;;256
;;;257 /* Reset CFGR2 register */
;;;258 RCC->CFGR2 = 0x00000000;
;;;259 #else
;;;260 /* Disable all interrupts and clear pending bits */
;;;261 RCC->CIR = 0x009F0000;
000038 f44f001f MOV r0,#0x9f0000
00003c 6088 STR r0,[r1,#8]
;;;262 #endif /* STM32F10X_CL */
;;;263
;;;264 }
00003e 4770 BX lr
;;;265
ENDP

|L12.64|
DCD 0x40021000
|L12.68|
DCD 0xf8ff0000
|L12.72|
DCD 0xfef6ffff

AREA ||i.RCC_GetClocksFreq||, CODE, READONLY, ALIGN=2

RCC_GetClocksFreq PROC
;;;913 */
;;;914 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
000000 b530 PUSH {r4,r5,lr}
;;;915 {
;;;916 uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0;
000002 2100 MOVS r1,#0
000004 2200 MOVS r2,#0
000006 2400 MOVS r4,#0
000008 2300 MOVS r3,#0
;;;917
;;;918 #ifdef STM32F10X_CL
;;;919 uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0,
pll2mull = 0;
;;;920 #endif /* STM32F10X_CL */
;;;921
;;;922 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined
(STM32F10X_HD_VL)
;;;923 uint32_t prediv1factor = 0;
;;;924 #endif
;;;925
;;;926 /* Get SYSCLK source
-------------------------------------------------------*/
;;;927 tmp = RCC->CFGR & CFGR_SWS_Mask;
00000a 4d2d LDR r5,|L13.192|
00000c 686d LDR r5,[r5,#4]
00000e f005010c AND r1,r5,#0xc
;;;928
;;;929 switch (tmp)
000012 b121 CBZ r1,|L13.30|
000014 2904 CMP r1,#4
000016 d005 BEQ |L13.36|
000018 2908 CMP r1,#8
00001a d123 BNE |L13.100|
00001c e005 B |L13.42|
|L13.30|
;;;930 {
;;;931 case 0x00: /* HSI used as system clock */
;;;932 RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
00001e 4d29 LDR r5,|L13.196|
000020 6005 STR r5,[r0,#0]
;;;933 break;
000022 e022 B |L13.106|
|L13.36|
;;;934 case 0x04: /* HSE used as system clock */
;;;935 RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
000024 4d27 LDR r5,|L13.196|
000026 6005 STR r5,[r0,#0]
;;;936 break;
000028 e01f B |L13.106|
|L13.42|
;;;937 case 0x08: /* PLL used as system clock */
;;;938
;;;939 /* Get PLL clock source and multiplication factor
----------------------*/
;;;940 pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
00002a 4d25 LDR r5,|L13.192|
00002c 686d LDR r5,[r5,#4]
00002e f4051270 AND r2,r5,#0x3c0000
;;;941 pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;
000032 4d23 LDR r5,|L13.192|
000034 686d LDR r5,[r5,#4]
000036 f4053480 AND r4,r5,#0x10000
;;;942
;;;943 #ifndef STM32F10X_CL
;;;944 pllmull = ( pllmull >> 18) + 2;
00003a 2502 MOVS r5,#2
00003c eb054292 ADD r2,r5,r2,LSR #18
;;;945
;;;946 if (pllsource == 0x00)
000040 b91c CBNZ r4,|L13.74|
;;;947 {/* HSI oscillator clock divided by 2 selected as PLL clock entry
*/
;;;948 RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;
000042 4d21 LDR r5,|L13.200|
000044 4355 MULS r5,r2,r5
000046 6005 STR r5,[r0,#0]
000048 e00b B |L13.98|
|L13.74|
;;;949 }
;;;950 else
;;;951 {
;;;952 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined
(STM32F10X_HD_VL)
;;;953 prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 1;
;;;954 /* HSE oscillator clock selected as PREDIV1 clock entry */
;;;955 RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) *
pllmull;
;;;956 #else
;;;957 /* HSE selected as PLL clock entry */
;;;958 if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET)
00004a 4d1d LDR r5,|L13.192|
00004c 686d LDR r5,[r5,#4]
00004e f4153f00 TST r5,#0x20000
000052 d003 BEQ |L13.92|
;;;959 {/* HSE oscillator clock divided by 2 */
;;;960 RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull;
000054 4d1c LDR r5,|L13.200|
000056 4355 MULS r5,r2,r5
000058 6005 STR r5,[r0,#0]
00005a e002 B |L13.98|
|L13.92|
;;;961 }
;;;962 else
;;;963 {
;;;964 RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull;
00005c 4d19 LDR r5,|L13.196|
00005e 4355 MULS r5,r2,r5
000060 6005 STR r5,[r0,#0]
|L13.98|
;;;965 }
;;;966 #endif
;;;967 }
;;;968 #else
;;;969 pllmull = pllmull >> 18;
;;;970
;;;971 if (pllmull != 0x0D)
;;;972 {
;;;973 pllmull += 2;
;;;974 }
;;;975 else
;;;976 { /* PLL multiplication factor = PLL input clock * 6.5 */
;;;977 pllmull = 13 / 2;
;;;978 }
;;;979
;;;980 if (pllsource == 0x00)
;;;981 {/* HSI oscillator clock divided by 2 selected as PLL clock entry
*/
;;;982 RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;
;;;983 }
;;;984 else
;;;985 {/* PREDIV1 selected as PLL clock entry */
;;;986
;;;987 /* Get PREDIV1 clock source and division factor */
;;;988 prediv1source = RCC->CFGR2 & CFGR2_PREDIV1SRC;
;;;989 prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 1;
;;;990
;;;991 if (prediv1source == 0)
;;;992 { /* HSE oscillator clock selected as PREDIV1 clock entry */
;;;993 RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) *
pllmull;
;;;994 }
;;;995 else
;;;996 {/* PLL2 clock selected as PREDIV1 clock entry */
;;;997
;;;998 /* Get PREDIV2 division factor and PLL2 multiplication factor
*/
;;;999 prediv2factor = ((RCC->CFGR2 & CFGR2_PREDIV2) >> 4) + 1;
;;;1000 pll2mull = ((RCC->CFGR2 & CFGR2_PLL2MUL) >> 8 ) + 2;
;;;1001 RCC_Clocks->SYSCLK_Frequency = (((HSE_VALUE / prediv2factor) *
pll2mull) / prediv1factor) * pllmull;
;;;1002 }
;;;1003 }
;;;1004 #endif /* STM32F10X_CL */
;;;1005 break;
000062 e002 B |L13.106|
|L13.100|
;;;1006
;;;1007 default:
;;;1008 RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
000064 4d17 LDR r5,|L13.196|
000066 6005 STR r5,[r0,#0]
;;;1009 break;
000068 bf00 NOP
|L13.106|
00006a bf00 NOP ;933
;;;1010 }
;;;1011
;;;1012 /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies
----------------*/
;;;1013 /* Get HCLK prescaler */
;;;1014 tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;
00006c 4d14 LDR r5,|L13.192|
00006e 686d LDR r5,[r5,#4]
000070 f00501f0 AND r1,r5,#0xf0
;;;1015 tmp = tmp >> 4;
000074 0909 LSRS r1,r1,#4
;;;1016 presc = APBAHBPrescTable[tmp];
000076 4d15 LDR r5,|L13.204|
000078 5c6b LDRB r3,[r5,r1]
;;;1017 /* HCLK clock frequency */
;;;1018 RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;
00007a 6805 LDR r5,[r0,#0]
00007c 40dd LSRS r5,r5,r3
00007e 6045 STR r5,[r0,#4]
;;;1019 /* Get PCLK1 prescaler */
;;;1020 tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask;
000080 4d0f LDR r5,|L13.192|
000082 686d LDR r5,[r5,#4]
000084 f40561e0 AND r1,r5,#0x700
;;;1021 tmp = tmp >> 8;
000088 0a09 LSRS r1,r1,#8
;;;1022 presc = APBAHBPrescTable[tmp];
00008a 4d10 LDR r5,|L13.204|
00008c 5c6b LDRB r3,[r5,r1]
;;;1023 /* PCLK1 clock frequency */
;;;1024 RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
00008e 6845 LDR r5,[r0,#4]
000090 40dd LSRS r5,r5,r3
000092 6085 STR r5,[r0,#8]
;;;1025 /* Get PCLK2 prescaler */
;;;1026 tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask;
000094 4d0a LDR r5,|L13.192|
000096 686d LDR r5,[r5,#4]
000098 f4055160 AND r1,r5,#0x3800
;;;1027 tmp = tmp >> 11;
00009c 0ac9 LSRS r1,r1,#11
;;;1028 presc = APBAHBPrescTable[tmp];
00009e 4d0b LDR r5,|L13.204|
0000a0 5c6b LDRB r3,[r5,r1]
;;;1029 /* PCLK2 clock frequency */
;;;1030 RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
0000a2 6845 LDR r5,[r0,#4]
0000a4 40dd LSRS r5,r5,r3
0000a6 60c5 STR r5,[r0,#0xc]
;;;1031 /* Get ADCCLK prescaler */
;;;1032 tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask;
0000a8 4d05 LDR r5,|L13.192|
0000aa 686d LDR r5,[r5,#4]
0000ac f4054140 AND r1,r5,#0xc000
;;;1033 tmp = tmp >> 14;
0000b0 0b89 LSRS r1,r1,#14
;;;1034 presc = ADCPrescTable[tmp];
0000b2 4d07 LDR r5,|L13.208|
0000b4 5c6b LDRB r3,[r5,r1]
;;;1035 /* ADCCLK clock frequency */
;;;1036 RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc;
0000b6 68c5 LDR r5,[r0,#0xc]
0000b8 fbb5f5f3 UDIV r5,r5,r3
0000bc 6105 STR r5,[r0,#0x10]
;;;1037 }
0000be bd30 POP {r4,r5,pc}
;;;1038
ENDP

|L13.192|
DCD 0x40021000
|L13.196|
DCD 0x007a1200
|L13.200|
DCD 0x003d0900
|L13.204|
DCD APBAHBPrescTable
|L13.208|
DCD ADCPrescTable
AREA ||i.RCC_GetFlagStatus||, CODE, READONLY, ALIGN=2

RCC_GetFlagStatus PROC
;;;1331 */
;;;1332 FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
000000 b510 PUSH {r4,lr}
;;;1333 {
000002 4601 MOV r1,r0
;;;1334 uint32_t tmp = 0;
000004 2200 MOVS r2,#0
;;;1335 uint32_t statusreg = 0;
000006 2300 MOVS r3,#0
;;;1336 FlagStatus bitstatus = RESET;
000008 2000 MOVS r0,#0
;;;1337 /* Check the parameters */
;;;1338 assert_param(IS_RCC_FLAG(RCC_FLAG));
;;;1339
;;;1340 /* Get the RCC register index */
;;;1341 tmp = RCC_FLAG >> 5;
00000a 114a ASRS r2,r1,#5
;;;1342 if (tmp == 1) /* The flag to check is in CR register */
00000c 2a01 CMP r2,#1
00000e d102 BNE |L14.22|
;;;1343 {
;;;1344 statusreg = RCC->CR;
000010 4c09 LDR r4,|L14.56|
000012 6823 LDR r3,[r4,#0]
000014 e006 B |L14.36|
|L14.22|
;;;1345 }
;;;1346 else if (tmp == 2) /* The flag to check is in BDCR register */
000016 2a02 CMP r2,#2
000018 d102 BNE |L14.32|
;;;1347 {
;;;1348 statusreg = RCC->BDCR;
00001a 4c07 LDR r4,|L14.56|
00001c 6a23 LDR r3,[r4,#0x20]
00001e e001 B |L14.36|
|L14.32|
;;;1349 }
;;;1350 else /* The flag to check is in CSR register */
;;;1351 {
;;;1352 statusreg = RCC->CSR;
000020 4c05 LDR r4,|L14.56|
000022 6a63 LDR r3,[r4,#0x24]
|L14.36|
;;;1353 }
;;;1354
;;;1355 /* Get the flag position */
;;;1356 tmp = RCC_FLAG & FLAG_Mask;
000024 f001021f AND r2,r1,#0x1f
;;;1357 if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)
000028 2401 MOVS r4,#1
00002a 4094 LSLS r4,r4,r2
00002c 421c TST r4,r3
00002e d001 BEQ |L14.52|
;;;1358 {
;;;1359 bitstatus = SET;
000030 2001 MOVS r0,#1
000032 e000 B |L14.54|
|L14.52|
;;;1360 }
;;;1361 else
;;;1362 {
;;;1363 bitstatus = RESET;
000034 2000 MOVS r0,#0
|L14.54|
;;;1364 }
;;;1365
;;;1366 /* Return the flag status */
;;;1367 return bitstatus;
;;;1368 }
000036 bd10 POP {r4,pc}
;;;1369
ENDP

|L14.56|
DCD 0x40021000

AREA ||i.RCC_GetITStatus||, CODE, READONLY, ALIGN=2

RCC_GetITStatus PROC
;;;1407 */
;;;1408 ITStatus RCC_GetITStatus(uint8_t RCC_IT)
000000 4601 MOV r1,r0
;;;1409 {
;;;1410 ITStatus bitstatus = RESET;
000002 2000 MOVS r0,#0
;;;1411 /* Check the parameters */
;;;1412 assert_param(IS_RCC_GET_IT(RCC_IT));
;;;1413
;;;1414 /* Check the status of the specified RCC interrupt */
;;;1415 if ((RCC->CIR & RCC_IT) != (uint32_t)RESET)
000004 4a03 LDR r2,|L15.20|
000006 6892 LDR r2,[r2,#8]
000008 420a TST r2,r1
00000a d001 BEQ |L15.16|
;;;1416 {
;;;1417 bitstatus = SET;
00000c 2001 MOVS r0,#1
00000e e000 B |L15.18|
|L15.16|
;;;1418 }
;;;1419 else
;;;1420 {
;;;1421 bitstatus = RESET;
000010 2000 MOVS r0,#0
|L15.18|
;;;1422 }
;;;1423
;;;1424 /* Return the RCC_IT status */
;;;1425 return bitstatus;
;;;1426 }
000012 4770 BX lr
;;;1427
ENDP
|L15.20|
DCD 0x40021000

AREA ||i.RCC_GetSYSCLKSource||, CODE, READONLY, ALIGN=2

RCC_GetSYSCLKSource PROC
;;;592 */
;;;593 uint8_t RCC_GetSYSCLKSource(void)
000000 4802 LDR r0,|L16.12|
;;;594 {
;;;595 return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask));
000002 6840 LDR r0,[r0,#4]
000004 f000000c AND r0,r0,#0xc
;;;596 }
000008 4770 BX lr
;;;597
ENDP

00000a 0000 DCW 0x0000


|L16.12|
DCD 0x40021000

AREA ||i.RCC_HCLKConfig||, CODE, READONLY, ALIGN=2

RCC_HCLKConfig PROC
;;;613 */
;;;614 void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
000000 4601 MOV r1,r0
;;;615 {
;;;616 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;617 /* Check the parameters */
;;;618 assert_param(IS_RCC_HCLK(RCC_SYSCLK));
;;;619 tmpreg = RCC->CFGR;
000004 4a03 LDR r2,|L17.20|
000006 6850 LDR r0,[r2,#4]
;;;620 /* Clear HPRE[3:0] bits */
;;;621 tmpreg &= CFGR_HPRE_Reset_Mask;
000008 f02000f0 BIC r0,r0,#0xf0
;;;622 /* Set HPRE[3:0] bits according to RCC_SYSCLK value */
;;;623 tmpreg |= RCC_SYSCLK;
00000c 4308 ORRS r0,r0,r1
;;;624 /* Store the new value */
;;;625 RCC->CFGR = tmpreg;
00000e 6050 STR r0,[r2,#4]
;;;626 }
000010 4770 BX lr
;;;627
ENDP

000012 0000 DCW 0x0000


|L17.20|
DCD 0x40021000

AREA ||i.RCC_HSEConfig||, CODE, READONLY, ALIGN=2

RCC_HSEConfig PROC
;;;275 */
;;;276 void RCC_HSEConfig(uint32_t RCC_HSE)
000000 4911 LDR r1,|L18.72|
;;;277 {
;;;278 /* Check the parameters */
;;;279 assert_param(IS_RCC_HSE(RCC_HSE));
;;;280 /* Reset HSEON and HSEBYP bits before configuring the HSE
------------------*/
;;;281 /* Reset HSEON bit */
;;;282 RCC->CR &= CR_HSEON_Reset;
000002 6809 LDR r1,[r1,#0]
000004 f4213180 BIC r1,r1,#0x10000
000008 4a0f LDR r2,|L18.72|
00000a 6011 STR r1,[r2,#0]
;;;283 /* Reset HSEBYP bit */
;;;284 RCC->CR &= CR_HSEBYP_Reset;
00000c 4611 MOV r1,r2
00000e 6809 LDR r1,[r1,#0]
000010 f4212180 BIC r1,r1,#0x40000
000014 6011 STR r1,[r2,#0]
;;;285 /* Configure HSE (RCC_HSE_OFF is already covered by the code section
above) */
;;;286 switch(RCC_HSE)
000016 f5b03f80 CMP r0,#0x10000
00001a d003 BEQ |L18.36|
00001c f5b02f80 CMP r0,#0x40000
000020 d10e BNE |L18.64|
000022 e006 B |L18.50|
|L18.36|
;;;287 {
;;;288 case RCC_HSE_ON:
;;;289 /* Set HSEON bit */
;;;290 RCC->CR |= CR_HSEON_Set;
000024 4908 LDR r1,|L18.72|
000026 6809 LDR r1,[r1,#0]
000028 f4413180 ORR r1,r1,#0x10000
00002c 4a06 LDR r2,|L18.72|
00002e 6011 STR r1,[r2,#0]
;;;291 break;
000030 e007 B |L18.66|
|L18.50|
;;;292
;;;293 case RCC_HSE_Bypass:
;;;294 /* Set HSEBYP and HSEON bits */
;;;295 RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
000032 4905 LDR r1,|L18.72|
000034 6809 LDR r1,[r1,#0]
000036 f44121a0 ORR r1,r1,#0x50000
00003a 4a03 LDR r2,|L18.72|
00003c 6011 STR r1,[r2,#0]
;;;296 break;
00003e e000 B |L18.66|
|L18.64|
;;;297
;;;298 default:
;;;299 break;
000040 bf00 NOP
|L18.66|
000042 bf00 NOP ;291
;;;300 }
;;;301 }
000044 4770 BX lr
;;;302
ENDP

000046 0000 DCW 0x0000


|L18.72|
DCD 0x40021000

AREA ||i.RCC_HSICmd||, CODE, READONLY, ALIGN=2

RCC_HSICmd PROC
;;;359 */
;;;360 void RCC_HSICmd(FunctionalState NewState)
000000 4901 LDR r1,|L19.8|
;;;361 {
;;;362 /* Check the parameters */
;;;363 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;364 *(__IO uint32_t *) CR_HSION_BB = (uint32_t)NewState;
000002 6008 STR r0,[r1,#0]
;;;365 }
000004 4770 BX lr
;;;366
ENDP

000006 0000 DCW 0x0000


|L19.8|
DCD 0x42420000

AREA ||i.RCC_ITConfig||, CODE, READONLY, ALIGN=2

RCC_ITConfig PROC
;;;705 */
;;;706 void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
000000 b129 CBZ r1,|L20.14|
;;;707 {
;;;708 /* Check the parameters */
;;;709 assert_param(IS_RCC_IT(RCC_IT));
;;;710 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;711 if (NewState != DISABLE)
;;;712 {
;;;713 /* Perform Byte access to RCC_CIR bits to enable the selected
interrupts */
;;;714 *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT;
000002 4a06 LDR r2,|L20.28|
000004 7a52 LDRB r2,[r2,#9]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L20.28|
00000a 725a STRB r2,[r3,#9]
00000c e004 B |L20.24|
|L20.14|
;;;715 }
;;;716 else
;;;717 {
;;;718 /* Perform Byte access to RCC_CIR bits to disable the selected
interrupts */
;;;719 *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
00000e 4a03 LDR r2,|L20.28|
000010 7a52 LDRB r2,[r2,#9]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L20.28|
000016 725a STRB r2,[r3,#9]
|L20.24|
;;;720 }
;;;721 }
000018 4770 BX lr
;;;722
ENDP

00001a 0000 DCW 0x0000


|L20.28|
DCD 0x40021000

AREA ||i.RCC_LSEConfig||, CODE, READONLY, ALIGN=2

RCC_LSEConfig PROC
;;;834 */
;;;835 void RCC_LSEConfig(uint8_t RCC_LSE)
000000 2100 MOVS r1,#0
;;;836 {
;;;837 /* Check the parameters */
;;;838 assert_param(IS_RCC_LSE(RCC_LSE));
;;;839 /* Reset LSEON and LSEBYP bits before configuring the LSE
------------------*/
;;;840 /* Reset LSEON bit */
;;;841 *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
000002 4a0a LDR r2,|L21.44|
000004 7011 STRB r1,[r2,#0]
;;;842 /* Reset LSEBYP bit */
;;;843 *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
000006 4a0a LDR r2,|L21.48|
000008 f8821020 STRB r1,[r2,#0x20]
;;;844 /* Configure LSE (RCC_LSE_OFF is already covered by the code section
above) */
;;;845 switch(RCC_LSE)
00000c 2801 CMP r0,#1
00000e d002 BEQ |L21.22|
000010 2804 CMP r0,#4
000012 d108 BNE |L21.38|
000014 e003 B |L21.30|
|L21.22|
;;;846 {
;;;847 case RCC_LSE_ON:
;;;848 /* Set LSEON bit */
;;;849 *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON;
000016 2101 MOVS r1,#1
000018 4a04 LDR r2,|L21.44|
00001a 7011 STRB r1,[r2,#0]
;;;850 break;
00001c e004 B |L21.40|
|L21.30|
;;;851
;;;852 case RCC_LSE_Bypass:
;;;853 /* Set LSEBYP and LSEON bits */
;;;854 *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
00001e 2105 MOVS r1,#5
000020 4a02 LDR r2,|L21.44|
000022 7011 STRB r1,[r2,#0]
;;;855 break;
000024 e000 B |L21.40|
|L21.38|
;;;856
;;;857 default:
;;;858 break;
000026 bf00 NOP
|L21.40|
000028 bf00 NOP ;850
;;;859 }
;;;860 }
00002a 4770 BX lr
;;;861
ENDP

|L21.44|
DCD 0x40021020
|L21.48|
DCD 0x40021000

AREA ||i.RCC_LSICmd||, CODE, READONLY, ALIGN=2

RCC_LSICmd PROC
;;;867 */
;;;868 void RCC_LSICmd(FunctionalState NewState)
000000 4901 LDR r1,|L22.8|
;;;869 {
;;;870 /* Check the parameters */
;;;871 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;872 *(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState;
000002 6008 STR r0,[r1,#0]
;;;873 }
000004 4770 BX lr
;;;874
ENDP

000006 0000 DCW 0x0000


|L22.8|
DCD 0x42420480

AREA ||i.RCC_MCOConfig||, CODE, READONLY, ALIGN=2

RCC_MCOConfig PROC
;;;1287 */
;;;1288 void RCC_MCOConfig(uint8_t RCC_MCO)
000000 4901 LDR r1,|L23.8|
;;;1289 {
;;;1290 /* Check the parameters */
;;;1291 assert_param(IS_RCC_MCO(RCC_MCO));
;;;1292
;;;1293 /* Perform Byte access to MCO bits to select the MCO source */
;;;1294 *(__IO uint8_t *) CFGR_BYTE4_ADDRESS = RCC_MCO;
000002 71c8 STRB r0,[r1,#7]
;;;1295 }
000004 4770 BX lr
;;;1296
ENDP

000006 0000 DCW 0x0000


|L23.8|
DCD 0x40021000

AREA ||i.RCC_PCLK1Config||, CODE, READONLY, ALIGN=2

RCC_PCLK1Config PROC
;;;639 */
;;;640 void RCC_PCLK1Config(uint32_t RCC_HCLK)
000000 4601 MOV r1,r0
;;;641 {
;;;642 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;643 /* Check the parameters */
;;;644 assert_param(IS_RCC_PCLK(RCC_HCLK));
;;;645 tmpreg = RCC->CFGR;
000004 4a03 LDR r2,|L24.20|
000006 6850 LDR r0,[r2,#4]
;;;646 /* Clear PPRE1[2:0] bits */
;;;647 tmpreg &= CFGR_PPRE1_Reset_Mask;
000008 f42060e0 BIC r0,r0,#0x700
;;;648 /* Set PPRE1[2:0] bits according to RCC_HCLK value */
;;;649 tmpreg |= RCC_HCLK;
00000c 4308 ORRS r0,r0,r1
;;;650 /* Store the new value */
;;;651 RCC->CFGR = tmpreg;
00000e 6050 STR r0,[r2,#4]
;;;652 }
000010 4770 BX lr
;;;653
ENDP

000012 0000 DCW 0x0000


|L24.20|
DCD 0x40021000

AREA ||i.RCC_PCLK2Config||, CODE, READONLY, ALIGN=2

RCC_PCLK2Config PROC
;;;665 */
;;;666 void RCC_PCLK2Config(uint32_t RCC_HCLK)
000000 4601 MOV r1,r0
;;;667 {
;;;668 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;669 /* Check the parameters */
;;;670 assert_param(IS_RCC_PCLK(RCC_HCLK));
;;;671 tmpreg = RCC->CFGR;
000004 4a03 LDR r2,|L25.20|
000006 6850 LDR r0,[r2,#4]
;;;672 /* Clear PPRE2[2:0] bits */
;;;673 tmpreg &= CFGR_PPRE2_Reset_Mask;
000008 f4205060 BIC r0,r0,#0x3800
;;;674 /* Set PPRE2[2:0] bits according to RCC_HCLK value */
;;;675 tmpreg |= RCC_HCLK << 3;
00000c ea4000c1 ORR r0,r0,r1,LSL #3
;;;676 /* Store the new value */
;;;677 RCC->CFGR = tmpreg;
000010 6050 STR r0,[r2,#4]
;;;678 }
000012 4770 BX lr
;;;679
ENDP

|L25.20|
DCD 0x40021000

AREA ||i.RCC_PLLCmd||, CODE, READONLY, ALIGN=2

RCC_PLLCmd PROC
;;;406 */
;;;407 void RCC_PLLCmd(FunctionalState NewState)
000000 4901 LDR r1,|L26.8|
;;;408 {
;;;409 /* Check the parameters */
;;;410 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;411
;;;412 *(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState;
000002 6608 STR r0,[r1,#0x60]
;;;413 }
000004 4770 BX lr
;;;414
ENDP

000006 0000 DCW 0x0000


|L26.8|
DCD 0x42420000

AREA ||i.RCC_PLLConfig||, CODE, READONLY, ALIGN=2

RCC_PLLConfig PROC
;;;383 */
;;;384 void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
000000 4602 MOV r2,r0
;;;385 {
;;;386 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;387
;;;388 /* Check the parameters */
;;;389 assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
;;;390 assert_param(IS_RCC_PLL_MUL(RCC_PLLMul));
;;;391
;;;392 tmpreg = RCC->CFGR;
000004 4b04 LDR r3,|L27.24|
000006 6858 LDR r0,[r3,#4]
;;;393 /* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
;;;394 tmpreg &= CFGR_PLL_Mask;
000008 f420107c BIC r0,r0,#0x3f0000
;;;395 /* Set the PLL configuration bits */
;;;396 tmpreg |= RCC_PLLSource | RCC_PLLMul;
00000c ea420301 ORR r3,r2,r1
000010 4318 ORRS r0,r0,r3
;;;397 /* Store the new value */
;;;398 RCC->CFGR = tmpreg;
000012 4b01 LDR r3,|L27.24|
000014 6058 STR r0,[r3,#4]
;;;399 }
000016 4770 BX lr
;;;400
ENDP
|L27.24|
DCD 0x40021000

AREA ||i.RCC_RTCCLKCmd||, CODE, READONLY, ALIGN=2

RCC_RTCCLKCmd PROC
;;;898 */
;;;899 void RCC_RTCCLKCmd(FunctionalState NewState)
000000 4901 LDR r1,|L28.8|
;;;900 {
;;;901 /* Check the parameters */
;;;902 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;903 *(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState;
000002 6008 STR r0,[r1,#0]
;;;904 }
000004 4770 BX lr
;;;905
ENDP

000006 0000 DCW 0x0000


|L28.8|
DCD 0x4242043c

AREA ||i.RCC_RTCCLKConfig||, CODE, READONLY, ALIGN=2

RCC_RTCCLKConfig PROC
;;;884 */
;;;885 void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource)
000000 4902 LDR r1,|L29.12|
;;;886 {
;;;887 /* Check the parameters */
;;;888 assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource));
;;;889 /* Select the RTC clock source */
;;;890 RCC->BDCR |= RCC_RTCCLKSource;
000002 6a09 LDR r1,[r1,#0x20]
000004 4301 ORRS r1,r1,r0
000006 4a01 LDR r2,|L29.12|
000008 6211 STR r1,[r2,#0x20]
;;;891 }
00000a 4770 BX lr
;;;892
ENDP

|L29.12|
DCD 0x40021000

AREA ||i.RCC_SYSCLKConfig||, CODE, READONLY, ALIGN=2

RCC_SYSCLKConfig PROC
;;;569 */
;;;570 void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
000000 4601 MOV r1,r0
;;;571 {
;;;572 uint32_t tmpreg = 0;
000002 2000 MOVS r0,#0
;;;573 /* Check the parameters */
;;;574 assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
;;;575 tmpreg = RCC->CFGR;
000004 4a03 LDR r2,|L30.20|
000006 6850 LDR r0,[r2,#4]
;;;576 /* Clear SW[1:0] bits */
;;;577 tmpreg &= CFGR_SW_Mask;
000008 f0200003 BIC r0,r0,#3
;;;578 /* Set SW[1:0] bits according to RCC_SYSCLKSource value */
;;;579 tmpreg |= RCC_SYSCLKSource;
00000c 4308 ORRS r0,r0,r1
;;;580 /* Store the new value */
;;;581 RCC->CFGR = tmpreg;
00000e 6050 STR r0,[r2,#4]
;;;582 }
000010 4770 BX lr
;;;583
ENDP

000012 0000 DCW 0x0000


|L30.20|
DCD 0x40021000

AREA ||i.RCC_USBCLKConfig||, CODE, READONLY, ALIGN=2

RCC_USBCLKConfig PROC
;;;733 */
;;;734 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)
000000 4901 LDR r1,|L31.8|
;;;735 {
;;;736 /* Check the parameters */
;;;737 assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource));
;;;738
;;;739 *(__IO uint32_t *) CFGR_USBPRE_BB = RCC_USBCLKSource;
000002 6008 STR r0,[r1,#0]
;;;740 }
000004 4770 BX lr
;;;741 #else
ENDP

000006 0000 DCW 0x0000


|L31.8|
DCD 0x424200d8

AREA ||i.RCC_WaitForHSEStartUp||, CODE, READONLY, ALIGN=1

RCC_WaitForHSEStartUp PROC
;;;309 */
;;;310 ErrorStatus RCC_WaitForHSEStartUp(void)
000000 b538 PUSH {r3-r5,lr}
;;;311 {
;;;312 __IO uint32_t StartUpCounter = 0;
000002 2000 MOVS r0,#0
000004 9000 STR r0,[sp,#0]
;;;313 ErrorStatus status = ERROR;
000006 2400 MOVS r4,#0
;;;314 FlagStatus HSEStatus = RESET;
000008 2500 MOVS r5,#0
;;;315
;;;316 /* Wait till HSE is ready and if Time out is reached exit */
;;;317 do
00000a bf00 NOP
|L32.12|
;;;318 {
;;;319 HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
00000c 2031 MOVS r0,#0x31
00000e f7fffffe BL RCC_GetFlagStatus
000012 4605 MOV r5,r0
;;;320 StartUpCounter++;
000014 9800 LDR r0,[sp,#0]
000016 1c40 ADDS r0,r0,#1
000018 9000 STR r0,[sp,#0]
;;;321 } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus ==
RESET));
00001a 9800 LDR r0,[sp,#0]
00001c f5b06fa0 CMP r0,#0x500
000020 d001 BEQ |L32.38|
000022 2d00 CMP r5,#0
000024 d0f2 BEQ |L32.12|
|L32.38|
;;;322
;;;323 if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET)
000026 2031 MOVS r0,#0x31
000028 f7fffffe BL RCC_GetFlagStatus
00002c b108 CBZ r0,|L32.50|
;;;324 {
;;;325 status = SUCCESS;
00002e 2401 MOVS r4,#1
000030 e000 B |L32.52|
|L32.50|
;;;326 }
;;;327 else
;;;328 {
;;;329 status = ERROR;
000032 2400 MOVS r4,#0
|L32.52|
;;;330 }
;;;331 return (status);
000034 4620 MOV r0,r4
;;;332 }
000036 bd38 POP {r3-r5,pc}
;;;333
ENDP

AREA ||.data||, DATA, ALIGN=0

APBAHBPrescTable
000000 00000000 DCB 0x00,0x00,0x00,0x00
000004 01020304 DCB 0x01,0x02,0x03,0x04
000008 01020304 DCB 0x01,0x02,0x03,0x04
00000c 06070809 DCB 0x06,0x07,0x08,0x09
ADCPrescTable
000010 02040608 DCB 0x02,0x04,0x06,0x08

;*** Start embedded assembler ***

#line 1 "..\\..\\Libraries\\STM32F10x_StdPeriph_Driver\\src\\stm32f10x_rcc.c"
AREA ||.rev16_text||, CODE, READONLY
THUMB
EXPORT |__asm___15_stm32f10x_rcc_c_49e27980____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_stm32f10x_rcc_c_49e27980____REV16| PROC
#line 115

rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE, READONLY
THUMB
EXPORT |__asm___15_stm32f10x_rcc_c_49e27980____REVSH|
#line 128
|__asm___15_stm32f10x_rcc_c_49e27980____REVSH| PROC
#line 129

revsh r0, r0
bx lr
ENDP

;*** End embedded assembler ***

You might also like