📄 stm32f10x_rtc.lst
字号:
117 RTC_EnterConfigMode();
\ 00000004 ........ BL RTC_EnterConfigMode
118
119 /* Set RTC COUNTER MSB word */
120 RTC->CNTH = (CounterValue & RTC_MSB_Mask) >> 16;
\ 00000008 .... LDR.N R0,??DataTable4 ;; 0x40002818
\ 0000000A 2100 MOVS R1,R4
\ 0000000C 090C LSRS R1,R1,#+16
\ 0000000E 0180 STRH R1,[R0, #+0]
121 /* Set RTC COUNTER LSB word */
122 RTC->CNTL = (CounterValue & RTC_LSB_Mask);
\ 00000010 001D ADDS R0,R0,#+4
\ 00000012 0480 STRH R4,[R0, #+0]
123
124 RTC_ExitConfigMode();
\ 00000014 ........ BL RTC_ExitConfigMode
125 }
\ 00000018 10BD POP {R4,PC} ;; return
126
127 /*******************************************************************************
128 * Function Name : RTC_GetPrescaler
129 * Description : Gets the RTC prescaler value.
130 * Input : None
131 * Output : None
132 * Return : RTC prescaler value.
133 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
134 u32 RTC_GetPrescaler(void)
135 {
136 u32 tmp = 0x00;
137
138 tmp = ((u32)RTC->PRLH & (u32)0x000F) << 0x10;
\ RTC_GetPrescaler:
\ 00000000 .... LDR.N R0,??DataTable6 ;; 0x40002808
\ 00000002 0088 LDRH R0,[R0, #+0]
\ 00000004 0007 LSLS R0,R0,#+28
\ 00000006 000F LSRS R0,R0,#+28
\ 00000008 0104 LSLS R1,R0,#+16
139 tmp |= RTC->PRLL;
\ 0000000A 0248 LDR.N R0,??RTC_GetPrescaler_0 ;; 0x4000280c
\ 0000000C 0088 LDRH R0,[R0, #+0]
\ 0000000E 0843 ORRS R0,R0,R1
140
141 return tmp;
\ 00000010 7047 BX LR ;; return
\ 00000012 00BF Nop
\ ??RTC_GetPrescaler_0:
\ 00000014 0C280040 DC32 0x4000280c
142 }
143
144 /*******************************************************************************
145 * Function Name : RTC_SetPrescaler
146 * Description : Sets the RTC prescaler value.
147 * Input : - PrescalerValue: RTC prescaler new value.
148 * Output : None
149 * Return : None
150 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
151 void RTC_SetPrescaler(u32 PrescalerValue)
152 {
\ RTC_SetPrescaler:
\ 00000000 10B5 PUSH {R4,LR}
\ 00000002 0400 MOVS R4,R0
153 /* Check the parameters */
154 assert(IS_RTC_PRESCALER(PrescalerValue));
155
156 RTC_EnterConfigMode();
\ 00000004 ........ BL RTC_EnterConfigMode
157
158 /* Set RTC PRESCALER MSB word */
159 RTC->PRLH = (PrescalerValue & PRLH_MSB_Mask) >> 0x10;
\ 00000008 .... LDR.N R0,??DataTable6 ;; 0x40002808
\ 0000000A 14F47021 ANDS R1,R4,#0xF0000
\ 0000000E 090C LSRS R1,R1,#+16
\ 00000010 0180 STRH R1,[R0, #+0]
160 /* Set RTC PRESCALER LSB word */
161 RTC->PRLL = (PrescalerValue & RTC_LSB_Mask);
\ 00000012 001D ADDS R0,R0,#+4
\ 00000014 0480 STRH R4,[R0, #+0]
162
163 RTC_ExitConfigMode();
\ 00000016 ........ BL RTC_ExitConfigMode
164 }
\ 0000001A 10BD POP {R4,PC} ;; return
165
166 /*******************************************************************************
167 * Function Name : RTC_SetAlarm
168 * Description : Sets the RTC alarm value.
169 * Input : - AlarmValue: RTC alarm new value.
170 * Output : None
171 * Return : None
172 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
173 void RTC_SetAlarm(u32 AlarmValue)
174 {
\ RTC_SetAlarm:
\ 00000000 10B5 PUSH {R4,LR}
\ 00000002 0400 MOVS R4,R0
175 RTC_EnterConfigMode();
\ 00000004 ........ BL RTC_EnterConfigMode
176
177 /* Set the ALARM MSB word */
178 RTC->ALRH = (AlarmValue & RTC_MSB_Mask) >> 16;
\ 00000008 0448 LDR.N R0,??RTC_SetAlarm_0 ;; 0x40002820
\ 0000000A 2100 MOVS R1,R4
\ 0000000C 090C LSRS R1,R1,#+16
\ 0000000E 0180 STRH R1,[R0, #+0]
179 /* Set the ALARM LSB word */
180 RTC->ALRL = (AlarmValue & RTC_LSB_Mask);
\ 00000010 001D ADDS R0,R0,#+4
\ 00000012 0480 STRH R4,[R0, #+0]
181
182 RTC_ExitConfigMode();
\ 00000014 ........ BL RTC_ExitConfigMode
183 }
\ 00000018 10BD POP {R4,PC} ;; return
\ 0000001A 00BF Nop
\ ??RTC_SetAlarm_0:
\ 0000001C 20280040 DC32 0x40002820
184
185 /*******************************************************************************
186 * Function Name : RTC_GetDivider
187 * Description : Gets the RTC divider value.
188 * Input : None
189 * Output : None
190 * Return : RTC Divider value.
191 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
192 u32 RTC_GetDivider(void)
193 {
194 u32 tmp = 0x00;
195
196 tmp = ((u32)RTC->DIVH & (u32)0x000F) << 0x10;
\ RTC_GetDivider:
\ 00000000 0448 LDR.N R0,??RTC_GetDivider_0 ;; 0x40002810
\ 00000002 0088 LDRH R0,[R0, #+0]
\ 00000004 0007 LSLS R0,R0,#+28
\ 00000006 000F LSRS R0,R0,#+28
\ 00000008 0104 LSLS R1,R0,#+16
197 tmp |= RTC->DIVL;
\ 0000000A 0348 LDR.N R0,??RTC_GetDivider_0+0x4 ;; 0x40002814
\ 0000000C 0088 LDRH R0,[R0, #+0]
\ 0000000E 0843 ORRS R0,R0,R1
198
199 return tmp;
\ 00000010 7047 BX LR ;; return
\ 00000012 00BF Nop
\ ??RTC_GetDivider_0:
\ 00000014 10280040 DC32 0x40002810
\ 00000018 14280040 DC32 0x40002814
200 }
201
202 /*******************************************************************************
203 * Function Name : RTC_WaitForLastTask
204 * Description : Waits until last write operation on RTC registers has finished.
205 * This function must be called before any write to RTC registers.
206 * Input : None
207 * Output : None
208 * Return : None
209 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
210 void RTC_WaitForLastTask(void)
211 {
212 /* Loop until RTOFF flag is set */
213 while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)
\ RTC_WaitForLastTask:
\ ??RTC_WaitForLastTask_0:
\ 00000000 .... LDR.N R0,??DataTable13 ;; 0x40002804
\ 00000002 0088 LDRH R0,[R0, #+0]
\ 00000004 8006 LSLS R0,R0,#+26
\ 00000006 FBD5 BPL.N ??RTC_WaitForLastTask_0
214 {
215 }
216 }
\ 00000008 7047 BX LR ;; return
217
218 /*******************************************************************************
219 * Function Name : RTC_WaitForSynchro
220 * Description : Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL)
221 * are synchronized with RTC APB clock.
222 * This function must be called before any read operation after
223 * an APB reset or an APB clock stop.
224 * Input : None
225 * Output : None
226 * Return : None
227 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
228 void RTC_WaitForSynchro(void)
229 {
230 /* Clear RSF flag */
231 RTC->CRL &= (u16)~RTC_FLAG_RSF;
\ RTC_WaitForSynchro:
\ 00000000 .... LDR.N R0,??DataTable13 ;; 0x40002804
\ 00000002 0188 LDRH R1,[R0, #+0]
\ 00000004 034A LDR.N R2,??RTC_WaitForSynchro_0 ;; 0xfff7
\ 00000006 0A40 ANDS R2,R2,R1
\ 00000008 0280 STRH R2,[R0, #+0]
232
233 /* Loop until RSF flag is set */
234 while ((RTC->CRL & RTC_FLAG_RSF) == (u16)RESET)
\ ??RTC_WaitForSynchro_1:
\ 0000000A 0188 LDRH R1,[R0, #+0]
\ 0000000C 0907 LSLS R1,R1,#+28
\ 0000000E FCD5 BPL.N ??RTC_WaitForSynchro_1
235 {
236 }
237 }
\ 00000010 7047 BX LR ;; return
\ 00000012 00BF Nop
\ ??RTC_WaitForSynchro_0:
\ 00000014 F7FF0000 DC32 0xfff7
238
239 /*******************************************************************************
240 * Function Name : RTC_GetFlagStatus
241 * Description : Checks whether the specified RTC flag is set or not.
242 * Input : - RTC_FLAG: specifies the flag to check.
243 * This parameter can be one the following values:
244 * - RTC_FLAG_RTOFF: RTC Operation OFF flag
245 * - RTC_FLAG_RSF: Registers Synchronized flag
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -