📄 stm32f10x_rcc.lst
字号:
148 /* Reset HSEBYP bit */
149 RCC->CR &= 0xFFFBFFFF;
\ 00000042 .... LDR.N R0,??DataTable25 ;; 0x40021000
\ 00000044 0068 LDR R0,[R0, #+0]
\ 00000046 7FF48021 MVNS R1,#+262144
\ 0000004A 0140 ANDS R1,R1,R0
\ 0000004C .... LDR.N R0,??DataTable25 ;; 0x40021000
\ 0000004E 0160 STR R1,[R0, #+0]
150
151 /* Reset PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE bits */
152 RCC->CFGR &= 0xFF80FFFF;
\ 00000050 .... LDR.N R0,??DataTable38 ;; 0x40021004
\ 00000052 0068 LDR R0,[R0, #+0]
\ 00000054 7FF4FE01 MVNS R1,#+8323072
\ 00000058 0140 ANDS R1,R1,R0
\ 0000005A .... LDR.N R0,??DataTable38 ;; 0x40021004
\ 0000005C 0160 STR R1,[R0, #+0]
153
154 /* Disable all interrupts */
155 RCC->CIR = 0x00000000;
\ 0000005E .... LDR.N R0,??DataTable15 ;; 0x40021008
\ 00000060 0021 MOVS R1,#+0
\ 00000062 0160 STR R1,[R0, #+0]
156 }
\ 00000064 7047 BX LR ;; return
\ 00000066 00BF Nop
\ ??RCC_DeInit_0:
\ 00000068 0000FFF8 DC32 0xf8ff0000
\ 0000006C FFFFF6FE DC32 0xfef6ffff
157
158 /*******************************************************************************
159 * Function Name : RCC_HSEConfig
160 * Description : Configures the External High Speed oscillator (HSE).
161 * HSE can not be stopped if it is used directly or through the
162 * PLL as system clock.
163 * Input : - RCC_HSE: specifies the new state of the HSE.
164 * This parameter can be one of the following values:
165 * - RCC_HSE_OFF: HSE oscillator OFF
166 * - RCC_HSE_ON: HSE oscillator ON
167 * - RCC_HSE_Bypass: HSE oscillator bypassed with external
168 * clock
169 * Output : None
170 * Return : None
171 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
172 void RCC_HSEConfig(u32 RCC_HSE)
173 {
\ RCC_HSEConfig:
\ 00000000 01B5 PUSH {R0,LR}
174 /* Check the parameters */
175 assert_param(IS_RCC_HSE(RCC_HSE));
176
177 /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/
178 /* Reset HSEON bit */
179 RCC->CR &= CR_HSEON_Reset;
\ 00000002 .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 00000004 0968 LDR R1,[R1, #+0]
\ 00000006 7FF48032 MVNS R2,#+65536
\ 0000000A 0A40 ANDS R2,R2,R1
\ 0000000C .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 0000000E 0A60 STR R2,[R1, #+0]
180
181 /* Reset HSEBYP bit */
182 RCC->CR &= CR_HSEBYP_Reset;
\ 00000010 .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 00000012 0968 LDR R1,[R1, #+0]
\ 00000014 7FF48022 MVNS R2,#+262144
\ 00000018 0A40 ANDS R2,R2,R1
\ 0000001A .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 0000001C 0A60 STR R2,[R1, #+0]
183
184 /* Configure HSE (RCC_HSE_OFF is already covered by the code section above) */
185 switch(RCC_HSE)
\ 0000001E 0100 MOVS R1,R0
\ 00000020 5FF48032 MOVS R2,#+65536
\ 00000024 891A SUBS R1,R1,R2
\ 00000026 04D0 BEQ.N ??RCC_HSEConfig_0
\ 00000028 5FF44032 MOVS R2,#+196608
\ 0000002C 891A SUBS R1,R1,R2
\ 0000002E 07D0 BEQ.N ??RCC_HSEConfig_1
\ 00000030 0CE0 B.N ??RCC_HSEConfig_2
186 {
187 case RCC_HSE_ON:
188 /* Set HSEON bit */
189 RCC->CR |= CR_HSEON_Set;
\ ??RCC_HSEConfig_0:
\ 00000032 .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 00000034 0968 LDR R1,[R1, #+0]
\ 00000036 51F48031 ORRS R1,R1,#0x10000
\ 0000003A .... LDR.N R2,??DataTable25 ;; 0x40021000
\ 0000003C 1160 STR R1,[R2, #+0]
\ 0000003E 05E0 B.N ??RCC_HSEConfig_2
190 break;
191
192 case RCC_HSE_Bypass:
193 /* Set HSEBYP and HSEON bits */
194 RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
\ ??RCC_HSEConfig_1:
\ 00000040 .... LDR.N R1,??DataTable25 ;; 0x40021000
\ 00000042 0968 LDR R1,[R1, #+0]
\ 00000044 51F4A021 ORRS R1,R1,#0x50000
\ 00000048 .... LDR.N R2,??DataTable25 ;; 0x40021000
\ 0000004A 1160 STR R1,[R2, #+0]
195 break;
196
197 default:
198 break;
199 }
200 }
\ ??RCC_HSEConfig_2:
\ 0000004C 01B0 ADD SP,SP,#+4
\ 0000004E 00BD POP {PC} ;; return
201
202 /*******************************************************************************
203 * Function Name : RCC_WaitForHSEStartUp
204 * Description : Waits for HSE start-up.
205 * Input : None
206 * Output : None
207 * Return : An ErrorStatus enumuration value:
208 * - SUCCESS: HSE oscillator is stable and ready to use
209 * - ERROR: HSE oscillator not yet ready
210 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
211 ErrorStatus RCC_WaitForHSEStartUp(void)
212 {
\ RCC_WaitForHSEStartUp:
\ 00000000 01B5 PUSH {R0,LR}
213 /* Wait till HSE is ready and if Time out is reached exit */
214 do
215 {
216 HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
\ ??RCC_WaitForHSEStartUp_0:
\ 00000002 3120 MOVS R0,#+49
\ 00000004 ........ BL RCC_GetFlagStatus
\ 00000008 0C49 LDR.N R1,??RCC_WaitForHSEStartUp_1 ;; HSEStatus
\ 0000000A 0870 STRB R0,[R1, #+0]
217 StartUpCounter++;
\ 0000000C 0C48 LDR.N R0,??RCC_WaitForHSEStartUp_1+0x4 ;; StartUpCounter
\ 0000000E 0068 LDR R0,[R0, #+0]
\ 00000010 401C ADDS R0,R0,#+1
\ 00000012 0B49 LDR.N R1,??RCC_WaitForHSEStartUp_1+0x4 ;; StartUpCounter
\ 00000014 0860 STR R0,[R1, #+0]
218 } while((HSEStatus == RESET) && (StartUpCounter != HSEStartUp_TimeOut));
\ 00000016 0948 LDR.N R0,??RCC_WaitForHSEStartUp_1 ;; HSEStatus
\ 00000018 0078 LDRB R0,[R0, #+0]
\ 0000001A 0028 CMP R0,#+0
\ 0000001C 03D1 BNE.N ??RCC_WaitForHSEStartUp_2
\ 0000001E 0848 LDR.N R0,??RCC_WaitForHSEStartUp_1+0x4 ;; StartUpCounter
\ 00000020 0068 LDR R0,[R0, #+0]
\ 00000022 FF28 CMP R0,#+255
\ 00000024 EDD1 BNE.N ??RCC_WaitForHSEStartUp_0
219
220
221 if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET)
\ ??RCC_WaitForHSEStartUp_2:
\ 00000026 3120 MOVS R0,#+49
\ 00000028 ........ BL RCC_GetFlagStatus
\ 0000002C 401E SUBS R0,R0,#+1
\ 0000002E 8041 SBCS R0,R0,R0
\ 00000030 C043 MVNS R0,R0
\ 00000032 C00F LSRS R0,R0,#+31
\ 00000034 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
222 {
223 return SUCCESS;
224 }
225 else
226 {
227 return ERROR;
\ 00000036 01B0 ADD SP,SP,#+4
\ 00000038 00BD POP {PC} ;; return
\ 0000003A 00BF Nop
\ ??RCC_WaitForHSEStartUp_1:
\ 0000003C ........ DC32 HSEStatus
\ 00000040 ........ DC32 StartUpCounter
228 }
229 }
230
231 /*******************************************************************************
232 * Function Name : RCC_AdjustHSICalibrationValue
233 * Description : Adjusts the Internal High Speed oscillator (HSI) calibration
234 * value.
235 * Input : - HSICalibrationValue: specifies the calibration trimming value.
236 * This parameter must be a number between 0 and 0x1F.
237 * Output : None
238 * Return : None
239 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
240 void RCC_AdjustHSICalibrationValue(u8 HSICalibrationValue)
241 {
242 u32 tmpreg = 0;
\ RCC_AdjustHSICalibrationValue:
\ 00000000 0022 MOVS R2,#+0
\ 00000002 1100 MOVS R1,R2
243
244 /* Check the parameters */
245 assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue));
246
247 tmpreg = RCC->CR;
\ 00000004 .... LDR.N R2,??DataTable25 ;; 0x40021000
\ 00000006 1268 LDR R2,[R2, #+0]
\ 00000008 1100 MOVS R1,R2
248
249 /* Clear HSITRIM[7:3] bits */
250 tmpreg &= CR_HSITRIM_Mask;
\ 0000000A F822 MOVS R2,#+248
\ 0000000C 9143 BICS R1,R1,R2
251
252 /* Set the HSITRIM[7:3] bits according to HSICalibrationValue value */
253 tmpreg |= (u32)HSICalibrationValue << 3;
\ 0000000E C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000010 51EAC001 ORRS R1,R1,R0, LSL #+3
254
255 /* Store the new value */
256 RCC->CR = tmpreg;
\ 00000014 .... LDR.N R2,??DataTable25 ;; 0x40021000
\ 00000016 1160 STR R1,[R2, #+0]
257 }
\ 00000018 7047 BX LR ;; return
258
259 /*******************************************************************************
260 * Function Name : RCC_HSICmd
261 * Description : Enables or disables the Internal High Speed oscillator (HSI).
262 * HSI can not be stopped if it is used directly or through the
263 * PLL as system clock.
264 * Input : - NewState: new state of the HSI.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -