2022-02-10 19:03:59 +08:00

17326 lines
594 KiB
Plaintext

demos/printf_demo/main.elf: file format elf32-littlearm
Disassembly of section .text:
00000000 <g_pfnVectors>:
0: 00 50 00 20 e5 59 00 00 29 5a 00 00 29 5a 00 00 .P. .Y..)Z..)Z..
10: 29 5a 00 00 29 5a 00 00 29 5a 00 00 00 00 00 00 )Z..)Z..)Z......
...
2c: 29 5a 00 00 29 5a 00 00 00 00 00 00 29 5a 00 00 )Z..)Z......)Z..
3c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
4c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
5c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
6c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
7c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
8c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
9c: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
ac: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
bc: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
cc: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
dc: 29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00 )Z..)Z..)Z..)Z..
...
108: 5f f8 08 f1 _...
0000010c <__get_PSP>:
* Return the actual process stack pointer
*/
uint32_t __get_PSP(void) __attribute__( ( naked ) );
uint32_t __get_PSP(void)
{
uint32_t result=0;
10c: 2400 movs r4, #0
__ASM volatile ("MRS %0, psp\n\t"
10e: f3ef 8309 mrs r3, PSP
112: 4618 mov r0, r3
114: 4770 bx lr
116: 461c mov r4, r3
"MOV r0, %0 \n\t"
"BX lr \n\t" : "=r" (result) );
return(result);
118: 4623 mov r3, r4
}
11a: 4618 mov r0, r3
0000011c <__set_PSP>:
* Assign the value ProcessStackPointer to the MSP
* (process stack pointer) Cortex processor register
*/
void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) );
void __set_PSP(uint32_t topOfProcStack)
{
11c: 4603 mov r3, r0
__ASM volatile ("MSR psp, %0\n\t"
11e: f383 8809 msr PSP, r3
122: 4770 bx lr
"BX lr \n\t" : : "r" (topOfProcStack) );
}
124: bf00 nop
00000126 <__get_MSP>:
* Cortex processor register
*/
uint32_t __get_MSP(void) __attribute__( ( naked ) );
uint32_t __get_MSP(void)
{
uint32_t result=0;
126: 2400 movs r4, #0
__ASM volatile ("MRS %0, msp\n\t"
128: f3ef 8308 mrs r3, MSP
12c: 4618 mov r0, r3
12e: 4770 bx lr
130: 461c mov r4, r3
"MOV r0, %0 \n\t"
"BX lr \n\t" : "=r" (result) );
return(result);
132: 4623 mov r3, r4
}
134: 4618 mov r0, r3
00000136 <__set_MSP>:
* Assign the value mainStackPointer to the MSP
* (main stack pointer) Cortex processor register
*/
void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) );
void __set_MSP(uint32_t topOfMainStack)
{
136: 4603 mov r3, r0
__ASM volatile ("MSR msp, %0\n\t"
138: f383 8808 msr MSP, r3
13c: 4770 bx lr
"BX lr \n\t" : : "r" (topOfMainStack) );
}
13e: bf00 nop
00000140 <__get_BASEPRI>:
* @return BasePriority
*
* Return the content of the base priority register
*/
uint32_t __get_BASEPRI(void)
{
140: b480 push {r7}
142: b083 sub sp, #12
144: af00 add r7, sp, #0
uint32_t result=0;
146: 2300 movs r3, #0
148: 607b str r3, [r7, #4]
__ASM volatile ("MRS %0, basepri_max" : "=r" (result) );
14a: f3ef 8312 mrs r3, BASEPRI_MAX
14e: 607b str r3, [r7, #4]
return(result);
150: 687b ldr r3, [r7, #4]
}
152: 4618 mov r0, r3
154: 370c adds r7, #12
156: 46bd mov sp, r7
158: bc80 pop {r7}
15a: 4770 bx lr
0000015c <__set_BASEPRI>:
* @param basePri BasePriority
*
* Set the base priority register
*/
void __set_BASEPRI(uint32_t value)
{
15c: b480 push {r7}
15e: b083 sub sp, #12
160: af00 add r7, sp, #0
162: 6078 str r0, [r7, #4]
__ASM volatile ("MSR basepri, %0" : : "r" (value) );
164: 687b ldr r3, [r7, #4]
166: f383 8811 msr BASEPRI, r3
}
16a: bf00 nop
16c: 370c adds r7, #12
16e: 46bd mov sp, r7
170: bc80 pop {r7}
172: 4770 bx lr
00000174 <__get_PRIMASK>:
* @return PriMask
*
* Return state of the priority mask bit from the priority mask register
*/
uint32_t __get_PRIMASK(void)
{
174: b480 push {r7}
176: b083 sub sp, #12
178: af00 add r7, sp, #0
uint32_t result=0;
17a: 2300 movs r3, #0
17c: 607b str r3, [r7, #4]
__ASM volatile ("MRS %0, primask" : "=r" (result) );
17e: f3ef 8310 mrs r3, PRIMASK
182: 607b str r3, [r7, #4]
return(result);
184: 687b ldr r3, [r7, #4]
}
186: 4618 mov r0, r3
188: 370c adds r7, #12
18a: 46bd mov sp, r7
18c: bc80 pop {r7}
18e: 4770 bx lr
00000190 <__set_PRIMASK>:
* @param priMask PriMask
*
* Set the priority mask bit in the priority mask register
*/
void __set_PRIMASK(uint32_t priMask)
{
190: b480 push {r7}
192: b083 sub sp, #12
194: af00 add r7, sp, #0
196: 6078 str r0, [r7, #4]
__ASM volatile ("MSR primask, %0" : : "r" (priMask) );
198: 687b ldr r3, [r7, #4]
19a: f383 8810 msr PRIMASK, r3
}
19e: bf00 nop
1a0: 370c adds r7, #12
1a2: 46bd mov sp, r7
1a4: bc80 pop {r7}
1a6: 4770 bx lr
000001a8 <__get_FAULTMASK>:
* @return FaultMask
*
* Return the content of the fault mask register
*/
uint32_t __get_FAULTMASK(void)
{
1a8: b480 push {r7}
1aa: b083 sub sp, #12
1ac: af00 add r7, sp, #0
uint32_t result=0;
1ae: 2300 movs r3, #0
1b0: 607b str r3, [r7, #4]
__ASM volatile ("MRS %0, faultmask" : "=r" (result) );
1b2: f3ef 8313 mrs r3, FAULTMASK
1b6: 607b str r3, [r7, #4]
return(result);
1b8: 687b ldr r3, [r7, #4]
}
1ba: 4618 mov r0, r3
1bc: 370c adds r7, #12
1be: 46bd mov sp, r7
1c0: bc80 pop {r7}
1c2: 4770 bx lr
000001c4 <__set_FAULTMASK>:
* @param faultMask faultMask value
*
* Set the fault mask register
*/
void __set_FAULTMASK(uint32_t faultMask)
{
1c4: b480 push {r7}
1c6: b083 sub sp, #12
1c8: af00 add r7, sp, #0
1ca: 6078 str r0, [r7, #4]
__ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
1cc: 687b ldr r3, [r7, #4]
1ce: f383 8813 msr FAULTMASK, r3
}
1d2: bf00 nop
1d4: 370c adds r7, #12
1d6: 46bd mov sp, r7
1d8: bc80 pop {r7}
1da: 4770 bx lr
000001dc <__get_CONTROL>:
* @return Control value
*
* Return the content of the control register
*/
uint32_t __get_CONTROL(void)
{
1dc: b480 push {r7}
1de: b083 sub sp, #12
1e0: af00 add r7, sp, #0
uint32_t result=0;
1e2: 2300 movs r3, #0
1e4: 607b str r3, [r7, #4]
__ASM volatile ("MRS %0, control" : "=r" (result) );
1e6: f3ef 8314 mrs r3, CONTROL
1ea: 607b str r3, [r7, #4]
return(result);
1ec: 687b ldr r3, [r7, #4]
}
1ee: 4618 mov r0, r3
1f0: 370c adds r7, #12
1f2: 46bd mov sp, r7
1f4: bc80 pop {r7}
1f6: 4770 bx lr
000001f8 <__set_CONTROL>:
* @param control Control value
*
* Set the control register
*/
void __set_CONTROL(uint32_t control)
{
1f8: b480 push {r7}
1fa: b083 sub sp, #12
1fc: af00 add r7, sp, #0
1fe: 6078 str r0, [r7, #4]
__ASM volatile ("MSR control, %0" : : "r" (control) );
200: 687b ldr r3, [r7, #4]
202: f383 8814 msr CONTROL, r3
}
206: bf00 nop
208: 370c adds r7, #12
20a: 46bd mov sp, r7
20c: bc80 pop {r7}
20e: 4770 bx lr
00000210 <__REV>:
* @return reversed value
*
* Reverse byte order in integer value
*/
uint32_t __REV(uint32_t value)
{
210: b480 push {r7}
212: b085 sub sp, #20
214: af00 add r7, sp, #0
216: 6078 str r0, [r7, #4]
uint32_t result=0;
218: 2300 movs r3, #0
21a: 60fb str r3, [r7, #12]
__ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
21c: 687b ldr r3, [r7, #4]
21e: ba1b rev r3, r3
220: 60fb str r3, [r7, #12]
return(result);
222: 68fb ldr r3, [r7, #12]
}
224: 4618 mov r0, r3
226: 3714 adds r7, #20
228: 46bd mov sp, r7
22a: bc80 pop {r7}
22c: 4770 bx lr
0000022e <__REV16>:
* @return reversed value
*
* Reverse byte order in unsigned short value
*/
uint32_t __REV16(uint16_t value)
{
22e: b480 push {r7}
230: b085 sub sp, #20
232: af00 add r7, sp, #0
234: 4603 mov r3, r0
236: 80fb strh r3, [r7, #6]
uint32_t result=0;
238: 2300 movs r3, #0
23a: 60fb str r3, [r7, #12]
__ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
23c: 88fb ldrh r3, [r7, #6]
23e: ba5b rev16 r3, r3
240: 60fb str r3, [r7, #12]
return(result);
242: 68fb ldr r3, [r7, #12]
}
244: 4618 mov r0, r3
246: 3714 adds r7, #20
248: 46bd mov sp, r7
24a: bc80 pop {r7}
24c: 4770 bx lr
0000024e <__REVSH>:
* @return reversed value
*
* Reverse byte order in signed short value with sign extension to integer
*/
int32_t __REVSH(int16_t value)
{
24e: b480 push {r7}
250: b085 sub sp, #20
252: af00 add r7, sp, #0
254: 4603 mov r3, r0
256: 80fb strh r3, [r7, #6]
uint32_t result=0;
258: 2300 movs r3, #0
25a: 60fb str r3, [r7, #12]
__ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );
25c: 88fb ldrh r3, [r7, #6]
25e: badb revsh r3, r3
260: 60fb str r3, [r7, #12]
return(result);
262: 68fb ldr r3, [r7, #12]
}
264: 4618 mov r0, r3
266: 3714 adds r7, #20
268: 46bd mov sp, r7
26a: bc80 pop {r7}
26c: 4770 bx lr
0000026e <__RBIT>:
* @return reversed value
*
* Reverse bit order of value
*/
uint32_t __RBIT(uint32_t value)
{
26e: b480 push {r7}
270: b085 sub sp, #20
272: af00 add r7, sp, #0
274: 6078 str r0, [r7, #4]
uint32_t result=0;
276: 2300 movs r3, #0
278: 60fb str r3, [r7, #12]
__ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
27a: 687b ldr r3, [r7, #4]
27c: fa93 f3a3 rbit r3, r3
280: 60fb str r3, [r7, #12]
return(result);
282: 68fb ldr r3, [r7, #12]
}
284: 4618 mov r0, r3
286: 3714 adds r7, #20
288: 46bd mov sp, r7
28a: bc80 pop {r7}
28c: 4770 bx lr
0000028e <__LDREXB>:
* @return value of (*address)
*
* Exclusive LDR command for 8 bit value
*/
uint8_t __LDREXB(uint8_t *addr)
{
28e: b480 push {r7}
290: b085 sub sp, #20
292: af00 add r7, sp, #0
294: 6078 str r0, [r7, #4]
uint8_t result=0;
296: 2300 movs r3, #0
298: 73fb strb r3, [r7, #15]
__ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );
29a: 687b ldr r3, [r7, #4]
29c: e8d3 3f4f ldrexb r3, [r3]
2a0: 73fb strb r3, [r7, #15]
return(result);
2a2: 7bfb ldrb r3, [r7, #15]
}
2a4: 4618 mov r0, r3
2a6: 3714 adds r7, #20
2a8: 46bd mov sp, r7
2aa: bc80 pop {r7}
2ac: 4770 bx lr
000002ae <__LDREXH>:
* @return value of (*address)
*
* Exclusive LDR command for 16 bit values
*/
uint16_t __LDREXH(uint16_t *addr)
{
2ae: b480 push {r7}
2b0: b085 sub sp, #20
2b2: af00 add r7, sp, #0
2b4: 6078 str r0, [r7, #4]
uint16_t result=0;
2b6: 2300 movs r3, #0
2b8: 81fb strh r3, [r7, #14]
__ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );
2ba: 687b ldr r3, [r7, #4]
2bc: e8d3 3f5f ldrexh r3, [r3]
2c0: 81fb strh r3, [r7, #14]
return(result);
2c2: 89fb ldrh r3, [r7, #14]
}
2c4: 4618 mov r0, r3
2c6: 3714 adds r7, #20
2c8: 46bd mov sp, r7
2ca: bc80 pop {r7}
2cc: 4770 bx lr
000002ce <__LDREXW>:
* @return value of (*address)
*
* Exclusive LDR command for 32 bit values
*/
uint32_t __LDREXW(uint32_t *addr)
{
2ce: b480 push {r7}
2d0: b085 sub sp, #20
2d2: af00 add r7, sp, #0
2d4: 6078 str r0, [r7, #4]
uint32_t result=0;
2d6: 2300 movs r3, #0
2d8: 60fb str r3, [r7, #12]
__ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );
2da: 687b ldr r3, [r7, #4]
2dc: e853 3f00 ldrex r3, [r3]
2e0: 60fb str r3, [r7, #12]
return(result);
2e2: 68fb ldr r3, [r7, #12]
}
2e4: 4618 mov r0, r3
2e6: 3714 adds r7, #20
2e8: 46bd mov sp, r7
2ea: bc80 pop {r7}
2ec: 4770 bx lr
000002ee <__STREXB>:
* @return successful / failed
*
* Exclusive STR command for 8 bit values
*/
uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
2ee: b480 push {r7}
2f0: b085 sub sp, #20
2f2: af00 add r7, sp, #0
2f4: 4603 mov r3, r0
2f6: 6039 str r1, [r7, #0]
2f8: 71fb strb r3, [r7, #7]
uint32_t result=0;
2fa: 2300 movs r3, #0
2fc: 60fb str r3, [r7, #12]
__ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
2fe: 683a ldr r2, [r7, #0]
300: 79f9 ldrb r1, [r7, #7]
302: e8c2 1f43 strexb r3, r1, [r2]
306: 60fb str r3, [r7, #12]
return(result);
308: 68fb ldr r3, [r7, #12]
}
30a: 4618 mov r0, r3
30c: 3714 adds r7, #20
30e: 46bd mov sp, r7
310: bc80 pop {r7}
312: 4770 bx lr
00000314 <__STREXH>:
* @return successful / failed
*
* Exclusive STR command for 16 bit values
*/
uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
314: b480 push {r7}
316: b085 sub sp, #20
318: af00 add r7, sp, #0
31a: 4603 mov r3, r0
31c: 6039 str r1, [r7, #0]
31e: 80fb strh r3, [r7, #6]
uint32_t result=0;
320: 2300 movs r3, #0
322: 60fb str r3, [r7, #12]
__ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
324: 683a ldr r2, [r7, #0]
326: 88f9 ldrh r1, [r7, #6]
328: e8c2 1f53 strexh r3, r1, [r2]
32c: 60fb str r3, [r7, #12]
return(result);
32e: 68fb ldr r3, [r7, #12]
}
330: 4618 mov r0, r3
332: 3714 adds r7, #20
334: 46bd mov sp, r7
336: bc80 pop {r7}
338: 4770 bx lr
0000033a <__STREXW>:
* @return successful / failed
*
* Exclusive STR command for 32 bit values
*/
uint32_t __STREXW(uint32_t value, uint32_t *addr)
{
33a: b480 push {r7}
33c: b085 sub sp, #20
33e: af00 add r7, sp, #0
340: 6078 str r0, [r7, #4]
342: 6039 str r1, [r7, #0]
uint32_t result=0;
344: 2300 movs r3, #0
346: 60fb str r3, [r7, #12]
__ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
348: 683b ldr r3, [r7, #0]
34a: 687a ldr r2, [r7, #4]
34c: e843 2300 strex r3, r2, [r3]
350: 60fb str r3, [r7, #12]
return(result);
352: 68fb ldr r3, [r7, #12]
}
354: 4618 mov r0, r3
356: 3714 adds r7, #20
358: 46bd mov sp, r7
35a: bc80 pop {r7}
35c: 4770 bx lr
...
00000360 <SystemInit>:
* @note This function should be used only after reset.
* @param None
* @retval None
*/
void SystemInit (void)
{
360: b580 push {r7, lr}
362: af00 add r7, sp, #0
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
364: 4b15 ldr r3, [pc, #84] ; (3bc <SystemInit+0x5c>)
366: 681b ldr r3, [r3, #0]
368: 4a14 ldr r2, [pc, #80] ; (3bc <SystemInit+0x5c>)
36a: f043 0301 orr.w r3, r3, #1
36e: 6013 str r3, [r2, #0]
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
370: 4b12 ldr r3, [pc, #72] ; (3bc <SystemInit+0x5c>)
372: 685a ldr r2, [r3, #4]
374: 4911 ldr r1, [pc, #68] ; (3bc <SystemInit+0x5c>)
376: 4b12 ldr r3, [pc, #72] ; (3c0 <SystemInit+0x60>)
378: 4013 ands r3, r2
37a: 604b str r3, [r1, #4]
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
37c: 4b0f ldr r3, [pc, #60] ; (3bc <SystemInit+0x5c>)
37e: 681b ldr r3, [r3, #0]
380: 4a0e ldr r2, [pc, #56] ; (3bc <SystemInit+0x5c>)
382: f023 7384 bic.w r3, r3, #17301504 ; 0x1080000
386: f423 3380 bic.w r3, r3, #65536 ; 0x10000
38a: 6013 str r3, [r2, #0]
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
38c: 4b0b ldr r3, [pc, #44] ; (3bc <SystemInit+0x5c>)
38e: 681b ldr r3, [r3, #0]
390: 4a0a ldr r2, [pc, #40] ; (3bc <SystemInit+0x5c>)
392: f423 2380 bic.w r3, r3, #262144 ; 0x40000
396: 6013 str r3, [r2, #0]
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= (uint32_t)0xFF80FFFF;
398: 4b08 ldr r3, [pc, #32] ; (3bc <SystemInit+0x5c>)
39a: 685b ldr r3, [r3, #4]
39c: 4a07 ldr r2, [pc, #28] ; (3bc <SystemInit+0x5c>)
39e: f423 03fe bic.w r3, r3, #8323072 ; 0x7f0000
3a2: 6053 str r3, [r2, #4]
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
3a4: 4b05 ldr r3, [pc, #20] ; (3bc <SystemInit+0x5c>)
3a6: f44f 021f mov.w r2, #10420224 ; 0x9f0000
3aa: 609a str r2, [r3, #8]
#endif /* DATA_IN_ExtSRAM */
#endif
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
3ac: f000 f87e bl 4ac <SetSysClock>
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
3b0: 4b04 ldr r3, [pc, #16] ; (3c4 <SystemInit+0x64>)
3b2: f04f 6200 mov.w r2, #134217728 ; 0x8000000
3b6: 609a str r2, [r3, #8]
#endif
}
3b8: bf00 nop
3ba: bd80 pop {r7, pc}
3bc: 40021000 .word 0x40021000
3c0: f8ff0000 .word 0xf8ff0000
3c4: e000ed00 .word 0xe000ed00
000003c8 <SystemCoreClockUpdate>:
* value for HSE crystal.
* @param None
* @retval None
*/
void SystemCoreClockUpdate (void)
{
3c8: b480 push {r7}
3ca: b085 sub sp, #20
3cc: af00 add r7, sp, #0
uint32_t tmp = 0, pllmull = 0, pllsource = 0;
3ce: 2300 movs r3, #0
3d0: 60fb str r3, [r7, #12]
3d2: 2300 movs r3, #0
3d4: 60bb str r3, [r7, #8]
3d6: 2300 movs r3, #0
3d8: 607b str r3, [r7, #4]
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
uint32_t prediv1factor = 0;
#endif /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & RCC_CFGR_SWS;
3da: 4b2f ldr r3, [pc, #188] ; (498 <SystemCoreClockUpdate+0xd0>)
3dc: 685b ldr r3, [r3, #4]
3de: f003 030c and.w r3, r3, #12
3e2: 60fb str r3, [r7, #12]
switch (tmp)
3e4: 68fb ldr r3, [r7, #12]
3e6: 2b08 cmp r3, #8
3e8: d011 beq.n 40e <SystemCoreClockUpdate+0x46>
3ea: 68fb ldr r3, [r7, #12]
3ec: 2b08 cmp r3, #8
3ee: d83a bhi.n 466 <SystemCoreClockUpdate+0x9e>
3f0: 68fb ldr r3, [r7, #12]
3f2: 2b00 cmp r3, #0
3f4: d003 beq.n 3fe <SystemCoreClockUpdate+0x36>
3f6: 68fb ldr r3, [r7, #12]
3f8: 2b04 cmp r3, #4
3fa: d004 beq.n 406 <SystemCoreClockUpdate+0x3e>
3fc: e033 b.n 466 <SystemCoreClockUpdate+0x9e>
{
case 0x00: /* HSI used as system clock */
SystemCoreClock = HSI_VALUE;
3fe: 4b27 ldr r3, [pc, #156] ; (49c <SystemCoreClockUpdate+0xd4>)
400: 4a27 ldr r2, [pc, #156] ; (4a0 <SystemCoreClockUpdate+0xd8>)
402: 601a str r2, [r3, #0]
break;
404: e033 b.n 46e <SystemCoreClockUpdate+0xa6>
case 0x04: /* HSE used as system clock */
SystemCoreClock = HSE_VALUE;
406: 4b25 ldr r3, [pc, #148] ; (49c <SystemCoreClockUpdate+0xd4>)
408: 4a25 ldr r2, [pc, #148] ; (4a0 <SystemCoreClockUpdate+0xd8>)
40a: 601a str r2, [r3, #0]
break;
40c: e02f b.n 46e <SystemCoreClockUpdate+0xa6>
case 0x08: /* PLL used as system clock */
/* Get PLL clock source and multiplication factor ----------------------*/
pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
40e: 4b22 ldr r3, [pc, #136] ; (498 <SystemCoreClockUpdate+0xd0>)
410: 685b ldr r3, [r3, #4]
412: f403 1370 and.w r3, r3, #3932160 ; 0x3c0000
416: 60bb str r3, [r7, #8]
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
418: 4b1f ldr r3, [pc, #124] ; (498 <SystemCoreClockUpdate+0xd0>)
41a: 685b ldr r3, [r3, #4]
41c: f403 3380 and.w r3, r3, #65536 ; 0x10000
420: 607b str r3, [r7, #4]
#ifndef STM32F10X_CL
pllmull = ( pllmull >> 18) + 2;
422: 68bb ldr r3, [r7, #8]
424: 0c9b lsrs r3, r3, #18
426: 3302 adds r3, #2
428: 60bb str r3, [r7, #8]
if (pllsource == 0x00)
42a: 687b ldr r3, [r7, #4]
42c: 2b00 cmp r3, #0
42e: d106 bne.n 43e <SystemCoreClockUpdate+0x76>
{
/* HSI oscillator clock divided by 2 selected as PLL clock entry */
SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
430: 68bb ldr r3, [r7, #8]
432: 4a1c ldr r2, [pc, #112] ; (4a4 <SystemCoreClockUpdate+0xdc>)
434: fb02 f303 mul.w r3, r2, r3
438: 4a18 ldr r2, [pc, #96] ; (49c <SystemCoreClockUpdate+0xd4>)
43a: 6013 str r3, [r2, #0]
pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2;
SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;
}
}
#endif /* STM32F10X_CL */
break;
43c: e017 b.n 46e <SystemCoreClockUpdate+0xa6>
if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
43e: 4b16 ldr r3, [pc, #88] ; (498 <SystemCoreClockUpdate+0xd0>)
440: 685b ldr r3, [r3, #4]
442: f403 3300 and.w r3, r3, #131072 ; 0x20000
446: 2b00 cmp r3, #0
448: d006 beq.n 458 <SystemCoreClockUpdate+0x90>
SystemCoreClock = (HSE_VALUE >> 1) * pllmull;
44a: 68bb ldr r3, [r7, #8]
44c: 4a15 ldr r2, [pc, #84] ; (4a4 <SystemCoreClockUpdate+0xdc>)
44e: fb02 f303 mul.w r3, r2, r3
452: 4a12 ldr r2, [pc, #72] ; (49c <SystemCoreClockUpdate+0xd4>)
454: 6013 str r3, [r2, #0]
break;
456: e00a b.n 46e <SystemCoreClockUpdate+0xa6>
SystemCoreClock = HSE_VALUE * pllmull;
458: 68bb ldr r3, [r7, #8]
45a: 4a11 ldr r2, [pc, #68] ; (4a0 <SystemCoreClockUpdate+0xd8>)
45c: fb02 f303 mul.w r3, r2, r3
460: 4a0e ldr r2, [pc, #56] ; (49c <SystemCoreClockUpdate+0xd4>)
462: 6013 str r3, [r2, #0]
break;
464: e003 b.n 46e <SystemCoreClockUpdate+0xa6>
default:
SystemCoreClock = HSI_VALUE;
466: 4b0d ldr r3, [pc, #52] ; (49c <SystemCoreClockUpdate+0xd4>)
468: 4a0d ldr r2, [pc, #52] ; (4a0 <SystemCoreClockUpdate+0xd8>)
46a: 601a str r2, [r3, #0]
break;
46c: bf00 nop
}
/* Compute HCLK clock frequency ----------------*/
/* Get HCLK prescaler */
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
46e: 4b0a ldr r3, [pc, #40] ; (498 <SystemCoreClockUpdate+0xd0>)
470: 685b ldr r3, [r3, #4]
472: 091b lsrs r3, r3, #4
474: f003 030f and.w r3, r3, #15
478: 4a0b ldr r2, [pc, #44] ; (4a8 <SystemCoreClockUpdate+0xe0>)
47a: 5cd3 ldrb r3, [r2, r3]
47c: b2db uxtb r3, r3
47e: 60fb str r3, [r7, #12]
/* HCLK clock frequency */
SystemCoreClock >>= tmp;
480: 4b06 ldr r3, [pc, #24] ; (49c <SystemCoreClockUpdate+0xd4>)
482: 681a ldr r2, [r3, #0]
484: 68fb ldr r3, [r7, #12]
486: fa22 f303 lsr.w r3, r2, r3
48a: 4a04 ldr r2, [pc, #16] ; (49c <SystemCoreClockUpdate+0xd4>)
48c: 6013 str r3, [r2, #0]
}
48e: bf00 nop
490: 3714 adds r7, #20
492: 46bd mov sp, r7
494: bc80 pop {r7}
496: 4770 bx lr
498: 40021000 .word 0x40021000
49c: 20000000 .word 0x20000000
4a0: 007a1200 .word 0x007a1200
4a4: 003d0900 .word 0x003d0900
4a8: 20000004 .word 0x20000004
000004ac <SetSysClock>:
* @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.
* @param None
* @retval None
*/
static void SetSysClock(void)
{
4ac: b580 push {r7, lr}
4ae: af00 add r7, sp, #0
#elif defined SYSCLK_FREQ_48MHz
SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
SetSysClockTo56();
#elif defined SYSCLK_FREQ_72MHz
SetSysClockTo72();
4b0: f000 f802 bl 4b8 <SetSysClockTo72>
#endif
/* If none of the define above is enabled, the HSI is used as System clock
source (default after reset) */
}
4b4: bf00 nop
4b6: bd80 pop {r7, pc}
000004b8 <SetSysClockTo72>:
* @note This function should be used only after reset.
* @param None
* @retval None
*/
static void SetSysClockTo72(void)
{
4b8: b480 push {r7}
4ba: b083 sub sp, #12
4bc: af00 add r7, sp, #0
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
4be: 2300 movs r3, #0
4c0: 607b str r3, [r7, #4]
4c2: 2300 movs r3, #0
4c4: 603b str r3, [r7, #0]
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
/* Enable HSE */
RCC->CR |= ((uint32_t)RCC_CR_HSEON);
4c6: 4b3a ldr r3, [pc, #232] ; (5b0 <SetSysClockTo72+0xf8>)
4c8: 681b ldr r3, [r3, #0]
4ca: 4a39 ldr r2, [pc, #228] ; (5b0 <SetSysClockTo72+0xf8>)
4cc: f443 3380 orr.w r3, r3, #65536 ; 0x10000
4d0: 6013 str r3, [r2, #0]
/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
4d2: 4b37 ldr r3, [pc, #220] ; (5b0 <SetSysClockTo72+0xf8>)
4d4: 681b ldr r3, [r3, #0]
4d6: f403 3300 and.w r3, r3, #131072 ; 0x20000
4da: 603b str r3, [r7, #0]
StartUpCounter++;
4dc: 687b ldr r3, [r7, #4]
4de: 3301 adds r3, #1
4e0: 607b str r3, [r7, #4]
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
4e2: 683b ldr r3, [r7, #0]
4e4: 2b00 cmp r3, #0
4e6: d103 bne.n 4f0 <SetSysClockTo72+0x38>
4e8: 687b ldr r3, [r7, #4]
4ea: f5b3 6fa0 cmp.w r3, #1280 ; 0x500
4ee: d1f0 bne.n 4d2 <SetSysClockTo72+0x1a>
if ((RCC->CR & RCC_CR_HSERDY) != RESET)
4f0: 4b2f ldr r3, [pc, #188] ; (5b0 <SetSysClockTo72+0xf8>)
4f2: 681b ldr r3, [r3, #0]
4f4: f403 3300 and.w r3, r3, #131072 ; 0x20000
4f8: 2b00 cmp r3, #0
4fa: d002 beq.n 502 <SetSysClockTo72+0x4a>
{
HSEStatus = (uint32_t)0x01;
4fc: 2301 movs r3, #1
4fe: 603b str r3, [r7, #0]
500: e001 b.n 506 <SetSysClockTo72+0x4e>
}
else
{
HSEStatus = (uint32_t)0x00;
502: 2300 movs r3, #0
504: 603b str r3, [r7, #0]
}
if (HSEStatus == (uint32_t)0x01)
506: 683b ldr r3, [r7, #0]
508: 2b01 cmp r3, #1
50a: d14b bne.n 5a4 <SetSysClockTo72+0xec>
{
/* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;
50c: 4b29 ldr r3, [pc, #164] ; (5b4 <SetSysClockTo72+0xfc>)
50e: 681b ldr r3, [r3, #0]
510: 4a28 ldr r2, [pc, #160] ; (5b4 <SetSysClockTo72+0xfc>)
512: f043 0310 orr.w r3, r3, #16
516: 6013 str r3, [r2, #0]
/* Flash 2 wait state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
518: 4b26 ldr r3, [pc, #152] ; (5b4 <SetSysClockTo72+0xfc>)
51a: 681b ldr r3, [r3, #0]
51c: 4a25 ldr r2, [pc, #148] ; (5b4 <SetSysClockTo72+0xfc>)
51e: f023 0303 bic.w r3, r3, #3
522: 6013 str r3, [r2, #0]
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
524: 4b23 ldr r3, [pc, #140] ; (5b4 <SetSysClockTo72+0xfc>)
526: 681b ldr r3, [r3, #0]
528: 4a22 ldr r2, [pc, #136] ; (5b4 <SetSysClockTo72+0xfc>)
52a: f043 0302 orr.w r3, r3, #2
52e: 6013 str r3, [r2, #0]
/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
530: 4b1f ldr r3, [pc, #124] ; (5b0 <SetSysClockTo72+0xf8>)
532: 4a1f ldr r2, [pc, #124] ; (5b0 <SetSysClockTo72+0xf8>)
534: 685b ldr r3, [r3, #4]
536: 6053 str r3, [r2, #4]
/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
538: 4b1d ldr r3, [pc, #116] ; (5b0 <SetSysClockTo72+0xf8>)
53a: 4a1d ldr r2, [pc, #116] ; (5b0 <SetSysClockTo72+0xf8>)
53c: 685b ldr r3, [r3, #4]
53e: 6053 str r3, [r2, #4]
/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
540: 4b1b ldr r3, [pc, #108] ; (5b0 <SetSysClockTo72+0xf8>)
542: 685b ldr r3, [r3, #4]
544: 4a1a ldr r2, [pc, #104] ; (5b0 <SetSysClockTo72+0xf8>)
546: f443 6380 orr.w r3, r3, #1024 ; 0x400
54a: 6053 str r3, [r2, #4]
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9);
#else
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
54c: 4b18 ldr r3, [pc, #96] ; (5b0 <SetSysClockTo72+0xf8>)
54e: 685b ldr r3, [r3, #4]
550: 4a17 ldr r2, [pc, #92] ; (5b0 <SetSysClockTo72+0xf8>)
552: f423 137c bic.w r3, r3, #4128768 ; 0x3f0000
556: 6053 str r3, [r2, #4]
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
558: 4b15 ldr r3, [pc, #84] ; (5b0 <SetSysClockTo72+0xf8>)
55a: 685b ldr r3, [r3, #4]
55c: 4a14 ldr r2, [pc, #80] ; (5b0 <SetSysClockTo72+0xf8>)
55e: f443 13e8 orr.w r3, r3, #1900544 ; 0x1d0000
562: 6053 str r3, [r2, #4]
#endif /* STM32F10X_CL */
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
564: 4b12 ldr r3, [pc, #72] ; (5b0 <SetSysClockTo72+0xf8>)
566: 681b ldr r3, [r3, #0]
568: 4a11 ldr r2, [pc, #68] ; (5b0 <SetSysClockTo72+0xf8>)
56a: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
56e: 6013 str r3, [r2, #0]
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
570: bf00 nop
572: 4b0f ldr r3, [pc, #60] ; (5b0 <SetSysClockTo72+0xf8>)
574: 681b ldr r3, [r3, #0]
576: f003 7300 and.w r3, r3, #33554432 ; 0x2000000
57a: 2b00 cmp r3, #0
57c: d0f9 beq.n 572 <SetSysClockTo72+0xba>
{
}
/* Select PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
57e: 4b0c ldr r3, [pc, #48] ; (5b0 <SetSysClockTo72+0xf8>)
580: 685b ldr r3, [r3, #4]
582: 4a0b ldr r2, [pc, #44] ; (5b0 <SetSysClockTo72+0xf8>)
584: f023 0303 bic.w r3, r3, #3
588: 6053 str r3, [r2, #4]
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
58a: 4b09 ldr r3, [pc, #36] ; (5b0 <SetSysClockTo72+0xf8>)
58c: 685b ldr r3, [r3, #4]
58e: 4a08 ldr r2, [pc, #32] ; (5b0 <SetSysClockTo72+0xf8>)
590: f043 0302 orr.w r3, r3, #2
594: 6053 str r3, [r2, #4]
/* Wait till PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
596: bf00 nop
598: 4b05 ldr r3, [pc, #20] ; (5b0 <SetSysClockTo72+0xf8>)
59a: 685b ldr r3, [r3, #4]
59c: f003 030c and.w r3, r3, #12
5a0: 2b08 cmp r3, #8
5a2: d1f9 bne.n 598 <SetSysClockTo72+0xe0>
}
else
{ /* If HSE fails to start-up, the application will have wrong clock
configuration. User can add here some code to deal with this error */
}
}
5a4: bf00 nop
5a6: 370c adds r7, #12
5a8: 46bd mov sp, r7
5aa: bc80 pop {r7}
5ac: 4770 bx lr
5ae: bf00 nop
5b0: 40021000 .word 0x40021000
5b4: 40022000 .word 0x40022000
5b8: 00005bad .word 0x00005bad
5bc: 20000000 .word 0x20000000
5c0: 20000028 .word 0x20000028
5c4: 20000028 .word 0x20000028
5c8: 20000028 .word 0x20000028
000005cc <init_led>:
#include "stm32f10x_exti.h"
#include "stm32f10x_adc.h"
#include "misc.h"
void init_led(void)
{
5cc: b580 push {r7, lr}
5ce: b082 sub sp, #8
5d0: af00 add r7, sp, #0
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIO C clock. */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
5d2: 2101 movs r1, #1
5d4: 2010 movs r0, #16
5d6: f001 f897 bl 1708 <RCC_APB2PeriphClockCmd>
/* Set the LED pin state such that the LED is off. The LED is connected
* between power and the microcontroller pin, which makes it turn on when
* the pin is low.
*/
GPIO_WriteBit(GPIOC,GPIO_Pin_12,Bit_SET);
5da: 2201 movs r2, #1
5dc: f44f 5180 mov.w r1, #4096 ; 0x1000
5e0: 4809 ldr r0, [pc, #36] ; (608 <init_led+0x3c>)
5e2: f001 fb5e bl 1ca2 <GPIO_WriteBit>
/* Configure the LED pin as push-pull output. */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
5e6: f44f 5380 mov.w r3, #4096 ; 0x1000
5ea: 80bb strh r3, [r7, #4]
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
5ec: 2310 movs r3, #16
5ee: 71fb strb r3, [r7, #7]
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5f0: 2303 movs r3, #3
5f2: 71bb strb r3, [r7, #6]
GPIO_Init(GPIOC, &GPIO_InitStructure);
5f4: 1d3b adds r3, r7, #4
5f6: 4619 mov r1, r3
5f8: 4803 ldr r0, [pc, #12] ; (608 <init_led+0x3c>)
5fa: f001 fa1d bl 1a38 <GPIO_Init>
}
5fe: bf00 nop
600: 3708 adds r7, #8
602: 46bd mov sp, r7
604: bd80 pop {r7, pc}
606: bf00 nop
608: 40011000 .word 0x40011000
0000060c <init_button>:
void init_button(void)
{
60c: b580 push {r7, lr}
60e: b082 sub sp, #8
610: af00 add r7, sp, #0
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIO A clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
612: 2101 movs r1, #1
614: 2004 movs r0, #4
616: f001 f877 bl 1708 <RCC_APB2PeriphClockCmd>
/* Configure the button pin as a floating input. */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
61a: 2301 movs r3, #1
61c: 80bb strh r3, [r7, #4]
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
61e: 2304 movs r3, #4
620: 71fb strb r3, [r7, #7]
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
622: 2303 movs r3, #3
624: 71bb strb r3, [r7, #6]
GPIO_Init(GPIOC, &GPIO_InitStructure);
626: 1d3b adds r3, r7, #4
628: 4619 mov r1, r3
62a: 4803 ldr r0, [pc, #12] ; (638 <init_button+0x2c>)
62c: f001 fa04 bl 1a38 <GPIO_Init>
}
630: bf00 nop
632: 3708 adds r7, #8
634: 46bd mov sp, r7
636: bd80 pop {r7, pc}
638: 40011000 .word 0x40011000
0000063c <enable_button_interrupts>:
void enable_button_interrupts(void)
{
63c: b580 push {r7, lr}
63e: b084 sub sp, #16
640: af00 add r7, sp, #0
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the AFIO clock. GPIO_EXTILineConfig sets registers in
* the AFIO.
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
642: 2101 movs r1, #1
644: 2001 movs r0, #1
646: f001 f85f bl 1708 <RCC_APB2PeriphClockCmd>
/* Connect EXTI Line 0 to the button GPIO Pin */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
64a: 2100 movs r1, #0
64c: 2000 movs r0, #0
64e: f001 fc13 bl 1e78 <GPIO_EXTILineConfig>
/* Configure the EXTI line to generate an interrupt when the button is
* pressed. The button pin is high when pressed, so it needs to trigger
* when rising from low to high. */
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
652: 2301 movs r3, #1
654: 60bb str r3, [r7, #8]
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
656: 2300 movs r3, #0
658: 733b strb r3, [r7, #12]
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
65a: 2308 movs r3, #8
65c: 737b strb r3, [r7, #13]
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
65e: 2301 movs r3, #1
660: 73bb strb r3, [r7, #14]
EXTI_Init(&EXTI_InitStructure);
662: f107 0308 add.w r3, r7, #8
666: 4618 mov r0, r3
668: f002 f8dc bl 2824 <EXTI_Init>
/* Enable and set Button EXTI Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
66c: 2306 movs r3, #6
66e: 713b strb r3, [r7, #4]
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
670: 230f movs r3, #15
672: 717b strb r3, [r7, #5]
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
674: 230f movs r3, #15
676: 71bb strb r3, [r7, #6]
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
678: 2301 movs r3, #1
67a: 71fb strb r3, [r7, #7]
NVIC_Init(&NVIC_InitStructure);
67c: 1d3b adds r3, r7, #4
67e: 4618 mov r0, r3
680: f005 f87c bl 577c <NVIC_Init>
}
684: bf00 nop
686: 3710 adds r7, #16
688: 46bd mov sp, r7
68a: bd80 pop {r7, pc}
0000068c <init_rs232>:
void init_rs232(void)
{
68c: b580 push {r7, lr}
68e: b086 sub sp, #24
690: af00 add r7, sp, #0
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable peripheral clocks. */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
692: 2101 movs r1, #1
694: 2005 movs r0, #5
696: f001 f837 bl 1708 <RCC_APB2PeriphClockCmd>
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
69a: 2101 movs r1, #1
69c: f44f 3000 mov.w r0, #131072 ; 0x20000
6a0: f001 f850 bl 1744 <RCC_APB1PeriphClockCmd>
/* Configure USART2 Rx pin as floating input. */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
6a4: 2308 movs r3, #8
6a6: 80bb strh r3, [r7, #4]
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
6a8: 2304 movs r3, #4
6aa: 71fb strb r3, [r7, #7]
GPIO_Init(GPIOA, &GPIO_InitStructure);
6ac: 1d3b adds r3, r7, #4
6ae: 4619 mov r1, r3
6b0: 4814 ldr r0, [pc, #80] ; (704 <init_rs232+0x78>)
6b2: f001 f9c1 bl 1a38 <GPIO_Init>
/* Configure USART2 Tx as alternate function push-pull. */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
6b6: 2304 movs r3, #4
6b8: 80bb strh r3, [r7, #4]
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6ba: 2303 movs r3, #3
6bc: 71bb strb r3, [r7, #6]
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
6be: 2318 movs r3, #24
6c0: 71fb strb r3, [r7, #7]
GPIO_Init(GPIOA, &GPIO_InitStructure);
6c2: 1d3b adds r3, r7, #4
6c4: 4619 mov r1, r3
6c6: 480f ldr r0, [pc, #60] ; (704 <init_rs232+0x78>)
6c8: f001 f9b6 bl 1a38 <GPIO_Init>
/* Configure the USART2 */
USART_InitStructure.USART_BaudRate = 9600;
6cc: f44f 5316 mov.w r3, #9600 ; 0x2580
6d0: 60bb str r3, [r7, #8]
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
6d2: 2300 movs r3, #0
6d4: 81bb strh r3, [r7, #12]
USART_InitStructure.USART_StopBits = USART_StopBits_1;
6d6: 2300 movs r3, #0
6d8: 81fb strh r3, [r7, #14]
USART_InitStructure.USART_Parity = USART_Parity_No;
6da: 2300 movs r3, #0
6dc: 823b strh r3, [r7, #16]
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
6de: 2300 movs r3, #0
6e0: 82bb strh r3, [r7, #20]
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
6e2: 230c movs r3, #12
6e4: 827b strh r3, [r7, #18]
USART_Init(USART2, &USART_InitStructure);
6e6: f107 0308 add.w r3, r7, #8
6ea: 4619 mov r1, r3
6ec: 4806 ldr r0, [pc, #24] ; (708 <init_rs232+0x7c>)
6ee: f001 fc6d bl 1fcc <USART_Init>
USART_Cmd(USART2, ENABLE);
6f2: 2101 movs r1, #1
6f4: 4804 ldr r0, [pc, #16] ; (708 <init_rs232+0x7c>)
6f6: f001 fd7f bl 21f8 <USART_Cmd>
}
6fa: bf00 nop
6fc: 3718 adds r7, #24
6fe: 46bd mov sp, r7
700: bd80 pop {r7, pc}
702: bf00 nop
704: 40010800 .word 0x40010800
708: 40004400 .word 0x40004400
0000070c <enable_rs232_interrupts>:
void enable_rs232_interrupts(void)
{
70c: b580 push {r7, lr}
70e: b082 sub sp, #8
710: af00 add r7, sp, #0
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable transmit and receive interrupts for the USART2. */
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
712: 2200 movs r2, #0
714: f240 7127 movw r1, #1831 ; 0x727
718: 480b ldr r0, [pc, #44] ; (748 <enable_rs232_interrupts+0x3c>)
71a: f001 fd8c bl 2236 <USART_ITConfig>
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
71e: 2201 movs r2, #1
720: f240 5125 movw r1, #1317 ; 0x525
724: 4808 ldr r0, [pc, #32] ; (748 <enable_rs232_interrupts+0x3c>)
726: f001 fd86 bl 2236 <USART_ITConfig>
/* Enable the USART2 IRQ in the NVIC module (so that the USART2 interrupt
* handler is enabled). */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
72a: 2326 movs r3, #38 ; 0x26
72c: 713b strb r3, [r7, #4]
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
72e: 2300 movs r3, #0
730: 71bb strb r3, [r7, #6]
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
732: 2301 movs r3, #1
734: 71fb strb r3, [r7, #7]
NVIC_Init(&NVIC_InitStructure);
736: 1d3b adds r3, r7, #4
738: 4618 mov r0, r3
73a: f005 f81f bl 577c <NVIC_Init>
}
73e: bf00 nop
740: 3708 adds r7, #8
742: 46bd mov sp, r7
744: bd80 pop {r7, pc}
746: bf00 nop
748: 40004400 .word 0x40004400
0000074c <enable_rs232>:
void enable_rs232(void)
{
74c: b580 push {r7, lr}
74e: af00 add r7, sp, #0
/* Enable the RS232 port. */
USART_Cmd(USART2, ENABLE);
750: 2101 movs r1, #1
752: 4802 ldr r0, [pc, #8] ; (75c <enable_rs232+0x10>)
754: f001 fd50 bl 21f8 <USART_Cmd>
}
758: bf00 nop
75a: bd80 pop {r7, pc}
75c: 40004400 .word 0x40004400
00000760 <rs232_print_str>:
void rs232_print_str(const char *str)
{
760: b580 push {r7, lr}
762: b084 sub sp, #16
764: af00 add r7, sp, #0
766: 6078 str r0, [r7, #4]
const char *curr_char = str;
768: 687b ldr r3, [r7, #4]
76a: 60fb str r3, [r7, #12]
while(*curr_char != '\0') {
76c: e011 b.n 792 <rs232_print_str+0x32>
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
76e: bf00 nop
770: 2180 movs r1, #128 ; 0x80
772: 480c ldr r0, [pc, #48] ; (7a4 <rs232_print_str+0x44>)
774: f001 ff9a bl 26ac <USART_GetFlagStatus>
778: 4603 mov r3, r0
77a: 2b00 cmp r3, #0
77c: d0f8 beq.n 770 <rs232_print_str+0x10>
USART_SendData(USART2, *curr_char);
77e: 68fb ldr r3, [r7, #12]
780: 781b ldrb r3, [r3, #0]
782: b29b uxth r3, r3
784: 4619 mov r1, r3
786: 4807 ldr r0, [pc, #28] ; (7a4 <rs232_print_str+0x44>)
788: f001 fe4f bl 242a <USART_SendData>
curr_char++;
78c: 68fb ldr r3, [r7, #12]
78e: 3301 adds r3, #1
790: 60fb str r3, [r7, #12]
while(*curr_char != '\0') {
792: 68fb ldr r3, [r7, #12]
794: 781b ldrb r3, [r3, #0]
796: 2b00 cmp r3, #0
798: d1e9 bne.n 76e <rs232_print_str+0xe>
}
}
79a: bf00 nop
79c: bf00 nop
79e: 3710 adds r7, #16
7a0: 46bd mov sp, r7
7a2: bd80 pop {r7, pc}
7a4: 40004400 .word 0x40004400
000007a8 <hex_to_char>:
/* Functions for sending numbers through the UART */
char hex_to_char(unsigned hex_number)
{
7a8: b480 push {r7}
7aa: b083 sub sp, #12
7ac: af00 add r7, sp, #0
7ae: 6078 str r0, [r7, #4]
if(hex_number < 0xA) {
7b0: 687b ldr r3, [r7, #4]
7b2: 2b09 cmp r3, #9
7b4: d804 bhi.n 7c0 <hex_to_char+0x18>
return hex_number + '0';
7b6: 687b ldr r3, [r7, #4]
7b8: b2db uxtb r3, r3
7ba: 3330 adds r3, #48 ; 0x30
7bc: b2db uxtb r3, r3
7be: e003 b.n 7c8 <hex_to_char+0x20>
} else {
return hex_number - 0xA + 'A';
7c0: 687b ldr r3, [r7, #4]
7c2: b2db uxtb r3, r3
7c4: 3337 adds r3, #55 ; 0x37
7c6: b2db uxtb r3, r3
}
}
7c8: 4618 mov r0, r3
7ca: 370c adds r7, #12
7cc: 46bd mov sp, r7
7ce: bc80 pop {r7}
7d0: 4770 bx lr
000007d2 <send_byte>:
void send_byte(uint8_t b)
{
7d2: b580 push {r7, lr}
7d4: b082 sub sp, #8
7d6: af00 add r7, sp, #0
7d8: 4603 mov r3, r0
7da: 71fb strb r3, [r7, #7]
/* Wait until the RS232 port can receive another byte. */
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
7dc: bf00 nop
7de: 2180 movs r1, #128 ; 0x80
7e0: 480a ldr r0, [pc, #40] ; (80c <send_byte+0x3a>)
7e2: f001 ff63 bl 26ac <USART_GetFlagStatus>
7e6: 4603 mov r3, r0
7e8: 2b00 cmp r3, #0
7ea: d0f8 beq.n 7de <send_byte+0xc>
/* Toggle the LED just to show that progress is being made. */
GPIOC->ODR ^= 0x00001000;
7ec: 4b08 ldr r3, [pc, #32] ; (810 <send_byte+0x3e>)
7ee: 68db ldr r3, [r3, #12]
7f0: 4a07 ldr r2, [pc, #28] ; (810 <send_byte+0x3e>)
7f2: f483 5380 eor.w r3, r3, #4096 ; 0x1000
7f6: 60d3 str r3, [r2, #12]
/* Send the byte */
USART_SendData(USART2, b);
7f8: 79fb ldrb r3, [r7, #7]
7fa: b29b uxth r3, r3
7fc: 4619 mov r1, r3
7fe: 4803 ldr r0, [pc, #12] ; (80c <send_byte+0x3a>)
800: f001 fe13 bl 242a <USART_SendData>
}
804: bf00 nop
806: 3708 adds r7, #8
808: 46bd mov sp, r7
80a: bd80 pop {r7, pc}
80c: 40004400 .word 0x40004400
810: 40011000 .word 0x40011000
00000814 <send_number>:
void send_number(unsigned long sample, int radix)
{
814: b580 push {r7, lr}
816: b09e sub sp, #120 ; 0x78
818: af00 add r7, sp, #0
81a: 6078 str r0, [r7, #4]
81c: 6039 str r1, [r7, #0]
int digit;
unsigned long mod;
char str[100];
digit = 0;
81e: 2300 movs r3, #0
820: 677b str r3, [r7, #116] ; 0x74
do {
mod = sample % radix;
822: 683a ldr r2, [r7, #0]
824: 687b ldr r3, [r7, #4]
826: fbb3 f1f2 udiv r1, r3, r2
82a: fb02 f201 mul.w r2, r2, r1
82e: 1a9b subs r3, r3, r2
830: 673b str r3, [r7, #112] ; 0x70
str[digit] = hex_to_char(mod);
832: 6f38 ldr r0, [r7, #112] ; 0x70
834: f7ff ffb8 bl 7a8 <hex_to_char>
838: 4603 mov r3, r0
83a: 4619 mov r1, r3
83c: f107 020c add.w r2, r7, #12
840: 6f7b ldr r3, [r7, #116] ; 0x74
842: 4413 add r3, r2
844: 460a mov r2, r1
846: 701a strb r2, [r3, #0]
sample /= radix;
848: 683b ldr r3, [r7, #0]
84a: 687a ldr r2, [r7, #4]
84c: fbb2 f3f3 udiv r3, r2, r3
850: 607b str r3, [r7, #4]
digit++;
852: 6f7b ldr r3, [r7, #116] ; 0x74
854: 3301 adds r3, #1
856: 677b str r3, [r7, #116] ; 0x74
} while(sample != 0);
858: 687b ldr r3, [r7, #4]
85a: 2b00 cmp r3, #0
85c: d1e1 bne.n 822 <send_number+0xe>
while(digit != 0) {
85e: e014 b.n 88a <send_number+0x76>
digit--;
860: 6f7b ldr r3, [r7, #116] ; 0x74
862: 3b01 subs r3, #1
864: 677b str r3, [r7, #116] ; 0x74
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
866: bf00 nop
868: 2180 movs r1, #128 ; 0x80
86a: 480c ldr r0, [pc, #48] ; (89c <send_number+0x88>)
86c: f001 ff1e bl 26ac <USART_GetFlagStatus>
870: 4603 mov r3, r0
872: 2b00 cmp r3, #0
874: d0f8 beq.n 868 <send_number+0x54>
USART_SendData(USART2, str[digit]);
876: f107 020c add.w r2, r7, #12
87a: 6f7b ldr r3, [r7, #116] ; 0x74
87c: 4413 add r3, r2
87e: 781b ldrb r3, [r3, #0]
880: b29b uxth r3, r3
882: 4619 mov r1, r3
884: 4805 ldr r0, [pc, #20] ; (89c <send_number+0x88>)
886: f001 fdd0 bl 242a <USART_SendData>
while(digit != 0) {
88a: 6f7b ldr r3, [r7, #116] ; 0x74
88c: 2b00 cmp r3, #0
88e: d1e7 bne.n 860 <send_number+0x4c>
}
}
890: bf00 nop
892: bf00 nop
894: 3778 adds r7, #120 ; 0x78
896: 46bd mov sp, r7
898: bd80 pop {r7, pc}
89a: bf00 nop
89c: 40004400 .word 0x40004400
000008a0 <myprintf_init>:
#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
#define SMALL 64 /* use 'abcdef' instead of 'ABCDEF' */
#define PBSIZE 128 /* Print Buffer Size */
void myprintf_init()
{
8a0: b580 push {r7, lr}
8a2: af00 add r7, sp, #0
init_rs232();
8a4: f7ff fef2 bl 68c <init_rs232>
enable_rs232_interrupts();
8a8: f7ff ff30 bl 70c <enable_rs232_interrupts>
enable_rs232();
8ac: f7ff ff4e bl 74c <enable_rs232>
}
8b0: bf00 nop
8b2: bd80 pop {r7, pc}
000008b4 <usart_send_bytes>:
void usart_send_bytes(uint8_t data)
{
8b4: b580 push {r7, lr}
8b6: b082 sub sp, #8
8b8: af00 add r7, sp, #0
8ba: 4603 mov r3, r0
8bc: 71fb strb r3, [r7, #7]
while(!USART_GetFlagStatus(USART2 ,USART_FLAG_TXE)) {
8be: bf00 nop
8c0: 2180 movs r1, #128 ; 0x80
8c2: 4808 ldr r0, [pc, #32] ; (8e4 <usart_send_bytes+0x30>)
8c4: f001 fef2 bl 26ac <USART_GetFlagStatus>
8c8: 4603 mov r3, r0
8ca: 2b00 cmp r3, #0
8cc: d0f8 beq.n 8c0 <usart_send_bytes+0xc>
}
USART_SendData( USART2, data);
8ce: 79fb ldrb r3, [r7, #7]
8d0: b29b uxth r3, r3
8d2: 4619 mov r1, r3
8d4: 4803 ldr r0, [pc, #12] ; (8e4 <usart_send_bytes+0x30>)
8d6: f001 fda8 bl 242a <USART_SendData>
}
8da: bf00 nop
8dc: 3708 adds r7, #8
8de: 46bd mov sp, r7
8e0: bd80 pop {r7, pc}
8e2: bf00 nop
8e4: 40004400 .word 0x40004400
000008e8 <mystrnlen>:
signed int mystrnlen (const char * s, signed int count)
{
8e8: b480 push {r7}
8ea: b085 sub sp, #20
8ec: af00 add r7, sp, #0
8ee: 6078 str r0, [r7, #4]
8f0: 6039 str r1, [r7, #0]
const char *sc;
for (sc = s; count-- && *sc != '\0'; ++sc) {
8f2: 687b ldr r3, [r7, #4]
8f4: 60fb str r3, [r7, #12]
8f6: e002 b.n 8fe <mystrnlen+0x16>
8f8: 68fb ldr r3, [r7, #12]
8fa: 3301 adds r3, #1
8fc: 60fb str r3, [r7, #12]
8fe: 683b ldr r3, [r7, #0]
900: 1e5a subs r2, r3, #1
902: 603a str r2, [r7, #0]
904: 2b00 cmp r3, #0
906: d003 beq.n 910 <mystrnlen+0x28>
908: 68fb ldr r3, [r7, #12]
90a: 781b ldrb r3, [r3, #0]
90c: 2b00 cmp r3, #0
90e: d1f3 bne.n 8f8 <mystrnlen+0x10>
/* nothing */
}
return sc - s;
910: 68fa ldr r2, [r7, #12]
912: 687b ldr r3, [r7, #4]
914: 1ad3 subs r3, r2, r3
}
916: 4618 mov r0, r3
918: 3714 adds r7, #20
91a: 46bd mov sp, r7
91c: bc80 pop {r7}
91e: 4770 bx lr
00000920 <myskip_atoi>:
static int myskip_atoi (const char **s)
{
920: b480 push {r7}
922: b085 sub sp, #20
924: af00 add r7, sp, #0
926: 6078 str r0, [r7, #4]
int i = 0;
928: 2300 movs r3, #0
92a: 60fb str r3, [r7, #12]
while (isdigit(**s) != 0) {
92c: e00e b.n 94c <myskip_atoi+0x2c>
i = i * 10 + *((*s)++) - '0';
92e: 68fa ldr r2, [r7, #12]
930: 4613 mov r3, r2
932: 009b lsls r3, r3, #2
934: 4413 add r3, r2
936: 005b lsls r3, r3, #1
938: 4618 mov r0, r3
93a: 687b ldr r3, [r7, #4]
93c: 681b ldr r3, [r3, #0]
93e: 1c59 adds r1, r3, #1
940: 687a ldr r2, [r7, #4]
942: 6011 str r1, [r2, #0]
944: 781b ldrb r3, [r3, #0]
946: 4403 add r3, r0
948: 3b30 subs r3, #48 ; 0x30
94a: 60fb str r3, [r7, #12]
while (isdigit(**s) != 0) {
94c: 687b ldr r3, [r7, #4]
94e: 681b ldr r3, [r3, #0]
950: 781b ldrb r3, [r3, #0]
952: 3301 adds r3, #1
954: 4a06 ldr r2, [pc, #24] ; (970 <myskip_atoi+0x50>)
956: 4413 add r3, r2
958: 781b ldrb r3, [r3, #0]
95a: f003 0304 and.w r3, r3, #4
95e: 2b00 cmp r3, #0
960: d1e5 bne.n 92e <myskip_atoi+0xe>
}
return i;
962: 68fb ldr r3, [r7, #12]
}
964: 4618 mov r0, r3
966: 3714 adds r7, #20
968: 46bd mov sp, r7
96a: bc80 pop {r7}
96c: 4770 bx lr
96e: bf00 nop
970: 00005aac .word 0x00005aac
00000974 <mynumber>:
static char * mynumber (char * str, long num, int base, int size, int precision ,int type)
{
974: b580 push {r7, lr}
976: b09a sub sp, #104 ; 0x68
978: af00 add r7, sp, #0
97a: 60f8 str r0, [r7, #12]
97c: 60b9 str r1, [r7, #8]
97e: 607a str r2, [r7, #4]
980: 603b str r3, [r7, #0]
char c = 0;
982: 2300 movs r3, #0
984: f887 305b strb.w r3, [r7, #91] ; 0x5b
char sign = 0;
988: 2300 movs r3, #0
98a: f887 3067 strb.w r3, [r7, #103] ; 0x67
char tmp[66] = {0};
98e: 2300 movs r3, #0
990: 613b str r3, [r7, #16]
992: f107 0314 add.w r3, r7, #20
996: 223e movs r2, #62 ; 0x3e
998: 2100 movs r1, #0
99a: 4618 mov r0, r3
99c: f004 ffd2 bl 5944 <memset>
int i = 0;
9a0: 2300 movs r3, #0
9a2: 663b str r3, [r7, #96] ; 0x60
const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz";
9a4: 4b85 ldr r3, [pc, #532] ; (bbc <mynumber+0x248>)
9a6: 65fb str r3, [r7, #92] ; 0x5c
if ((type & LARGE) != 0) {
9a8: 6f7b ldr r3, [r7, #116] ; 0x74
9aa: f003 0340 and.w r3, r3, #64 ; 0x40
9ae: 2b00 cmp r3, #0
9b0: d001 beq.n 9b6 <mynumber+0x42>
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
9b2: 4b83 ldr r3, [pc, #524] ; (bc0 <mynumber+0x24c>)
9b4: 65fb str r3, [r7, #92] ; 0x5c
}
if ((type & LEFT) != 0) {
9b6: 6f7b ldr r3, [r7, #116] ; 0x74
9b8: f003 0310 and.w r3, r3, #16
9bc: 2b00 cmp r3, #0
9be: d003 beq.n 9c8 <mynumber+0x54>
type &= ~ZEROPAD;
9c0: 6f7b ldr r3, [r7, #116] ; 0x74
9c2: f023 0301 bic.w r3, r3, #1
9c6: 677b str r3, [r7, #116] ; 0x74
}
if ((base < 2) || (base > 36)) {
9c8: 687b ldr r3, [r7, #4]
9ca: 2b01 cmp r3, #1
9cc: dd02 ble.n 9d4 <mynumber+0x60>
9ce: 687b ldr r3, [r7, #4]
9d0: 2b24 cmp r3, #36 ; 0x24
9d2: dd01 ble.n 9d8 <mynumber+0x64>
return 0;
9d4: 2300 movs r3, #0
9d6: e0ec b.n bb2 <mynumber+0x23e>
}
c = (type & ZEROPAD) ? '0' : ' ';
9d8: 6f7b ldr r3, [r7, #116] ; 0x74
9da: f003 0301 and.w r3, r3, #1
9de: 2b00 cmp r3, #0
9e0: d001 beq.n 9e6 <mynumber+0x72>
9e2: 2330 movs r3, #48 ; 0x30
9e4: e000 b.n 9e8 <mynumber+0x74>
9e6: 2320 movs r3, #32
9e8: f887 305b strb.w r3, [r7, #91] ; 0x5b
sign = 0;
9ec: 2300 movs r3, #0
9ee: f887 3067 strb.w r3, [r7, #103] ; 0x67
if ((type & SIGN) != 0) {
9f2: 6f7b ldr r3, [r7, #116] ; 0x74
9f4: f003 0302 and.w r3, r3, #2
9f8: 2b00 cmp r3, #0
9fa: d023 beq.n a44 <mynumber+0xd0>
if (num < 0) {
9fc: 68bb ldr r3, [r7, #8]
9fe: 2b00 cmp r3, #0
a00: da09 bge.n a16 <mynumber+0xa2>
sign = '-';
a02: 232d movs r3, #45 ; 0x2d
a04: f887 3067 strb.w r3, [r7, #103] ; 0x67
num = -num;
a08: 68bb ldr r3, [r7, #8]
a0a: 425b negs r3, r3
a0c: 60bb str r3, [r7, #8]
size--;
a0e: 683b ldr r3, [r7, #0]
a10: 3b01 subs r3, #1
a12: 603b str r3, [r7, #0]
a14: e016 b.n a44 <mynumber+0xd0>
} else if ((type & PLUS) != 0) {
a16: 6f7b ldr r3, [r7, #116] ; 0x74
a18: f003 0304 and.w r3, r3, #4
a1c: 2b00 cmp r3, #0
a1e: d006 beq.n a2e <mynumber+0xba>
sign = '+';
a20: 232b movs r3, #43 ; 0x2b
a22: f887 3067 strb.w r3, [r7, #103] ; 0x67
size--;
a26: 683b ldr r3, [r7, #0]
a28: 3b01 subs r3, #1
a2a: 603b str r3, [r7, #0]
a2c: e00a b.n a44 <mynumber+0xd0>
} else if ((type & SPACE) != 0) {
a2e: 6f7b ldr r3, [r7, #116] ; 0x74
a30: f003 0308 and.w r3, r3, #8
a34: 2b00 cmp r3, #0
a36: d005 beq.n a44 <mynumber+0xd0>
sign = ' ';
a38: 2320 movs r3, #32
a3a: f887 3067 strb.w r3, [r7, #103] ; 0x67
size--;
a3e: 683b ldr r3, [r7, #0]
a40: 3b01 subs r3, #1
a42: 603b str r3, [r7, #0]
}
}
if ((type & SPECIAL) != 0) {
a44: 6f7b ldr r3, [r7, #116] ; 0x74
a46: f003 0320 and.w r3, r3, #32
a4a: 2b00 cmp r3, #0
a4c: d00c beq.n a68 <mynumber+0xf4>
if (16 == base) {
a4e: 687b ldr r3, [r7, #4]
a50: 2b10 cmp r3, #16
a52: d103 bne.n a5c <mynumber+0xe8>
size -= 2;
a54: 683b ldr r3, [r7, #0]
a56: 3b02 subs r3, #2
a58: 603b str r3, [r7, #0]
a5a: e005 b.n a68 <mynumber+0xf4>
} else if (8 == base) {
a5c: 687b ldr r3, [r7, #4]
a5e: 2b08 cmp r3, #8
a60: d102 bne.n a68 <mynumber+0xf4>
size--;
a62: 683b ldr r3, [r7, #0]
a64: 3b01 subs r3, #1
a66: 603b str r3, [r7, #0]
}
}
i = 0;
a68: 2300 movs r3, #0
a6a: 663b str r3, [r7, #96] ; 0x60
if (0 == num) {
a6c: 68bb ldr r3, [r7, #8]
a6e: 2b00 cmp r3, #0
a70: d123 bne.n aba <mynumber+0x146>
tmp[i++] = '0';
a72: 6e3b ldr r3, [r7, #96] ; 0x60
a74: 1c5a adds r2, r3, #1
a76: 663a str r2, [r7, #96] ; 0x60
a78: f107 0268 add.w r2, r7, #104 ; 0x68
a7c: 4413 add r3, r2
a7e: 2230 movs r2, #48 ; 0x30
a80: f803 2c58 strb.w r2, [r3, #-88]
a84: e01c b.n ac0 <mynumber+0x14c>
} else {
while (num != 0) {
tmp[i++] = digits[mydo_div(num,base)];
a86: 68bb ldr r3, [r7, #8]
a88: 687a ldr r2, [r7, #4]
a8a: fbb3 f1f2 udiv r1, r3, r2
a8e: fb02 f201 mul.w r2, r2, r1
a92: 1a9b subs r3, r3, r2
a94: 657b str r3, [r7, #84] ; 0x54
a96: 68ba ldr r2, [r7, #8]
a98: 687b ldr r3, [r7, #4]
a9a: fbb2 f3f3 udiv r3, r2, r3
a9e: 60bb str r3, [r7, #8]
aa0: 6d7b ldr r3, [r7, #84] ; 0x54
aa2: 461a mov r2, r3
aa4: 6dfb ldr r3, [r7, #92] ; 0x5c
aa6: 441a add r2, r3
aa8: 6e3b ldr r3, [r7, #96] ; 0x60
aaa: 1c59 adds r1, r3, #1
aac: 6639 str r1, [r7, #96] ; 0x60
aae: 7812 ldrb r2, [r2, #0]
ab0: f107 0168 add.w r1, r7, #104 ; 0x68
ab4: 440b add r3, r1
ab6: f803 2c58 strb.w r2, [r3, #-88]
while (num != 0) {
aba: 68bb ldr r3, [r7, #8]
abc: 2b00 cmp r3, #0
abe: d1e2 bne.n a86 <mynumber+0x112>
}
}
if (i > precision) {
ac0: 6e3a ldr r2, [r7, #96] ; 0x60
ac2: 6f3b ldr r3, [r7, #112] ; 0x70
ac4: 429a cmp r2, r3
ac6: dd01 ble.n acc <mynumber+0x158>
precision = i;
ac8: 6e3b ldr r3, [r7, #96] ; 0x60
aca: 673b str r3, [r7, #112] ; 0x70
}
size -= precision;
acc: 683a ldr r2, [r7, #0]
ace: 6f3b ldr r3, [r7, #112] ; 0x70
ad0: 1ad3 subs r3, r2, r3
ad2: 603b str r3, [r7, #0]
if (0 == (type & (ZEROPAD + LEFT))) {
ad4: 6f7b ldr r3, [r7, #116] ; 0x74
ad6: f003 0311 and.w r3, r3, #17
ada: 2b00 cmp r3, #0
adc: d10a bne.n af4 <mynumber+0x180>
while (size-- > 0) {
ade: e004 b.n aea <mynumber+0x176>
*str++ = ' ';
ae0: 68fb ldr r3, [r7, #12]
ae2: 1c5a adds r2, r3, #1
ae4: 60fa str r2, [r7, #12]
ae6: 2220 movs r2, #32
ae8: 701a strb r2, [r3, #0]
while (size-- > 0) {
aea: 683b ldr r3, [r7, #0]
aec: 1e5a subs r2, r3, #1
aee: 603a str r2, [r7, #0]
af0: 2b00 cmp r3, #0
af2: dcf5 bgt.n ae0 <mynumber+0x16c>
}
}
if (sign != 0) {
af4: f897 3067 ldrb.w r3, [r7, #103] ; 0x67
af8: 2b00 cmp r3, #0
afa: d005 beq.n b08 <mynumber+0x194>
*str++ = sign;
afc: 68fb ldr r3, [r7, #12]
afe: 1c5a adds r2, r3, #1
b00: 60fa str r2, [r7, #12]
b02: f897 2067 ldrb.w r2, [r7, #103] ; 0x67
b06: 701a strb r2, [r3, #0]
}
if ((type & SPECIAL) != 0) {
b08: 6f7b ldr r3, [r7, #116] ; 0x74
b0a: f003 0320 and.w r3, r3, #32
b0e: 2b00 cmp r3, #0
b10: d017 beq.n b42 <mynumber+0x1ce>
if (8 == base) {
b12: 687b ldr r3, [r7, #4]
b14: 2b08 cmp r3, #8
b16: d105 bne.n b24 <mynumber+0x1b0>
*str++ = '0';
b18: 68fb ldr r3, [r7, #12]
b1a: 1c5a adds r2, r3, #1
b1c: 60fa str r2, [r7, #12]
b1e: 2230 movs r2, #48 ; 0x30
b20: 701a strb r2, [r3, #0]
b22: e00e b.n b42 <mynumber+0x1ce>
} else if (16 == base) {
b24: 687b ldr r3, [r7, #4]
b26: 2b10 cmp r3, #16
b28: d10b bne.n b42 <mynumber+0x1ce>
*str++ = '0';
b2a: 68fb ldr r3, [r7, #12]
b2c: 1c5a adds r2, r3, #1
b2e: 60fa str r2, [r7, #12]
b30: 2230 movs r2, #48 ; 0x30
b32: 701a strb r2, [r3, #0]
*str++ = digits[33];
b34: 68fb ldr r3, [r7, #12]
b36: 1c5a adds r2, r3, #1
b38: 60fa str r2, [r7, #12]
b3a: 6dfa ldr r2, [r7, #92] ; 0x5c
b3c: f892 2021 ldrb.w r2, [r2, #33] ; 0x21
b40: 701a strb r2, [r3, #0]
}
}
if (0 == (type & LEFT)) {
b42: 6f7b ldr r3, [r7, #116] ; 0x74
b44: f003 0310 and.w r3, r3, #16
b48: 2b00 cmp r3, #0
b4a: d111 bne.n b70 <mynumber+0x1fc>
while (size-- > 0) {
b4c: e005 b.n b5a <mynumber+0x1e6>
*str++ = c;
b4e: 68fb ldr r3, [r7, #12]
b50: 1c5a adds r2, r3, #1
b52: 60fa str r2, [r7, #12]
b54: f897 205b ldrb.w r2, [r7, #91] ; 0x5b
b58: 701a strb r2, [r3, #0]
while (size-- > 0) {
b5a: 683b ldr r3, [r7, #0]
b5c: 1e5a subs r2, r3, #1
b5e: 603a str r2, [r7, #0]
b60: 2b00 cmp r3, #0
b62: dcf4 bgt.n b4e <mynumber+0x1da>
}
}
while (i < precision--) {
b64: e004 b.n b70 <mynumber+0x1fc>
*str++ = '0';
b66: 68fb ldr r3, [r7, #12]
b68: 1c5a adds r2, r3, #1
b6a: 60fa str r2, [r7, #12]
b6c: 2230 movs r2, #48 ; 0x30
b6e: 701a strb r2, [r3, #0]
while (i < precision--) {
b70: 6f3b ldr r3, [r7, #112] ; 0x70
b72: 1e5a subs r2, r3, #1
b74: 673a str r2, [r7, #112] ; 0x70
b76: 6e3a ldr r2, [r7, #96] ; 0x60
b78: 429a cmp r2, r3
b7a: dbf4 blt.n b66 <mynumber+0x1f2>
}
while (i-- > 0) {
b7c: e008 b.n b90 <mynumber+0x21c>
*str++ = tmp[i];
b7e: 68fb ldr r3, [r7, #12]
b80: 1c5a adds r2, r3, #1
b82: 60fa str r2, [r7, #12]
b84: f107 0110 add.w r1, r7, #16
b88: 6e3a ldr r2, [r7, #96] ; 0x60
b8a: 440a add r2, r1
b8c: 7812 ldrb r2, [r2, #0]
b8e: 701a strb r2, [r3, #0]
while (i-- > 0) {
b90: 6e3b ldr r3, [r7, #96] ; 0x60
b92: 1e5a subs r2, r3, #1
b94: 663a str r2, [r7, #96] ; 0x60
b96: 2b00 cmp r3, #0
b98: dcf1 bgt.n b7e <mynumber+0x20a>
}
while (size-- > 0) {
b9a: e004 b.n ba6 <mynumber+0x232>
*str++ = ' ';
b9c: 68fb ldr r3, [r7, #12]
b9e: 1c5a adds r2, r3, #1
ba0: 60fa str r2, [r7, #12]
ba2: 2220 movs r2, #32
ba4: 701a strb r2, [r3, #0]
while (size-- > 0) {
ba6: 683b ldr r3, [r7, #0]
ba8: 1e5a subs r2, r3, #1
baa: 603a str r2, [r7, #0]
bac: 2b00 cmp r3, #0
bae: dcf5 bgt.n b9c <mynumber+0x228>
}
return str;
bb0: 68fb ldr r3, [r7, #12]
}
bb2: 4618 mov r0, r3
bb4: 3768 adds r7, #104 ; 0x68
bb6: 46bd mov sp, r7
bb8: bd80 pop {r7, pc}
bba: bf00 nop
bbc: 00005a2c .word 0x00005a2c
bc0: 00005a54 .word 0x00005a54
00000bc4 <myvsprintf>:
*
* If you're not already dealing with a va_list consider using sprintf().
*/
int myvsprintf (char *buf, const char *fmt, va_list args)
{
bc4: b580 push {r7, lr}
bc6: b092 sub sp, #72 ; 0x48
bc8: af02 add r7, sp, #8
bca: 60f8 str r0, [r7, #12]
bcc: 60b9 str r1, [r7, #8]
bce: 607a str r2, [r7, #4]
int qualifier; //'h', 'l', or 'q' for integer fields
char * str;
const char *s;
unsigned long num;
for (str = buf; *fmt; ++fmt) {
bd0: 68fb ldr r3, [r7, #12]
bd2: 627b str r3, [r7, #36] ; 0x24
bd4: e272 b.n 10bc <myvsprintf+0x4f8>
if (*fmt != '%') {
bd6: 68bb ldr r3, [r7, #8]
bd8: 781b ldrb r3, [r3, #0]
bda: 2b25 cmp r3, #37 ; 0x25
bdc: d006 beq.n bec <myvsprintf+0x28>
*str++ = *fmt;
bde: 68ba ldr r2, [r7, #8]
be0: 6a7b ldr r3, [r7, #36] ; 0x24
be2: 1c59 adds r1, r3, #1
be4: 6279 str r1, [r7, #36] ; 0x24
be6: 7812 ldrb r2, [r2, #0]
be8: 701a strb r2, [r3, #0]
continue;
bea: e264 b.n 10b6 <myvsprintf+0x4f2>
}
flags = 0; //process flags
bec: 2300 movs r3, #0
bee: 63bb str r3, [r7, #56] ; 0x38
repeat:
++fmt; //this also skips first '%'
bf0: 68bb ldr r3, [r7, #8]
bf2: 3301 adds r3, #1
bf4: 60bb str r3, [r7, #8]
switch (*fmt) {
bf6: 68bb ldr r3, [r7, #8]
bf8: 781b ldrb r3, [r3, #0]
bfa: 3b20 subs r3, #32
bfc: 2b10 cmp r3, #16
bfe: d83e bhi.n c7e <myvsprintf+0xba>
c00: a201 add r2, pc, #4 ; (adr r2, c08 <myvsprintf+0x44>)
c02: f852 f023 ldr.w pc, [r2, r3, lsl #2]
c06: bf00 nop
c08: 00000c61 .word 0x00000c61
c0c: 00000c7f .word 0x00000c7f
c10: 00000c7f .word 0x00000c7f
c14: 00000c6b .word 0x00000c6b
c18: 00000c7f .word 0x00000c7f
c1c: 00000c7f .word 0x00000c7f
c20: 00000c7f .word 0x00000c7f
c24: 00000c7f .word 0x00000c7f
c28: 00000c7f .word 0x00000c7f
c2c: 00000c7f .word 0x00000c7f
c30: 00000c7f .word 0x00000c7f
c34: 00000c57 .word 0x00000c57
c38: 00000c7f .word 0x00000c7f
c3c: 00000c4d .word 0x00000c4d
c40: 00000c7f .word 0x00000c7f
c44: 00000c7f .word 0x00000c7f
c48: 00000c75 .word 0x00000c75
case '-':
flags |= LEFT;
c4c: 6bbb ldr r3, [r7, #56] ; 0x38
c4e: f043 0310 orr.w r3, r3, #16
c52: 63bb str r3, [r7, #56] ; 0x38
goto repeat;
c54: e7cc b.n bf0 <myvsprintf+0x2c>
case '+':
flags |= PLUS;
c56: 6bbb ldr r3, [r7, #56] ; 0x38
c58: f043 0304 orr.w r3, r3, #4
c5c: 63bb str r3, [r7, #56] ; 0x38
goto repeat;
c5e: e7c7 b.n bf0 <myvsprintf+0x2c>
case ' ':
flags |= SPACE;
c60: 6bbb ldr r3, [r7, #56] ; 0x38
c62: f043 0308 orr.w r3, r3, #8
c66: 63bb str r3, [r7, #56] ; 0x38
goto repeat;
c68: e7c2 b.n bf0 <myvsprintf+0x2c>
case '#':
flags |= SPECIAL;
c6a: 6bbb ldr r3, [r7, #56] ; 0x38
c6c: f043 0320 orr.w r3, r3, #32
c70: 63bb str r3, [r7, #56] ; 0x38
goto repeat;
c72: e7bd b.n bf0 <myvsprintf+0x2c>
case '0':
flags |= ZEROPAD;
c74: 6bbb ldr r3, [r7, #56] ; 0x38
c76: f043 0301 orr.w r3, r3, #1
c7a: 63bb str r3, [r7, #56] ; 0x38
goto repeat;
c7c: e7b8 b.n bf0 <myvsprintf+0x2c>
}
field_width = -1; //get field width
c7e: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
c82: 633b str r3, [r7, #48] ; 0x30
if (isdigit(*fmt) != 0) {
c84: 68bb ldr r3, [r7, #8]
c86: 781b ldrb r3, [r3, #0]
c88: 3301 adds r3, #1
c8a: 4ab9 ldr r2, [pc, #740] ; (f70 <myvsprintf+0x3ac>)
c8c: 4413 add r3, r2
c8e: 781b ldrb r3, [r3, #0]
c90: f003 0304 and.w r3, r3, #4
c94: 2b00 cmp r3, #0
c96: d006 beq.n ca6 <myvsprintf+0xe2>
field_width = myskip_atoi(&fmt);
c98: f107 0308 add.w r3, r7, #8
c9c: 4618 mov r0, r3
c9e: f7ff fe3f bl 920 <myskip_atoi>
ca2: 6338 str r0, [r7, #48] ; 0x30
ca4: e015 b.n cd2 <myvsprintf+0x10e>
} else if ('*' == *fmt) {
ca6: 68bb ldr r3, [r7, #8]
ca8: 781b ldrb r3, [r3, #0]
caa: 2b2a cmp r3, #42 ; 0x2a
cac: d111 bne.n cd2 <myvsprintf+0x10e>
++fmt;
cae: 68bb ldr r3, [r7, #8]
cb0: 3301 adds r3, #1
cb2: 60bb str r3, [r7, #8]
field_width = va_arg(args, int); //it's the next argument
cb4: 687b ldr r3, [r7, #4]
cb6: 1d1a adds r2, r3, #4
cb8: 607a str r2, [r7, #4]
cba: 681b ldr r3, [r3, #0]
cbc: 633b str r3, [r7, #48] ; 0x30
if (field_width < 0) {
cbe: 6b3b ldr r3, [r7, #48] ; 0x30
cc0: 2b00 cmp r3, #0
cc2: da06 bge.n cd2 <myvsprintf+0x10e>
field_width = -field_width;
cc4: 6b3b ldr r3, [r7, #48] ; 0x30
cc6: 425b negs r3, r3
cc8: 633b str r3, [r7, #48] ; 0x30
flags |= LEFT;
cca: 6bbb ldr r3, [r7, #56] ; 0x38
ccc: f043 0310 orr.w r3, r3, #16
cd0: 63bb str r3, [r7, #56] ; 0x38
}
}
precision = -1; //get the precision
cd2: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
cd6: 62fb str r3, [r7, #44] ; 0x2c
if ('.' == *fmt) {
cd8: 68bb ldr r3, [r7, #8]
cda: 781b ldrb r3, [r3, #0]
cdc: 2b2e cmp r3, #46 ; 0x2e
cde: d124 bne.n d2a <myvsprintf+0x166>
++fmt;
ce0: 68bb ldr r3, [r7, #8]
ce2: 3301 adds r3, #1
ce4: 60bb str r3, [r7, #8]
if (isdigit(*fmt)) {
ce6: 68bb ldr r3, [r7, #8]
ce8: 781b ldrb r3, [r3, #0]
cea: 3301 adds r3, #1
cec: 4aa0 ldr r2, [pc, #640] ; (f70 <myvsprintf+0x3ac>)
cee: 4413 add r3, r2
cf0: 781b ldrb r3, [r3, #0]
cf2: f003 0304 and.w r3, r3, #4
cf6: 2b00 cmp r3, #0
cf8: d006 beq.n d08 <myvsprintf+0x144>
precision = myskip_atoi(&fmt);
cfa: f107 0308 add.w r3, r7, #8
cfe: 4618 mov r0, r3
d00: f7ff fe0e bl 920 <myskip_atoi>
d04: 62f8 str r0, [r7, #44] ; 0x2c
d06: e00b b.n d20 <myvsprintf+0x15c>
} else if ('*' == *fmt) {
d08: 68bb ldr r3, [r7, #8]
d0a: 781b ldrb r3, [r3, #0]
d0c: 2b2a cmp r3, #42 ; 0x2a
d0e: d107 bne.n d20 <myvsprintf+0x15c>
++fmt;
d10: 68bb ldr r3, [r7, #8]
d12: 3301 adds r3, #1
d14: 60bb str r3, [r7, #8]
precision = va_arg(args, int); //it's the next argument
d16: 687b ldr r3, [r7, #4]
d18: 1d1a adds r2, r3, #4
d1a: 607a str r2, [r7, #4]
d1c: 681b ldr r3, [r3, #0]
d1e: 62fb str r3, [r7, #44] ; 0x2c
}
if (precision < 0) {
d20: 6afb ldr r3, [r7, #44] ; 0x2c
d22: 2b00 cmp r3, #0
d24: da01 bge.n d2a <myvsprintf+0x166>
precision = 0;
d26: 2300 movs r3, #0
d28: 62fb str r3, [r7, #44] ; 0x2c
}
}
qualifier = -1; //get the conversion qualifier
d2a: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff
d2e: 62bb str r3, [r7, #40] ; 0x28
if (('h' == *fmt) || ('l' == *fmt) || ('q' == *fmt)) {
d30: 68bb ldr r3, [r7, #8]
d32: 781b ldrb r3, [r3, #0]
d34: 2b68 cmp r3, #104 ; 0x68
d36: d007 beq.n d48 <myvsprintf+0x184>
d38: 68bb ldr r3, [r7, #8]
d3a: 781b ldrb r3, [r3, #0]
d3c: 2b6c cmp r3, #108 ; 0x6c
d3e: d003 beq.n d48 <myvsprintf+0x184>
d40: 68bb ldr r3, [r7, #8]
d42: 781b ldrb r3, [r3, #0]
d44: 2b71 cmp r3, #113 ; 0x71
d46: d105 bne.n d54 <myvsprintf+0x190>
qualifier = *fmt;
d48: 68bb ldr r3, [r7, #8]
d4a: 781b ldrb r3, [r3, #0]
d4c: 62bb str r3, [r7, #40] ; 0x28
++fmt;
d4e: 68bb ldr r3, [r7, #8]
d50: 3301 adds r3, #1
d52: 60bb str r3, [r7, #8]
}
base = 10; //default base
d54: 230a movs r3, #10
d56: 637b str r3, [r7, #52] ; 0x34
switch (*fmt) {
d58: 68bb ldr r3, [r7, #8]
d5a: 781b ldrb r3, [r3, #0]
d5c: 3b25 subs r3, #37 ; 0x25
d5e: 2b53 cmp r3, #83 ; 0x53
d60: f200 815e bhi.w 1020 <myvsprintf+0x45c>
d64: a201 add r2, pc, #4 ; (adr r2, d6c <myvsprintf+0x1a8>)
d66: f852 f023 ldr.w pc, [r2, r3, lsl #2]
d6a: bf00 nop
d6c: 00000ff7 .word 0x00000ff7
d70: 00001021 .word 0x00001021
d74: 00001021 .word 0x00001021
d78: 00001021 .word 0x00001021
d7c: 00001021 .word 0x00001021
d80: 00001021 .word 0x00001021
d84: 00001021 .word 0x00001021
d88: 00001021 .word 0x00001021
d8c: 00001021 .word 0x00001021
d90: 00001021 .word 0x00001021
d94: 00001021 .word 0x00001021
d98: 00001021 .word 0x00001021
d9c: 00001021 .word 0x00001021
da0: 00001021 .word 0x00001021
da4: 00001021 .word 0x00001021
da8: 00001021 .word 0x00001021
dac: 00001021 .word 0x00001021
db0: 00001021 .word 0x00001021
db4: 00001021 .word 0x00001021
db8: 00001021 .word 0x00001021
dbc: 00001021 .word 0x00001021
dc0: 00001021 .word 0x00001021
dc4: 00001021 .word 0x00001021
dc8: 00001021 .word 0x00001021
dcc: 00001021 .word 0x00001021
dd0: 00001021 .word 0x00001021
dd4: 00001021 .word 0x00001021
dd8: 00001021 .word 0x00001021
ddc: 00001021 .word 0x00001021
de0: 00001021 .word 0x00001021
de4: 00001021 .word 0x00001021
de8: 00001021 .word 0x00001021
dec: 00001021 .word 0x00001021
df0: 00001021 .word 0x00001021
df4: 00001021 .word 0x00001021
df8: 00001021 .word 0x00001021
dfc: 00001021 .word 0x00001021
e00: 00001021 .word 0x00001021
e04: 00001021 .word 0x00001021
e08: 00001021 .word 0x00001021
e0c: 00001021 .word 0x00001021
e10: 00001021 .word 0x00001021
e14: 00001021 .word 0x00001021
e18: 00001021 .word 0x00001021
e1c: 00001021 .word 0x00001021
e20: 00001021 .word 0x00001021
e24: 00001021 .word 0x00001021
e28: 00001021 .word 0x00001021
e2c: 00001021 .word 0x00001021
e30: 00001021 .word 0x00001021
e34: 00001021 .word 0x00001021
e38: 00001009 .word 0x00001009
e3c: 00001021 .word 0x00001021
e40: 00001021 .word 0x00001021
e44: 00001021 .word 0x00001021
e48: 00001021 .word 0x00001021
e4c: 00001021 .word 0x00001021
e50: 00001021 .word 0x00001021
e54: 00001021 .word 0x00001021
e58: 00001021 .word 0x00001021
e5c: 00001021 .word 0x00001021
e60: 00001021 .word 0x00001021
e64: 00000ebd .word 0x00000ebd
e68: 00001017 .word 0x00001017
e6c: 00001021 .word 0x00001021
e70: 00001021 .word 0x00001021
e74: 00001021 .word 0x00001021
e78: 00001021 .word 0x00001021
e7c: 00001017 .word 0x00001017
e80: 00001021 .word 0x00001021
e84: 00001021 .word 0x00001021
e88: 00001021 .word 0x00001021
e8c: 00001021 .word 0x00001021
e90: 00000fc5 .word 0x00000fc5
e94: 00001003 .word 0x00001003
e98: 00000f91 .word 0x00000f91
e9c: 00001021 .word 0x00001021
ea0: 00001021 .word 0x00001021
ea4: 00000f0b .word 0x00000f0b
ea8: 00001021 .word 0x00001021
eac: 00001049 .word 0x00001049
eb0: 00001021 .word 0x00001021
eb4: 00001021 .word 0x00001021
eb8: 00001011 .word 0x00001011
case 'c': {
if (0 == (flags & LEFT)) {
ebc: 6bbb ldr r3, [r7, #56] ; 0x38
ebe: f003 0310 and.w r3, r3, #16
ec2: 2b00 cmp r3, #0
ec4: d10b bne.n ede <myvsprintf+0x31a>
while (--field_width > 0) {
ec6: e004 b.n ed2 <myvsprintf+0x30e>
*str++ = ' ';
ec8: 6a7b ldr r3, [r7, #36] ; 0x24
eca: 1c5a adds r2, r3, #1
ecc: 627a str r2, [r7, #36] ; 0x24
ece: 2220 movs r2, #32
ed0: 701a strb r2, [r3, #0]
while (--field_width > 0) {
ed2: 6b3b ldr r3, [r7, #48] ; 0x30
ed4: 3b01 subs r3, #1
ed6: 633b str r3, [r7, #48] ; 0x30
ed8: 6b3b ldr r3, [r7, #48] ; 0x30
eda: 2b00 cmp r3, #0
edc: dcf4 bgt.n ec8 <myvsprintf+0x304>
}
}
*str++ = (unsigned char) va_arg(args, int);
ede: 687b ldr r3, [r7, #4]
ee0: 1d1a adds r2, r3, #4
ee2: 607a str r2, [r7, #4]
ee4: 6819 ldr r1, [r3, #0]
ee6: 6a7b ldr r3, [r7, #36] ; 0x24
ee8: 1c5a adds r2, r3, #1
eea: 627a str r2, [r7, #36] ; 0x24
eec: b2ca uxtb r2, r1
eee: 701a strb r2, [r3, #0]
while (--field_width > 0) {
ef0: e004 b.n efc <myvsprintf+0x338>
*str++ = ' ';
ef2: 6a7b ldr r3, [r7, #36] ; 0x24
ef4: 1c5a adds r2, r3, #1
ef6: 627a str r2, [r7, #36] ; 0x24
ef8: 2220 movs r2, #32
efa: 701a strb r2, [r3, #0]
while (--field_width > 0) {
efc: 6b3b ldr r3, [r7, #48] ; 0x30
efe: 3b01 subs r3, #1
f00: 633b str r3, [r7, #48] ; 0x30
f02: 6b3b ldr r3, [r7, #48] ; 0x30
f04: 2b00 cmp r3, #0
f06: dcf4 bgt.n ef2 <myvsprintf+0x32e>
}
continue;
f08: e0d5 b.n 10b6 <myvsprintf+0x4f2>
}
case 's': {
s = va_arg(args, char *);
f0a: 687b ldr r3, [r7, #4]
f0c: 1d1a adds r2, r3, #4
f0e: 607a str r2, [r7, #4]
f10: 681b ldr r3, [r3, #0]
f12: 623b str r3, [r7, #32]
if (!s) {
f14: 6a3b ldr r3, [r7, #32]
f16: 2b00 cmp r3, #0
f18: d101 bne.n f1e <myvsprintf+0x35a>
s = "<NULL>";
f1a: 4b16 ldr r3, [pc, #88] ; (f74 <myvsprintf+0x3b0>)
f1c: 623b str r3, [r7, #32]
}
len = mystrnlen(s, precision);
f1e: 6af9 ldr r1, [r7, #44] ; 0x2c
f20: 6a38 ldr r0, [r7, #32]
f22: f7ff fce1 bl 8e8 <mystrnlen>
f26: 61b8 str r0, [r7, #24]
if (0 == (flags & LEFT)) {
f28: 6bbb ldr r3, [r7, #56] ; 0x38
f2a: f003 0310 and.w r3, r3, #16
f2e: 2b00 cmp r3, #0
f30: d10b bne.n f4a <myvsprintf+0x386>
while (len < field_width--) {
f32: e004 b.n f3e <myvsprintf+0x37a>
*str++ = ' ';
f34: 6a7b ldr r3, [r7, #36] ; 0x24
f36: 1c5a adds r2, r3, #1
f38: 627a str r2, [r7, #36] ; 0x24
f3a: 2220 movs r2, #32
f3c: 701a strb r2, [r3, #0]
while (len < field_width--) {
f3e: 6b3b ldr r3, [r7, #48] ; 0x30
f40: 1e5a subs r2, r3, #1
f42: 633a str r2, [r7, #48] ; 0x30
f44: 69ba ldr r2, [r7, #24]
f46: 429a cmp r2, r3
f48: dbf4 blt.n f34 <myvsprintf+0x370>
}
}
for (i = 0; i < len; ++i) {
f4a: 2300 movs r3, #0
f4c: 63fb str r3, [r7, #60] ; 0x3c
f4e: e00a b.n f66 <myvsprintf+0x3a2>
*str++ = *s++;
f50: 6a3a ldr r2, [r7, #32]
f52: 1c53 adds r3, r2, #1
f54: 623b str r3, [r7, #32]
f56: 6a7b ldr r3, [r7, #36] ; 0x24
f58: 1c59 adds r1, r3, #1
f5a: 6279 str r1, [r7, #36] ; 0x24
f5c: 7812 ldrb r2, [r2, #0]
f5e: 701a strb r2, [r3, #0]
for (i = 0; i < len; ++i) {
f60: 6bfb ldr r3, [r7, #60] ; 0x3c
f62: 3301 adds r3, #1
f64: 63fb str r3, [r7, #60] ; 0x3c
f66: 6bfa ldr r2, [r7, #60] ; 0x3c
f68: 69bb ldr r3, [r7, #24]
f6a: 429a cmp r2, r3
f6c: dbf0 blt.n f50 <myvsprintf+0x38c>
}
while (len < field_width--) {
f6e: e008 b.n f82 <myvsprintf+0x3be>
f70: 00005aac .word 0x00005aac
f74: 00005a7c .word 0x00005a7c
*str++ = ' ';
f78: 6a7b ldr r3, [r7, #36] ; 0x24
f7a: 1c5a adds r2, r3, #1
f7c: 627a str r2, [r7, #36] ; 0x24
f7e: 2220 movs r2, #32
f80: 701a strb r2, [r3, #0]
while (len < field_width--) {
f82: 6b3b ldr r3, [r7, #48] ; 0x30
f84: 1e5a subs r2, r3, #1
f86: 633a str r2, [r7, #48] ; 0x30
f88: 69ba ldr r2, [r7, #24]
f8a: 429a cmp r2, r3
f8c: dbf4 blt.n f78 <myvsprintf+0x3b4>
}
continue;
f8e: e092 b.n 10b6 <myvsprintf+0x4f2>
}
case 'p': {
if (-1 == field_width) {
f90: 6b3b ldr r3, [r7, #48] ; 0x30
f92: f1b3 3fff cmp.w r3, #4294967295 ; 0xffffffff
f96: d105 bne.n fa4 <myvsprintf+0x3e0>
field_width = 2 * sizeof(void *);
f98: 2308 movs r3, #8
f9a: 633b str r3, [r7, #48] ; 0x30
flags |= ZEROPAD;
f9c: 6bbb ldr r3, [r7, #56] ; 0x38
f9e: f043 0301 orr.w r3, r3, #1
fa2: 63bb str r3, [r7, #56] ; 0x38
}
str = mynumber(str, (unsigned long)va_arg(args, void *), 16, field_width, precision, flags);
fa4: 687b ldr r3, [r7, #4]
fa6: 1d1a adds r2, r3, #4
fa8: 607a str r2, [r7, #4]
faa: 681b ldr r3, [r3, #0]
fac: 4619 mov r1, r3
fae: 6bbb ldr r3, [r7, #56] ; 0x38
fb0: 9301 str r3, [sp, #4]
fb2: 6afb ldr r3, [r7, #44] ; 0x2c
fb4: 9300 str r3, [sp, #0]
fb6: 6b3b ldr r3, [r7, #48] ; 0x30
fb8: 2210 movs r2, #16
fba: 6a78 ldr r0, [r7, #36] ; 0x24
fbc: f7ff fcda bl 974 <mynumber>
fc0: 6278 str r0, [r7, #36] ; 0x24
continue;
fc2: e078 b.n 10b6 <myvsprintf+0x4f2>
}
case 'n': {
if ('l' == qualifier) {
fc4: 6abb ldr r3, [r7, #40] ; 0x28
fc6: 2b6c cmp r3, #108 ; 0x6c
fc8: d10a bne.n fe0 <myvsprintf+0x41c>
long * ip = va_arg(args, long *);
fca: 687b ldr r3, [r7, #4]
fcc: 1d1a adds r2, r3, #4
fce: 607a str r2, [r7, #4]
fd0: 681b ldr r3, [r3, #0]
fd2: 613b str r3, [r7, #16]
*ip = (str - buf);
fd4: 6a7a ldr r2, [r7, #36] ; 0x24
fd6: 68fb ldr r3, [r7, #12]
fd8: 1ad2 subs r2, r2, r3
fda: 693b ldr r3, [r7, #16]
fdc: 601a str r2, [r3, #0]
} else {
int * ip = va_arg(args, int *);
*ip = (str - buf);
}
continue;
fde: e06a b.n 10b6 <myvsprintf+0x4f2>
int * ip = va_arg(args, int *);
fe0: 687b ldr r3, [r7, #4]
fe2: 1d1a adds r2, r3, #4
fe4: 607a str r2, [r7, #4]
fe6: 681b ldr r3, [r3, #0]
fe8: 617b str r3, [r7, #20]
*ip = (str - buf);
fea: 6a7a ldr r2, [r7, #36] ; 0x24
fec: 68fb ldr r3, [r7, #12]
fee: 1ad2 subs r2, r2, r3
ff0: 697b ldr r3, [r7, #20]
ff2: 601a str r2, [r3, #0]
continue;
ff4: e05f b.n 10b6 <myvsprintf+0x4f2>
}
case '%': {
*str++ = '%';
ff6: 6a7b ldr r3, [r7, #36] ; 0x24
ff8: 1c5a adds r2, r3, #1
ffa: 627a str r2, [r7, #36] ; 0x24
ffc: 2225 movs r2, #37 ; 0x25
ffe: 701a strb r2, [r3, #0]
continue;
1000: e059 b.n 10b6 <myvsprintf+0x4f2>
}
case 'o': { //integer number formats - set up the flags and "break"
base = 8;
1002: 2308 movs r3, #8
1004: 637b str r3, [r7, #52] ; 0x34
break;
1006: e020 b.n 104a <myvsprintf+0x486>
}
case 'X': {
flags |= LARGE;
1008: 6bbb ldr r3, [r7, #56] ; 0x38
100a: f043 0340 orr.w r3, r3, #64 ; 0x40
100e: 63bb str r3, [r7, #56] ; 0x38
}
case 'x': {
base = 16;
1010: 2310 movs r3, #16
1012: 637b str r3, [r7, #52] ; 0x34
break;
1014: e019 b.n 104a <myvsprintf+0x486>
}
case 'd':
case 'i': {
flags |= SIGN;
1016: 6bbb ldr r3, [r7, #56] ; 0x38
1018: f043 0302 orr.w r3, r3, #2
101c: 63bb str r3, [r7, #56] ; 0x38
}
case 'u': {
break;
101e: e013 b.n 1048 <myvsprintf+0x484>
}
default: {
*str++ = '%';
1020: 6a7b ldr r3, [r7, #36] ; 0x24
1022: 1c5a adds r2, r3, #1
1024: 627a str r2, [r7, #36] ; 0x24
1026: 2225 movs r2, #37 ; 0x25
1028: 701a strb r2, [r3, #0]
if (0 == *fmt) {
102a: 68bb ldr r3, [r7, #8]
102c: 781b ldrb r3, [r3, #0]
102e: 2b00 cmp r3, #0
1030: d106 bne.n 1040 <myvsprintf+0x47c>
*str++ = *fmt;
1032: 68ba ldr r2, [r7, #8]
1034: 6a7b ldr r3, [r7, #36] ; 0x24
1036: 1c59 adds r1, r3, #1
1038: 6279 str r1, [r7, #36] ; 0x24
103a: 7812 ldrb r2, [r2, #0]
103c: 701a strb r2, [r3, #0]
} else {
--fmt;
}
continue;
103e: e03a b.n 10b6 <myvsprintf+0x4f2>
--fmt;
1040: 68bb ldr r3, [r7, #8]
1042: 3b01 subs r3, #1
1044: 60bb str r3, [r7, #8]
continue;
1046: e036 b.n 10b6 <myvsprintf+0x4f2>
break;
1048: bf00 nop
}
}
if ('l' == qualifier) {
104a: 6abb ldr r3, [r7, #40] ; 0x28
104c: 2b6c cmp r3, #108 ; 0x6c
104e: d105 bne.n 105c <myvsprintf+0x498>
num = va_arg(args, unsigned long);
1050: 687b ldr r3, [r7, #4]
1052: 1d1a adds r2, r3, #4
1054: 607a str r2, [r7, #4]
1056: 681b ldr r3, [r3, #0]
1058: 61fb str r3, [r7, #28]
105a: e021 b.n 10a0 <myvsprintf+0x4dc>
} else if ('h' == qualifier) {
105c: 6abb ldr r3, [r7, #40] ; 0x28
105e: 2b68 cmp r3, #104 ; 0x68
1060: d10e bne.n 1080 <myvsprintf+0x4bc>
num = (unsigned short) va_arg(args, int);
1062: 687b ldr r3, [r7, #4]
1064: 1d1a adds r2, r3, #4
1066: 607a str r2, [r7, #4]
1068: 681b ldr r3, [r3, #0]
106a: b29b uxth r3, r3
106c: 61fb str r3, [r7, #28]
if (0 == (flags & SIGN)) {
106e: 6bbb ldr r3, [r7, #56] ; 0x38
1070: f003 0302 and.w r3, r3, #2
1074: 2b00 cmp r3, #0
1076: d113 bne.n 10a0 <myvsprintf+0x4dc>
num = (short) num;
1078: 69fb ldr r3, [r7, #28]
107a: b21b sxth r3, r3
107c: 61fb str r3, [r7, #28]
107e: e00f b.n 10a0 <myvsprintf+0x4dc>
}
} else if (0 == (flags & SIGN)) {
1080: 6bbb ldr r3, [r7, #56] ; 0x38
1082: f003 0302 and.w r3, r3, #2
1086: 2b00 cmp r3, #0
1088: d105 bne.n 1096 <myvsprintf+0x4d2>
num = va_arg(args, int);
108a: 687b ldr r3, [r7, #4]
108c: 1d1a adds r2, r3, #4
108e: 607a str r2, [r7, #4]
1090: 681b ldr r3, [r3, #0]
1092: 61fb str r3, [r7, #28]
1094: e004 b.n 10a0 <myvsprintf+0x4dc>
} else {
num = va_arg(args, unsigned int);
1096: 687b ldr r3, [r7, #4]
1098: 1d1a adds r2, r3, #4
109a: 607a str r2, [r7, #4]
109c: 681b ldr r3, [r3, #0]
109e: 61fb str r3, [r7, #28]
}
str = mynumber(str, num, base, field_width, precision, flags);
10a0: 69f9 ldr r1, [r7, #28]
10a2: 6bbb ldr r3, [r7, #56] ; 0x38
10a4: 9301 str r3, [sp, #4]
10a6: 6afb ldr r3, [r7, #44] ; 0x2c
10a8: 9300 str r3, [sp, #0]
10aa: 6b3b ldr r3, [r7, #48] ; 0x30
10ac: 6b7a ldr r2, [r7, #52] ; 0x34
10ae: 6a78 ldr r0, [r7, #36] ; 0x24
10b0: f7ff fc60 bl 974 <mynumber>
10b4: 6278 str r0, [r7, #36] ; 0x24
for (str = buf; *fmt; ++fmt) {
10b6: 68bb ldr r3, [r7, #8]
10b8: 3301 adds r3, #1
10ba: 60bb str r3, [r7, #8]
10bc: 68bb ldr r3, [r7, #8]
10be: 781b ldrb r3, [r3, #0]
10c0: 2b00 cmp r3, #0
10c2: f47f ad88 bne.w bd6 <myvsprintf+0x12>
}
*str = '\0';
10c6: 6a7b ldr r3, [r7, #36] ; 0x24
10c8: 2200 movs r2, #0
10ca: 701a strb r2, [r3, #0]
return str-buf;
10cc: 6a7a ldr r2, [r7, #36] ; 0x24
10ce: 68fb ldr r3, [r7, #12]
10d0: 1ad3 subs r3, r2, r3
}
10d2: 4618 mov r0, r3
10d4: 3740 adds r7, #64 ; 0x40
10d6: 46bd mov sp, r7
10d8: bd80 pop {r7, pc}
000010da <myputc>:
void myputc (const char c)
{
10da: b580 push {r7, lr}
10dc: b082 sub sp, #8
10de: af00 add r7, sp, #0
10e0: 4603 mov r3, r0
10e2: 71fb strb r3, [r7, #7]
if (c == '\n')
10e4: 79fb ldrb r3, [r7, #7]
10e6: 2b0a cmp r3, #10
10e8: d102 bne.n 10f0 <myputc+0x16>
usart_send_bytes('\r');
10ea: 200d movs r0, #13
10ec: f7ff fbe2 bl 8b4 <usart_send_bytes>
usart_send_bytes(c);
10f0: 79fb ldrb r3, [r7, #7]
10f2: 4618 mov r0, r3
10f4: f7ff fbde bl 8b4 <usart_send_bytes>
}
10f8: bf00 nop
10fa: 3708 adds r7, #8
10fc: 46bd mov sp, r7
10fe: bd80 pop {r7, pc}
00001100 <myputs>:
void myputs (const unsigned char *s)
{
1100: b580 push {r7, lr}
1102: b082 sub sp, #8
1104: af00 add r7, sp, #0
1106: 6078 str r0, [r7, #4]
while (*s) {
1108: e006 b.n 1118 <myputs+0x18>
myputc (*s++);
110a: 687b ldr r3, [r7, #4]
110c: 1c5a adds r2, r3, #1
110e: 607a str r2, [r7, #4]
1110: 781b ldrb r3, [r3, #0]
1112: 4618 mov r0, r3
1114: f7ff ffe1 bl 10da <myputc>
while (*s) {
1118: 687b ldr r3, [r7, #4]
111a: 781b ldrb r3, [r3, #0]
111c: 2b00 cmp r3, #0
111e: d1f4 bne.n 110a <myputs+0xa>
}
}
1120: bf00 nop
1122: bf00 nop
1124: 3708 adds r7, #8
1126: 46bd mov sp, r7
1128: bd80 pop {r7, pc}
0000112a <myprintf>:
void myprintf (const char *fmt,...)
{
112a: b40f push {r0, r1, r2, r3}
112c: b580 push {r7, lr}
112e: b0a2 sub sp, #136 ; 0x88
1130: af00 add r7, sp, #0
va_list args;
char printbuffer[PBSIZE];
va_start(args, fmt);
1132: f107 0394 add.w r3, r7, #148 ; 0x94
1136: f8c7 3084 str.w r3, [r7, #132] ; 0x84
myvsprintf(printbuffer, fmt, args);
113a: 1d3b adds r3, r7, #4
113c: f8d7 2084 ldr.w r2, [r7, #132] ; 0x84
1140: f8d7 1090 ldr.w r1, [r7, #144] ; 0x90
1144: 4618 mov r0, r3
1146: f7ff fd3d bl bc4 <myvsprintf>
va_end(args);
myputs((const unsigned char *)printbuffer); // Print the string
114a: 1d3b adds r3, r7, #4
114c: 4618 mov r0, r3
114e: f7ff ffd7 bl 1100 <myputs>
}
1152: bf00 nop
1154: 3788 adds r7, #136 ; 0x88
1156: 46bd mov sp, r7
1158: e8bd 4080 ldmia.w sp!, {r7, lr}
115c: b004 add sp, #16
115e: 4770 bx lr
00001160 <RCC_DeInit>:
* @brief Resets the RCC clock configuration to the default reset state.
* @param None
* @retval None
*/
void RCC_DeInit(void)
{
1160: b480 push {r7}
1162: af00 add r7, sp, #0
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
1164: 4b13 ldr r3, [pc, #76] ; (11b4 <RCC_DeInit+0x54>)
1166: 681b ldr r3, [r3, #0]
1168: 4a12 ldr r2, [pc, #72] ; (11b4 <RCC_DeInit+0x54>)
116a: f043 0301 orr.w r3, r3, #1
116e: 6013 str r3, [r2, #0]
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
1170: 4b10 ldr r3, [pc, #64] ; (11b4 <RCC_DeInit+0x54>)
1172: 685a ldr r2, [r3, #4]
1174: 490f ldr r1, [pc, #60] ; (11b4 <RCC_DeInit+0x54>)
1176: 4b10 ldr r3, [pc, #64] ; (11b8 <RCC_DeInit+0x58>)
1178: 4013 ands r3, r2
117a: 604b str r3, [r1, #4]
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
117c: 4b0d ldr r3, [pc, #52] ; (11b4 <RCC_DeInit+0x54>)
117e: 681b ldr r3, [r3, #0]
1180: 4a0c ldr r2, [pc, #48] ; (11b4 <RCC_DeInit+0x54>)
1182: f023 7384 bic.w r3, r3, #17301504 ; 0x1080000
1186: f423 3380 bic.w r3, r3, #65536 ; 0x10000
118a: 6013 str r3, [r2, #0]
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
118c: 4b09 ldr r3, [pc, #36] ; (11b4 <RCC_DeInit+0x54>)
118e: 681b ldr r3, [r3, #0]
1190: 4a08 ldr r2, [pc, #32] ; (11b4 <RCC_DeInit+0x54>)
1192: f423 2380 bic.w r3, r3, #262144 ; 0x40000
1196: 6013 str r3, [r2, #0]
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= (uint32_t)0xFF80FFFF;
1198: 4b06 ldr r3, [pc, #24] ; (11b4 <RCC_DeInit+0x54>)
119a: 685b ldr r3, [r3, #4]
119c: 4a05 ldr r2, [pc, #20] ; (11b4 <RCC_DeInit+0x54>)
119e: f423 03fe bic.w r3, r3, #8323072 ; 0x7f0000
11a2: 6053 str r3, [r2, #4]
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
11a4: 4b03 ldr r3, [pc, #12] ; (11b4 <RCC_DeInit+0x54>)
11a6: f44f 021f mov.w r2, #10420224 ; 0x9f0000
11aa: 609a str r2, [r3, #8]
#endif /* STM32F10X_CL */
}
11ac: bf00 nop
11ae: 46bd mov sp, r7
11b0: bc80 pop {r7}
11b2: 4770 bx lr
11b4: 40021000 .word 0x40021000
11b8: f8ff0000 .word 0xf8ff0000
000011bc <RCC_HSEConfig>:
* @arg RCC_HSE_ON: HSE oscillator ON
* @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock
* @retval None
*/
void RCC_HSEConfig(uint32_t RCC_HSE)
{
11bc: b480 push {r7}
11be: b083 sub sp, #12
11c0: af00 add r7, sp, #0
11c2: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_HSE));
/* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/
/* Reset HSEON bit */
RCC->CR &= CR_HSEON_Reset;
11c4: 4b13 ldr r3, [pc, #76] ; (1214 <RCC_HSEConfig+0x58>)
11c6: 681b ldr r3, [r3, #0]
11c8: 4a12 ldr r2, [pc, #72] ; (1214 <RCC_HSEConfig+0x58>)
11ca: f423 3380 bic.w r3, r3, #65536 ; 0x10000
11ce: 6013 str r3, [r2, #0]
/* Reset HSEBYP bit */
RCC->CR &= CR_HSEBYP_Reset;
11d0: 4b10 ldr r3, [pc, #64] ; (1214 <RCC_HSEConfig+0x58>)
11d2: 681b ldr r3, [r3, #0]
11d4: 4a0f ldr r2, [pc, #60] ; (1214 <RCC_HSEConfig+0x58>)
11d6: f423 2380 bic.w r3, r3, #262144 ; 0x40000
11da: 6013 str r3, [r2, #0]
/* Configure HSE (RCC_HSE_OFF is already covered by the code section above) */
switch(RCC_HSE)
11dc: 687b ldr r3, [r7, #4]
11de: f5b3 3f80 cmp.w r3, #65536 ; 0x10000
11e2: d004 beq.n 11ee <RCC_HSEConfig+0x32>
11e4: 687b ldr r3, [r7, #4]
11e6: f5b3 2f80 cmp.w r3, #262144 ; 0x40000
11ea: d007 beq.n 11fc <RCC_HSEConfig+0x40>
/* Set HSEBYP and HSEON bits */
RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
break;
default:
break;
11ec: e00d b.n 120a <RCC_HSEConfig+0x4e>
RCC->CR |= CR_HSEON_Set;
11ee: 4b09 ldr r3, [pc, #36] ; (1214 <RCC_HSEConfig+0x58>)
11f0: 681b ldr r3, [r3, #0]
11f2: 4a08 ldr r2, [pc, #32] ; (1214 <RCC_HSEConfig+0x58>)
11f4: f443 3380 orr.w r3, r3, #65536 ; 0x10000
11f8: 6013 str r3, [r2, #0]
break;
11fa: e006 b.n 120a <RCC_HSEConfig+0x4e>
RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
11fc: 4b05 ldr r3, [pc, #20] ; (1214 <RCC_HSEConfig+0x58>)
11fe: 681b ldr r3, [r3, #0]
1200: 4a04 ldr r2, [pc, #16] ; (1214 <RCC_HSEConfig+0x58>)
1202: f443 23a0 orr.w r3, r3, #327680 ; 0x50000
1206: 6013 str r3, [r2, #0]
break;
1208: bf00 nop
}
}
120a: bf00 nop
120c: 370c adds r7, #12
120e: 46bd mov sp, r7
1210: bc80 pop {r7}
1212: 4770 bx lr
1214: 40021000 .word 0x40021000
00001218 <RCC_WaitForHSEStartUp>:
* @retval An ErrorStatus enumuration value:
* - SUCCESS: HSE oscillator is stable and ready to use
* - ERROR: HSE oscillator not yet ready
*/
ErrorStatus RCC_WaitForHSEStartUp(void)
{
1218: b580 push {r7, lr}
121a: b082 sub sp, #8
121c: af00 add r7, sp, #0
__IO uint32_t StartUpCounter = 0;
121e: 2300 movs r3, #0
1220: 603b str r3, [r7, #0]
ErrorStatus status = ERROR;
1222: 2300 movs r3, #0
1224: 71fb strb r3, [r7, #7]
FlagStatus HSEStatus = RESET;
1226: 2300 movs r3, #0
1228: 71bb strb r3, [r7, #6]
/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
122a: 2031 movs r0, #49 ; 0x31
122c: f000 fb14 bl 1858 <RCC_GetFlagStatus>
1230: 4603 mov r3, r0
1232: 71bb strb r3, [r7, #6]
StartUpCounter++;
1234: 683b ldr r3, [r7, #0]
1236: 3301 adds r3, #1
1238: 603b str r3, [r7, #0]
} while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET));
123a: 683b ldr r3, [r7, #0]
123c: f5b3 6fa0 cmp.w r3, #1280 ; 0x500
1240: d002 beq.n 1248 <RCC_WaitForHSEStartUp+0x30>
1242: 79bb ldrb r3, [r7, #6]
1244: 2b00 cmp r3, #0
1246: d0f0 beq.n 122a <RCC_WaitForHSEStartUp+0x12>
if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET)
1248: 2031 movs r0, #49 ; 0x31
124a: f000 fb05 bl 1858 <RCC_GetFlagStatus>
124e: 4603 mov r3, r0
1250: 2b00 cmp r3, #0
1252: d002 beq.n 125a <RCC_WaitForHSEStartUp+0x42>
{
status = SUCCESS;
1254: 2301 movs r3, #1
1256: 71fb strb r3, [r7, #7]
1258: e001 b.n 125e <RCC_WaitForHSEStartUp+0x46>
}
else
{
status = ERROR;
125a: 2300 movs r3, #0
125c: 71fb strb r3, [r7, #7]
}
return (status);
125e: 79fb ldrb r3, [r7, #7]
}
1260: 4618 mov r0, r3
1262: 3708 adds r7, #8
1264: 46bd mov sp, r7
1266: bd80 pop {r7, pc}
00001268 <RCC_AdjustHSICalibrationValue>:
* @param HSICalibrationValue: specifies the calibration trimming value.
* This parameter must be a number between 0 and 0x1F.
* @retval None
*/
void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
{
1268: b480 push {r7}
126a: b085 sub sp, #20
126c: af00 add r7, sp, #0
126e: 4603 mov r3, r0
1270: 71fb strb r3, [r7, #7]
uint32_t tmpreg = 0;
1272: 2300 movs r3, #0
1274: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue));
tmpreg = RCC->CR;
1276: 4b0a ldr r3, [pc, #40] ; (12a0 <RCC_AdjustHSICalibrationValue+0x38>)
1278: 681b ldr r3, [r3, #0]
127a: 60fb str r3, [r7, #12]
/* Clear HSITRIM[4:0] bits */
tmpreg &= CR_HSITRIM_Mask;
127c: 68fb ldr r3, [r7, #12]
127e: f023 03f8 bic.w r3, r3, #248 ; 0xf8
1282: 60fb str r3, [r7, #12]
/* Set the HSITRIM[4:0] bits according to HSICalibrationValue value */
tmpreg |= (uint32_t)HSICalibrationValue << 3;
1284: 79fb ldrb r3, [r7, #7]
1286: 00db lsls r3, r3, #3
1288: 68fa ldr r2, [r7, #12]
128a: 4313 orrs r3, r2
128c: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CR = tmpreg;
128e: 4a04 ldr r2, [pc, #16] ; (12a0 <RCC_AdjustHSICalibrationValue+0x38>)
1290: 68fb ldr r3, [r7, #12]
1292: 6013 str r3, [r2, #0]
}
1294: bf00 nop
1296: 3714 adds r7, #20
1298: 46bd mov sp, r7
129a: bc80 pop {r7}
129c: 4770 bx lr
129e: bf00 nop
12a0: 40021000 .word 0x40021000
000012a4 <RCC_HSICmd>:
* @note HSI can not be stopped if it is used directly or through the PLL as system clock.
* @param NewState: new state of the HSI. This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_HSICmd(FunctionalState NewState)
{
12a4: b480 push {r7}
12a6: b083 sub sp, #12
12a8: af00 add r7, sp, #0
12aa: 4603 mov r3, r0
12ac: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CR_HSION_BB = (uint32_t)NewState;
12ae: 4a04 ldr r2, [pc, #16] ; (12c0 <RCC_HSICmd+0x1c>)
12b0: 79fb ldrb r3, [r7, #7]
12b2: 6013 str r3, [r2, #0]
}
12b4: bf00 nop
12b6: 370c adds r7, #12
12b8: 46bd mov sp, r7
12ba: bc80 pop {r7}
12bc: 4770 bx lr
12be: bf00 nop
12c0: 42420000 .word 0x42420000
000012c4 <RCC_PLLConfig>:
* For @b STM32_Connectivity_line_devices, this parameter can be RCC_PLLMul_x where x:{[4,9], 6_5}
* For @b other_STM32_devices, this parameter can be RCC_PLLMul_x where x:[2,16]
* @retval None
*/
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
{
12c4: b480 push {r7}
12c6: b085 sub sp, #20
12c8: af00 add r7, sp, #0
12ca: 6078 str r0, [r7, #4]
12cc: 6039 str r1, [r7, #0]
uint32_t tmpreg = 0;
12ce: 2300 movs r3, #0
12d0: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
assert_param(IS_RCC_PLL_MUL(RCC_PLLMul));
tmpreg = RCC->CFGR;
12d2: 4b0a ldr r3, [pc, #40] ; (12fc <RCC_PLLConfig+0x38>)
12d4: 685b ldr r3, [r3, #4]
12d6: 60fb str r3, [r7, #12]
/* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
tmpreg &= CFGR_PLL_Mask;
12d8: 68fb ldr r3, [r7, #12]
12da: f423 137c bic.w r3, r3, #4128768 ; 0x3f0000
12de: 60fb str r3, [r7, #12]
/* Set the PLL configuration bits */
tmpreg |= RCC_PLLSource | RCC_PLLMul;
12e0: 687a ldr r2, [r7, #4]
12e2: 683b ldr r3, [r7, #0]
12e4: 4313 orrs r3, r2
12e6: 68fa ldr r2, [r7, #12]
12e8: 4313 orrs r3, r2
12ea: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
12ec: 4a03 ldr r2, [pc, #12] ; (12fc <RCC_PLLConfig+0x38>)
12ee: 68fb ldr r3, [r7, #12]
12f0: 6053 str r3, [r2, #4]
}
12f2: bf00 nop
12f4: 3714 adds r7, #20
12f6: 46bd mov sp, r7
12f8: bc80 pop {r7}
12fa: 4770 bx lr
12fc: 40021000 .word 0x40021000
00001300 <RCC_PLLCmd>:
* @note The PLL can not be disabled if it is used as system clock.
* @param NewState: new state of the PLL. This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_PLLCmd(FunctionalState NewState)
{
1300: b480 push {r7}
1302: b083 sub sp, #12
1304: af00 add r7, sp, #0
1306: 4603 mov r3, r0
1308: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState;
130a: 4a04 ldr r2, [pc, #16] ; (131c <RCC_PLLCmd+0x1c>)
130c: 79fb ldrb r3, [r7, #7]
130e: 6013 str r3, [r2, #0]
}
1310: bf00 nop
1312: 370c adds r7, #12
1314: 46bd mov sp, r7
1316: bc80 pop {r7}
1318: 4770 bx lr
131a: bf00 nop
131c: 42420060 .word 0x42420060
00001320 <RCC_SYSCLKConfig>:
* @arg RCC_SYSCLKSource_HSE: HSE selected as system clock
* @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock
* @retval None
*/
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
{
1320: b480 push {r7}
1322: b085 sub sp, #20
1324: af00 add r7, sp, #0
1326: 6078 str r0, [r7, #4]
uint32_t tmpreg = 0;
1328: 2300 movs r3, #0
132a: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
tmpreg = RCC->CFGR;
132c: 4b09 ldr r3, [pc, #36] ; (1354 <RCC_SYSCLKConfig+0x34>)
132e: 685b ldr r3, [r3, #4]
1330: 60fb str r3, [r7, #12]
/* Clear SW[1:0] bits */
tmpreg &= CFGR_SW_Mask;
1332: 68fb ldr r3, [r7, #12]
1334: f023 0303 bic.w r3, r3, #3
1338: 60fb str r3, [r7, #12]
/* Set SW[1:0] bits according to RCC_SYSCLKSource value */
tmpreg |= RCC_SYSCLKSource;
133a: 68fa ldr r2, [r7, #12]
133c: 687b ldr r3, [r7, #4]
133e: 4313 orrs r3, r2
1340: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
1342: 4a04 ldr r2, [pc, #16] ; (1354 <RCC_SYSCLKConfig+0x34>)
1344: 68fb ldr r3, [r7, #12]
1346: 6053 str r3, [r2, #4]
}
1348: bf00 nop
134a: 3714 adds r7, #20
134c: 46bd mov sp, r7
134e: bc80 pop {r7}
1350: 4770 bx lr
1352: bf00 nop
1354: 40021000 .word 0x40021000
00001358 <RCC_GetSYSCLKSource>:
* - 0x00: HSI used as system clock
* - 0x04: HSE used as system clock
* - 0x08: PLL used as system clock
*/
uint8_t RCC_GetSYSCLKSource(void)
{
1358: b480 push {r7}
135a: af00 add r7, sp, #0
return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask));
135c: 4b04 ldr r3, [pc, #16] ; (1370 <RCC_GetSYSCLKSource+0x18>)
135e: 685b ldr r3, [r3, #4]
1360: b2db uxtb r3, r3
1362: f003 030c and.w r3, r3, #12
1366: b2db uxtb r3, r3
}
1368: 4618 mov r0, r3
136a: 46bd mov sp, r7
136c: bc80 pop {r7}
136e: 4770 bx lr
1370: 40021000 .word 0x40021000
00001374 <RCC_HCLKConfig>:
* @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256
* @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512
* @retval None
*/
void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
{
1374: b480 push {r7}
1376: b085 sub sp, #20
1378: af00 add r7, sp, #0
137a: 6078 str r0, [r7, #4]
uint32_t tmpreg = 0;
137c: 2300 movs r3, #0
137e: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_HCLK(RCC_SYSCLK));
tmpreg = RCC->CFGR;
1380: 4b09 ldr r3, [pc, #36] ; (13a8 <RCC_HCLKConfig+0x34>)
1382: 685b ldr r3, [r3, #4]
1384: 60fb str r3, [r7, #12]
/* Clear HPRE[3:0] bits */
tmpreg &= CFGR_HPRE_Reset_Mask;
1386: 68fb ldr r3, [r7, #12]
1388: f023 03f0 bic.w r3, r3, #240 ; 0xf0
138c: 60fb str r3, [r7, #12]
/* Set HPRE[3:0] bits according to RCC_SYSCLK value */
tmpreg |= RCC_SYSCLK;
138e: 68fa ldr r2, [r7, #12]
1390: 687b ldr r3, [r7, #4]
1392: 4313 orrs r3, r2
1394: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
1396: 4a04 ldr r2, [pc, #16] ; (13a8 <RCC_HCLKConfig+0x34>)
1398: 68fb ldr r3, [r7, #12]
139a: 6053 str r3, [r2, #4]
}
139c: bf00 nop
139e: 3714 adds r7, #20
13a0: 46bd mov sp, r7
13a2: bc80 pop {r7}
13a4: 4770 bx lr
13a6: bf00 nop
13a8: 40021000 .word 0x40021000
000013ac <RCC_PCLK1Config>:
* @arg RCC_HCLK_Div8: APB1 clock = HCLK/8
* @arg RCC_HCLK_Div16: APB1 clock = HCLK/16
* @retval None
*/
void RCC_PCLK1Config(uint32_t RCC_HCLK)
{
13ac: b480 push {r7}
13ae: b085 sub sp, #20
13b0: af00 add r7, sp, #0
13b2: 6078 str r0, [r7, #4]
uint32_t tmpreg = 0;
13b4: 2300 movs r3, #0
13b6: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_PCLK(RCC_HCLK));
tmpreg = RCC->CFGR;
13b8: 4b09 ldr r3, [pc, #36] ; (13e0 <RCC_PCLK1Config+0x34>)
13ba: 685b ldr r3, [r3, #4]
13bc: 60fb str r3, [r7, #12]
/* Clear PPRE1[2:0] bits */
tmpreg &= CFGR_PPRE1_Reset_Mask;
13be: 68fb ldr r3, [r7, #12]
13c0: f423 63e0 bic.w r3, r3, #1792 ; 0x700
13c4: 60fb str r3, [r7, #12]
/* Set PPRE1[2:0] bits according to RCC_HCLK value */
tmpreg |= RCC_HCLK;
13c6: 68fa ldr r2, [r7, #12]
13c8: 687b ldr r3, [r7, #4]
13ca: 4313 orrs r3, r2
13cc: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
13ce: 4a04 ldr r2, [pc, #16] ; (13e0 <RCC_PCLK1Config+0x34>)
13d0: 68fb ldr r3, [r7, #12]
13d2: 6053 str r3, [r2, #4]
}
13d4: bf00 nop
13d6: 3714 adds r7, #20
13d8: 46bd mov sp, r7
13da: bc80 pop {r7}
13dc: 4770 bx lr
13de: bf00 nop
13e0: 40021000 .word 0x40021000
000013e4 <RCC_PCLK2Config>:
* @arg RCC_HCLK_Div8: APB2 clock = HCLK/8
* @arg RCC_HCLK_Div16: APB2 clock = HCLK/16
* @retval None
*/
void RCC_PCLK2Config(uint32_t RCC_HCLK)
{
13e4: b480 push {r7}
13e6: b085 sub sp, #20
13e8: af00 add r7, sp, #0
13ea: 6078 str r0, [r7, #4]
uint32_t tmpreg = 0;
13ec: 2300 movs r3, #0
13ee: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_PCLK(RCC_HCLK));
tmpreg = RCC->CFGR;
13f0: 4b09 ldr r3, [pc, #36] ; (1418 <RCC_PCLK2Config+0x34>)
13f2: 685b ldr r3, [r3, #4]
13f4: 60fb str r3, [r7, #12]
/* Clear PPRE2[2:0] bits */
tmpreg &= CFGR_PPRE2_Reset_Mask;
13f6: 68fb ldr r3, [r7, #12]
13f8: f423 5360 bic.w r3, r3, #14336 ; 0x3800
13fc: 60fb str r3, [r7, #12]
/* Set PPRE2[2:0] bits according to RCC_HCLK value */
tmpreg |= RCC_HCLK << 3;
13fe: 687b ldr r3, [r7, #4]
1400: 00db lsls r3, r3, #3
1402: 68fa ldr r2, [r7, #12]
1404: 4313 orrs r3, r2
1406: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
1408: 4a03 ldr r2, [pc, #12] ; (1418 <RCC_PCLK2Config+0x34>)
140a: 68fb ldr r3, [r7, #12]
140c: 6053 str r3, [r2, #4]
}
140e: bf00 nop
1410: 3714 adds r7, #20
1412: 46bd mov sp, r7
1414: bc80 pop {r7}
1416: 4770 bx lr
1418: 40021000 .word 0x40021000
0000141c <RCC_ITConfig>:
* @param NewState: new state of the specified RCC interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
{
141c: b480 push {r7}
141e: b083 sub sp, #12
1420: af00 add r7, sp, #0
1422: 4603 mov r3, r0
1424: 460a mov r2, r1
1426: 71fb strb r3, [r7, #7]
1428: 4613 mov r3, r2
142a: 71bb strb r3, [r7, #6]
/* Check the parameters */
assert_param(IS_RCC_IT(RCC_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
142c: 79bb ldrb r3, [r7, #6]
142e: 2b00 cmp r3, #0
1430: d008 beq.n 1444 <RCC_ITConfig+0x28>
{
/* Perform Byte access to RCC_CIR bits to enable the selected interrupts */
*(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT;
1432: 4b0c ldr r3, [pc, #48] ; (1464 <RCC_ITConfig+0x48>)
1434: 781b ldrb r3, [r3, #0]
1436: b2da uxtb r2, r3
1438: 490a ldr r1, [pc, #40] ; (1464 <RCC_ITConfig+0x48>)
143a: 79fb ldrb r3, [r7, #7]
143c: 4313 orrs r3, r2
143e: b2db uxtb r3, r3
1440: 700b strb r3, [r1, #0]
else
{
/* Perform Byte access to RCC_CIR bits to disable the selected interrupts */
*(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
}
}
1442: e009 b.n 1458 <RCC_ITConfig+0x3c>
*(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
1444: 4b07 ldr r3, [pc, #28] ; (1464 <RCC_ITConfig+0x48>)
1446: 781b ldrb r3, [r3, #0]
1448: b2da uxtb r2, r3
144a: 79fb ldrb r3, [r7, #7]
144c: 43db mvns r3, r3
144e: b2db uxtb r3, r3
1450: 4904 ldr r1, [pc, #16] ; (1464 <RCC_ITConfig+0x48>)
1452: 4013 ands r3, r2
1454: b2db uxtb r3, r3
1456: 700b strb r3, [r1, #0]
}
1458: bf00 nop
145a: 370c adds r7, #12
145c: 46bd mov sp, r7
145e: bc80 pop {r7}
1460: 4770 bx lr
1462: bf00 nop
1464: 40021009 .word 0x40021009
00001468 <RCC_USBCLKConfig>:
* clock source
* @arg RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source
* @retval None
*/
void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)
{
1468: b480 push {r7}
146a: b083 sub sp, #12
146c: af00 add r7, sp, #0
146e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource));
*(__IO uint32_t *) CFGR_USBPRE_BB = RCC_USBCLKSource;
1470: 4a03 ldr r2, [pc, #12] ; (1480 <RCC_USBCLKConfig+0x18>)
1472: 687b ldr r3, [r7, #4]
1474: 6013 str r3, [r2, #0]
}
1476: bf00 nop
1478: 370c adds r7, #12
147a: 46bd mov sp, r7
147c: bc80 pop {r7}
147e: 4770 bx lr
1480: 424200d8 .word 0x424200d8
00001484 <RCC_ADCCLKConfig>:
* @arg RCC_PCLK2_Div6: ADC clock = PCLK2/6
* @arg RCC_PCLK2_Div8: ADC clock = PCLK2/8
* @retval None
*/
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
{
1484: b480 push {r7}
1486: b085 sub sp, #20
1488: af00 add r7, sp, #0
148a: 6078 str r0, [r7, #4]
uint32_t tmpreg = 0;
148c: 2300 movs r3, #0
148e: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
tmpreg = RCC->CFGR;
1490: 4b09 ldr r3, [pc, #36] ; (14b8 <RCC_ADCCLKConfig+0x34>)
1492: 685b ldr r3, [r3, #4]
1494: 60fb str r3, [r7, #12]
/* Clear ADCPRE[1:0] bits */
tmpreg &= CFGR_ADCPRE_Reset_Mask;
1496: 68fb ldr r3, [r7, #12]
1498: f423 4340 bic.w r3, r3, #49152 ; 0xc000
149c: 60fb str r3, [r7, #12]
/* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
tmpreg |= RCC_PCLK2;
149e: 68fa ldr r2, [r7, #12]
14a0: 687b ldr r3, [r7, #4]
14a2: 4313 orrs r3, r2
14a4: 60fb str r3, [r7, #12]
/* Store the new value */
RCC->CFGR = tmpreg;
14a6: 4a04 ldr r2, [pc, #16] ; (14b8 <RCC_ADCCLKConfig+0x34>)
14a8: 68fb ldr r3, [r7, #12]
14aa: 6053 str r3, [r2, #4]
}
14ac: bf00 nop
14ae: 3714 adds r7, #20
14b0: 46bd mov sp, r7
14b2: bc80 pop {r7}
14b4: 4770 bx lr
14b6: bf00 nop
14b8: 40021000 .word 0x40021000
000014bc <RCC_LSEConfig>:
* @arg RCC_LSE_ON: LSE oscillator ON
* @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock
* @retval None
*/
void RCC_LSEConfig(uint8_t RCC_LSE)
{
14bc: b480 push {r7}
14be: b083 sub sp, #12
14c0: af00 add r7, sp, #0
14c2: 4603 mov r3, r0
14c4: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_LSE));
/* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/
/* Reset LSEON bit */
*(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
14c6: 4b0c ldr r3, [pc, #48] ; (14f8 <RCC_LSEConfig+0x3c>)
14c8: 2200 movs r2, #0
14ca: 701a strb r2, [r3, #0]
/* Reset LSEBYP bit */
*(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
14cc: 4b0a ldr r3, [pc, #40] ; (14f8 <RCC_LSEConfig+0x3c>)
14ce: 2200 movs r2, #0
14d0: 701a strb r2, [r3, #0]
/* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */
switch(RCC_LSE)
14d2: 79fb ldrb r3, [r7, #7]
14d4: 2b01 cmp r3, #1
14d6: d002 beq.n 14de <RCC_LSEConfig+0x22>
14d8: 2b04 cmp r3, #4
14da: d004 beq.n 14e6 <RCC_LSEConfig+0x2a>
/* Set LSEBYP and LSEON bits */
*(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
break;
default:
break;
14dc: e007 b.n 14ee <RCC_LSEConfig+0x32>
*(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON;
14de: 4b06 ldr r3, [pc, #24] ; (14f8 <RCC_LSEConfig+0x3c>)
14e0: 2201 movs r2, #1
14e2: 701a strb r2, [r3, #0]
break;
14e4: e003 b.n 14ee <RCC_LSEConfig+0x32>
*(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
14e6: 4b04 ldr r3, [pc, #16] ; (14f8 <RCC_LSEConfig+0x3c>)
14e8: 2205 movs r2, #5
14ea: 701a strb r2, [r3, #0]
break;
14ec: bf00 nop
}
}
14ee: bf00 nop
14f0: 370c adds r7, #12
14f2: 46bd mov sp, r7
14f4: bc80 pop {r7}
14f6: 4770 bx lr
14f8: 40021020 .word 0x40021020
000014fc <RCC_LSICmd>:
* @note LSI can not be disabled if the IWDG is running.
* @param NewState: new state of the LSI. This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_LSICmd(FunctionalState NewState)
{
14fc: b480 push {r7}
14fe: b083 sub sp, #12
1500: af00 add r7, sp, #0
1502: 4603 mov r3, r0
1504: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState;
1506: 4a04 ldr r2, [pc, #16] ; (1518 <RCC_LSICmd+0x1c>)
1508: 79fb ldrb r3, [r7, #7]
150a: 6013 str r3, [r2, #0]
}
150c: bf00 nop
150e: 370c adds r7, #12
1510: 46bd mov sp, r7
1512: bc80 pop {r7}
1514: 4770 bx lr
1516: bf00 nop
1518: 42420480 .word 0x42420480
0000151c <RCC_RTCCLKConfig>:
* @arg RCC_RTCCLKSource_LSI: LSI selected as RTC clock
* @arg RCC_RTCCLKSource_HSE_Div128: HSE clock divided by 128 selected as RTC clock
* @retval None
*/
void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource)
{
151c: b480 push {r7}
151e: b083 sub sp, #12
1520: af00 add r7, sp, #0
1522: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource));
/* Select the RTC clock source */
RCC->BDCR |= RCC_RTCCLKSource;
1524: 4b05 ldr r3, [pc, #20] ; (153c <RCC_RTCCLKConfig+0x20>)
1526: 6a1a ldr r2, [r3, #32]
1528: 4904 ldr r1, [pc, #16] ; (153c <RCC_RTCCLKConfig+0x20>)
152a: 687b ldr r3, [r7, #4]
152c: 4313 orrs r3, r2
152e: 620b str r3, [r1, #32]
}
1530: bf00 nop
1532: 370c adds r7, #12
1534: 46bd mov sp, r7
1536: bc80 pop {r7}
1538: 4770 bx lr
153a: bf00 nop
153c: 40021000 .word 0x40021000
00001540 <RCC_RTCCLKCmd>:
* @note This function must be used only after the RTC clock was selected using the RCC_RTCCLKConfig function.
* @param NewState: new state of the RTC clock. This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_RTCCLKCmd(FunctionalState NewState)
{
1540: b480 push {r7}
1542: b083 sub sp, #12
1544: af00 add r7, sp, #0
1546: 4603 mov r3, r0
1548: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState;
154a: 4a04 ldr r2, [pc, #16] ; (155c <RCC_RTCCLKCmd+0x1c>)
154c: 79fb ldrb r3, [r7, #7]
154e: 6013 str r3, [r2, #0]
}
1550: bf00 nop
1552: 370c adds r7, #12
1554: 46bd mov sp, r7
1556: bc80 pop {r7}
1558: 4770 bx lr
155a: bf00 nop
155c: 4242043c .word 0x4242043c
00001560 <RCC_GetClocksFreq>:
* @note The result of this function could be not correct when using
* fractional value for HSE crystal.
* @retval None
*/
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
{
1560: b480 push {r7}
1562: b087 sub sp, #28
1564: af00 add r7, sp, #0
1566: 6078 str r0, [r7, #4]
uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0;
1568: 2300 movs r3, #0
156a: 617b str r3, [r7, #20]
156c: 2300 movs r3, #0
156e: 613b str r3, [r7, #16]
1570: 2300 movs r3, #0
1572: 60fb str r3, [r7, #12]
1574: 2300 movs r3, #0
1576: 60bb str r3, [r7, #8]
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
uint32_t prediv1factor = 0;
#endif
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & CFGR_SWS_Mask;
1578: 4b4f ldr r3, [pc, #316] ; (16b8 <RCC_GetClocksFreq+0x158>)
157a: 685b ldr r3, [r3, #4]
157c: f003 030c and.w r3, r3, #12
1580: 617b str r3, [r7, #20]
switch (tmp)
1582: 697b ldr r3, [r7, #20]
1584: 2b08 cmp r3, #8
1586: d011 beq.n 15ac <RCC_GetClocksFreq+0x4c>
1588: 697b ldr r3, [r7, #20]
158a: 2b08 cmp r3, #8
158c: d83a bhi.n 1604 <RCC_GetClocksFreq+0xa4>
158e: 697b ldr r3, [r7, #20]
1590: 2b00 cmp r3, #0
1592: d003 beq.n 159c <RCC_GetClocksFreq+0x3c>
1594: 697b ldr r3, [r7, #20]
1596: 2b04 cmp r3, #4
1598: d004 beq.n 15a4 <RCC_GetClocksFreq+0x44>
159a: e033 b.n 1604 <RCC_GetClocksFreq+0xa4>
{
case 0x00: /* HSI used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
159c: 687b ldr r3, [r7, #4]
159e: 4a47 ldr r2, [pc, #284] ; (16bc <RCC_GetClocksFreq+0x15c>)
15a0: 601a str r2, [r3, #0]
break;
15a2: e033 b.n 160c <RCC_GetClocksFreq+0xac>
case 0x04: /* HSE used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
15a4: 687b ldr r3, [r7, #4]
15a6: 4a45 ldr r2, [pc, #276] ; (16bc <RCC_GetClocksFreq+0x15c>)
15a8: 601a str r2, [r3, #0]
break;
15aa: e02f b.n 160c <RCC_GetClocksFreq+0xac>
case 0x08: /* PLL used as system clock */
/* Get PLL clock source and multiplication factor ----------------------*/
pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
15ac: 4b42 ldr r3, [pc, #264] ; (16b8 <RCC_GetClocksFreq+0x158>)
15ae: 685b ldr r3, [r3, #4]
15b0: f403 1370 and.w r3, r3, #3932160 ; 0x3c0000
15b4: 613b str r3, [r7, #16]
pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;
15b6: 4b40 ldr r3, [pc, #256] ; (16b8 <RCC_GetClocksFreq+0x158>)
15b8: 685b ldr r3, [r3, #4]
15ba: f403 3380 and.w r3, r3, #65536 ; 0x10000
15be: 60fb str r3, [r7, #12]
#ifndef STM32F10X_CL
pllmull = ( pllmull >> 18) + 2;
15c0: 693b ldr r3, [r7, #16]
15c2: 0c9b lsrs r3, r3, #18
15c4: 3302 adds r3, #2
15c6: 613b str r3, [r7, #16]
if (pllsource == 0x00)
15c8: 68fb ldr r3, [r7, #12]
15ca: 2b00 cmp r3, #0
15cc: d106 bne.n 15dc <RCC_GetClocksFreq+0x7c>
{/* HSI oscillator clock divided by 2 selected as PLL clock entry */
RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;
15ce: 693b ldr r3, [r7, #16]
15d0: 4a3b ldr r2, [pc, #236] ; (16c0 <RCC_GetClocksFreq+0x160>)
15d2: fb02 f203 mul.w r2, r2, r3
15d6: 687b ldr r3, [r7, #4]
15d8: 601a str r2, [r3, #0]
pll2mull = ((RCC->CFGR2 & CFGR2_PLL2MUL) >> 8 ) + 2;
RCC_Clocks->SYSCLK_Frequency = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;
}
}
#endif /* STM32F10X_CL */
break;
15da: e017 b.n 160c <RCC_GetClocksFreq+0xac>
if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET)
15dc: 4b36 ldr r3, [pc, #216] ; (16b8 <RCC_GetClocksFreq+0x158>)
15de: 685b ldr r3, [r3, #4]
15e0: f403 3300 and.w r3, r3, #131072 ; 0x20000
15e4: 2b00 cmp r3, #0
15e6: d006 beq.n 15f6 <RCC_GetClocksFreq+0x96>
RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull;
15e8: 693b ldr r3, [r7, #16]
15ea: 4a35 ldr r2, [pc, #212] ; (16c0 <RCC_GetClocksFreq+0x160>)
15ec: fb02 f203 mul.w r2, r2, r3
15f0: 687b ldr r3, [r7, #4]
15f2: 601a str r2, [r3, #0]
break;
15f4: e00a b.n 160c <RCC_GetClocksFreq+0xac>
RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull;
15f6: 693b ldr r3, [r7, #16]
15f8: 4a30 ldr r2, [pc, #192] ; (16bc <RCC_GetClocksFreq+0x15c>)
15fa: fb02 f203 mul.w r2, r2, r3
15fe: 687b ldr r3, [r7, #4]
1600: 601a str r2, [r3, #0]
break;
1602: e003 b.n 160c <RCC_GetClocksFreq+0xac>
default:
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
1604: 687b ldr r3, [r7, #4]
1606: 4a2d ldr r2, [pc, #180] ; (16bc <RCC_GetClocksFreq+0x15c>)
1608: 601a str r2, [r3, #0]
break;
160a: bf00 nop
}
/* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/
/* Get HCLK prescaler */
tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;
160c: 4b2a ldr r3, [pc, #168] ; (16b8 <RCC_GetClocksFreq+0x158>)
160e: 685b ldr r3, [r3, #4]
1610: f003 03f0 and.w r3, r3, #240 ; 0xf0
1614: 617b str r3, [r7, #20]
tmp = tmp >> 4;
1616: 697b ldr r3, [r7, #20]
1618: 091b lsrs r3, r3, #4
161a: 617b str r3, [r7, #20]
presc = APBAHBPrescTable[tmp];
161c: 4a29 ldr r2, [pc, #164] ; (16c4 <RCC_GetClocksFreq+0x164>)
161e: 697b ldr r3, [r7, #20]
1620: 4413 add r3, r2
1622: 781b ldrb r3, [r3, #0]
1624: b2db uxtb r3, r3
1626: 60bb str r3, [r7, #8]
/* HCLK clock frequency */
RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;
1628: 687b ldr r3, [r7, #4]
162a: 681a ldr r2, [r3, #0]
162c: 68bb ldr r3, [r7, #8]
162e: 40da lsrs r2, r3
1630: 687b ldr r3, [r7, #4]
1632: 605a str r2, [r3, #4]
/* Get PCLK1 prescaler */
tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask;
1634: 4b20 ldr r3, [pc, #128] ; (16b8 <RCC_GetClocksFreq+0x158>)
1636: 685b ldr r3, [r3, #4]
1638: f403 63e0 and.w r3, r3, #1792 ; 0x700
163c: 617b str r3, [r7, #20]
tmp = tmp >> 8;
163e: 697b ldr r3, [r7, #20]
1640: 0a1b lsrs r3, r3, #8
1642: 617b str r3, [r7, #20]
presc = APBAHBPrescTable[tmp];
1644: 4a1f ldr r2, [pc, #124] ; (16c4 <RCC_GetClocksFreq+0x164>)
1646: 697b ldr r3, [r7, #20]
1648: 4413 add r3, r2
164a: 781b ldrb r3, [r3, #0]
164c: b2db uxtb r3, r3
164e: 60bb str r3, [r7, #8]
/* PCLK1 clock frequency */
RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
1650: 687b ldr r3, [r7, #4]
1652: 685a ldr r2, [r3, #4]
1654: 68bb ldr r3, [r7, #8]
1656: 40da lsrs r2, r3
1658: 687b ldr r3, [r7, #4]
165a: 609a str r2, [r3, #8]
/* Get PCLK2 prescaler */
tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask;
165c: 4b16 ldr r3, [pc, #88] ; (16b8 <RCC_GetClocksFreq+0x158>)
165e: 685b ldr r3, [r3, #4]
1660: f403 5360 and.w r3, r3, #14336 ; 0x3800
1664: 617b str r3, [r7, #20]
tmp = tmp >> 11;
1666: 697b ldr r3, [r7, #20]
1668: 0adb lsrs r3, r3, #11
166a: 617b str r3, [r7, #20]
presc = APBAHBPrescTable[tmp];
166c: 4a15 ldr r2, [pc, #84] ; (16c4 <RCC_GetClocksFreq+0x164>)
166e: 697b ldr r3, [r7, #20]
1670: 4413 add r3, r2
1672: 781b ldrb r3, [r3, #0]
1674: b2db uxtb r3, r3
1676: 60bb str r3, [r7, #8]
/* PCLK2 clock frequency */
RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
1678: 687b ldr r3, [r7, #4]
167a: 685a ldr r2, [r3, #4]
167c: 68bb ldr r3, [r7, #8]
167e: 40da lsrs r2, r3
1680: 687b ldr r3, [r7, #4]
1682: 60da str r2, [r3, #12]
/* Get ADCCLK prescaler */
tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask;
1684: 4b0c ldr r3, [pc, #48] ; (16b8 <RCC_GetClocksFreq+0x158>)
1686: 685b ldr r3, [r3, #4]
1688: f403 4340 and.w r3, r3, #49152 ; 0xc000
168c: 617b str r3, [r7, #20]
tmp = tmp >> 14;
168e: 697b ldr r3, [r7, #20]
1690: 0b9b lsrs r3, r3, #14
1692: 617b str r3, [r7, #20]
presc = ADCPrescTable[tmp];
1694: 4a0c ldr r2, [pc, #48] ; (16c8 <RCC_GetClocksFreq+0x168>)
1696: 697b ldr r3, [r7, #20]
1698: 4413 add r3, r2
169a: 781b ldrb r3, [r3, #0]
169c: b2db uxtb r3, r3
169e: 60bb str r3, [r7, #8]
/* ADCCLK clock frequency */
RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc;
16a0: 687b ldr r3, [r7, #4]
16a2: 68da ldr r2, [r3, #12]
16a4: 68bb ldr r3, [r7, #8]
16a6: fbb2 f2f3 udiv r2, r2, r3
16aa: 687b ldr r3, [r7, #4]
16ac: 611a str r2, [r3, #16]
}
16ae: bf00 nop
16b0: 371c adds r7, #28
16b2: 46bd mov sp, r7
16b4: bc80 pop {r7}
16b6: 4770 bx lr
16b8: 40021000 .word 0x40021000
16bc: 007a1200 .word 0x007a1200
16c0: 003d0900 .word 0x003d0900
16c4: 20000014 .word 0x20000014
16c8: 20000024 .word 0x20000024
000016cc <RCC_AHBPeriphClockCmd>:
* @param NewState: new state of the specified peripheral clock.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
{
16cc: b480 push {r7}
16ce: b083 sub sp, #12
16d0: af00 add r7, sp, #0
16d2: 6078 str r0, [r7, #4]
16d4: 460b mov r3, r1
16d6: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
16d8: 78fb ldrb r3, [r7, #3]
16da: 2b00 cmp r3, #0
16dc: d006 beq.n 16ec <RCC_AHBPeriphClockCmd+0x20>
{
RCC->AHBENR |= RCC_AHBPeriph;
16de: 4b09 ldr r3, [pc, #36] ; (1704 <RCC_AHBPeriphClockCmd+0x38>)
16e0: 695a ldr r2, [r3, #20]
16e2: 4908 ldr r1, [pc, #32] ; (1704 <RCC_AHBPeriphClockCmd+0x38>)
16e4: 687b ldr r3, [r7, #4]
16e6: 4313 orrs r3, r2
16e8: 614b str r3, [r1, #20]
}
else
{
RCC->AHBENR &= ~RCC_AHBPeriph;
}
}
16ea: e006 b.n 16fa <RCC_AHBPeriphClockCmd+0x2e>
RCC->AHBENR &= ~RCC_AHBPeriph;
16ec: 4b05 ldr r3, [pc, #20] ; (1704 <RCC_AHBPeriphClockCmd+0x38>)
16ee: 695a ldr r2, [r3, #20]
16f0: 687b ldr r3, [r7, #4]
16f2: 43db mvns r3, r3
16f4: 4903 ldr r1, [pc, #12] ; (1704 <RCC_AHBPeriphClockCmd+0x38>)
16f6: 4013 ands r3, r2
16f8: 614b str r3, [r1, #20]
}
16fa: bf00 nop
16fc: 370c adds r7, #12
16fe: 46bd mov sp, r7
1700: bc80 pop {r7}
1702: 4770 bx lr
1704: 40021000 .word 0x40021000
00001708 <RCC_APB2PeriphClockCmd>:
* @param NewState: new state of the specified peripheral clock.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
1708: b480 push {r7}
170a: b083 sub sp, #12
170c: af00 add r7, sp, #0
170e: 6078 str r0, [r7, #4]
1710: 460b mov r3, r1
1712: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
1714: 78fb ldrb r3, [r7, #3]
1716: 2b00 cmp r3, #0
1718: d006 beq.n 1728 <RCC_APB2PeriphClockCmd+0x20>
{
RCC->APB2ENR |= RCC_APB2Periph;
171a: 4b09 ldr r3, [pc, #36] ; (1740 <RCC_APB2PeriphClockCmd+0x38>)
171c: 699a ldr r2, [r3, #24]
171e: 4908 ldr r1, [pc, #32] ; (1740 <RCC_APB2PeriphClockCmd+0x38>)
1720: 687b ldr r3, [r7, #4]
1722: 4313 orrs r3, r2
1724: 618b str r3, [r1, #24]
}
else
{
RCC->APB2ENR &= ~RCC_APB2Periph;
}
}
1726: e006 b.n 1736 <RCC_APB2PeriphClockCmd+0x2e>
RCC->APB2ENR &= ~RCC_APB2Periph;
1728: 4b05 ldr r3, [pc, #20] ; (1740 <RCC_APB2PeriphClockCmd+0x38>)
172a: 699a ldr r2, [r3, #24]
172c: 687b ldr r3, [r7, #4]
172e: 43db mvns r3, r3
1730: 4903 ldr r1, [pc, #12] ; (1740 <RCC_APB2PeriphClockCmd+0x38>)
1732: 4013 ands r3, r2
1734: 618b str r3, [r1, #24]
}
1736: bf00 nop
1738: 370c adds r7, #12
173a: 46bd mov sp, r7
173c: bc80 pop {r7}
173e: 4770 bx lr
1740: 40021000 .word 0x40021000
00001744 <RCC_APB1PeriphClockCmd>:
* @param NewState: new state of the specified peripheral clock.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
{
1744: b480 push {r7}
1746: b083 sub sp, #12
1748: af00 add r7, sp, #0
174a: 6078 str r0, [r7, #4]
174c: 460b mov r3, r1
174e: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
1750: 78fb ldrb r3, [r7, #3]
1752: 2b00 cmp r3, #0
1754: d006 beq.n 1764 <RCC_APB1PeriphClockCmd+0x20>
{
RCC->APB1ENR |= RCC_APB1Periph;
1756: 4b09 ldr r3, [pc, #36] ; (177c <RCC_APB1PeriphClockCmd+0x38>)
1758: 69da ldr r2, [r3, #28]
175a: 4908 ldr r1, [pc, #32] ; (177c <RCC_APB1PeriphClockCmd+0x38>)
175c: 687b ldr r3, [r7, #4]
175e: 4313 orrs r3, r2
1760: 61cb str r3, [r1, #28]
}
else
{
RCC->APB1ENR &= ~RCC_APB1Periph;
}
}
1762: e006 b.n 1772 <RCC_APB1PeriphClockCmd+0x2e>
RCC->APB1ENR &= ~RCC_APB1Periph;
1764: 4b05 ldr r3, [pc, #20] ; (177c <RCC_APB1PeriphClockCmd+0x38>)
1766: 69da ldr r2, [r3, #28]
1768: 687b ldr r3, [r7, #4]
176a: 43db mvns r3, r3
176c: 4903 ldr r1, [pc, #12] ; (177c <RCC_APB1PeriphClockCmd+0x38>)
176e: 4013 ands r3, r2
1770: 61cb str r3, [r1, #28]
}
1772: bf00 nop
1774: 370c adds r7, #12
1776: 46bd mov sp, r7
1778: bc80 pop {r7}
177a: 4770 bx lr
177c: 40021000 .word 0x40021000
00001780 <RCC_APB2PeriphResetCmd>:
* @param NewState: new state of the specified peripheral reset.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
1780: b480 push {r7}
1782: b083 sub sp, #12
1784: af00 add r7, sp, #0
1786: 6078 str r0, [r7, #4]
1788: 460b mov r3, r1
178a: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
178c: 78fb ldrb r3, [r7, #3]
178e: 2b00 cmp r3, #0
1790: d006 beq.n 17a0 <RCC_APB2PeriphResetCmd+0x20>
{
RCC->APB2RSTR |= RCC_APB2Periph;
1792: 4b09 ldr r3, [pc, #36] ; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
1794: 68da ldr r2, [r3, #12]
1796: 4908 ldr r1, [pc, #32] ; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
1798: 687b ldr r3, [r7, #4]
179a: 4313 orrs r3, r2
179c: 60cb str r3, [r1, #12]
}
else
{
RCC->APB2RSTR &= ~RCC_APB2Periph;
}
}
179e: e006 b.n 17ae <RCC_APB2PeriphResetCmd+0x2e>
RCC->APB2RSTR &= ~RCC_APB2Periph;
17a0: 4b05 ldr r3, [pc, #20] ; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
17a2: 68da ldr r2, [r3, #12]
17a4: 687b ldr r3, [r7, #4]
17a6: 43db mvns r3, r3
17a8: 4903 ldr r1, [pc, #12] ; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
17aa: 4013 ands r3, r2
17ac: 60cb str r3, [r1, #12]
}
17ae: bf00 nop
17b0: 370c adds r7, #12
17b2: 46bd mov sp, r7
17b4: bc80 pop {r7}
17b6: 4770 bx lr
17b8: 40021000 .word 0x40021000
000017bc <RCC_APB1PeriphResetCmd>:
* @param NewState: new state of the specified peripheral clock.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
{
17bc: b480 push {r7}
17be: b083 sub sp, #12
17c0: af00 add r7, sp, #0
17c2: 6078 str r0, [r7, #4]
17c4: 460b mov r3, r1
17c6: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
17c8: 78fb ldrb r3, [r7, #3]
17ca: 2b00 cmp r3, #0
17cc: d006 beq.n 17dc <RCC_APB1PeriphResetCmd+0x20>
{
RCC->APB1RSTR |= RCC_APB1Periph;
17ce: 4b09 ldr r3, [pc, #36] ; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
17d0: 691a ldr r2, [r3, #16]
17d2: 4908 ldr r1, [pc, #32] ; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
17d4: 687b ldr r3, [r7, #4]
17d6: 4313 orrs r3, r2
17d8: 610b str r3, [r1, #16]
}
else
{
RCC->APB1RSTR &= ~RCC_APB1Periph;
}
}
17da: e006 b.n 17ea <RCC_APB1PeriphResetCmd+0x2e>
RCC->APB1RSTR &= ~RCC_APB1Periph;
17dc: 4b05 ldr r3, [pc, #20] ; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
17de: 691a ldr r2, [r3, #16]
17e0: 687b ldr r3, [r7, #4]
17e2: 43db mvns r3, r3
17e4: 4903 ldr r1, [pc, #12] ; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
17e6: 4013 ands r3, r2
17e8: 610b str r3, [r1, #16]
}
17ea: bf00 nop
17ec: 370c adds r7, #12
17ee: 46bd mov sp, r7
17f0: bc80 pop {r7}
17f2: 4770 bx lr
17f4: 40021000 .word 0x40021000
000017f8 <RCC_BackupResetCmd>:
* @param NewState: new state of the Backup domain reset.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_BackupResetCmd(FunctionalState NewState)
{
17f8: b480 push {r7}
17fa: b083 sub sp, #12
17fc: af00 add r7, sp, #0
17fe: 4603 mov r3, r0
1800: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) BDCR_BDRST_BB = (uint32_t)NewState;
1802: 4a04 ldr r2, [pc, #16] ; (1814 <RCC_BackupResetCmd+0x1c>)
1804: 79fb ldrb r3, [r7, #7]
1806: 6013 str r3, [r2, #0]
}
1808: bf00 nop
180a: 370c adds r7, #12
180c: 46bd mov sp, r7
180e: bc80 pop {r7}
1810: 4770 bx lr
1812: bf00 nop
1814: 42420440 .word 0x42420440
00001818 <RCC_ClockSecuritySystemCmd>:
* @param NewState: new state of the Clock Security System..
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
{
1818: b480 push {r7}
181a: b083 sub sp, #12
181c: af00 add r7, sp, #0
181e: 4603 mov r3, r0
1820: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CR_CSSON_BB = (uint32_t)NewState;
1822: 4a04 ldr r2, [pc, #16] ; (1834 <RCC_ClockSecuritySystemCmd+0x1c>)
1824: 79fb ldrb r3, [r7, #7]
1826: 6013 str r3, [r2, #0]
}
1828: bf00 nop
182a: 370c adds r7, #12
182c: 46bd mov sp, r7
182e: bc80 pop {r7}
1830: 4770 bx lr
1832: bf00 nop
1834: 4242004c .word 0x4242004c
00001838 <RCC_MCOConfig>:
* @arg RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected
*
* @retval None
*/
void RCC_MCOConfig(uint8_t RCC_MCO)
{
1838: b480 push {r7}
183a: b083 sub sp, #12
183c: af00 add r7, sp, #0
183e: 4603 mov r3, r0
1840: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_RCC_MCO(RCC_MCO));
/* Perform Byte access to MCO bits to select the MCO source */
*(__IO uint8_t *) CFGR_BYTE4_ADDRESS = RCC_MCO;
1842: 4a04 ldr r2, [pc, #16] ; (1854 <RCC_MCOConfig+0x1c>)
1844: 79fb ldrb r3, [r7, #7]
1846: 7013 strb r3, [r2, #0]
}
1848: bf00 nop
184a: 370c adds r7, #12
184c: 46bd mov sp, r7
184e: bc80 pop {r7}
1850: 4770 bx lr
1852: bf00 nop
1854: 40021007 .word 0x40021007
00001858 <RCC_GetFlagStatus>:
* @arg RCC_FLAG_LPWRRST: Low Power reset
*
* @retval The new state of RCC_FLAG (SET or RESET).
*/
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
{
1858: b480 push {r7}
185a: b087 sub sp, #28
185c: af00 add r7, sp, #0
185e: 4603 mov r3, r0
1860: 71fb strb r3, [r7, #7]
uint32_t tmp = 0;
1862: 2300 movs r3, #0
1864: 60fb str r3, [r7, #12]
uint32_t statusreg = 0;
1866: 2300 movs r3, #0
1868: 617b str r3, [r7, #20]
FlagStatus bitstatus = RESET;
186a: 2300 movs r3, #0
186c: 74fb strb r3, [r7, #19]
/* Check the parameters */
assert_param(IS_RCC_FLAG(RCC_FLAG));
/* Get the RCC register index */
tmp = RCC_FLAG >> 5;
186e: 79fb ldrb r3, [r7, #7]
1870: 095b lsrs r3, r3, #5
1872: b2db uxtb r3, r3
1874: 60fb str r3, [r7, #12]
if (tmp == 1) /* The flag to check is in CR register */
1876: 68fb ldr r3, [r7, #12]
1878: 2b01 cmp r3, #1
187a: d103 bne.n 1884 <RCC_GetFlagStatus+0x2c>
{
statusreg = RCC->CR;
187c: 4b12 ldr r3, [pc, #72] ; (18c8 <RCC_GetFlagStatus+0x70>)
187e: 681b ldr r3, [r3, #0]
1880: 617b str r3, [r7, #20]
1882: e009 b.n 1898 <RCC_GetFlagStatus+0x40>
}
else if (tmp == 2) /* The flag to check is in BDCR register */
1884: 68fb ldr r3, [r7, #12]
1886: 2b02 cmp r3, #2
1888: d103 bne.n 1892 <RCC_GetFlagStatus+0x3a>
{
statusreg = RCC->BDCR;
188a: 4b0f ldr r3, [pc, #60] ; (18c8 <RCC_GetFlagStatus+0x70>)
188c: 6a1b ldr r3, [r3, #32]
188e: 617b str r3, [r7, #20]
1890: e002 b.n 1898 <RCC_GetFlagStatus+0x40>
}
else /* The flag to check is in CSR register */
{
statusreg = RCC->CSR;
1892: 4b0d ldr r3, [pc, #52] ; (18c8 <RCC_GetFlagStatus+0x70>)
1894: 6a5b ldr r3, [r3, #36] ; 0x24
1896: 617b str r3, [r7, #20]
}
/* Get the flag position */
tmp = RCC_FLAG & FLAG_Mask;
1898: 79fb ldrb r3, [r7, #7]
189a: f003 031f and.w r3, r3, #31
189e: 60fb str r3, [r7, #12]
if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)
18a0: 697a ldr r2, [r7, #20]
18a2: 68fb ldr r3, [r7, #12]
18a4: fa22 f303 lsr.w r3, r2, r3
18a8: f003 0301 and.w r3, r3, #1
18ac: 2b00 cmp r3, #0
18ae: d002 beq.n 18b6 <RCC_GetFlagStatus+0x5e>
{
bitstatus = SET;
18b0: 2301 movs r3, #1
18b2: 74fb strb r3, [r7, #19]
18b4: e001 b.n 18ba <RCC_GetFlagStatus+0x62>
}
else
{
bitstatus = RESET;
18b6: 2300 movs r3, #0
18b8: 74fb strb r3, [r7, #19]
}
/* Return the flag status */
return bitstatus;
18ba: 7cfb ldrb r3, [r7, #19]
}
18bc: 4618 mov r0, r3
18be: 371c adds r7, #28
18c0: 46bd mov sp, r7
18c2: bc80 pop {r7}
18c4: 4770 bx lr
18c6: bf00 nop
18c8: 40021000 .word 0x40021000
000018cc <RCC_ClearFlag>:
* RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST
* @param None
* @retval None
*/
void RCC_ClearFlag(void)
{
18cc: b480 push {r7}
18ce: af00 add r7, sp, #0
/* Set RMVF bit to clear the reset flags */
RCC->CSR |= CSR_RMVF_Set;
18d0: 4b04 ldr r3, [pc, #16] ; (18e4 <RCC_ClearFlag+0x18>)
18d2: 6a5b ldr r3, [r3, #36] ; 0x24
18d4: 4a03 ldr r2, [pc, #12] ; (18e4 <RCC_ClearFlag+0x18>)
18d6: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
18da: 6253 str r3, [r2, #36] ; 0x24
}
18dc: bf00 nop
18de: 46bd mov sp, r7
18e0: bc80 pop {r7}
18e2: 4770 bx lr
18e4: 40021000 .word 0x40021000
000018e8 <RCC_GetITStatus>:
* @arg RCC_IT_CSS: Clock Security System interrupt
*
* @retval The new state of RCC_IT (SET or RESET).
*/
ITStatus RCC_GetITStatus(uint8_t RCC_IT)
{
18e8: b480 push {r7}
18ea: b085 sub sp, #20
18ec: af00 add r7, sp, #0
18ee: 4603 mov r3, r0
18f0: 71fb strb r3, [r7, #7]
ITStatus bitstatus = RESET;
18f2: 2300 movs r3, #0
18f4: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_RCC_GET_IT(RCC_IT));
/* Check the status of the specified RCC interrupt */
if ((RCC->CIR & RCC_IT) != (uint32_t)RESET)
18f6: 4b08 ldr r3, [pc, #32] ; (1918 <RCC_GetITStatus+0x30>)
18f8: 689a ldr r2, [r3, #8]
18fa: 79fb ldrb r3, [r7, #7]
18fc: 4013 ands r3, r2
18fe: 2b00 cmp r3, #0
1900: d002 beq.n 1908 <RCC_GetITStatus+0x20>
{
bitstatus = SET;
1902: 2301 movs r3, #1
1904: 73fb strb r3, [r7, #15]
1906: e001 b.n 190c <RCC_GetITStatus+0x24>
}
else
{
bitstatus = RESET;
1908: 2300 movs r3, #0
190a: 73fb strb r3, [r7, #15]
}
/* Return the RCC_IT status */
return bitstatus;
190c: 7bfb ldrb r3, [r7, #15]
}
190e: 4618 mov r0, r3
1910: 3714 adds r7, #20
1912: 46bd mov sp, r7
1914: bc80 pop {r7}
1916: 4770 bx lr
1918: 40021000 .word 0x40021000
0000191c <RCC_ClearITPendingBit>:
*
* @arg RCC_IT_CSS: Clock Security System interrupt
* @retval None
*/
void RCC_ClearITPendingBit(uint8_t RCC_IT)
{
191c: b480 push {r7}
191e: b083 sub sp, #12
1920: af00 add r7, sp, #0
1922: 4603 mov r3, r0
1924: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_RCC_CLEAR_IT(RCC_IT));
/* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt
pending bits */
*(__IO uint8_t *) CIR_BYTE3_ADDRESS = RCC_IT;
1926: 4a04 ldr r2, [pc, #16] ; (1938 <RCC_ClearITPendingBit+0x1c>)
1928: 79fb ldrb r3, [r7, #7]
192a: 7013 strb r3, [r2, #0]
}
192c: bf00 nop
192e: 370c adds r7, #12
1930: 46bd mov sp, r7
1932: bc80 pop {r7}
1934: 4770 bx lr
1936: bf00 nop
1938: 4002100a .word 0x4002100a
0000193c <GPIO_DeInit>:
* @brief Deinitializes the GPIOx peripheral registers to their default reset values.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @retval None
*/
void GPIO_DeInit(GPIO_TypeDef* GPIOx)
{
193c: b580 push {r7, lr}
193e: b082 sub sp, #8
1940: af00 add r7, sp, #0
1942: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
if (GPIOx == GPIOA)
1944: 687b ldr r3, [r7, #4]
1946: 4a2f ldr r2, [pc, #188] ; (1a04 <GPIO_DeInit+0xc8>)
1948: 4293 cmp r3, r2
194a: d108 bne.n 195e <GPIO_DeInit+0x22>
{
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
194c: 2101 movs r1, #1
194e: 2004 movs r0, #4
1950: f7ff ff16 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
1954: 2100 movs r1, #0
1956: 2004 movs r0, #4
1958: f7ff ff12 bl 1780 <RCC_APB2PeriphResetCmd>
{
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
}
}
}
195c: e04e b.n 19fc <GPIO_DeInit+0xc0>
else if (GPIOx == GPIOB)
195e: 687b ldr r3, [r7, #4]
1960: 4a29 ldr r2, [pc, #164] ; (1a08 <GPIO_DeInit+0xcc>)
1962: 4293 cmp r3, r2
1964: d108 bne.n 1978 <GPIO_DeInit+0x3c>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
1966: 2101 movs r1, #1
1968: 2008 movs r0, #8
196a: f7ff ff09 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
196e: 2100 movs r1, #0
1970: 2008 movs r0, #8
1972: f7ff ff05 bl 1780 <RCC_APB2PeriphResetCmd>
}
1976: e041 b.n 19fc <GPIO_DeInit+0xc0>
else if (GPIOx == GPIOC)
1978: 687b ldr r3, [r7, #4]
197a: 4a24 ldr r2, [pc, #144] ; (1a0c <GPIO_DeInit+0xd0>)
197c: 4293 cmp r3, r2
197e: d108 bne.n 1992 <GPIO_DeInit+0x56>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
1980: 2101 movs r1, #1
1982: 2010 movs r0, #16
1984: f7ff fefc bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
1988: 2100 movs r1, #0
198a: 2010 movs r0, #16
198c: f7ff fef8 bl 1780 <RCC_APB2PeriphResetCmd>
}
1990: e034 b.n 19fc <GPIO_DeInit+0xc0>
else if (GPIOx == GPIOD)
1992: 687b ldr r3, [r7, #4]
1994: 4a1e ldr r2, [pc, #120] ; (1a10 <GPIO_DeInit+0xd4>)
1996: 4293 cmp r3, r2
1998: d108 bne.n 19ac <GPIO_DeInit+0x70>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
199a: 2101 movs r1, #1
199c: 2020 movs r0, #32
199e: f7ff feef bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
19a2: 2100 movs r1, #0
19a4: 2020 movs r0, #32
19a6: f7ff feeb bl 1780 <RCC_APB2PeriphResetCmd>
}
19aa: e027 b.n 19fc <GPIO_DeInit+0xc0>
else if (GPIOx == GPIOE)
19ac: 687b ldr r3, [r7, #4]
19ae: 4a19 ldr r2, [pc, #100] ; (1a14 <GPIO_DeInit+0xd8>)
19b0: 4293 cmp r3, r2
19b2: d108 bne.n 19c6 <GPIO_DeInit+0x8a>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
19b4: 2101 movs r1, #1
19b6: 2040 movs r0, #64 ; 0x40
19b8: f7ff fee2 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
19bc: 2100 movs r1, #0
19be: 2040 movs r0, #64 ; 0x40
19c0: f7ff fede bl 1780 <RCC_APB2PeriphResetCmd>
}
19c4: e01a b.n 19fc <GPIO_DeInit+0xc0>
else if (GPIOx == GPIOF)
19c6: 687b ldr r3, [r7, #4]
19c8: 4a13 ldr r2, [pc, #76] ; (1a18 <GPIO_DeInit+0xdc>)
19ca: 4293 cmp r3, r2
19cc: d108 bne.n 19e0 <GPIO_DeInit+0xa4>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);
19ce: 2101 movs r1, #1
19d0: 2080 movs r0, #128 ; 0x80
19d2: f7ff fed5 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE);
19d6: 2100 movs r1, #0
19d8: 2080 movs r0, #128 ; 0x80
19da: f7ff fed1 bl 1780 <RCC_APB2PeriphResetCmd>
}
19de: e00d b.n 19fc <GPIO_DeInit+0xc0>
if (GPIOx == GPIOG)
19e0: 687b ldr r3, [r7, #4]
19e2: 4a0e ldr r2, [pc, #56] ; (1a1c <GPIO_DeInit+0xe0>)
19e4: 4293 cmp r3, r2
19e6: d109 bne.n 19fc <GPIO_DeInit+0xc0>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
19e8: 2101 movs r1, #1
19ea: f44f 7080 mov.w r0, #256 ; 0x100
19ee: f7ff fec7 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
19f2: 2100 movs r1, #0
19f4: f44f 7080 mov.w r0, #256 ; 0x100
19f8: f7ff fec2 bl 1780 <RCC_APB2PeriphResetCmd>
}
19fc: bf00 nop
19fe: 3708 adds r7, #8
1a00: 46bd mov sp, r7
1a02: bd80 pop {r7, pc}
1a04: 40010800 .word 0x40010800
1a08: 40010c00 .word 0x40010c00
1a0c: 40011000 .word 0x40011000
1a10: 40011400 .word 0x40011400
1a14: 40011800 .word 0x40011800
1a18: 40011c00 .word 0x40011c00
1a1c: 40012000 .word 0x40012000
00001a20 <GPIO_AFIODeInit>:
* and EXTI configuration) registers to their default reset values.
* @param None
* @retval None
*/
void GPIO_AFIODeInit(void)
{
1a20: b580 push {r7, lr}
1a22: af00 add r7, sp, #0
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
1a24: 2101 movs r1, #1
1a26: 2001 movs r0, #1
1a28: f7ff feaa bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
1a2c: 2100 movs r1, #0
1a2e: 2001 movs r0, #1
1a30: f7ff fea6 bl 1780 <RCC_APB2PeriphResetCmd>
}
1a34: bf00 nop
1a36: bd80 pop {r7, pc}
00001a38 <GPIO_Init>:
* @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
* contains the configuration information for the specified GPIO peripheral.
* @retval None
*/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
1a38: b480 push {r7}
1a3a: b089 sub sp, #36 ; 0x24
1a3c: af00 add r7, sp, #0
1a3e: 6078 str r0, [r7, #4]
1a40: 6039 str r1, [r7, #0]
uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
1a42: 2300 movs r3, #0
1a44: 61fb str r3, [r7, #28]
1a46: 2300 movs r3, #0
1a48: 613b str r3, [r7, #16]
1a4a: 2300 movs r3, #0
1a4c: 61bb str r3, [r7, #24]
1a4e: 2300 movs r3, #0
1a50: 60fb str r3, [r7, #12]
uint32_t tmpreg = 0x00, pinmask = 0x00;
1a52: 2300 movs r3, #0
1a54: 617b str r3, [r7, #20]
1a56: 2300 movs r3, #0
1a58: 60bb str r3, [r7, #8]
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
/*---------------------------- GPIO Mode Configuration -----------------------*/
currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
1a5a: 683b ldr r3, [r7, #0]
1a5c: 78db ldrb r3, [r3, #3]
1a5e: f003 030f and.w r3, r3, #15
1a62: 61fb str r3, [r7, #28]
if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
1a64: 683b ldr r3, [r7, #0]
1a66: 78db ldrb r3, [r3, #3]
1a68: f003 0310 and.w r3, r3, #16
1a6c: 2b00 cmp r3, #0
1a6e: d005 beq.n 1a7c <GPIO_Init+0x44>
{
/* Check the parameters */
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
/* Output mode */
currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
1a70: 683b ldr r3, [r7, #0]
1a72: 789b ldrb r3, [r3, #2]
1a74: 461a mov r2, r3
1a76: 69fb ldr r3, [r7, #28]
1a78: 4313 orrs r3, r2
1a7a: 61fb str r3, [r7, #28]
}
/*---------------------------- GPIO CRL Configuration ------------------------*/
/* Configure the eight low port pins */
if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
1a7c: 683b ldr r3, [r7, #0]
1a7e: 881b ldrh r3, [r3, #0]
1a80: b2db uxtb r3, r3
1a82: 2b00 cmp r3, #0
1a84: d044 beq.n 1b10 <GPIO_Init+0xd8>
{
tmpreg = GPIOx->CRL;
1a86: 687b ldr r3, [r7, #4]
1a88: 681b ldr r3, [r3, #0]
1a8a: 617b str r3, [r7, #20]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
1a8c: 2300 movs r3, #0
1a8e: 61bb str r3, [r7, #24]
1a90: e038 b.n 1b04 <GPIO_Init+0xcc>
{
pos = ((uint32_t)0x01) << pinpos;
1a92: 2201 movs r2, #1
1a94: 69bb ldr r3, [r7, #24]
1a96: fa02 f303 lsl.w r3, r2, r3
1a9a: 60fb str r3, [r7, #12]
/* Get the port pins position */
currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
1a9c: 683b ldr r3, [r7, #0]
1a9e: 881b ldrh r3, [r3, #0]
1aa0: 461a mov r2, r3
1aa2: 68fb ldr r3, [r7, #12]
1aa4: 4013 ands r3, r2
1aa6: 613b str r3, [r7, #16]
if (currentpin == pos)
1aa8: 693a ldr r2, [r7, #16]
1aaa: 68fb ldr r3, [r7, #12]
1aac: 429a cmp r2, r3
1aae: d126 bne.n 1afe <GPIO_Init+0xc6>
{
pos = pinpos << 2;
1ab0: 69bb ldr r3, [r7, #24]
1ab2: 009b lsls r3, r3, #2
1ab4: 60fb str r3, [r7, #12]
/* Clear the corresponding low control register bits */
pinmask = ((uint32_t)0x0F) << pos;
1ab6: 220f movs r2, #15
1ab8: 68fb ldr r3, [r7, #12]
1aba: fa02 f303 lsl.w r3, r2, r3
1abe: 60bb str r3, [r7, #8]
tmpreg &= ~pinmask;
1ac0: 68bb ldr r3, [r7, #8]
1ac2: 43db mvns r3, r3
1ac4: 697a ldr r2, [r7, #20]
1ac6: 4013 ands r3, r2
1ac8: 617b str r3, [r7, #20]
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos);
1aca: 69fa ldr r2, [r7, #28]
1acc: 68fb ldr r3, [r7, #12]
1ace: fa02 f303 lsl.w r3, r2, r3
1ad2: 697a ldr r2, [r7, #20]
1ad4: 4313 orrs r3, r2
1ad6: 617b str r3, [r7, #20]
/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
1ad8: 683b ldr r3, [r7, #0]
1ada: 78db ldrb r3, [r3, #3]
1adc: 2b28 cmp r3, #40 ; 0x28
1ade: d105 bne.n 1aec <GPIO_Init+0xb4>
{
GPIOx->BRR = (((uint32_t)0x01) << pinpos);
1ae0: 2201 movs r2, #1
1ae2: 69bb ldr r3, [r7, #24]
1ae4: 409a lsls r2, r3
1ae6: 687b ldr r3, [r7, #4]
1ae8: 615a str r2, [r3, #20]
1aea: e008 b.n 1afe <GPIO_Init+0xc6>
}
else
{
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
1aec: 683b ldr r3, [r7, #0]
1aee: 78db ldrb r3, [r3, #3]
1af0: 2b48 cmp r3, #72 ; 0x48
1af2: d104 bne.n 1afe <GPIO_Init+0xc6>
{
GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
1af4: 2201 movs r2, #1
1af6: 69bb ldr r3, [r7, #24]
1af8: 409a lsls r2, r3
1afa: 687b ldr r3, [r7, #4]
1afc: 611a str r2, [r3, #16]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
1afe: 69bb ldr r3, [r7, #24]
1b00: 3301 adds r3, #1
1b02: 61bb str r3, [r7, #24]
1b04: 69bb ldr r3, [r7, #24]
1b06: 2b07 cmp r3, #7
1b08: d9c3 bls.n 1a92 <GPIO_Init+0x5a>
}
}
}
}
GPIOx->CRL = tmpreg;
1b0a: 687b ldr r3, [r7, #4]
1b0c: 697a ldr r2, [r7, #20]
1b0e: 601a str r2, [r3, #0]
}
/*---------------------------- GPIO CRH Configuration ------------------------*/
/* Configure the eight high port pins */
if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
1b10: 683b ldr r3, [r7, #0]
1b12: 881b ldrh r3, [r3, #0]
1b14: 2bff cmp r3, #255 ; 0xff
1b16: d946 bls.n 1ba6 <GPIO_Init+0x16e>
{
tmpreg = GPIOx->CRH;
1b18: 687b ldr r3, [r7, #4]
1b1a: 685b ldr r3, [r3, #4]
1b1c: 617b str r3, [r7, #20]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
1b1e: 2300 movs r3, #0
1b20: 61bb str r3, [r7, #24]
1b22: e03a b.n 1b9a <GPIO_Init+0x162>
{
pos = (((uint32_t)0x01) << (pinpos + 0x08));
1b24: 69bb ldr r3, [r7, #24]
1b26: 3308 adds r3, #8
1b28: 2201 movs r2, #1
1b2a: fa02 f303 lsl.w r3, r2, r3
1b2e: 60fb str r3, [r7, #12]
/* Get the port pins position */
currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
1b30: 683b ldr r3, [r7, #0]
1b32: 881b ldrh r3, [r3, #0]
1b34: 461a mov r2, r3
1b36: 68fb ldr r3, [r7, #12]
1b38: 4013 ands r3, r2
1b3a: 613b str r3, [r7, #16]
if (currentpin == pos)
1b3c: 693a ldr r2, [r7, #16]
1b3e: 68fb ldr r3, [r7, #12]
1b40: 429a cmp r2, r3
1b42: d127 bne.n 1b94 <GPIO_Init+0x15c>
{
pos = pinpos << 2;
1b44: 69bb ldr r3, [r7, #24]
1b46: 009b lsls r3, r3, #2
1b48: 60fb str r3, [r7, #12]
/* Clear the corresponding high control register bits */
pinmask = ((uint32_t)0x0F) << pos;
1b4a: 220f movs r2, #15
1b4c: 68fb ldr r3, [r7, #12]
1b4e: fa02 f303 lsl.w r3, r2, r3
1b52: 60bb str r3, [r7, #8]
tmpreg &= ~pinmask;
1b54: 68bb ldr r3, [r7, #8]
1b56: 43db mvns r3, r3
1b58: 697a ldr r2, [r7, #20]
1b5a: 4013 ands r3, r2
1b5c: 617b str r3, [r7, #20]
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos);
1b5e: 69fa ldr r2, [r7, #28]
1b60: 68fb ldr r3, [r7, #12]
1b62: fa02 f303 lsl.w r3, r2, r3
1b66: 697a ldr r2, [r7, #20]
1b68: 4313 orrs r3, r2
1b6a: 617b str r3, [r7, #20]
/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
1b6c: 683b ldr r3, [r7, #0]
1b6e: 78db ldrb r3, [r3, #3]
1b70: 2b28 cmp r3, #40 ; 0x28
1b72: d105 bne.n 1b80 <GPIO_Init+0x148>
{
GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
1b74: 69bb ldr r3, [r7, #24]
1b76: 3308 adds r3, #8
1b78: 2201 movs r2, #1
1b7a: 409a lsls r2, r3
1b7c: 687b ldr r3, [r7, #4]
1b7e: 615a str r2, [r3, #20]
}
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
1b80: 683b ldr r3, [r7, #0]
1b82: 78db ldrb r3, [r3, #3]
1b84: 2b48 cmp r3, #72 ; 0x48
1b86: d105 bne.n 1b94 <GPIO_Init+0x15c>
{
GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
1b88: 69bb ldr r3, [r7, #24]
1b8a: 3308 adds r3, #8
1b8c: 2201 movs r2, #1
1b8e: 409a lsls r2, r3
1b90: 687b ldr r3, [r7, #4]
1b92: 611a str r2, [r3, #16]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
1b94: 69bb ldr r3, [r7, #24]
1b96: 3301 adds r3, #1
1b98: 61bb str r3, [r7, #24]
1b9a: 69bb ldr r3, [r7, #24]
1b9c: 2b07 cmp r3, #7
1b9e: d9c1 bls.n 1b24 <GPIO_Init+0xec>
}
}
}
GPIOx->CRH = tmpreg;
1ba0: 687b ldr r3, [r7, #4]
1ba2: 697a ldr r2, [r7, #20]
1ba4: 605a str r2, [r3, #4]
}
}
1ba6: bf00 nop
1ba8: 3724 adds r7, #36 ; 0x24
1baa: 46bd mov sp, r7
1bac: bc80 pop {r7}
1bae: 4770 bx lr
00001bb0 <GPIO_StructInit>:
* @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will
* be initialized.
* @retval None
*/
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
{
1bb0: b480 push {r7}
1bb2: b083 sub sp, #12
1bb4: af00 add r7, sp, #0
1bb6: 6078 str r0, [r7, #4]
/* Reset GPIO init structure parameters values */
GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
1bb8: 687b ldr r3, [r7, #4]
1bba: f64f 72ff movw r2, #65535 ; 0xffff
1bbe: 801a strh r2, [r3, #0]
GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
1bc0: 687b ldr r3, [r7, #4]
1bc2: 2202 movs r2, #2
1bc4: 709a strb r2, [r3, #2]
GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
1bc6: 687b ldr r3, [r7, #4]
1bc8: 2204 movs r2, #4
1bca: 70da strb r2, [r3, #3]
}
1bcc: bf00 nop
1bce: 370c adds r7, #12
1bd0: 46bd mov sp, r7
1bd2: bc80 pop {r7}
1bd4: 4770 bx lr
00001bd6 <GPIO_ReadInputDataBit>:
* @param GPIO_Pin: specifies the port bit to read.
* This parameter can be GPIO_Pin_x where x can be (0..15).
* @retval The input port pin value.
*/
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
1bd6: b480 push {r7}
1bd8: b085 sub sp, #20
1bda: af00 add r7, sp, #0
1bdc: 6078 str r0, [r7, #4]
1bde: 460b mov r3, r1
1be0: 807b strh r3, [r7, #2]
uint8_t bitstatus = 0x00;
1be2: 2300 movs r3, #0
1be4: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
1be6: 687b ldr r3, [r7, #4]
1be8: 689a ldr r2, [r3, #8]
1bea: 887b ldrh r3, [r7, #2]
1bec: 4013 ands r3, r2
1bee: 2b00 cmp r3, #0
1bf0: d002 beq.n 1bf8 <GPIO_ReadInputDataBit+0x22>
{
bitstatus = (uint8_t)Bit_SET;
1bf2: 2301 movs r3, #1
1bf4: 73fb strb r3, [r7, #15]
1bf6: e001 b.n 1bfc <GPIO_ReadInputDataBit+0x26>
}
else
{
bitstatus = (uint8_t)Bit_RESET;
1bf8: 2300 movs r3, #0
1bfa: 73fb strb r3, [r7, #15]
}
return bitstatus;
1bfc: 7bfb ldrb r3, [r7, #15]
}
1bfe: 4618 mov r0, r3
1c00: 3714 adds r7, #20
1c02: 46bd mov sp, r7
1c04: bc80 pop {r7}
1c06: 4770 bx lr
00001c08 <GPIO_ReadInputData>:
* @brief Reads the specified GPIO input data port.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @retval GPIO input data port value.
*/
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
{
1c08: b480 push {r7}
1c0a: b083 sub sp, #12
1c0c: af00 add r7, sp, #0
1c0e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
return ((uint16_t)GPIOx->IDR);
1c10: 687b ldr r3, [r7, #4]
1c12: 689b ldr r3, [r3, #8]
1c14: b29b uxth r3, r3
}
1c16: 4618 mov r0, r3
1c18: 370c adds r7, #12
1c1a: 46bd mov sp, r7
1c1c: bc80 pop {r7}
1c1e: 4770 bx lr
00001c20 <GPIO_ReadOutputDataBit>:
* @param GPIO_Pin: specifies the port bit to read.
* This parameter can be GPIO_Pin_x where x can be (0..15).
* @retval The output port pin value.
*/
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
1c20: b480 push {r7}
1c22: b085 sub sp, #20
1c24: af00 add r7, sp, #0
1c26: 6078 str r0, [r7, #4]
1c28: 460b mov r3, r1
1c2a: 807b strh r3, [r7, #2]
uint8_t bitstatus = 0x00;
1c2c: 2300 movs r3, #0
1c2e: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
1c30: 687b ldr r3, [r7, #4]
1c32: 68da ldr r2, [r3, #12]
1c34: 887b ldrh r3, [r7, #2]
1c36: 4013 ands r3, r2
1c38: 2b00 cmp r3, #0
1c3a: d002 beq.n 1c42 <GPIO_ReadOutputDataBit+0x22>
{
bitstatus = (uint8_t)Bit_SET;
1c3c: 2301 movs r3, #1
1c3e: 73fb strb r3, [r7, #15]
1c40: e001 b.n 1c46 <GPIO_ReadOutputDataBit+0x26>
}
else
{
bitstatus = (uint8_t)Bit_RESET;
1c42: 2300 movs r3, #0
1c44: 73fb strb r3, [r7, #15]
}
return bitstatus;
1c46: 7bfb ldrb r3, [r7, #15]
}
1c48: 4618 mov r0, r3
1c4a: 3714 adds r7, #20
1c4c: 46bd mov sp, r7
1c4e: bc80 pop {r7}
1c50: 4770 bx lr
00001c52 <GPIO_ReadOutputData>:
* @brief Reads the specified GPIO output data port.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @retval GPIO output data port value.
*/
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
1c52: b480 push {r7}
1c54: b083 sub sp, #12
1c56: af00 add r7, sp, #0
1c58: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
return ((uint16_t)GPIOx->ODR);
1c5a: 687b ldr r3, [r7, #4]
1c5c: 68db ldr r3, [r3, #12]
1c5e: b29b uxth r3, r3
}
1c60: 4618 mov r0, r3
1c62: 370c adds r7, #12
1c64: 46bd mov sp, r7
1c66: bc80 pop {r7}
1c68: 4770 bx lr
00001c6a <GPIO_SetBits>:
* @param GPIO_Pin: specifies the port bits to be written.
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
* @retval None
*/
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
1c6a: b480 push {r7}
1c6c: b083 sub sp, #12
1c6e: af00 add r7, sp, #0
1c70: 6078 str r0, [r7, #4]
1c72: 460b mov r3, r1
1c74: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
1c76: 887a ldrh r2, [r7, #2]
1c78: 687b ldr r3, [r7, #4]
1c7a: 611a str r2, [r3, #16]
}
1c7c: bf00 nop
1c7e: 370c adds r7, #12
1c80: 46bd mov sp, r7
1c82: bc80 pop {r7}
1c84: 4770 bx lr
00001c86 <GPIO_ResetBits>:
* @param GPIO_Pin: specifies the port bits to be written.
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
* @retval None
*/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
1c86: b480 push {r7}
1c88: b083 sub sp, #12
1c8a: af00 add r7, sp, #0
1c8c: 6078 str r0, [r7, #4]
1c8e: 460b mov r3, r1
1c90: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BRR = GPIO_Pin;
1c92: 887a ldrh r2, [r7, #2]
1c94: 687b ldr r3, [r7, #4]
1c96: 615a str r2, [r3, #20]
}
1c98: bf00 nop
1c9a: 370c adds r7, #12
1c9c: 46bd mov sp, r7
1c9e: bc80 pop {r7}
1ca0: 4770 bx lr
00001ca2 <GPIO_WriteBit>:
* @arg Bit_RESET: to clear the port pin
* @arg Bit_SET: to set the port pin
* @retval None
*/
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
1ca2: b480 push {r7}
1ca4: b083 sub sp, #12
1ca6: af00 add r7, sp, #0
1ca8: 6078 str r0, [r7, #4]
1caa: 460b mov r3, r1
1cac: 807b strh r3, [r7, #2]
1cae: 4613 mov r3, r2
1cb0: 707b strb r3, [r7, #1]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_BIT_ACTION(BitVal));
if (BitVal != Bit_RESET)
1cb2: 787b ldrb r3, [r7, #1]
1cb4: 2b00 cmp r3, #0
1cb6: d003 beq.n 1cc0 <GPIO_WriteBit+0x1e>
{
GPIOx->BSRR = GPIO_Pin;
1cb8: 887a ldrh r2, [r7, #2]
1cba: 687b ldr r3, [r7, #4]
1cbc: 611a str r2, [r3, #16]
}
else
{
GPIOx->BRR = GPIO_Pin;
}
}
1cbe: e002 b.n 1cc6 <GPIO_WriteBit+0x24>
GPIOx->BRR = GPIO_Pin;
1cc0: 887a ldrh r2, [r7, #2]
1cc2: 687b ldr r3, [r7, #4]
1cc4: 615a str r2, [r3, #20]
}
1cc6: bf00 nop
1cc8: 370c adds r7, #12
1cca: 46bd mov sp, r7
1ccc: bc80 pop {r7}
1cce: 4770 bx lr
00001cd0 <GPIO_Write>:
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @param PortVal: specifies the value to be written to the port output data register.
* @retval None
*/
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
1cd0: b480 push {r7}
1cd2: b083 sub sp, #12
1cd4: af00 add r7, sp, #0
1cd6: 6078 str r0, [r7, #4]
1cd8: 460b mov r3, r1
1cda: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
GPIOx->ODR = PortVal;
1cdc: 887a ldrh r2, [r7, #2]
1cde: 687b ldr r3, [r7, #4]
1ce0: 60da str r2, [r3, #12]
}
1ce2: bf00 nop
1ce4: 370c adds r7, #12
1ce6: 46bd mov sp, r7
1ce8: bc80 pop {r7}
1cea: 4770 bx lr
00001cec <GPIO_PinLockConfig>:
* @param GPIO_Pin: specifies the port bit to be written.
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
* @retval None
*/
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
1cec: b480 push {r7}
1cee: b085 sub sp, #20
1cf0: af00 add r7, sp, #0
1cf2: 6078 str r0, [r7, #4]
1cf4: 460b mov r3, r1
1cf6: 807b strh r3, [r7, #2]
uint32_t tmp = 0x00010000;
1cf8: f44f 3380 mov.w r3, #65536 ; 0x10000
1cfc: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
tmp |= GPIO_Pin;
1cfe: 887b ldrh r3, [r7, #2]
1d00: 68fa ldr r2, [r7, #12]
1d02: 4313 orrs r3, r2
1d04: 60fb str r3, [r7, #12]
/* Set LCKK bit */
GPIOx->LCKR = tmp;
1d06: 687b ldr r3, [r7, #4]
1d08: 68fa ldr r2, [r7, #12]
1d0a: 619a str r2, [r3, #24]
/* Reset LCKK bit */
GPIOx->LCKR = GPIO_Pin;
1d0c: 887a ldrh r2, [r7, #2]
1d0e: 687b ldr r3, [r7, #4]
1d10: 619a str r2, [r3, #24]
/* Set LCKK bit */
GPIOx->LCKR = tmp;
1d12: 687b ldr r3, [r7, #4]
1d14: 68fa ldr r2, [r7, #12]
1d16: 619a str r2, [r3, #24]
/* Read LCKK bit*/
tmp = GPIOx->LCKR;
1d18: 687b ldr r3, [r7, #4]
1d1a: 699b ldr r3, [r3, #24]
1d1c: 60fb str r3, [r7, #12]
/* Read LCKK bit*/
tmp = GPIOx->LCKR;
1d1e: 687b ldr r3, [r7, #4]
1d20: 699b ldr r3, [r3, #24]
1d22: 60fb str r3, [r7, #12]
}
1d24: bf00 nop
1d26: 3714 adds r7, #20
1d28: 46bd mov sp, r7
1d2a: bc80 pop {r7}
1d2c: 4770 bx lr
00001d2e <GPIO_EventOutputConfig>:
* @param GPIO_PinSource: specifies the pin for the Event output.
* This parameter can be GPIO_PinSourcex where x can be (0..15).
* @retval None
*/
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
1d2e: b480 push {r7}
1d30: b085 sub sp, #20
1d32: af00 add r7, sp, #0
1d34: 4603 mov r3, r0
1d36: 460a mov r2, r1
1d38: 71fb strb r3, [r7, #7]
1d3a: 4613 mov r3, r2
1d3c: 71bb strb r3, [r7, #6]
uint32_t tmpreg = 0x00;
1d3e: 2300 movs r3, #0
1d40: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
tmpreg = AFIO->EVCR;
1d42: 4b0c ldr r3, [pc, #48] ; (1d74 <GPIO_EventOutputConfig+0x46>)
1d44: 681b ldr r3, [r3, #0]
1d46: 60fb str r3, [r7, #12]
/* Clear the PORT[6:4] and PIN[3:0] bits */
tmpreg &= EVCR_PORTPINCONFIG_MASK;
1d48: 68fa ldr r2, [r7, #12]
1d4a: f64f 7380 movw r3, #65408 ; 0xff80
1d4e: 4013 ands r3, r2
1d50: 60fb str r3, [r7, #12]
tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
1d52: 79fb ldrb r3, [r7, #7]
1d54: 011b lsls r3, r3, #4
1d56: 68fa ldr r2, [r7, #12]
1d58: 4313 orrs r3, r2
1d5a: 60fb str r3, [r7, #12]
tmpreg |= GPIO_PinSource;
1d5c: 79bb ldrb r3, [r7, #6]
1d5e: 68fa ldr r2, [r7, #12]
1d60: 4313 orrs r3, r2
1d62: 60fb str r3, [r7, #12]
AFIO->EVCR = tmpreg;
1d64: 4a03 ldr r2, [pc, #12] ; (1d74 <GPIO_EventOutputConfig+0x46>)
1d66: 68fb ldr r3, [r7, #12]
1d68: 6013 str r3, [r2, #0]
}
1d6a: bf00 nop
1d6c: 3714 adds r7, #20
1d6e: 46bd mov sp, r7
1d70: bc80 pop {r7}
1d72: 4770 bx lr
1d74: 40010000 .word 0x40010000
00001d78 <GPIO_EventOutputCmd>:
* @param NewState: new state of the Event output.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void GPIO_EventOutputCmd(FunctionalState NewState)
{
1d78: b480 push {r7}
1d7a: b083 sub sp, #12
1d7c: af00 add r7, sp, #0
1d7e: 4603 mov r3, r0
1d80: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState;
1d82: 4a04 ldr r2, [pc, #16] ; (1d94 <GPIO_EventOutputCmd+0x1c>)
1d84: 79fb ldrb r3, [r7, #7]
1d86: 6013 str r3, [r2, #0]
}
1d88: bf00 nop
1d8a: 370c adds r7, #12
1d8c: 46bd mov sp, r7
1d8e: bc80 pop {r7}
1d90: 4770 bx lr
1d92: bf00 nop
1d94: 4220001c .word 0x4220001c
00001d98 <GPIO_PinRemapConfig>:
* @param NewState: new state of the port pin remapping.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
{
1d98: b480 push {r7}
1d9a: b087 sub sp, #28
1d9c: af00 add r7, sp, #0
1d9e: 6078 str r0, [r7, #4]
1da0: 460b mov r3, r1
1da2: 70fb strb r3, [r7, #3]
uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
1da4: 2300 movs r3, #0
1da6: 613b str r3, [r7, #16]
1da8: 2300 movs r3, #0
1daa: 60fb str r3, [r7, #12]
1dac: 2300 movs r3, #0
1dae: 617b str r3, [r7, #20]
1db0: 2300 movs r3, #0
1db2: 60bb str r3, [r7, #8]
/* Check the parameters */
assert_param(IS_GPIO_REMAP(GPIO_Remap));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if((GPIO_Remap & 0x80000000) == 0x80000000)
1db4: 687b ldr r3, [r7, #4]
1db6: 2b00 cmp r3, #0
1db8: da03 bge.n 1dc2 <GPIO_PinRemapConfig+0x2a>
{
tmpreg = AFIO->MAPR2;
1dba: 4b2e ldr r3, [pc, #184] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1dbc: 69db ldr r3, [r3, #28]
1dbe: 617b str r3, [r7, #20]
1dc0: e002 b.n 1dc8 <GPIO_PinRemapConfig+0x30>
}
else
{
tmpreg = AFIO->MAPR;
1dc2: 4b2c ldr r3, [pc, #176] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1dc4: 685b ldr r3, [r3, #4]
1dc6: 617b str r3, [r7, #20]
}
tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
1dc8: 687b ldr r3, [r7, #4]
1dca: 0c1b lsrs r3, r3, #16
1dcc: f003 030f and.w r3, r3, #15
1dd0: 60bb str r3, [r7, #8]
tmp = GPIO_Remap & LSB_MASK;
1dd2: 687b ldr r3, [r7, #4]
1dd4: b29b uxth r3, r3
1dd6: 613b str r3, [r7, #16]
if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
1dd8: 687b ldr r3, [r7, #4]
1dda: f403 1340 and.w r3, r3, #3145728 ; 0x300000
1dde: f5b3 1f40 cmp.w r3, #3145728 ; 0x300000
1de2: d10a bne.n 1dfa <GPIO_PinRemapConfig+0x62>
{
tmpreg &= DBGAFR_SWJCFG_MASK;
1de4: 697b ldr r3, [r7, #20]
1de6: f023 6370 bic.w r3, r3, #251658240 ; 0xf000000
1dea: 617b str r3, [r7, #20]
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
1dec: 4b21 ldr r3, [pc, #132] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1dee: 685b ldr r3, [r3, #4]
1df0: 4a20 ldr r2, [pc, #128] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1df2: f023 6370 bic.w r3, r3, #251658240 ; 0xf000000
1df6: 6053 str r3, [r2, #4]
1df8: e021 b.n 1e3e <GPIO_PinRemapConfig+0xa6>
}
else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
1dfa: 687b ldr r3, [r7, #4]
1dfc: f403 1380 and.w r3, r3, #1048576 ; 0x100000
1e00: 2b00 cmp r3, #0
1e02: d00e beq.n 1e22 <GPIO_PinRemapConfig+0x8a>
{
tmp1 = ((uint32_t)0x03) << tmpmask;
1e04: 2203 movs r2, #3
1e06: 68bb ldr r3, [r7, #8]
1e08: fa02 f303 lsl.w r3, r2, r3
1e0c: 60fb str r3, [r7, #12]
tmpreg &= ~tmp1;
1e0e: 68fb ldr r3, [r7, #12]
1e10: 43db mvns r3, r3
1e12: 697a ldr r2, [r7, #20]
1e14: 4013 ands r3, r2
1e16: 617b str r3, [r7, #20]
tmpreg |= ~DBGAFR_SWJCFG_MASK;
1e18: 697b ldr r3, [r7, #20]
1e1a: f043 6370 orr.w r3, r3, #251658240 ; 0xf000000
1e1e: 617b str r3, [r7, #20]
1e20: e00d b.n 1e3e <GPIO_PinRemapConfig+0xa6>
}
else
{
tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
1e22: 687b ldr r3, [r7, #4]
1e24: 0d5b lsrs r3, r3, #21
1e26: 011b lsls r3, r3, #4
1e28: 693a ldr r2, [r7, #16]
1e2a: fa02 f303 lsl.w r3, r2, r3
1e2e: 43db mvns r3, r3
1e30: 697a ldr r2, [r7, #20]
1e32: 4013 ands r3, r2
1e34: 617b str r3, [r7, #20]
tmpreg |= ~DBGAFR_SWJCFG_MASK;
1e36: 697b ldr r3, [r7, #20]
1e38: f043 6370 orr.w r3, r3, #251658240 ; 0xf000000
1e3c: 617b str r3, [r7, #20]
}
if (NewState != DISABLE)
1e3e: 78fb ldrb r3, [r7, #3]
1e40: 2b00 cmp r3, #0
1e42: d008 beq.n 1e56 <GPIO_PinRemapConfig+0xbe>
{
tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
1e44: 687b ldr r3, [r7, #4]
1e46: 0d5b lsrs r3, r3, #21
1e48: 011b lsls r3, r3, #4
1e4a: 693a ldr r2, [r7, #16]
1e4c: fa02 f303 lsl.w r3, r2, r3
1e50: 697a ldr r2, [r7, #20]
1e52: 4313 orrs r3, r2
1e54: 617b str r3, [r7, #20]
}
if((GPIO_Remap & 0x80000000) == 0x80000000)
1e56: 687b ldr r3, [r7, #4]
1e58: 2b00 cmp r3, #0
1e5a: da03 bge.n 1e64 <GPIO_PinRemapConfig+0xcc>
{
AFIO->MAPR2 = tmpreg;
1e5c: 4a05 ldr r2, [pc, #20] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1e5e: 697b ldr r3, [r7, #20]
1e60: 61d3 str r3, [r2, #28]
}
else
{
AFIO->MAPR = tmpreg;
}
}
1e62: e002 b.n 1e6a <GPIO_PinRemapConfig+0xd2>
AFIO->MAPR = tmpreg;
1e64: 4a03 ldr r2, [pc, #12] ; (1e74 <GPIO_PinRemapConfig+0xdc>)
1e66: 697b ldr r3, [r7, #20]
1e68: 6053 str r3, [r2, #4]
}
1e6a: bf00 nop
1e6c: 371c adds r7, #28
1e6e: 46bd mov sp, r7
1e70: bc80 pop {r7}
1e72: 4770 bx lr
1e74: 40010000 .word 0x40010000
00001e78 <GPIO_EXTILineConfig>:
* @param GPIO_PinSource: specifies the EXTI line to be configured.
* This parameter can be GPIO_PinSourcex where x can be (0..15).
* @retval None
*/
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
1e78: b480 push {r7}
1e7a: b085 sub sp, #20
1e7c: af00 add r7, sp, #0
1e7e: 4603 mov r3, r0
1e80: 460a mov r2, r1
1e82: 71fb strb r3, [r7, #7]
1e84: 4613 mov r3, r2
1e86: 71bb strb r3, [r7, #6]
uint32_t tmp = 0x00;
1e88: 2300 movs r3, #0
1e8a: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
1e8c: 79bb ldrb r3, [r7, #6]
1e8e: f003 0303 and.w r3, r3, #3
1e92: 009b lsls r3, r3, #2
1e94: 220f movs r2, #15
1e96: fa02 f303 lsl.w r3, r2, r3
1e9a: 60fb str r3, [r7, #12]
AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
1e9c: 4a15 ldr r2, [pc, #84] ; (1ef4 <GPIO_EXTILineConfig+0x7c>)
1e9e: 79bb ldrb r3, [r7, #6]
1ea0: 089b lsrs r3, r3, #2
1ea2: b2db uxtb r3, r3
1ea4: 3302 adds r3, #2
1ea6: f852 2023 ldr.w r2, [r2, r3, lsl #2]
1eaa: 68fb ldr r3, [r7, #12]
1eac: 43db mvns r3, r3
1eae: 4811 ldr r0, [pc, #68] ; (1ef4 <GPIO_EXTILineConfig+0x7c>)
1eb0: 79b9 ldrb r1, [r7, #6]
1eb2: 0889 lsrs r1, r1, #2
1eb4: b2c9 uxtb r1, r1
1eb6: 401a ands r2, r3
1eb8: 1c8b adds r3, r1, #2
1eba: f840 2023 str.w r2, [r0, r3, lsl #2]
AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
1ebe: 4a0d ldr r2, [pc, #52] ; (1ef4 <GPIO_EXTILineConfig+0x7c>)
1ec0: 79bb ldrb r3, [r7, #6]
1ec2: 089b lsrs r3, r3, #2
1ec4: b2db uxtb r3, r3
1ec6: 3302 adds r3, #2
1ec8: f852 2023 ldr.w r2, [r2, r3, lsl #2]
1ecc: 79f9 ldrb r1, [r7, #7]
1ece: 79bb ldrb r3, [r7, #6]
1ed0: f003 0303 and.w r3, r3, #3
1ed4: 009b lsls r3, r3, #2
1ed6: fa01 f303 lsl.w r3, r1, r3
1eda: 4806 ldr r0, [pc, #24] ; (1ef4 <GPIO_EXTILineConfig+0x7c>)
1edc: 79b9 ldrb r1, [r7, #6]
1ede: 0889 lsrs r1, r1, #2
1ee0: b2c9 uxtb r1, r1
1ee2: 431a orrs r2, r3
1ee4: 1c8b adds r3, r1, #2
1ee6: f840 2023 str.w r2, [r0, r3, lsl #2]
}
1eea: bf00 nop
1eec: 3714 adds r7, #20
1eee: 46bd mov sp, r7
1ef0: bc80 pop {r7}
1ef2: 4770 bx lr
1ef4: 40010000 .word 0x40010000
00001ef8 <GPIO_ETH_MediaInterfaceConfig>:
* @arg GPIO_ETH_MediaInterface_MII: MII mode
* @arg GPIO_ETH_MediaInterface_RMII: RMII mode
* @retval None
*/
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface)
{
1ef8: b480 push {r7}
1efa: b083 sub sp, #12
1efc: af00 add r7, sp, #0
1efe: 6078 str r0, [r7, #4]
assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface));
/* Configure MII_RMII selection bit */
*(__IO uint32_t *) MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface;
1f00: 4a03 ldr r2, [pc, #12] ; (1f10 <GPIO_ETH_MediaInterfaceConfig+0x18>)
1f02: 687b ldr r3, [r7, #4]
1f04: 6013 str r3, [r2, #0]
}
1f06: bf00 nop
1f08: 370c adds r7, #12
1f0a: 46bd mov sp, r7
1f0c: bc80 pop {r7}
1f0e: 4770 bx lr
1f10: 422000dc .word 0x422000dc
00001f14 <USART_DeInit>:
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @retval None
*/
void USART_DeInit(USART_TypeDef* USARTx)
{
1f14: b580 push {r7, lr}
1f16: b082 sub sp, #8
1f18: af00 add r7, sp, #0
1f1a: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
if (USARTx == USART1)
1f1c: 687b ldr r3, [r7, #4]
1f1e: 4a26 ldr r2, [pc, #152] ; (1fb8 <USART_DeInit+0xa4>)
1f20: 4293 cmp r3, r2
1f22: d10a bne.n 1f3a <USART_DeInit+0x26>
{
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
1f24: 2101 movs r1, #1
1f26: f44f 4080 mov.w r0, #16384 ; 0x4000
1f2a: f7ff fc29 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
1f2e: 2100 movs r1, #0
1f30: f44f 4080 mov.w r0, #16384 ; 0x4000
1f34: f7ff fc24 bl 1780 <RCC_APB2PeriphResetCmd>
{
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
}
}
}
1f38: e03a b.n 1fb0 <USART_DeInit+0x9c>
else if (USARTx == USART2)
1f3a: 687b ldr r3, [r7, #4]
1f3c: 4a1f ldr r2, [pc, #124] ; (1fbc <USART_DeInit+0xa8>)
1f3e: 4293 cmp r3, r2
1f40: d10a bne.n 1f58 <USART_DeInit+0x44>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
1f42: 2101 movs r1, #1
1f44: f44f 3000 mov.w r0, #131072 ; 0x20000
1f48: f7ff fc38 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
1f4c: 2100 movs r1, #0
1f4e: f44f 3000 mov.w r0, #131072 ; 0x20000
1f52: f7ff fc33 bl 17bc <RCC_APB1PeriphResetCmd>
}
1f56: e02b b.n 1fb0 <USART_DeInit+0x9c>
else if (USARTx == USART3)
1f58: 687b ldr r3, [r7, #4]
1f5a: 4a19 ldr r2, [pc, #100] ; (1fc0 <USART_DeInit+0xac>)
1f5c: 4293 cmp r3, r2
1f5e: d10a bne.n 1f76 <USART_DeInit+0x62>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
1f60: 2101 movs r1, #1
1f62: f44f 2080 mov.w r0, #262144 ; 0x40000
1f66: f7ff fc29 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
1f6a: 2100 movs r1, #0
1f6c: f44f 2080 mov.w r0, #262144 ; 0x40000
1f70: f7ff fc24 bl 17bc <RCC_APB1PeriphResetCmd>
}
1f74: e01c b.n 1fb0 <USART_DeInit+0x9c>
else if (USARTx == UART4)
1f76: 687b ldr r3, [r7, #4]
1f78: 4a12 ldr r2, [pc, #72] ; (1fc4 <USART_DeInit+0xb0>)
1f7a: 4293 cmp r3, r2
1f7c: d10a bne.n 1f94 <USART_DeInit+0x80>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
1f7e: 2101 movs r1, #1
1f80: f44f 2000 mov.w r0, #524288 ; 0x80000
1f84: f7ff fc1a bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
1f88: 2100 movs r1, #0
1f8a: f44f 2000 mov.w r0, #524288 ; 0x80000
1f8e: f7ff fc15 bl 17bc <RCC_APB1PeriphResetCmd>
}
1f92: e00d b.n 1fb0 <USART_DeInit+0x9c>
if (USARTx == UART5)
1f94: 687b ldr r3, [r7, #4]
1f96: 4a0c ldr r2, [pc, #48] ; (1fc8 <USART_DeInit+0xb4>)
1f98: 4293 cmp r3, r2
1f9a: d109 bne.n 1fb0 <USART_DeInit+0x9c>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
1f9c: 2101 movs r1, #1
1f9e: f44f 1080 mov.w r0, #1048576 ; 0x100000
1fa2: f7ff fc0b bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
1fa6: 2100 movs r1, #0
1fa8: f44f 1080 mov.w r0, #1048576 ; 0x100000
1fac: f7ff fc06 bl 17bc <RCC_APB1PeriphResetCmd>
}
1fb0: bf00 nop
1fb2: 3708 adds r7, #8
1fb4: 46bd mov sp, r7
1fb6: bd80 pop {r7, pc}
1fb8: 40013800 .word 0x40013800
1fbc: 40004400 .word 0x40004400
1fc0: 40004800 .word 0x40004800
1fc4: 40004c00 .word 0x40004c00
1fc8: 40005000 .word 0x40005000
00001fcc <USART_Init>:
* that contains the configuration information for the specified USART
* peripheral.
* @retval None
*/
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
{
1fcc: b580 push {r7, lr}
1fce: b08c sub sp, #48 ; 0x30
1fd0: af00 add r7, sp, #0
1fd2: 6078 str r0, [r7, #4]
1fd4: 6039 str r1, [r7, #0]
uint32_t tmpreg = 0x00, apbclock = 0x00;
1fd6: 2300 movs r3, #0
1fd8: 62fb str r3, [r7, #44] ; 0x2c
1fda: 2300 movs r3, #0
1fdc: 62bb str r3, [r7, #40] ; 0x28
uint32_t integerdivider = 0x00;
1fde: 2300 movs r3, #0
1fe0: 627b str r3, [r7, #36] ; 0x24
uint32_t fractionaldivider = 0x00;
1fe2: 2300 movs r3, #0
1fe4: 623b str r3, [r7, #32]
uint32_t usartxbase = 0;
1fe6: 2300 movs r3, #0
1fe8: 61fb str r3, [r7, #28]
if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
usartxbase = (uint32_t)USARTx;
1fea: 687b ldr r3, [r7, #4]
1fec: 61fb str r3, [r7, #28]
/*---------------------------- USART CR2 Configuration -----------------------*/
tmpreg = USARTx->CR2;
1fee: 687b ldr r3, [r7, #4]
1ff0: 8a1b ldrh r3, [r3, #16]
1ff2: b29b uxth r3, r3
1ff4: 62fb str r3, [r7, #44] ; 0x2c
/* Clear STOP[13:12] bits */
tmpreg &= CR2_STOP_CLEAR_Mask;
1ff6: 6afa ldr r2, [r7, #44] ; 0x2c
1ff8: f64c 73ff movw r3, #53247 ; 0xcfff
1ffc: 4013 ands r3, r2
1ffe: 62fb str r3, [r7, #44] ; 0x2c
/* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
/* Set STOP[13:12] bits according to USART_StopBits value */
tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
2000: 683b ldr r3, [r7, #0]
2002: 88db ldrh r3, [r3, #6]
2004: 461a mov r2, r3
2006: 6afb ldr r3, [r7, #44] ; 0x2c
2008: 4313 orrs r3, r2
200a: 62fb str r3, [r7, #44] ; 0x2c
/* Write to USART CR2 */
USARTx->CR2 = (uint16_t)tmpreg;
200c: 6afb ldr r3, [r7, #44] ; 0x2c
200e: b29a uxth r2, r3
2010: 687b ldr r3, [r7, #4]
2012: 821a strh r2, [r3, #16]
/*---------------------------- USART CR1 Configuration -----------------------*/
tmpreg = USARTx->CR1;
2014: 687b ldr r3, [r7, #4]
2016: 899b ldrh r3, [r3, #12]
2018: b29b uxth r3, r3
201a: 62fb str r3, [r7, #44] ; 0x2c
/* Clear M, PCE, PS, TE and RE bits */
tmpreg &= CR1_CLEAR_Mask;
201c: 6afa ldr r2, [r7, #44] ; 0x2c
201e: f64e 13f3 movw r3, #59891 ; 0xe9f3
2022: 4013 ands r3, r2
2024: 62fb str r3, [r7, #44] ; 0x2c
/* Configure the USART Word Length, Parity and mode ----------------------- */
/* Set the M bits according to USART_WordLength value */
/* Set PCE and PS bits according to USART_Parity value */
/* Set TE and RE bits according to USART_Mode value */
tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
2026: 683b ldr r3, [r7, #0]
2028: 889a ldrh r2, [r3, #4]
202a: 683b ldr r3, [r7, #0]
202c: 891b ldrh r3, [r3, #8]
202e: 4313 orrs r3, r2
2030: b29a uxth r2, r3
USART_InitStruct->USART_Mode;
2032: 683b ldr r3, [r7, #0]
2034: 895b ldrh r3, [r3, #10]
tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
2036: 4313 orrs r3, r2
2038: b29b uxth r3, r3
203a: 461a mov r2, r3
203c: 6afb ldr r3, [r7, #44] ; 0x2c
203e: 4313 orrs r3, r2
2040: 62fb str r3, [r7, #44] ; 0x2c
/* Write to USART CR1 */
USARTx->CR1 = (uint16_t)tmpreg;
2042: 6afb ldr r3, [r7, #44] ; 0x2c
2044: b29a uxth r2, r3
2046: 687b ldr r3, [r7, #4]
2048: 819a strh r2, [r3, #12]
/*---------------------------- USART CR3 Configuration -----------------------*/
tmpreg = USARTx->CR3;
204a: 687b ldr r3, [r7, #4]
204c: 8a9b ldrh r3, [r3, #20]
204e: b29b uxth r3, r3
2050: 62fb str r3, [r7, #44] ; 0x2c
/* Clear CTSE and RTSE bits */
tmpreg &= CR3_CLEAR_Mask;
2052: 6afa ldr r2, [r7, #44] ; 0x2c
2054: f64f 43ff movw r3, #64767 ; 0xfcff
2058: 4013 ands r3, r2
205a: 62fb str r3, [r7, #44] ; 0x2c
/* Configure the USART HFC -------------------------------------------------*/
/* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
205c: 683b ldr r3, [r7, #0]
205e: 899b ldrh r3, [r3, #12]
2060: 461a mov r2, r3
2062: 6afb ldr r3, [r7, #44] ; 0x2c
2064: 4313 orrs r3, r2
2066: 62fb str r3, [r7, #44] ; 0x2c
/* Write to USART CR3 */
USARTx->CR3 = (uint16_t)tmpreg;
2068: 6afb ldr r3, [r7, #44] ; 0x2c
206a: b29a uxth r2, r3
206c: 687b ldr r3, [r7, #4]
206e: 829a strh r2, [r3, #20]
/*---------------------------- USART BRR Configuration -----------------------*/
/* Configure the USART Baud Rate -------------------------------------------*/
RCC_GetClocksFreq(&RCC_ClocksStatus);
2070: f107 0308 add.w r3, r7, #8
2074: 4618 mov r0, r3
2076: f7ff fa73 bl 1560 <RCC_GetClocksFreq>
if (usartxbase == USART1_BASE)
207a: 69fb ldr r3, [r7, #28]
207c: 4a2e ldr r2, [pc, #184] ; (2138 <USART_Init+0x16c>)
207e: 4293 cmp r3, r2
2080: d102 bne.n 2088 <USART_Init+0xbc>
{
apbclock = RCC_ClocksStatus.PCLK2_Frequency;
2082: 697b ldr r3, [r7, #20]
2084: 62bb str r3, [r7, #40] ; 0x28
2086: e001 b.n 208c <USART_Init+0xc0>
}
else
{
apbclock = RCC_ClocksStatus.PCLK1_Frequency;
2088: 693b ldr r3, [r7, #16]
208a: 62bb str r3, [r7, #40] ; 0x28
}
/* Determine the integer part */
if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
208c: 687b ldr r3, [r7, #4]
208e: 899b ldrh r3, [r3, #12]
2090: b29b uxth r3, r3
2092: b21b sxth r3, r3
2094: 2b00 cmp r3, #0
2096: da0c bge.n 20b2 <USART_Init+0xe6>
{
/* Integer part computing in case Oversampling mode is 8 Samples */
integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
2098: 6aba ldr r2, [r7, #40] ; 0x28
209a: 4613 mov r3, r2
209c: 009b lsls r3, r3, #2
209e: 4413 add r3, r2
20a0: 009a lsls r2, r3, #2
20a2: 441a add r2, r3
20a4: 683b ldr r3, [r7, #0]
20a6: 681b ldr r3, [r3, #0]
20a8: 005b lsls r3, r3, #1
20aa: fbb2 f3f3 udiv r3, r2, r3
20ae: 627b str r3, [r7, #36] ; 0x24
20b0: e00b b.n 20ca <USART_Init+0xfe>
}
else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
{
/* Integer part computing in case Oversampling mode is 16 Samples */
integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
20b2: 6aba ldr r2, [r7, #40] ; 0x28
20b4: 4613 mov r3, r2
20b6: 009b lsls r3, r3, #2
20b8: 4413 add r3, r2
20ba: 009a lsls r2, r3, #2
20bc: 441a add r2, r3
20be: 683b ldr r3, [r7, #0]
20c0: 681b ldr r3, [r3, #0]
20c2: 009b lsls r3, r3, #2
20c4: fbb2 f3f3 udiv r3, r2, r3
20c8: 627b str r3, [r7, #36] ; 0x24
}
tmpreg = (integerdivider / 100) << 4;
20ca: 6a7b ldr r3, [r7, #36] ; 0x24
20cc: 4a1b ldr r2, [pc, #108] ; (213c <USART_Init+0x170>)
20ce: fba2 2303 umull r2, r3, r2, r3
20d2: 095b lsrs r3, r3, #5
20d4: 011b lsls r3, r3, #4
20d6: 62fb str r3, [r7, #44] ; 0x2c
/* Determine the fractional part */
fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
20d8: 6afb ldr r3, [r7, #44] ; 0x2c
20da: 091b lsrs r3, r3, #4
20dc: 2264 movs r2, #100 ; 0x64
20de: fb02 f303 mul.w r3, r2, r3
20e2: 6a7a ldr r2, [r7, #36] ; 0x24
20e4: 1ad3 subs r3, r2, r3
20e6: 623b str r3, [r7, #32]
/* Implement the fractional part in the register */
if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
20e8: 687b ldr r3, [r7, #4]
20ea: 899b ldrh r3, [r3, #12]
20ec: b29b uxth r3, r3
20ee: b21b sxth r3, r3
20f0: 2b00 cmp r3, #0
20f2: da0c bge.n 210e <USART_Init+0x142>
{
tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
20f4: 6a3b ldr r3, [r7, #32]
20f6: 00db lsls r3, r3, #3
20f8: 3332 adds r3, #50 ; 0x32
20fa: 4a10 ldr r2, [pc, #64] ; (213c <USART_Init+0x170>)
20fc: fba2 2303 umull r2, r3, r2, r3
2100: 095b lsrs r3, r3, #5
2102: f003 0307 and.w r3, r3, #7
2106: 6afa ldr r2, [r7, #44] ; 0x2c
2108: 4313 orrs r3, r2
210a: 62fb str r3, [r7, #44] ; 0x2c
210c: e00b b.n 2126 <USART_Init+0x15a>
}
else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
{
tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
210e: 6a3b ldr r3, [r7, #32]
2110: 011b lsls r3, r3, #4
2112: 3332 adds r3, #50 ; 0x32
2114: 4a09 ldr r2, [pc, #36] ; (213c <USART_Init+0x170>)
2116: fba2 2303 umull r2, r3, r2, r3
211a: 095b lsrs r3, r3, #5
211c: f003 030f and.w r3, r3, #15
2120: 6afa ldr r2, [r7, #44] ; 0x2c
2122: 4313 orrs r3, r2
2124: 62fb str r3, [r7, #44] ; 0x2c
}
/* Write to USART BRR */
USARTx->BRR = (uint16_t)tmpreg;
2126: 6afb ldr r3, [r7, #44] ; 0x2c
2128: b29a uxth r2, r3
212a: 687b ldr r3, [r7, #4]
212c: 811a strh r2, [r3, #8]
}
212e: bf00 nop
2130: 3730 adds r7, #48 ; 0x30
2132: 46bd mov sp, r7
2134: bd80 pop {r7, pc}
2136: bf00 nop
2138: 40013800 .word 0x40013800
213c: 51eb851f .word 0x51eb851f
00002140 <USART_StructInit>:
* @param USART_InitStruct: pointer to a USART_InitTypeDef structure
* which will be initialized.
* @retval None
*/
void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
{
2140: b480 push {r7}
2142: b083 sub sp, #12
2144: af00 add r7, sp, #0
2146: 6078 str r0, [r7, #4]
/* USART_InitStruct members default value */
USART_InitStruct->USART_BaudRate = 9600;
2148: 687b ldr r3, [r7, #4]
214a: f44f 5216 mov.w r2, #9600 ; 0x2580
214e: 601a str r2, [r3, #0]
USART_InitStruct->USART_WordLength = USART_WordLength_8b;
2150: 687b ldr r3, [r7, #4]
2152: 2200 movs r2, #0
2154: 809a strh r2, [r3, #4]
USART_InitStruct->USART_StopBits = USART_StopBits_1;
2156: 687b ldr r3, [r7, #4]
2158: 2200 movs r2, #0
215a: 80da strh r2, [r3, #6]
USART_InitStruct->USART_Parity = USART_Parity_No ;
215c: 687b ldr r3, [r7, #4]
215e: 2200 movs r2, #0
2160: 811a strh r2, [r3, #8]
USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
2162: 687b ldr r3, [r7, #4]
2164: 220c movs r2, #12
2166: 815a strh r2, [r3, #10]
USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;
2168: 687b ldr r3, [r7, #4]
216a: 2200 movs r2, #0
216c: 819a strh r2, [r3, #12]
}
216e: bf00 nop
2170: 370c adds r7, #12
2172: 46bd mov sp, r7
2174: bc80 pop {r7}
2176: 4770 bx lr
00002178 <USART_ClockInit>:
* USART peripheral.
* @note The Smart Card and Synchronous modes are not available for UART4 and UART5.
* @retval None
*/
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)
{
2178: b480 push {r7}
217a: b085 sub sp, #20
217c: af00 add r7, sp, #0
217e: 6078 str r0, [r7, #4]
2180: 6039 str r1, [r7, #0]
uint32_t tmpreg = 0x00;
2182: 2300 movs r3, #0
2184: 60fb str r3, [r7, #12]
assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));
assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));
assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));
/*---------------------------- USART CR2 Configuration -----------------------*/
tmpreg = USARTx->CR2;
2186: 687b ldr r3, [r7, #4]
2188: 8a1b ldrh r3, [r3, #16]
218a: b29b uxth r3, r3
218c: 60fb str r3, [r7, #12]
/* Clear CLKEN, CPOL, CPHA and LBCL bits */
tmpreg &= CR2_CLOCK_CLEAR_Mask;
218e: 68fa ldr r2, [r7, #12]
2190: f24f 03ff movw r3, #61695 ; 0xf0ff
2194: 4013 ands r3, r2
2196: 60fb str r3, [r7, #12]
/* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/
/* Set CLKEN bit according to USART_Clock value */
/* Set CPOL bit according to USART_CPOL value */
/* Set CPHA bit according to USART_CPHA value */
/* Set LBCL bit according to USART_LastBit value */
tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL |
2198: 683b ldr r3, [r7, #0]
219a: 881a ldrh r2, [r3, #0]
219c: 683b ldr r3, [r7, #0]
219e: 885b ldrh r3, [r3, #2]
USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;
21a0: 4313 orrs r3, r2
21a2: b29a uxth r2, r3
21a4: 683b ldr r3, [r7, #0]
21a6: 889b ldrh r3, [r3, #4]
21a8: 4313 orrs r3, r2
21aa: b29a uxth r2, r3
21ac: 683b ldr r3, [r7, #0]
21ae: 88db ldrh r3, [r3, #6]
21b0: 4313 orrs r3, r2
21b2: b29b uxth r3, r3
21b4: 461a mov r2, r3
tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL |
21b6: 68fb ldr r3, [r7, #12]
21b8: 4313 orrs r3, r2
21ba: 60fb str r3, [r7, #12]
/* Write to USART CR2 */
USARTx->CR2 = (uint16_t)tmpreg;
21bc: 68fb ldr r3, [r7, #12]
21be: b29a uxth r2, r3
21c0: 687b ldr r3, [r7, #4]
21c2: 821a strh r2, [r3, #16]
}
21c4: bf00 nop
21c6: 3714 adds r7, #20
21c8: 46bd mov sp, r7
21ca: bc80 pop {r7}
21cc: 4770 bx lr
000021ce <USART_ClockStructInit>:
* @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
* structure which will be initialized.
* @retval None
*/
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)
{
21ce: b480 push {r7}
21d0: b083 sub sp, #12
21d2: af00 add r7, sp, #0
21d4: 6078 str r0, [r7, #4]
/* USART_ClockInitStruct members default value */
USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;
21d6: 687b ldr r3, [r7, #4]
21d8: 2200 movs r2, #0
21da: 801a strh r2, [r3, #0]
USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;
21dc: 687b ldr r3, [r7, #4]
21de: 2200 movs r2, #0
21e0: 805a strh r2, [r3, #2]
USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;
21e2: 687b ldr r3, [r7, #4]
21e4: 2200 movs r2, #0
21e6: 809a strh r2, [r3, #4]
USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;
21e8: 687b ldr r3, [r7, #4]
21ea: 2200 movs r2, #0
21ec: 80da strh r2, [r3, #6]
}
21ee: bf00 nop
21f0: 370c adds r7, #12
21f2: 46bd mov sp, r7
21f4: bc80 pop {r7}
21f6: 4770 bx lr
000021f8 <USART_Cmd>:
* @param NewState: new state of the USARTx peripheral.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
21f8: b480 push {r7}
21fa: b083 sub sp, #12
21fc: af00 add r7, sp, #0
21fe: 6078 str r0, [r7, #4]
2200: 460b mov r3, r1
2202: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2204: 78fb ldrb r3, [r7, #3]
2206: 2b00 cmp r3, #0
2208: d008 beq.n 221c <USART_Cmd+0x24>
{
/* Enable the selected USART by setting the UE bit in the CR1 register */
USARTx->CR1 |= CR1_UE_Set;
220a: 687b ldr r3, [r7, #4]
220c: 899b ldrh r3, [r3, #12]
220e: b29b uxth r3, r3
2210: f443 5300 orr.w r3, r3, #8192 ; 0x2000
2214: b29a uxth r2, r3
2216: 687b ldr r3, [r7, #4]
2218: 819a strh r2, [r3, #12]
else
{
/* Disable the selected USART by clearing the UE bit in the CR1 register */
USARTx->CR1 &= CR1_UE_Reset;
}
}
221a: e007 b.n 222c <USART_Cmd+0x34>
USARTx->CR1 &= CR1_UE_Reset;
221c: 687b ldr r3, [r7, #4]
221e: 899b ldrh r3, [r3, #12]
2220: b29b uxth r3, r3
2222: f423 5300 bic.w r3, r3, #8192 ; 0x2000
2226: b29a uxth r2, r3
2228: 687b ldr r3, [r7, #4]
222a: 819a strh r2, [r3, #12]
}
222c: bf00 nop
222e: 370c adds r7, #12
2230: 46bd mov sp, r7
2232: bc80 pop {r7}
2234: 4770 bx lr
00002236 <USART_ITConfig>:
* @param NewState: new state of the specified USARTx interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
{
2236: b480 push {r7}
2238: b087 sub sp, #28
223a: af00 add r7, sp, #0
223c: 6078 str r0, [r7, #4]
223e: 460b mov r3, r1
2240: 807b strh r3, [r7, #2]
2242: 4613 mov r3, r2
2244: 707b strb r3, [r7, #1]
uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
2246: 2300 movs r3, #0
2248: 613b str r3, [r7, #16]
224a: 2300 movs r3, #0
224c: 60fb str r3, [r7, #12]
224e: 2300 movs r3, #0
2250: 60bb str r3, [r7, #8]
uint32_t usartxbase = 0x00;
2252: 2300 movs r3, #0
2254: 617b str r3, [r7, #20]
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
usartxbase = (uint32_t)USARTx;
2256: 687b ldr r3, [r7, #4]
2258: 617b str r3, [r7, #20]
/* Get the USART register index */
usartreg = (((uint8_t)USART_IT) >> 0x05);
225a: 887b ldrh r3, [r7, #2]
225c: b2db uxtb r3, r3
225e: 095b lsrs r3, r3, #5
2260: b2db uxtb r3, r3
2262: 613b str r3, [r7, #16]
/* Get the interrupt position */
itpos = USART_IT & IT_Mask;
2264: 887b ldrh r3, [r7, #2]
2266: f003 031f and.w r3, r3, #31
226a: 60fb str r3, [r7, #12]
itmask = (((uint32_t)0x01) << itpos);
226c: 2201 movs r2, #1
226e: 68fb ldr r3, [r7, #12]
2270: fa02 f303 lsl.w r3, r2, r3
2274: 60bb str r3, [r7, #8]
if (usartreg == 0x01) /* The IT is in CR1 register */
2276: 693b ldr r3, [r7, #16]
2278: 2b01 cmp r3, #1
227a: d103 bne.n 2284 <USART_ITConfig+0x4e>
{
usartxbase += 0x0C;
227c: 697b ldr r3, [r7, #20]
227e: 330c adds r3, #12
2280: 617b str r3, [r7, #20]
2282: e009 b.n 2298 <USART_ITConfig+0x62>
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
2284: 693b ldr r3, [r7, #16]
2286: 2b02 cmp r3, #2
2288: d103 bne.n 2292 <USART_ITConfig+0x5c>
{
usartxbase += 0x10;
228a: 697b ldr r3, [r7, #20]
228c: 3310 adds r3, #16
228e: 617b str r3, [r7, #20]
2290: e002 b.n 2298 <USART_ITConfig+0x62>
}
else /* The IT is in CR3 register */
{
usartxbase += 0x14;
2292: 697b ldr r3, [r7, #20]
2294: 3314 adds r3, #20
2296: 617b str r3, [r7, #20]
}
if (NewState != DISABLE)
2298: 787b ldrb r3, [r7, #1]
229a: 2b00 cmp r3, #0
229c: d006 beq.n 22ac <USART_ITConfig+0x76>
{
*(__IO uint32_t*)usartxbase |= itmask;
229e: 697b ldr r3, [r7, #20]
22a0: 6819 ldr r1, [r3, #0]
22a2: 697b ldr r3, [r7, #20]
22a4: 68ba ldr r2, [r7, #8]
22a6: 430a orrs r2, r1
22a8: 601a str r2, [r3, #0]
}
else
{
*(__IO uint32_t*)usartxbase &= ~itmask;
}
}
22aa: e006 b.n 22ba <USART_ITConfig+0x84>
*(__IO uint32_t*)usartxbase &= ~itmask;
22ac: 697b ldr r3, [r7, #20]
22ae: 6819 ldr r1, [r3, #0]
22b0: 68bb ldr r3, [r7, #8]
22b2: 43da mvns r2, r3
22b4: 697b ldr r3, [r7, #20]
22b6: 400a ands r2, r1
22b8: 601a str r2, [r3, #0]
}
22ba: bf00 nop
22bc: 371c adds r7, #28
22be: 46bd mov sp, r7
22c0: bc80 pop {r7}
22c2: 4770 bx lr
000022c4 <USART_DMACmd>:
* @note The DMA mode is not available for UART5 except in the STM32
* High density value line devices(STM32F10X_HD_VL).
* @retval None
*/
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
{
22c4: b480 push {r7}
22c6: b083 sub sp, #12
22c8: af00 add r7, sp, #0
22ca: 6078 str r0, [r7, #4]
22cc: 460b mov r3, r1
22ce: 807b strh r3, [r7, #2]
22d0: 4613 mov r3, r2
22d2: 707b strb r3, [r7, #1]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DMAREQ(USART_DMAReq));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
22d4: 787b ldrb r3, [r7, #1]
22d6: 2b00 cmp r3, #0
22d8: d008 beq.n 22ec <USART_DMACmd+0x28>
{
/* Enable the DMA transfer for selected requests by setting the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 |= USART_DMAReq;
22da: 687b ldr r3, [r7, #4]
22dc: 8a9b ldrh r3, [r3, #20]
22de: b29a uxth r2, r3
22e0: 887b ldrh r3, [r7, #2]
22e2: 4313 orrs r3, r2
22e4: b29a uxth r2, r3
22e6: 687b ldr r3, [r7, #4]
22e8: 829a strh r2, [r3, #20]
{
/* Disable the DMA transfer for selected requests by clearing the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 &= (uint16_t)~USART_DMAReq;
}
}
22ea: e009 b.n 2300 <USART_DMACmd+0x3c>
USARTx->CR3 &= (uint16_t)~USART_DMAReq;
22ec: 687b ldr r3, [r7, #4]
22ee: 8a9b ldrh r3, [r3, #20]
22f0: b29a uxth r2, r3
22f2: 887b ldrh r3, [r7, #2]
22f4: 43db mvns r3, r3
22f6: b29b uxth r3, r3
22f8: 4013 ands r3, r2
22fa: b29a uxth r2, r3
22fc: 687b ldr r3, [r7, #4]
22fe: 829a strh r2, [r3, #20]
}
2300: bf00 nop
2302: 370c adds r7, #12
2304: 46bd mov sp, r7
2306: bc80 pop {r7}
2308: 4770 bx lr
0000230a <USART_SetAddress>:
* USART1, USART2, USART3, UART4 or UART5.
* @param USART_Address: Indicates the address of the USART node.
* @retval None
*/
void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)
{
230a: b480 push {r7}
230c: b083 sub sp, #12
230e: af00 add r7, sp, #0
2310: 6078 str r0, [r7, #4]
2312: 460b mov r3, r1
2314: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_ADDRESS(USART_Address));
/* Clear the USART address */
USARTx->CR2 &= CR2_Address_Mask;
2316: 687b ldr r3, [r7, #4]
2318: 8a1b ldrh r3, [r3, #16]
231a: b29b uxth r3, r3
231c: f023 030f bic.w r3, r3, #15
2320: b29a uxth r2, r3
2322: 687b ldr r3, [r7, #4]
2324: 821a strh r2, [r3, #16]
/* Set the USART address node */
USARTx->CR2 |= USART_Address;
2326: 687b ldr r3, [r7, #4]
2328: 8a1b ldrh r3, [r3, #16]
232a: b29a uxth r2, r3
232c: 78fb ldrb r3, [r7, #3]
232e: b29b uxth r3, r3
2330: 4313 orrs r3, r2
2332: b29a uxth r2, r3
2334: 687b ldr r3, [r7, #4]
2336: 821a strh r2, [r3, #16]
}
2338: bf00 nop
233a: 370c adds r7, #12
233c: 46bd mov sp, r7
233e: bc80 pop {r7}
2340: 4770 bx lr
00002342 <USART_WakeUpConfig>:
* @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection
* @arg USART_WakeUp_AddressMark: WakeUp by an address mark
* @retval None
*/
void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)
{
2342: b480 push {r7}
2344: b083 sub sp, #12
2346: af00 add r7, sp, #0
2348: 6078 str r0, [r7, #4]
234a: 460b mov r3, r1
234c: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_WAKEUP(USART_WakeUp));
USARTx->CR1 &= CR1_WAKE_Mask;
234e: 687b ldr r3, [r7, #4]
2350: 899b ldrh r3, [r3, #12]
2352: b29b uxth r3, r3
2354: f423 6300 bic.w r3, r3, #2048 ; 0x800
2358: b29a uxth r2, r3
235a: 687b ldr r3, [r7, #4]
235c: 819a strh r2, [r3, #12]
USARTx->CR1 |= USART_WakeUp;
235e: 687b ldr r3, [r7, #4]
2360: 899b ldrh r3, [r3, #12]
2362: b29a uxth r2, r3
2364: 887b ldrh r3, [r7, #2]
2366: 4313 orrs r3, r2
2368: b29a uxth r2, r3
236a: 687b ldr r3, [r7, #4]
236c: 819a strh r2, [r3, #12]
}
236e: bf00 nop
2370: 370c adds r7, #12
2372: 46bd mov sp, r7
2374: bc80 pop {r7}
2376: 4770 bx lr
00002378 <USART_ReceiverWakeUpCmd>:
* @param NewState: new state of the USART mute mode.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
2378: b480 push {r7}
237a: b083 sub sp, #12
237c: af00 add r7, sp, #0
237e: 6078 str r0, [r7, #4]
2380: 460b mov r3, r1
2382: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2384: 78fb ldrb r3, [r7, #3]
2386: 2b00 cmp r3, #0
2388: d008 beq.n 239c <USART_ReceiverWakeUpCmd+0x24>
{
/* Enable the USART mute mode by setting the RWU bit in the CR1 register */
USARTx->CR1 |= CR1_RWU_Set;
238a: 687b ldr r3, [r7, #4]
238c: 899b ldrh r3, [r3, #12]
238e: b29b uxth r3, r3
2390: f043 0302 orr.w r3, r3, #2
2394: b29a uxth r2, r3
2396: 687b ldr r3, [r7, #4]
2398: 819a strh r2, [r3, #12]
else
{
/* Disable the USART mute mode by clearing the RWU bit in the CR1 register */
USARTx->CR1 &= CR1_RWU_Reset;
}
}
239a: e007 b.n 23ac <USART_ReceiverWakeUpCmd+0x34>
USARTx->CR1 &= CR1_RWU_Reset;
239c: 687b ldr r3, [r7, #4]
239e: 899b ldrh r3, [r3, #12]
23a0: b29b uxth r3, r3
23a2: f023 0302 bic.w r3, r3, #2
23a6: b29a uxth r2, r3
23a8: 687b ldr r3, [r7, #4]
23aa: 819a strh r2, [r3, #12]
}
23ac: bf00 nop
23ae: 370c adds r7, #12
23b0: 46bd mov sp, r7
23b2: bc80 pop {r7}
23b4: 4770 bx lr
000023b6 <USART_LINBreakDetectLengthConfig>:
* @arg USART_LINBreakDetectLength_10b: 10-bit break detection
* @arg USART_LINBreakDetectLength_11b: 11-bit break detection
* @retval None
*/
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)
{
23b6: b480 push {r7}
23b8: b083 sub sp, #12
23ba: af00 add r7, sp, #0
23bc: 6078 str r0, [r7, #4]
23be: 460b mov r3, r1
23c0: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
USARTx->CR2 &= CR2_LBDL_Mask;
23c2: 687b ldr r3, [r7, #4]
23c4: 8a1b ldrh r3, [r3, #16]
23c6: b29b uxth r3, r3
23c8: f023 0320 bic.w r3, r3, #32
23cc: b29a uxth r2, r3
23ce: 687b ldr r3, [r7, #4]
23d0: 821a strh r2, [r3, #16]
USARTx->CR2 |= USART_LINBreakDetectLength;
23d2: 687b ldr r3, [r7, #4]
23d4: 8a1b ldrh r3, [r3, #16]
23d6: b29a uxth r2, r3
23d8: 887b ldrh r3, [r7, #2]
23da: 4313 orrs r3, r2
23dc: b29a uxth r2, r3
23de: 687b ldr r3, [r7, #4]
23e0: 821a strh r2, [r3, #16]
}
23e2: bf00 nop
23e4: 370c adds r7, #12
23e6: 46bd mov sp, r7
23e8: bc80 pop {r7}
23ea: 4770 bx lr
000023ec <USART_LINCmd>:
* @param NewState: new state of the USART LIN mode.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
23ec: b480 push {r7}
23ee: b083 sub sp, #12
23f0: af00 add r7, sp, #0
23f2: 6078 str r0, [r7, #4]
23f4: 460b mov r3, r1
23f6: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
23f8: 78fb ldrb r3, [r7, #3]
23fa: 2b00 cmp r3, #0
23fc: d008 beq.n 2410 <USART_LINCmd+0x24>
{
/* Enable the LIN mode by setting the LINEN bit in the CR2 register */
USARTx->CR2 |= CR2_LINEN_Set;
23fe: 687b ldr r3, [r7, #4]
2400: 8a1b ldrh r3, [r3, #16]
2402: b29b uxth r3, r3
2404: f443 4380 orr.w r3, r3, #16384 ; 0x4000
2408: b29a uxth r2, r3
240a: 687b ldr r3, [r7, #4]
240c: 821a strh r2, [r3, #16]
else
{
/* Disable the LIN mode by clearing the LINEN bit in the CR2 register */
USARTx->CR2 &= CR2_LINEN_Reset;
}
}
240e: e007 b.n 2420 <USART_LINCmd+0x34>
USARTx->CR2 &= CR2_LINEN_Reset;
2410: 687b ldr r3, [r7, #4]
2412: 8a1b ldrh r3, [r3, #16]
2414: b29b uxth r3, r3
2416: f423 4380 bic.w r3, r3, #16384 ; 0x4000
241a: b29a uxth r2, r3
241c: 687b ldr r3, [r7, #4]
241e: 821a strh r2, [r3, #16]
}
2420: bf00 nop
2422: 370c adds r7, #12
2424: 46bd mov sp, r7
2426: bc80 pop {r7}
2428: 4770 bx lr
0000242a <USART_SendData>:
* USART1, USART2, USART3, UART4 or UART5.
* @param Data: the data to transmit.
* @retval None
*/
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
242a: b480 push {r7}
242c: b083 sub sp, #12
242e: af00 add r7, sp, #0
2430: 6078 str r0, [r7, #4]
2432: 460b mov r3, r1
2434: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (uint16_t)0x01FF);
2436: 887b ldrh r3, [r7, #2]
2438: f3c3 0308 ubfx r3, r3, #0, #9
243c: b29a uxth r2, r3
243e: 687b ldr r3, [r7, #4]
2440: 809a strh r2, [r3, #4]
}
2442: bf00 nop
2444: 370c adds r7, #12
2446: 46bd mov sp, r7
2448: bc80 pop {r7}
244a: 4770 bx lr
0000244c <USART_ReceiveData>:
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @retval The received data.
*/
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
244c: b480 push {r7}
244e: b083 sub sp, #12
2450: af00 add r7, sp, #0
2452: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Receive Data */
return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
2454: 687b ldr r3, [r7, #4]
2456: 889b ldrh r3, [r3, #4]
2458: b29b uxth r3, r3
245a: f3c3 0308 ubfx r3, r3, #0, #9
245e: b29b uxth r3, r3
}
2460: 4618 mov r0, r3
2462: 370c adds r7, #12
2464: 46bd mov sp, r7
2466: bc80 pop {r7}
2468: 4770 bx lr
0000246a <USART_SendBreak>:
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @retval None
*/
void USART_SendBreak(USART_TypeDef* USARTx)
{
246a: b480 push {r7}
246c: b083 sub sp, #12
246e: af00 add r7, sp, #0
2470: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Send break characters */
USARTx->CR1 |= CR1_SBK_Set;
2472: 687b ldr r3, [r7, #4]
2474: 899b ldrh r3, [r3, #12]
2476: b29b uxth r3, r3
2478: f043 0301 orr.w r3, r3, #1
247c: b29a uxth r2, r3
247e: 687b ldr r3, [r7, #4]
2480: 819a strh r2, [r3, #12]
}
2482: bf00 nop
2484: 370c adds r7, #12
2486: 46bd mov sp, r7
2488: bc80 pop {r7}
248a: 4770 bx lr
0000248c <USART_SetGuardTime>:
* @param USART_GuardTime: specifies the guard time.
* @note The guard time bits are not available for UART4 and UART5.
* @retval None
*/
void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)
{
248c: b480 push {r7}
248e: b083 sub sp, #12
2490: af00 add r7, sp, #0
2492: 6078 str r0, [r7, #4]
2494: 460b mov r3, r1
2496: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
/* Clear the USART Guard time */
USARTx->GTPR &= GTPR_LSB_Mask;
2498: 687b ldr r3, [r7, #4]
249a: 8b1b ldrh r3, [r3, #24]
249c: b29b uxth r3, r3
249e: b2db uxtb r3, r3
24a0: b29a uxth r2, r3
24a2: 687b ldr r3, [r7, #4]
24a4: 831a strh r2, [r3, #24]
/* Set the USART guard time */
USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);
24a6: 687b ldr r3, [r7, #4]
24a8: 8b1b ldrh r3, [r3, #24]
24aa: b29a uxth r2, r3
24ac: 78fb ldrb r3, [r7, #3]
24ae: b29b uxth r3, r3
24b0: 021b lsls r3, r3, #8
24b2: b29b uxth r3, r3
24b4: 4313 orrs r3, r2
24b6: b29a uxth r2, r3
24b8: 687b ldr r3, [r7, #4]
24ba: 831a strh r2, [r3, #24]
}
24bc: bf00 nop
24be: 370c adds r7, #12
24c0: 46bd mov sp, r7
24c2: bc80 pop {r7}
24c4: 4770 bx lr
000024c6 <USART_SetPrescaler>:
* @param USART_Prescaler: specifies the prescaler clock.
* @note The function is used for IrDA mode with UART4 and UART5.
* @retval None
*/
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)
{
24c6: b480 push {r7}
24c8: b083 sub sp, #12
24ca: af00 add r7, sp, #0
24cc: 6078 str r0, [r7, #4]
24ce: 460b mov r3, r1
24d0: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Clear the USART prescaler */
USARTx->GTPR &= GTPR_MSB_Mask;
24d2: 687b ldr r3, [r7, #4]
24d4: 8b1b ldrh r3, [r3, #24]
24d6: b29b uxth r3, r3
24d8: f023 03ff bic.w r3, r3, #255 ; 0xff
24dc: b29a uxth r2, r3
24de: 687b ldr r3, [r7, #4]
24e0: 831a strh r2, [r3, #24]
/* Set the USART prescaler */
USARTx->GTPR |= USART_Prescaler;
24e2: 687b ldr r3, [r7, #4]
24e4: 8b1b ldrh r3, [r3, #24]
24e6: b29a uxth r2, r3
24e8: 78fb ldrb r3, [r7, #3]
24ea: b29b uxth r3, r3
24ec: 4313 orrs r3, r2
24ee: b29a uxth r2, r3
24f0: 687b ldr r3, [r7, #4]
24f2: 831a strh r2, [r3, #24]
}
24f4: bf00 nop
24f6: 370c adds r7, #12
24f8: 46bd mov sp, r7
24fa: bc80 pop {r7}
24fc: 4770 bx lr
000024fe <USART_SmartCardCmd>:
* This parameter can be: ENABLE or DISABLE.
* @note The Smart Card mode is not available for UART4 and UART5.
* @retval None
*/
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
24fe: b480 push {r7}
2500: b083 sub sp, #12
2502: af00 add r7, sp, #0
2504: 6078 str r0, [r7, #4]
2506: 460b mov r3, r1
2508: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
250a: 78fb ldrb r3, [r7, #3]
250c: 2b00 cmp r3, #0
250e: d008 beq.n 2522 <USART_SmartCardCmd+0x24>
{
/* Enable the SC mode by setting the SCEN bit in the CR3 register */
USARTx->CR3 |= CR3_SCEN_Set;
2510: 687b ldr r3, [r7, #4]
2512: 8a9b ldrh r3, [r3, #20]
2514: b29b uxth r3, r3
2516: f043 0320 orr.w r3, r3, #32
251a: b29a uxth r2, r3
251c: 687b ldr r3, [r7, #4]
251e: 829a strh r2, [r3, #20]
else
{
/* Disable the SC mode by clearing the SCEN bit in the CR3 register */
USARTx->CR3 &= CR3_SCEN_Reset;
}
}
2520: e007 b.n 2532 <USART_SmartCardCmd+0x34>
USARTx->CR3 &= CR3_SCEN_Reset;
2522: 687b ldr r3, [r7, #4]
2524: 8a9b ldrh r3, [r3, #20]
2526: b29b uxth r3, r3
2528: f023 0320 bic.w r3, r3, #32
252c: b29a uxth r2, r3
252e: 687b ldr r3, [r7, #4]
2530: 829a strh r2, [r3, #20]
}
2532: bf00 nop
2534: 370c adds r7, #12
2536: 46bd mov sp, r7
2538: bc80 pop {r7}
253a: 4770 bx lr
0000253c <USART_SmartCardNACKCmd>:
* This parameter can be: ENABLE or DISABLE.
* @note The Smart Card mode is not available for UART4 and UART5.
* @retval None
*/
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
253c: b480 push {r7}
253e: b083 sub sp, #12
2540: af00 add r7, sp, #0
2542: 6078 str r0, [r7, #4]
2544: 460b mov r3, r1
2546: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2548: 78fb ldrb r3, [r7, #3]
254a: 2b00 cmp r3, #0
254c: d008 beq.n 2560 <USART_SmartCardNACKCmd+0x24>
{
/* Enable the NACK transmission by setting the NACK bit in the CR3 register */
USARTx->CR3 |= CR3_NACK_Set;
254e: 687b ldr r3, [r7, #4]
2550: 8a9b ldrh r3, [r3, #20]
2552: b29b uxth r3, r3
2554: f043 0310 orr.w r3, r3, #16
2558: b29a uxth r2, r3
255a: 687b ldr r3, [r7, #4]
255c: 829a strh r2, [r3, #20]
else
{
/* Disable the NACK transmission by clearing the NACK bit in the CR3 register */
USARTx->CR3 &= CR3_NACK_Reset;
}
}
255e: e007 b.n 2570 <USART_SmartCardNACKCmd+0x34>
USARTx->CR3 &= CR3_NACK_Reset;
2560: 687b ldr r3, [r7, #4]
2562: 8a9b ldrh r3, [r3, #20]
2564: b29b uxth r3, r3
2566: f023 0310 bic.w r3, r3, #16
256a: b29a uxth r2, r3
256c: 687b ldr r3, [r7, #4]
256e: 829a strh r2, [r3, #20]
}
2570: bf00 nop
2572: 370c adds r7, #12
2574: 46bd mov sp, r7
2576: bc80 pop {r7}
2578: 4770 bx lr
0000257a <USART_HalfDuplexCmd>:
* @param NewState: new state of the USART Communication.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
257a: b480 push {r7}
257c: b083 sub sp, #12
257e: af00 add r7, sp, #0
2580: 6078 str r0, [r7, #4]
2582: 460b mov r3, r1
2584: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2586: 78fb ldrb r3, [r7, #3]
2588: 2b00 cmp r3, #0
258a: d008 beq.n 259e <USART_HalfDuplexCmd+0x24>
{
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
USARTx->CR3 |= CR3_HDSEL_Set;
258c: 687b ldr r3, [r7, #4]
258e: 8a9b ldrh r3, [r3, #20]
2590: b29b uxth r3, r3
2592: f043 0308 orr.w r3, r3, #8
2596: b29a uxth r2, r3
2598: 687b ldr r3, [r7, #4]
259a: 829a strh r2, [r3, #20]
else
{
/* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */
USARTx->CR3 &= CR3_HDSEL_Reset;
}
}
259c: e007 b.n 25ae <USART_HalfDuplexCmd+0x34>
USARTx->CR3 &= CR3_HDSEL_Reset;
259e: 687b ldr r3, [r7, #4]
25a0: 8a9b ldrh r3, [r3, #20]
25a2: b29b uxth r3, r3
25a4: f023 0308 bic.w r3, r3, #8
25a8: b29a uxth r2, r3
25aa: 687b ldr r3, [r7, #4]
25ac: 829a strh r2, [r3, #20]
}
25ae: bf00 nop
25b0: 370c adds r7, #12
25b2: 46bd mov sp, r7
25b4: bc80 pop {r7}
25b6: 4770 bx lr
000025b8 <USART_OverSampling8Cmd>:
* This function has to be called before calling USART_Init()
* function in order to have correct baudrate Divider value.
* @retval None
*/
void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
25b8: b480 push {r7}
25ba: b083 sub sp, #12
25bc: af00 add r7, sp, #0
25be: 6078 str r0, [r7, #4]
25c0: 460b mov r3, r1
25c2: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
25c4: 78fb ldrb r3, [r7, #3]
25c6: 2b00 cmp r3, #0
25c8: d00a beq.n 25e0 <USART_OverSampling8Cmd+0x28>
{
/* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */
USARTx->CR1 |= CR1_OVER8_Set;
25ca: 687b ldr r3, [r7, #4]
25cc: 899b ldrh r3, [r3, #12]
25ce: b29b uxth r3, r3
25d0: ea6f 4343 mvn.w r3, r3, lsl #17
25d4: ea6f 4353 mvn.w r3, r3, lsr #17
25d8: b29a uxth r2, r3
25da: 687b ldr r3, [r7, #4]
25dc: 819a strh r2, [r3, #12]
else
{
/* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */
USARTx->CR1 &= CR1_OVER8_Reset;
}
}
25de: e007 b.n 25f0 <USART_OverSampling8Cmd+0x38>
USARTx->CR1 &= CR1_OVER8_Reset;
25e0: 687b ldr r3, [r7, #4]
25e2: 899b ldrh r3, [r3, #12]
25e4: b29b uxth r3, r3
25e6: f3c3 030e ubfx r3, r3, #0, #15
25ea: b29a uxth r2, r3
25ec: 687b ldr r3, [r7, #4]
25ee: 819a strh r2, [r3, #12]
}
25f0: bf00 nop
25f2: 370c adds r7, #12
25f4: 46bd mov sp, r7
25f6: bc80 pop {r7}
25f8: 4770 bx lr
000025fa <USART_OneBitMethodCmd>:
* @param NewState: new state of the USART one bit sampling method.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
25fa: b480 push {r7}
25fc: b083 sub sp, #12
25fe: af00 add r7, sp, #0
2600: 6078 str r0, [r7, #4]
2602: 460b mov r3, r1
2604: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2606: 78fb ldrb r3, [r7, #3]
2608: 2b00 cmp r3, #0
260a: d008 beq.n 261e <USART_OneBitMethodCmd+0x24>
{
/* Enable the one bit method by setting the ONEBITE bit in the CR3 register */
USARTx->CR3 |= CR3_ONEBITE_Set;
260c: 687b ldr r3, [r7, #4]
260e: 8a9b ldrh r3, [r3, #20]
2610: b29b uxth r3, r3
2612: f443 6300 orr.w r3, r3, #2048 ; 0x800
2616: b29a uxth r2, r3
2618: 687b ldr r3, [r7, #4]
261a: 829a strh r2, [r3, #20]
else
{
/* Disable tthe one bit method by clearing the ONEBITE bit in the CR3 register */
USARTx->CR3 &= CR3_ONEBITE_Reset;
}
}
261c: e007 b.n 262e <USART_OneBitMethodCmd+0x34>
USARTx->CR3 &= CR3_ONEBITE_Reset;
261e: 687b ldr r3, [r7, #4]
2620: 8a9b ldrh r3, [r3, #20]
2622: b29b uxth r3, r3
2624: f423 6300 bic.w r3, r3, #2048 ; 0x800
2628: b29a uxth r2, r3
262a: 687b ldr r3, [r7, #4]
262c: 829a strh r2, [r3, #20]
}
262e: bf00 nop
2630: 370c adds r7, #12
2632: 46bd mov sp, r7
2634: bc80 pop {r7}
2636: 4770 bx lr
00002638 <USART_IrDAConfig>:
* @arg USART_IrDAMode_LowPower
* @arg USART_IrDAMode_Normal
* @retval None
*/
void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)
{
2638: b480 push {r7}
263a: b083 sub sp, #12
263c: af00 add r7, sp, #0
263e: 6078 str r0, [r7, #4]
2640: 460b mov r3, r1
2642: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
USARTx->CR3 &= CR3_IRLP_Mask;
2644: 687b ldr r3, [r7, #4]
2646: 8a9b ldrh r3, [r3, #20]
2648: b29b uxth r3, r3
264a: f023 0304 bic.w r3, r3, #4
264e: b29a uxth r2, r3
2650: 687b ldr r3, [r7, #4]
2652: 829a strh r2, [r3, #20]
USARTx->CR3 |= USART_IrDAMode;
2654: 687b ldr r3, [r7, #4]
2656: 8a9b ldrh r3, [r3, #20]
2658: b29a uxth r2, r3
265a: 887b ldrh r3, [r7, #2]
265c: 4313 orrs r3, r2
265e: b29a uxth r2, r3
2660: 687b ldr r3, [r7, #4]
2662: 829a strh r2, [r3, #20]
}
2664: bf00 nop
2666: 370c adds r7, #12
2668: 46bd mov sp, r7
266a: bc80 pop {r7}
266c: 4770 bx lr
0000266e <USART_IrDACmd>:
* @param NewState: new state of the IrDA mode.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
266e: b480 push {r7}
2670: b083 sub sp, #12
2672: af00 add r7, sp, #0
2674: 6078 str r0, [r7, #4]
2676: 460b mov r3, r1
2678: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
267a: 78fb ldrb r3, [r7, #3]
267c: 2b00 cmp r3, #0
267e: d008 beq.n 2692 <USART_IrDACmd+0x24>
{
/* Enable the IrDA mode by setting the IREN bit in the CR3 register */
USARTx->CR3 |= CR3_IREN_Set;
2680: 687b ldr r3, [r7, #4]
2682: 8a9b ldrh r3, [r3, #20]
2684: b29b uxth r3, r3
2686: f043 0302 orr.w r3, r3, #2
268a: b29a uxth r2, r3
268c: 687b ldr r3, [r7, #4]
268e: 829a strh r2, [r3, #20]
else
{
/* Disable the IrDA mode by clearing the IREN bit in the CR3 register */
USARTx->CR3 &= CR3_IREN_Reset;
}
}
2690: e007 b.n 26a2 <USART_IrDACmd+0x34>
USARTx->CR3 &= CR3_IREN_Reset;
2692: 687b ldr r3, [r7, #4]
2694: 8a9b ldrh r3, [r3, #20]
2696: b29b uxth r3, r3
2698: f023 0302 bic.w r3, r3, #2
269c: b29a uxth r2, r3
269e: 687b ldr r3, [r7, #4]
26a0: 829a strh r2, [r3, #20]
}
26a2: bf00 nop
26a4: 370c adds r7, #12
26a6: 46bd mov sp, r7
26a8: bc80 pop {r7}
26aa: 4770 bx lr
000026ac <USART_GetFlagStatus>:
* @arg USART_FLAG_FE: Framing Error flag
* @arg USART_FLAG_PE: Parity Error flag
* @retval The new state of USART_FLAG (SET or RESET).
*/
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
26ac: b480 push {r7}
26ae: b085 sub sp, #20
26b0: af00 add r7, sp, #0
26b2: 6078 str r0, [r7, #4]
26b4: 460b mov r3, r1
26b6: 807b strh r3, [r7, #2]
FlagStatus bitstatus = RESET;
26b8: 2300 movs r3, #0
26ba: 73fb strb r3, [r7, #15]
if (USART_FLAG == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
26bc: 687b ldr r3, [r7, #4]
26be: 881b ldrh r3, [r3, #0]
26c0: b29a uxth r2, r3
26c2: 887b ldrh r3, [r7, #2]
26c4: 4013 ands r3, r2
26c6: b29b uxth r3, r3
26c8: 2b00 cmp r3, #0
26ca: d002 beq.n 26d2 <USART_GetFlagStatus+0x26>
{
bitstatus = SET;
26cc: 2301 movs r3, #1
26ce: 73fb strb r3, [r7, #15]
26d0: e001 b.n 26d6 <USART_GetFlagStatus+0x2a>
}
else
{
bitstatus = RESET;
26d2: 2300 movs r3, #0
26d4: 73fb strb r3, [r7, #15]
}
return bitstatus;
26d6: 7bfb ldrb r3, [r7, #15]
}
26d8: 4618 mov r0, r3
26da: 3714 adds r7, #20
26dc: 46bd mov sp, r7
26de: bc80 pop {r7}
26e0: 4770 bx lr
000026e2 <USART_ClearFlag>:
* - TXE flag is cleared only by a write to the USART_DR register
* (USART_SendData()).
* @retval None
*/
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
26e2: b480 push {r7}
26e4: b083 sub sp, #12
26e6: af00 add r7, sp, #0
26e8: 6078 str r0, [r7, #4]
26ea: 460b mov r3, r1
26ec: 807b strh r3, [r7, #2]
if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
USARTx->SR = (uint16_t)~USART_FLAG;
26ee: 887b ldrh r3, [r7, #2]
26f0: 43db mvns r3, r3
26f2: b29a uxth r2, r3
26f4: 687b ldr r3, [r7, #4]
26f6: 801a strh r2, [r3, #0]
}
26f8: bf00 nop
26fa: 370c adds r7, #12
26fc: 46bd mov sp, r7
26fe: bc80 pop {r7}
2700: 4770 bx lr
00002702 <USART_GetITStatus>:
* @arg USART_IT_FE: Framing Error interrupt
* @arg USART_IT_PE: Parity Error interrupt
* @retval The new state of USART_IT (SET or RESET).
*/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
2702: b480 push {r7}
2704: b087 sub sp, #28
2706: af00 add r7, sp, #0
2708: 6078 str r0, [r7, #4]
270a: 460b mov r3, r1
270c: 807b strh r3, [r7, #2]
uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
270e: 2300 movs r3, #0
2710: 60fb str r3, [r7, #12]
2712: 2300 movs r3, #0
2714: 617b str r3, [r7, #20]
2716: 2300 movs r3, #0
2718: 60bb str r3, [r7, #8]
ITStatus bitstatus = RESET;
271a: 2300 movs r3, #0
271c: 74fb strb r3, [r7, #19]
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
/* Get the USART register index */
usartreg = (((uint8_t)USART_IT) >> 0x05);
271e: 887b ldrh r3, [r7, #2]
2720: b2db uxtb r3, r3
2722: 095b lsrs r3, r3, #5
2724: b2db uxtb r3, r3
2726: 60bb str r3, [r7, #8]
/* Get the interrupt position */
itmask = USART_IT & IT_Mask;
2728: 887b ldrh r3, [r7, #2]
272a: f003 031f and.w r3, r3, #31
272e: 617b str r3, [r7, #20]
itmask = (uint32_t)0x01 << itmask;
2730: 2201 movs r2, #1
2732: 697b ldr r3, [r7, #20]
2734: fa02 f303 lsl.w r3, r2, r3
2738: 617b str r3, [r7, #20]
if (usartreg == 0x01) /* The IT is in CR1 register */
273a: 68bb ldr r3, [r7, #8]
273c: 2b01 cmp r3, #1
273e: d107 bne.n 2750 <USART_GetITStatus+0x4e>
{
itmask &= USARTx->CR1;
2740: 687b ldr r3, [r7, #4]
2742: 899b ldrh r3, [r3, #12]
2744: b29b uxth r3, r3
2746: 461a mov r2, r3
2748: 697b ldr r3, [r7, #20]
274a: 4013 ands r3, r2
274c: 617b str r3, [r7, #20]
274e: e011 b.n 2774 <USART_GetITStatus+0x72>
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
2750: 68bb ldr r3, [r7, #8]
2752: 2b02 cmp r3, #2
2754: d107 bne.n 2766 <USART_GetITStatus+0x64>
{
itmask &= USARTx->CR2;
2756: 687b ldr r3, [r7, #4]
2758: 8a1b ldrh r3, [r3, #16]
275a: b29b uxth r3, r3
275c: 461a mov r2, r3
275e: 697b ldr r3, [r7, #20]
2760: 4013 ands r3, r2
2762: 617b str r3, [r7, #20]
2764: e006 b.n 2774 <USART_GetITStatus+0x72>
}
else /* The IT is in CR3 register */
{
itmask &= USARTx->CR3;
2766: 687b ldr r3, [r7, #4]
2768: 8a9b ldrh r3, [r3, #20]
276a: b29b uxth r3, r3
276c: 461a mov r2, r3
276e: 697b ldr r3, [r7, #20]
2770: 4013 ands r3, r2
2772: 617b str r3, [r7, #20]
}
bitpos = USART_IT >> 0x08;
2774: 887b ldrh r3, [r7, #2]
2776: 0a1b lsrs r3, r3, #8
2778: b29b uxth r3, r3
277a: 60fb str r3, [r7, #12]
bitpos = (uint32_t)0x01 << bitpos;
277c: 2201 movs r2, #1
277e: 68fb ldr r3, [r7, #12]
2780: fa02 f303 lsl.w r3, r2, r3
2784: 60fb str r3, [r7, #12]
bitpos &= USARTx->SR;
2786: 687b ldr r3, [r7, #4]
2788: 881b ldrh r3, [r3, #0]
278a: b29b uxth r3, r3
278c: 461a mov r2, r3
278e: 68fb ldr r3, [r7, #12]
2790: 4013 ands r3, r2
2792: 60fb str r3, [r7, #12]
if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
2794: 697b ldr r3, [r7, #20]
2796: 2b00 cmp r3, #0
2798: d005 beq.n 27a6 <USART_GetITStatus+0xa4>
279a: 68fb ldr r3, [r7, #12]
279c: 2b00 cmp r3, #0
279e: d002 beq.n 27a6 <USART_GetITStatus+0xa4>
{
bitstatus = SET;
27a0: 2301 movs r3, #1
27a2: 74fb strb r3, [r7, #19]
27a4: e001 b.n 27aa <USART_GetITStatus+0xa8>
}
else
{
bitstatus = RESET;
27a6: 2300 movs r3, #0
27a8: 74fb strb r3, [r7, #19]
}
return bitstatus;
27aa: 7cfb ldrb r3, [r7, #19]
}
27ac: 4618 mov r0, r3
27ae: 371c adds r7, #28
27b0: 46bd mov sp, r7
27b2: bc80 pop {r7}
27b4: 4770 bx lr
000027b6 <USART_ClearITPendingBit>:
* - TXE pending bit is cleared only by a write to the USART_DR register
* (USART_SendData()).
* @retval None
*/
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
27b6: b480 push {r7}
27b8: b085 sub sp, #20
27ba: af00 add r7, sp, #0
27bc: 6078 str r0, [r7, #4]
27be: 460b mov r3, r1
27c0: 807b strh r3, [r7, #2]
uint16_t bitpos = 0x00, itmask = 0x00;
27c2: 2300 movs r3, #0
27c4: 81fb strh r3, [r7, #14]
27c6: 2300 movs r3, #0
27c8: 81bb strh r3, [r7, #12]
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
bitpos = USART_IT >> 0x08;
27ca: 887b ldrh r3, [r7, #2]
27cc: 0a1b lsrs r3, r3, #8
27ce: 81fb strh r3, [r7, #14]
itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
27d0: 89fb ldrh r3, [r7, #14]
27d2: 2201 movs r2, #1
27d4: fa02 f303 lsl.w r3, r2, r3
27d8: 81bb strh r3, [r7, #12]
USARTx->SR = (uint16_t)~itmask;
27da: 89bb ldrh r3, [r7, #12]
27dc: 43db mvns r3, r3
27de: b29a uxth r2, r3
27e0: 687b ldr r3, [r7, #4]
27e2: 801a strh r2, [r3, #0]
}
27e4: bf00 nop
27e6: 3714 adds r7, #20
27e8: 46bd mov sp, r7
27ea: bc80 pop {r7}
27ec: 4770 bx lr
27ee: bf00 nop
000027f0 <EXTI_DeInit>:
* @brief Deinitializes the EXTI peripheral registers to their default reset values.
* @param None
* @retval None
*/
void EXTI_DeInit(void)
{
27f0: b480 push {r7}
27f2: af00 add r7, sp, #0
EXTI->IMR = 0x00000000;
27f4: 4b09 ldr r3, [pc, #36] ; (281c <EXTI_DeInit+0x2c>)
27f6: 2200 movs r2, #0
27f8: 601a str r2, [r3, #0]
EXTI->EMR = 0x00000000;
27fa: 4b08 ldr r3, [pc, #32] ; (281c <EXTI_DeInit+0x2c>)
27fc: 2200 movs r2, #0
27fe: 605a str r2, [r3, #4]
EXTI->RTSR = 0x00000000;
2800: 4b06 ldr r3, [pc, #24] ; (281c <EXTI_DeInit+0x2c>)
2802: 2200 movs r2, #0
2804: 609a str r2, [r3, #8]
EXTI->FTSR = 0x00000000;
2806: 4b05 ldr r3, [pc, #20] ; (281c <EXTI_DeInit+0x2c>)
2808: 2200 movs r2, #0
280a: 60da str r2, [r3, #12]
EXTI->PR = 0x000FFFFF;
280c: 4b03 ldr r3, [pc, #12] ; (281c <EXTI_DeInit+0x2c>)
280e: 4a04 ldr r2, [pc, #16] ; (2820 <EXTI_DeInit+0x30>)
2810: 615a str r2, [r3, #20]
}
2812: bf00 nop
2814: 46bd mov sp, r7
2816: bc80 pop {r7}
2818: 4770 bx lr
281a: bf00 nop
281c: 40010400 .word 0x40010400
2820: 000fffff .word 0x000fffff
00002824 <EXTI_Init>:
* @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
* that contains the configuration information for the EXTI peripheral.
* @retval None
*/
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
{
2824: b480 push {r7}
2826: b085 sub sp, #20
2828: af00 add r7, sp, #0
282a: 6078 str r0, [r7, #4]
uint32_t tmp = 0;
282c: 2300 movs r3, #0
282e: 60fb str r3, [r7, #12]
assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
tmp = (uint32_t)EXTI_BASE;
2830: 4b34 ldr r3, [pc, #208] ; (2904 <EXTI_Init+0xe0>)
2832: 60fb str r3, [r7, #12]
if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
2834: 687b ldr r3, [r7, #4]
2836: 799b ldrb r3, [r3, #6]
2838: 2b00 cmp r3, #0
283a: d04f beq.n 28dc <EXTI_Init+0xb8>
{
/* Clear EXTI line configuration */
EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
283c: 4b31 ldr r3, [pc, #196] ; (2904 <EXTI_Init+0xe0>)
283e: 681a ldr r2, [r3, #0]
2840: 687b ldr r3, [r7, #4]
2842: 681b ldr r3, [r3, #0]
2844: 43db mvns r3, r3
2846: 492f ldr r1, [pc, #188] ; (2904 <EXTI_Init+0xe0>)
2848: 4013 ands r3, r2
284a: 600b str r3, [r1, #0]
EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
284c: 4b2d ldr r3, [pc, #180] ; (2904 <EXTI_Init+0xe0>)
284e: 685a ldr r2, [r3, #4]
2850: 687b ldr r3, [r7, #4]
2852: 681b ldr r3, [r3, #0]
2854: 43db mvns r3, r3
2856: 492b ldr r1, [pc, #172] ; (2904 <EXTI_Init+0xe0>)
2858: 4013 ands r3, r2
285a: 604b str r3, [r1, #4]
tmp += EXTI_InitStruct->EXTI_Mode;
285c: 687b ldr r3, [r7, #4]
285e: 791b ldrb r3, [r3, #4]
2860: 461a mov r2, r3
2862: 68fb ldr r3, [r7, #12]
2864: 4413 add r3, r2
2866: 60fb str r3, [r7, #12]
*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
2868: 68fb ldr r3, [r7, #12]
286a: 6819 ldr r1, [r3, #0]
286c: 687b ldr r3, [r7, #4]
286e: 681a ldr r2, [r3, #0]
2870: 68fb ldr r3, [r7, #12]
2872: 430a orrs r2, r1
2874: 601a str r2, [r3, #0]
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
2876: 4b23 ldr r3, [pc, #140] ; (2904 <EXTI_Init+0xe0>)
2878: 689a ldr r2, [r3, #8]
287a: 687b ldr r3, [r7, #4]
287c: 681b ldr r3, [r3, #0]
287e: 43db mvns r3, r3
2880: 4920 ldr r1, [pc, #128] ; (2904 <EXTI_Init+0xe0>)
2882: 4013 ands r3, r2
2884: 608b str r3, [r1, #8]
EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
2886: 4b1f ldr r3, [pc, #124] ; (2904 <EXTI_Init+0xe0>)
2888: 68da ldr r2, [r3, #12]
288a: 687b ldr r3, [r7, #4]
288c: 681b ldr r3, [r3, #0]
288e: 43db mvns r3, r3
2890: 491c ldr r1, [pc, #112] ; (2904 <EXTI_Init+0xe0>)
2892: 4013 ands r3, r2
2894: 60cb str r3, [r1, #12]
/* Select the trigger for the selected external interrupts */
if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
2896: 687b ldr r3, [r7, #4]
2898: 795b ldrb r3, [r3, #5]
289a: 2b10 cmp r3, #16
289c: d10e bne.n 28bc <EXTI_Init+0x98>
{
/* Rising Falling edge */
EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
289e: 4b19 ldr r3, [pc, #100] ; (2904 <EXTI_Init+0xe0>)
28a0: 689a ldr r2, [r3, #8]
28a2: 687b ldr r3, [r7, #4]
28a4: 681b ldr r3, [r3, #0]
28a6: 4917 ldr r1, [pc, #92] ; (2904 <EXTI_Init+0xe0>)
28a8: 4313 orrs r3, r2
28aa: 608b str r3, [r1, #8]
EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
28ac: 4b15 ldr r3, [pc, #84] ; (2904 <EXTI_Init+0xe0>)
28ae: 68da ldr r2, [r3, #12]
28b0: 687b ldr r3, [r7, #4]
28b2: 681b ldr r3, [r3, #0]
28b4: 4913 ldr r1, [pc, #76] ; (2904 <EXTI_Init+0xe0>)
28b6: 4313 orrs r3, r2
28b8: 60cb str r3, [r1, #12]
tmp += EXTI_InitStruct->EXTI_Mode;
/* Disable the selected external lines */
*(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
}
}
28ba: e01d b.n 28f8 <EXTI_Init+0xd4>
tmp = (uint32_t)EXTI_BASE;
28bc: 4b11 ldr r3, [pc, #68] ; (2904 <EXTI_Init+0xe0>)
28be: 60fb str r3, [r7, #12]
tmp += EXTI_InitStruct->EXTI_Trigger;
28c0: 687b ldr r3, [r7, #4]
28c2: 795b ldrb r3, [r3, #5]
28c4: 461a mov r2, r3
28c6: 68fb ldr r3, [r7, #12]
28c8: 4413 add r3, r2
28ca: 60fb str r3, [r7, #12]
*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
28cc: 68fb ldr r3, [r7, #12]
28ce: 6819 ldr r1, [r3, #0]
28d0: 687b ldr r3, [r7, #4]
28d2: 681a ldr r2, [r3, #0]
28d4: 68fb ldr r3, [r7, #12]
28d6: 430a orrs r2, r1
28d8: 601a str r2, [r3, #0]
}
28da: e00d b.n 28f8 <EXTI_Init+0xd4>
tmp += EXTI_InitStruct->EXTI_Mode;
28dc: 687b ldr r3, [r7, #4]
28de: 791b ldrb r3, [r3, #4]
28e0: 461a mov r2, r3
28e2: 68fb ldr r3, [r7, #12]
28e4: 4413 add r3, r2
28e6: 60fb str r3, [r7, #12]
*(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
28e8: 68fb ldr r3, [r7, #12]
28ea: 6819 ldr r1, [r3, #0]
28ec: 687b ldr r3, [r7, #4]
28ee: 681b ldr r3, [r3, #0]
28f0: 43da mvns r2, r3
28f2: 68fb ldr r3, [r7, #12]
28f4: 400a ands r2, r1
28f6: 601a str r2, [r3, #0]
}
28f8: bf00 nop
28fa: 3714 adds r7, #20
28fc: 46bd mov sp, r7
28fe: bc80 pop {r7}
2900: 4770 bx lr
2902: bf00 nop
2904: 40010400 .word 0x40010400
00002908 <EXTI_StructInit>:
* @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
* be initialized.
* @retval None
*/
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
{
2908: b480 push {r7}
290a: b083 sub sp, #12
290c: af00 add r7, sp, #0
290e: 6078 str r0, [r7, #4]
EXTI_InitStruct->EXTI_Line = EXTI_LINENONE;
2910: 687b ldr r3, [r7, #4]
2912: 2200 movs r2, #0
2914: 601a str r2, [r3, #0]
EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
2916: 687b ldr r3, [r7, #4]
2918: 2200 movs r2, #0
291a: 711a strb r2, [r3, #4]
EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
291c: 687b ldr r3, [r7, #4]
291e: 220c movs r2, #12
2920: 715a strb r2, [r3, #5]
EXTI_InitStruct->EXTI_LineCmd = DISABLE;
2922: 687b ldr r3, [r7, #4]
2924: 2200 movs r2, #0
2926: 719a strb r2, [r3, #6]
}
2928: bf00 nop
292a: 370c adds r7, #12
292c: 46bd mov sp, r7
292e: bc80 pop {r7}
2930: 4770 bx lr
00002932 <EXTI_GenerateSWInterrupt>:
* @param EXTI_Line: specifies the EXTI lines to be enabled or disabled.
* This parameter can be any combination of EXTI_Linex where x can be (0..19).
* @retval None
*/
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)
{
2932: b480 push {r7}
2934: b083 sub sp, #12
2936: af00 add r7, sp, #0
2938: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_EXTI_LINE(EXTI_Line));
EXTI->SWIER |= EXTI_Line;
293a: 4b05 ldr r3, [pc, #20] ; (2950 <EXTI_GenerateSWInterrupt+0x1e>)
293c: 691a ldr r2, [r3, #16]
293e: 4904 ldr r1, [pc, #16] ; (2950 <EXTI_GenerateSWInterrupt+0x1e>)
2940: 687b ldr r3, [r7, #4]
2942: 4313 orrs r3, r2
2944: 610b str r3, [r1, #16]
}
2946: bf00 nop
2948: 370c adds r7, #12
294a: 46bd mov sp, r7
294c: bc80 pop {r7}
294e: 4770 bx lr
2950: 40010400 .word 0x40010400
00002954 <EXTI_GetFlagStatus>:
* This parameter can be:
* @arg EXTI_Linex: External interrupt line x where x(0..19)
* @retval The new state of EXTI_Line (SET or RESET).
*/
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)
{
2954: b480 push {r7}
2956: b085 sub sp, #20
2958: af00 add r7, sp, #0
295a: 6078 str r0, [r7, #4]
FlagStatus bitstatus = RESET;
295c: 2300 movs r3, #0
295e: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_GET_EXTI_LINE(EXTI_Line));
if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET)
2960: 4b08 ldr r3, [pc, #32] ; (2984 <EXTI_GetFlagStatus+0x30>)
2962: 695a ldr r2, [r3, #20]
2964: 687b ldr r3, [r7, #4]
2966: 4013 ands r3, r2
2968: 2b00 cmp r3, #0
296a: d002 beq.n 2972 <EXTI_GetFlagStatus+0x1e>
{
bitstatus = SET;
296c: 2301 movs r3, #1
296e: 73fb strb r3, [r7, #15]
2970: e001 b.n 2976 <EXTI_GetFlagStatus+0x22>
}
else
{
bitstatus = RESET;
2972: 2300 movs r3, #0
2974: 73fb strb r3, [r7, #15]
}
return bitstatus;
2976: 7bfb ldrb r3, [r7, #15]
}
2978: 4618 mov r0, r3
297a: 3714 adds r7, #20
297c: 46bd mov sp, r7
297e: bc80 pop {r7}
2980: 4770 bx lr
2982: bf00 nop
2984: 40010400 .word 0x40010400
00002988 <EXTI_ClearFlag>:
* @param EXTI_Line: specifies the EXTI lines flags to clear.
* This parameter can be any combination of EXTI_Linex where x can be (0..19).
* @retval None
*/
void EXTI_ClearFlag(uint32_t EXTI_Line)
{
2988: b480 push {r7}
298a: b083 sub sp, #12
298c: af00 add r7, sp, #0
298e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_EXTI_LINE(EXTI_Line));
EXTI->PR = EXTI_Line;
2990: 4a03 ldr r2, [pc, #12] ; (29a0 <EXTI_ClearFlag+0x18>)
2992: 687b ldr r3, [r7, #4]
2994: 6153 str r3, [r2, #20]
}
2996: bf00 nop
2998: 370c adds r7, #12
299a: 46bd mov sp, r7
299c: bc80 pop {r7}
299e: 4770 bx lr
29a0: 40010400 .word 0x40010400
000029a4 <EXTI_GetITStatus>:
* This parameter can be:
* @arg EXTI_Linex: External interrupt line x where x(0..19)
* @retval The new state of EXTI_Line (SET or RESET).
*/
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
{
29a4: b480 push {r7}
29a6: b085 sub sp, #20
29a8: af00 add r7, sp, #0
29aa: 6078 str r0, [r7, #4]
ITStatus bitstatus = RESET;
29ac: 2300 movs r3, #0
29ae: 73fb strb r3, [r7, #15]
uint32_t enablestatus = 0;
29b0: 2300 movs r3, #0
29b2: 60bb str r3, [r7, #8]
/* Check the parameters */
assert_param(IS_GET_EXTI_LINE(EXTI_Line));
enablestatus = EXTI->IMR & EXTI_Line;
29b4: 4b0c ldr r3, [pc, #48] ; (29e8 <EXTI_GetITStatus+0x44>)
29b6: 681b ldr r3, [r3, #0]
29b8: 687a ldr r2, [r7, #4]
29ba: 4013 ands r3, r2
29bc: 60bb str r3, [r7, #8]
if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET))
29be: 4b0a ldr r3, [pc, #40] ; (29e8 <EXTI_GetITStatus+0x44>)
29c0: 695a ldr r2, [r3, #20]
29c2: 687b ldr r3, [r7, #4]
29c4: 4013 ands r3, r2
29c6: 2b00 cmp r3, #0
29c8: d005 beq.n 29d6 <EXTI_GetITStatus+0x32>
29ca: 68bb ldr r3, [r7, #8]
29cc: 2b00 cmp r3, #0
29ce: d002 beq.n 29d6 <EXTI_GetITStatus+0x32>
{
bitstatus = SET;
29d0: 2301 movs r3, #1
29d2: 73fb strb r3, [r7, #15]
29d4: e001 b.n 29da <EXTI_GetITStatus+0x36>
}
else
{
bitstatus = RESET;
29d6: 2300 movs r3, #0
29d8: 73fb strb r3, [r7, #15]
}
return bitstatus;
29da: 7bfb ldrb r3, [r7, #15]
}
29dc: 4618 mov r0, r3
29de: 3714 adds r7, #20
29e0: 46bd mov sp, r7
29e2: bc80 pop {r7}
29e4: 4770 bx lr
29e6: bf00 nop
29e8: 40010400 .word 0x40010400
000029ec <EXTI_ClearITPendingBit>:
* @param EXTI_Line: specifies the EXTI lines to clear.
* This parameter can be any combination of EXTI_Linex where x can be (0..19).
* @retval None
*/
void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
{
29ec: b480 push {r7}
29ee: b083 sub sp, #12
29f0: af00 add r7, sp, #0
29f2: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_EXTI_LINE(EXTI_Line));
EXTI->PR = EXTI_Line;
29f4: 4a03 ldr r2, [pc, #12] ; (2a04 <EXTI_ClearITPendingBit+0x18>)
29f6: 687b ldr r3, [r7, #4]
29f8: 6153 str r3, [r2, #20]
}
29fa: bf00 nop
29fc: 370c adds r7, #12
29fe: 46bd mov sp, r7
2a00: bc80 pop {r7}
2a02: 4770 bx lr
2a04: 40010400 .word 0x40010400
00002a08 <ADC_DeInit>:
* @brief Deinitializes the ADCx peripheral registers to their default reset values.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval None
*/
void ADC_DeInit(ADC_TypeDef* ADCx)
{
2a08: b580 push {r7, lr}
2a0a: b082 sub sp, #8
2a0c: af00 add r7, sp, #0
2a0e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
if (ADCx == ADC1)
2a10: 687b ldr r3, [r7, #4]
2a12: 4a17 ldr r2, [pc, #92] ; (2a70 <ADC_DeInit+0x68>)
2a14: 4293 cmp r3, r2
2a16: d10a bne.n 2a2e <ADC_DeInit+0x26>
{
/* Enable ADC1 reset state */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE);
2a18: 2101 movs r1, #1
2a1a: f44f 7000 mov.w r0, #512 ; 0x200
2a1e: f7fe feaf bl 1780 <RCC_APB2PeriphResetCmd>
/* Release ADC1 from reset state */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE);
2a22: 2100 movs r1, #0
2a24: f44f 7000 mov.w r0, #512 ; 0x200
2a28: f7fe feaa bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
/* Release ADC3 from reset state */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
}
}
}
2a2c: e01c b.n 2a68 <ADC_DeInit+0x60>
else if (ADCx == ADC2)
2a2e: 687b ldr r3, [r7, #4]
2a30: 4a10 ldr r2, [pc, #64] ; (2a74 <ADC_DeInit+0x6c>)
2a32: 4293 cmp r3, r2
2a34: d10a bne.n 2a4c <ADC_DeInit+0x44>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, ENABLE);
2a36: 2101 movs r1, #1
2a38: f44f 6080 mov.w r0, #1024 ; 0x400
2a3c: f7fe fea0 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, DISABLE);
2a40: 2100 movs r1, #0
2a42: f44f 6080 mov.w r0, #1024 ; 0x400
2a46: f7fe fe9b bl 1780 <RCC_APB2PeriphResetCmd>
}
2a4a: e00d b.n 2a68 <ADC_DeInit+0x60>
if (ADCx == ADC3)
2a4c: 687b ldr r3, [r7, #4]
2a4e: 4a0a ldr r2, [pc, #40] ; (2a78 <ADC_DeInit+0x70>)
2a50: 4293 cmp r3, r2
2a52: d109 bne.n 2a68 <ADC_DeInit+0x60>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
2a54: 2101 movs r1, #1
2a56: f44f 4000 mov.w r0, #32768 ; 0x8000
2a5a: f7fe fe91 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
2a5e: 2100 movs r1, #0
2a60: f44f 4000 mov.w r0, #32768 ; 0x8000
2a64: f7fe fe8c bl 1780 <RCC_APB2PeriphResetCmd>
}
2a68: bf00 nop
2a6a: 3708 adds r7, #8
2a6c: 46bd mov sp, r7
2a6e: bd80 pop {r7, pc}
2a70: 40012400 .word 0x40012400
2a74: 40012800 .word 0x40012800
2a78: 40013c00 .word 0x40013c00
00002a7c <ADC_Init>:
* @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains
* the configuration information for the specified ADC peripheral.
* @retval None
*/
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
{
2a7c: b480 push {r7}
2a7e: b085 sub sp, #20
2a80: af00 add r7, sp, #0
2a82: 6078 str r0, [r7, #4]
2a84: 6039 str r1, [r7, #0]
uint32_t tmpreg1 = 0;
2a86: 2300 movs r3, #0
2a88: 60fb str r3, [r7, #12]
uint8_t tmpreg2 = 0;
2a8a: 2300 movs r3, #0
2a8c: 72fb strb r3, [r7, #11]
assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign));
assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));
/*---------------------------- ADCx CR1 Configuration -----------------*/
/* Get the ADCx CR1 value */
tmpreg1 = ADCx->CR1;
2a8e: 687b ldr r3, [r7, #4]
2a90: 685b ldr r3, [r3, #4]
2a92: 60fb str r3, [r7, #12]
/* Clear DUALMOD and SCAN bits */
tmpreg1 &= CR1_CLEAR_Mask;
2a94: 68fb ldr r3, [r7, #12]
2a96: f423 2370 bic.w r3, r3, #983040 ; 0xf0000
2a9a: f423 7380 bic.w r3, r3, #256 ; 0x100
2a9e: 60fb str r3, [r7, #12]
/* Configure ADCx: Dual mode and scan conversion mode */
/* Set DUALMOD bits according to ADC_Mode value */
/* Set SCAN bit according to ADC_ScanConvMode value */
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));
2aa0: 683b ldr r3, [r7, #0]
2aa2: 681a ldr r2, [r3, #0]
2aa4: 683b ldr r3, [r7, #0]
2aa6: 791b ldrb r3, [r3, #4]
2aa8: 021b lsls r3, r3, #8
2aaa: 4313 orrs r3, r2
2aac: 68fa ldr r2, [r7, #12]
2aae: 4313 orrs r3, r2
2ab0: 60fb str r3, [r7, #12]
/* Write to ADCx CR1 */
ADCx->CR1 = tmpreg1;
2ab2: 687b ldr r3, [r7, #4]
2ab4: 68fa ldr r2, [r7, #12]
2ab6: 605a str r2, [r3, #4]
/*---------------------------- ADCx CR2 Configuration -----------------*/
/* Get the ADCx CR2 value */
tmpreg1 = ADCx->CR2;
2ab8: 687b ldr r3, [r7, #4]
2aba: 689b ldr r3, [r3, #8]
2abc: 60fb str r3, [r7, #12]
/* Clear CONT, ALIGN and EXTSEL bits */
tmpreg1 &= CR2_CLEAR_Mask;
2abe: 68fa ldr r2, [r7, #12]
2ac0: 4b16 ldr r3, [pc, #88] ; (2b1c <ADC_Init+0xa0>)
2ac2: 4013 ands r3, r2
2ac4: 60fb str r3, [r7, #12]
/* Configure ADCx: external trigger event and continuous conversion mode */
/* Set ALIGN bit according to ADC_DataAlign value */
/* Set EXTSEL bits according to ADC_ExternalTrigConv value */
/* Set CONT bit according to ADC_ContinuousConvMode value */
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
2ac6: 683b ldr r3, [r7, #0]
2ac8: 68da ldr r2, [r3, #12]
2aca: 683b ldr r3, [r7, #0]
2acc: 689b ldr r3, [r3, #8]
2ace: 431a orrs r2, r3
((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));
2ad0: 683b ldr r3, [r7, #0]
2ad2: 795b ldrb r3, [r3, #5]
2ad4: 005b lsls r3, r3, #1
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
2ad6: 4313 orrs r3, r2
2ad8: 68fa ldr r2, [r7, #12]
2ada: 4313 orrs r3, r2
2adc: 60fb str r3, [r7, #12]
/* Write to ADCx CR2 */
ADCx->CR2 = tmpreg1;
2ade: 687b ldr r3, [r7, #4]
2ae0: 68fa ldr r2, [r7, #12]
2ae2: 609a str r2, [r3, #8]
/*---------------------------- ADCx SQR1 Configuration -----------------*/
/* Get the ADCx SQR1 value */
tmpreg1 = ADCx->SQR1;
2ae4: 687b ldr r3, [r7, #4]
2ae6: 6adb ldr r3, [r3, #44] ; 0x2c
2ae8: 60fb str r3, [r7, #12]
/* Clear L bits */
tmpreg1 &= SQR1_CLEAR_Mask;
2aea: 68fb ldr r3, [r7, #12]
2aec: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000
2af0: 60fb str r3, [r7, #12]
/* Configure ADCx: regular channel sequence length */
/* Set L bits according to ADC_NbrOfChannel value */
tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);
2af2: 683b ldr r3, [r7, #0]
2af4: 7c1b ldrb r3, [r3, #16]
2af6: 3b01 subs r3, #1
2af8: b2da uxtb r2, r3
2afa: 7afb ldrb r3, [r7, #11]
2afc: 4313 orrs r3, r2
2afe: 72fb strb r3, [r7, #11]
tmpreg1 |= (uint32_t)tmpreg2 << 20;
2b00: 7afb ldrb r3, [r7, #11]
2b02: 051b lsls r3, r3, #20
2b04: 68fa ldr r2, [r7, #12]
2b06: 4313 orrs r3, r2
2b08: 60fb str r3, [r7, #12]
/* Write to ADCx SQR1 */
ADCx->SQR1 = tmpreg1;
2b0a: 687b ldr r3, [r7, #4]
2b0c: 68fa ldr r2, [r7, #12]
2b0e: 62da str r2, [r3, #44] ; 0x2c
}
2b10: bf00 nop
2b12: 3714 adds r7, #20
2b14: 46bd mov sp, r7
2b16: bc80 pop {r7}
2b18: 4770 bx lr
2b1a: bf00 nop
2b1c: fff1f7fd .word 0xfff1f7fd
00002b20 <ADC_StructInit>:
* @brief Fills each ADC_InitStruct member with its default value.
* @param ADC_InitStruct : pointer to an ADC_InitTypeDef structure which will be initialized.
* @retval None
*/
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
{
2b20: b480 push {r7}
2b22: b083 sub sp, #12
2b24: af00 add r7, sp, #0
2b26: 6078 str r0, [r7, #4]
/* Reset ADC init structure parameters values */
/* Initialize the ADC_Mode member */
ADC_InitStruct->ADC_Mode = ADC_Mode_Independent;
2b28: 687b ldr r3, [r7, #4]
2b2a: 2200 movs r2, #0
2b2c: 601a str r2, [r3, #0]
/* initialize the ADC_ScanConvMode member */
ADC_InitStruct->ADC_ScanConvMode = DISABLE;
2b2e: 687b ldr r3, [r7, #4]
2b30: 2200 movs r2, #0
2b32: 711a strb r2, [r3, #4]
/* Initialize the ADC_ContinuousConvMode member */
ADC_InitStruct->ADC_ContinuousConvMode = DISABLE;
2b34: 687b ldr r3, [r7, #4]
2b36: 2200 movs r2, #0
2b38: 715a strb r2, [r3, #5]
/* Initialize the ADC_ExternalTrigConv member */
ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
2b3a: 687b ldr r3, [r7, #4]
2b3c: 2200 movs r2, #0
2b3e: 609a str r2, [r3, #8]
/* Initialize the ADC_DataAlign member */
ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right;
2b40: 687b ldr r3, [r7, #4]
2b42: 2200 movs r2, #0
2b44: 60da str r2, [r3, #12]
/* Initialize the ADC_NbrOfChannel member */
ADC_InitStruct->ADC_NbrOfChannel = 1;
2b46: 687b ldr r3, [r7, #4]
2b48: 2201 movs r2, #1
2b4a: 741a strb r2, [r3, #16]
}
2b4c: bf00 nop
2b4e: 370c adds r7, #12
2b50: 46bd mov sp, r7
2b52: bc80 pop {r7}
2b54: 4770 bx lr
00002b56 <ADC_Cmd>:
* @param NewState: new state of the ADCx peripheral.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2b56: b480 push {r7}
2b58: b083 sub sp, #12
2b5a: af00 add r7, sp, #0
2b5c: 6078 str r0, [r7, #4]
2b5e: 460b mov r3, r1
2b60: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2b62: 78fb ldrb r3, [r7, #3]
2b64: 2b00 cmp r3, #0
2b66: d006 beq.n 2b76 <ADC_Cmd+0x20>
{
/* Set the ADON bit to wake up the ADC from power down mode */
ADCx->CR2 |= CR2_ADON_Set;
2b68: 687b ldr r3, [r7, #4]
2b6a: 689b ldr r3, [r3, #8]
2b6c: f043 0201 orr.w r2, r3, #1
2b70: 687b ldr r3, [r7, #4]
2b72: 609a str r2, [r3, #8]
else
{
/* Disable the selected ADC peripheral */
ADCx->CR2 &= CR2_ADON_Reset;
}
}
2b74: e005 b.n 2b82 <ADC_Cmd+0x2c>
ADCx->CR2 &= CR2_ADON_Reset;
2b76: 687b ldr r3, [r7, #4]
2b78: 689b ldr r3, [r3, #8]
2b7a: f023 0201 bic.w r2, r3, #1
2b7e: 687b ldr r3, [r7, #4]
2b80: 609a str r2, [r3, #8]
}
2b82: bf00 nop
2b84: 370c adds r7, #12
2b86: 46bd mov sp, r7
2b88: bc80 pop {r7}
2b8a: 4770 bx lr
00002b8c <ADC_DMACmd>:
* @param NewState: new state of the selected ADC DMA transfer.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2b8c: b480 push {r7}
2b8e: b083 sub sp, #12
2b90: af00 add r7, sp, #0
2b92: 6078 str r0, [r7, #4]
2b94: 460b mov r3, r1
2b96: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_DMA_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2b98: 78fb ldrb r3, [r7, #3]
2b9a: 2b00 cmp r3, #0
2b9c: d006 beq.n 2bac <ADC_DMACmd+0x20>
{
/* Enable the selected ADC DMA request */
ADCx->CR2 |= CR2_DMA_Set;
2b9e: 687b ldr r3, [r7, #4]
2ba0: 689b ldr r3, [r3, #8]
2ba2: f443 7280 orr.w r2, r3, #256 ; 0x100
2ba6: 687b ldr r3, [r7, #4]
2ba8: 609a str r2, [r3, #8]
else
{
/* Disable the selected ADC DMA request */
ADCx->CR2 &= CR2_DMA_Reset;
}
}
2baa: e005 b.n 2bb8 <ADC_DMACmd+0x2c>
ADCx->CR2 &= CR2_DMA_Reset;
2bac: 687b ldr r3, [r7, #4]
2bae: 689b ldr r3, [r3, #8]
2bb0: f423 7280 bic.w r2, r3, #256 ; 0x100
2bb4: 687b ldr r3, [r7, #4]
2bb6: 609a str r2, [r3, #8]
}
2bb8: bf00 nop
2bba: 370c adds r7, #12
2bbc: 46bd mov sp, r7
2bbe: bc80 pop {r7}
2bc0: 4770 bx lr
00002bc2 <ADC_ITConfig>:
* @param NewState: new state of the specified ADC interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
{
2bc2: b480 push {r7}
2bc4: b085 sub sp, #20
2bc6: af00 add r7, sp, #0
2bc8: 6078 str r0, [r7, #4]
2bca: 460b mov r3, r1
2bcc: 807b strh r3, [r7, #2]
2bce: 4613 mov r3, r2
2bd0: 707b strb r3, [r7, #1]
uint8_t itmask = 0;
2bd2: 2300 movs r3, #0
2bd4: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
assert_param(IS_ADC_IT(ADC_IT));
/* Get the ADC IT index */
itmask = (uint8_t)ADC_IT;
2bd6: 887b ldrh r3, [r7, #2]
2bd8: 73fb strb r3, [r7, #15]
if (NewState != DISABLE)
2bda: 787b ldrb r3, [r7, #1]
2bdc: 2b00 cmp r3, #0
2bde: d006 beq.n 2bee <ADC_ITConfig+0x2c>
{
/* Enable the selected ADC interrupts */
ADCx->CR1 |= itmask;
2be0: 687b ldr r3, [r7, #4]
2be2: 685a ldr r2, [r3, #4]
2be4: 7bfb ldrb r3, [r7, #15]
2be6: 431a orrs r2, r3
2be8: 687b ldr r3, [r7, #4]
2bea: 605a str r2, [r3, #4]
else
{
/* Disable the selected ADC interrupts */
ADCx->CR1 &= (~(uint32_t)itmask);
}
}
2bec: e006 b.n 2bfc <ADC_ITConfig+0x3a>
ADCx->CR1 &= (~(uint32_t)itmask);
2bee: 687b ldr r3, [r7, #4]
2bf0: 685a ldr r2, [r3, #4]
2bf2: 7bfb ldrb r3, [r7, #15]
2bf4: 43db mvns r3, r3
2bf6: 401a ands r2, r3
2bf8: 687b ldr r3, [r7, #4]
2bfa: 605a str r2, [r3, #4]
}
2bfc: bf00 nop
2bfe: 3714 adds r7, #20
2c00: 46bd mov sp, r7
2c02: bc80 pop {r7}
2c04: 4770 bx lr
00002c06 <ADC_ResetCalibration>:
* @brief Resets the selected ADC calibration registers.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval None
*/
void ADC_ResetCalibration(ADC_TypeDef* ADCx)
{
2c06: b480 push {r7}
2c08: b083 sub sp, #12
2c0a: af00 add r7, sp, #0
2c0c: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Resets the selected ADC calibration registers */
ADCx->CR2 |= CR2_RSTCAL_Set;
2c0e: 687b ldr r3, [r7, #4]
2c10: 689b ldr r3, [r3, #8]
2c12: f043 0208 orr.w r2, r3, #8
2c16: 687b ldr r3, [r7, #4]
2c18: 609a str r2, [r3, #8]
}
2c1a: bf00 nop
2c1c: 370c adds r7, #12
2c1e: 46bd mov sp, r7
2c20: bc80 pop {r7}
2c22: 4770 bx lr
00002c24 <ADC_GetResetCalibrationStatus>:
* @brief Gets the selected ADC reset calibration registers status.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval The new state of ADC reset calibration registers (SET or RESET).
*/
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
{
2c24: b480 push {r7}
2c26: b085 sub sp, #20
2c28: af00 add r7, sp, #0
2c2a: 6078 str r0, [r7, #4]
FlagStatus bitstatus = RESET;
2c2c: 2300 movs r3, #0
2c2e: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of RSTCAL bit */
if ((ADCx->CR2 & CR2_RSTCAL_Set) != (uint32_t)RESET)
2c30: 687b ldr r3, [r7, #4]
2c32: 689b ldr r3, [r3, #8]
2c34: f003 0308 and.w r3, r3, #8
2c38: 2b00 cmp r3, #0
2c3a: d002 beq.n 2c42 <ADC_GetResetCalibrationStatus+0x1e>
{
/* RSTCAL bit is set */
bitstatus = SET;
2c3c: 2301 movs r3, #1
2c3e: 73fb strb r3, [r7, #15]
2c40: e001 b.n 2c46 <ADC_GetResetCalibrationStatus+0x22>
}
else
{
/* RSTCAL bit is reset */
bitstatus = RESET;
2c42: 2300 movs r3, #0
2c44: 73fb strb r3, [r7, #15]
}
/* Return the RSTCAL bit status */
return bitstatus;
2c46: 7bfb ldrb r3, [r7, #15]
}
2c48: 4618 mov r0, r3
2c4a: 3714 adds r7, #20
2c4c: 46bd mov sp, r7
2c4e: bc80 pop {r7}
2c50: 4770 bx lr
00002c52 <ADC_StartCalibration>:
* @brief Starts the selected ADC calibration process.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval None
*/
void ADC_StartCalibration(ADC_TypeDef* ADCx)
{
2c52: b480 push {r7}
2c54: b083 sub sp, #12
2c56: af00 add r7, sp, #0
2c58: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Enable the selected ADC calibration process */
ADCx->CR2 |= CR2_CAL_Set;
2c5a: 687b ldr r3, [r7, #4]
2c5c: 689b ldr r3, [r3, #8]
2c5e: f043 0204 orr.w r2, r3, #4
2c62: 687b ldr r3, [r7, #4]
2c64: 609a str r2, [r3, #8]
}
2c66: bf00 nop
2c68: 370c adds r7, #12
2c6a: 46bd mov sp, r7
2c6c: bc80 pop {r7}
2c6e: 4770 bx lr
00002c70 <ADC_GetCalibrationStatus>:
* @brief Gets the selected ADC calibration status.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval The new state of ADC calibration (SET or RESET).
*/
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
{
2c70: b480 push {r7}
2c72: b085 sub sp, #20
2c74: af00 add r7, sp, #0
2c76: 6078 str r0, [r7, #4]
FlagStatus bitstatus = RESET;
2c78: 2300 movs r3, #0
2c7a: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of CAL bit */
if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET)
2c7c: 687b ldr r3, [r7, #4]
2c7e: 689b ldr r3, [r3, #8]
2c80: f003 0304 and.w r3, r3, #4
2c84: 2b00 cmp r3, #0
2c86: d002 beq.n 2c8e <ADC_GetCalibrationStatus+0x1e>
{
/* CAL bit is set: calibration on going */
bitstatus = SET;
2c88: 2301 movs r3, #1
2c8a: 73fb strb r3, [r7, #15]
2c8c: e001 b.n 2c92 <ADC_GetCalibrationStatus+0x22>
}
else
{
/* CAL bit is reset: end of calibration */
bitstatus = RESET;
2c8e: 2300 movs r3, #0
2c90: 73fb strb r3, [r7, #15]
}
/* Return the CAL bit status */
return bitstatus;
2c92: 7bfb ldrb r3, [r7, #15]
}
2c94: 4618 mov r0, r3
2c96: 3714 adds r7, #20
2c98: 46bd mov sp, r7
2c9a: bc80 pop {r7}
2c9c: 4770 bx lr
00002c9e <ADC_SoftwareStartConvCmd>:
* @param NewState: new state of the selected ADC software start conversion.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2c9e: b480 push {r7}
2ca0: b083 sub sp, #12
2ca2: af00 add r7, sp, #0
2ca4: 6078 str r0, [r7, #4]
2ca6: 460b mov r3, r1
2ca8: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2caa: 78fb ldrb r3, [r7, #3]
2cac: 2b00 cmp r3, #0
2cae: d006 beq.n 2cbe <ADC_SoftwareStartConvCmd+0x20>
{
/* Enable the selected ADC conversion on external event and start the selected
ADC conversion */
ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
2cb0: 687b ldr r3, [r7, #4]
2cb2: 689b ldr r3, [r3, #8]
2cb4: f443 02a0 orr.w r2, r3, #5242880 ; 0x500000
2cb8: 687b ldr r3, [r7, #4]
2cba: 609a str r2, [r3, #8]
{
/* Disable the selected ADC conversion on external event and stop the selected
ADC conversion */
ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
}
}
2cbc: e005 b.n 2cca <ADC_SoftwareStartConvCmd+0x2c>
ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
2cbe: 687b ldr r3, [r7, #4]
2cc0: 689b ldr r3, [r3, #8]
2cc2: f423 02a0 bic.w r2, r3, #5242880 ; 0x500000
2cc6: 687b ldr r3, [r7, #4]
2cc8: 609a str r2, [r3, #8]
}
2cca: bf00 nop
2ccc: 370c adds r7, #12
2cce: 46bd mov sp, r7
2cd0: bc80 pop {r7}
2cd2: 4770 bx lr
00002cd4 <ADC_GetSoftwareStartConvStatus>:
* @brief Gets the selected ADC Software start conversion Status.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval The new state of ADC software start conversion (SET or RESET).
*/
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
{
2cd4: b480 push {r7}
2cd6: b085 sub sp, #20
2cd8: af00 add r7, sp, #0
2cda: 6078 str r0, [r7, #4]
FlagStatus bitstatus = RESET;
2cdc: 2300 movs r3, #0
2cde: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of SWSTART bit */
if ((ADCx->CR2 & CR2_SWSTART_Set) != (uint32_t)RESET)
2ce0: 687b ldr r3, [r7, #4]
2ce2: 689b ldr r3, [r3, #8]
2ce4: f403 0380 and.w r3, r3, #4194304 ; 0x400000
2ce8: 2b00 cmp r3, #0
2cea: d002 beq.n 2cf2 <ADC_GetSoftwareStartConvStatus+0x1e>
{
/* SWSTART bit is set */
bitstatus = SET;
2cec: 2301 movs r3, #1
2cee: 73fb strb r3, [r7, #15]
2cf0: e001 b.n 2cf6 <ADC_GetSoftwareStartConvStatus+0x22>
}
else
{
/* SWSTART bit is reset */
bitstatus = RESET;
2cf2: 2300 movs r3, #0
2cf4: 73fb strb r3, [r7, #15]
}
/* Return the SWSTART bit status */
return bitstatus;
2cf6: 7bfb ldrb r3, [r7, #15]
}
2cf8: 4618 mov r0, r3
2cfa: 3714 adds r7, #20
2cfc: 46bd mov sp, r7
2cfe: bc80 pop {r7}
2d00: 4770 bx lr
00002d02 <ADC_DiscModeChannelCountConfig>:
* @param Number: specifies the discontinuous mode regular channel
* count value. This number must be between 1 and 8.
* @retval None
*/
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)
{
2d02: b480 push {r7}
2d04: b085 sub sp, #20
2d06: af00 add r7, sp, #0
2d08: 6078 str r0, [r7, #4]
2d0a: 460b mov r3, r1
2d0c: 70fb strb r3, [r7, #3]
uint32_t tmpreg1 = 0;
2d0e: 2300 movs r3, #0
2d10: 60fb str r3, [r7, #12]
uint32_t tmpreg2 = 0;
2d12: 2300 movs r3, #0
2d14: 60bb str r3, [r7, #8]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number));
/* Get the old register value */
tmpreg1 = ADCx->CR1;
2d16: 687b ldr r3, [r7, #4]
2d18: 685b ldr r3, [r3, #4]
2d1a: 60fb str r3, [r7, #12]
/* Clear the old discontinuous mode channel count */
tmpreg1 &= CR1_DISCNUM_Reset;
2d1c: 68fb ldr r3, [r7, #12]
2d1e: f423 4360 bic.w r3, r3, #57344 ; 0xe000
2d22: 60fb str r3, [r7, #12]
/* Set the discontinuous mode channel count */
tmpreg2 = Number - 1;
2d24: 78fb ldrb r3, [r7, #3]
2d26: 3b01 subs r3, #1
2d28: 60bb str r3, [r7, #8]
tmpreg1 |= tmpreg2 << 13;
2d2a: 68bb ldr r3, [r7, #8]
2d2c: 035b lsls r3, r3, #13
2d2e: 68fa ldr r2, [r7, #12]
2d30: 4313 orrs r3, r2
2d32: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->CR1 = tmpreg1;
2d34: 687b ldr r3, [r7, #4]
2d36: 68fa ldr r2, [r7, #12]
2d38: 605a str r2, [r3, #4]
}
2d3a: bf00 nop
2d3c: 3714 adds r7, #20
2d3e: 46bd mov sp, r7
2d40: bc80 pop {r7}
2d42: 4770 bx lr
00002d44 <ADC_DiscModeCmd>:
* on regular group channel.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2d44: b480 push {r7}
2d46: b083 sub sp, #12
2d48: af00 add r7, sp, #0
2d4a: 6078 str r0, [r7, #4]
2d4c: 460b mov r3, r1
2d4e: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2d50: 78fb ldrb r3, [r7, #3]
2d52: 2b00 cmp r3, #0
2d54: d006 beq.n 2d64 <ADC_DiscModeCmd+0x20>
{
/* Enable the selected ADC regular discontinuous mode */
ADCx->CR1 |= CR1_DISCEN_Set;
2d56: 687b ldr r3, [r7, #4]
2d58: 685b ldr r3, [r3, #4]
2d5a: f443 6200 orr.w r2, r3, #2048 ; 0x800
2d5e: 687b ldr r3, [r7, #4]
2d60: 605a str r2, [r3, #4]
else
{
/* Disable the selected ADC regular discontinuous mode */
ADCx->CR1 &= CR1_DISCEN_Reset;
}
}
2d62: e005 b.n 2d70 <ADC_DiscModeCmd+0x2c>
ADCx->CR1 &= CR1_DISCEN_Reset;
2d64: 687b ldr r3, [r7, #4]
2d66: 685b ldr r3, [r3, #4]
2d68: f423 6200 bic.w r2, r3, #2048 ; 0x800
2d6c: 687b ldr r3, [r7, #4]
2d6e: 605a str r2, [r3, #4]
}
2d70: bf00 nop
2d72: 370c adds r7, #12
2d74: 46bd mov sp, r7
2d76: bc80 pop {r7}
2d78: 4770 bx lr
00002d7a <ADC_RegularChannelConfig>:
* @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
* @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
* @retval None
*/
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
{
2d7a: b480 push {r7}
2d7c: b085 sub sp, #20
2d7e: af00 add r7, sp, #0
2d80: 6078 str r0, [r7, #4]
2d82: 4608 mov r0, r1
2d84: 4611 mov r1, r2
2d86: 461a mov r2, r3
2d88: 4603 mov r3, r0
2d8a: 70fb strb r3, [r7, #3]
2d8c: 460b mov r3, r1
2d8e: 70bb strb r3, [r7, #2]
2d90: 4613 mov r3, r2
2d92: 707b strb r3, [r7, #1]
uint32_t tmpreg1 = 0, tmpreg2 = 0;
2d94: 2300 movs r3, #0
2d96: 60fb str r3, [r7, #12]
2d98: 2300 movs r3, #0
2d9a: 60bb str r3, [r7, #8]
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_REGULAR_RANK(Rank));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* if ADC_Channel_10 ... ADC_Channel_17 is selected */
if (ADC_Channel > ADC_Channel_9)
2d9c: 78fb ldrb r3, [r7, #3]
2d9e: 2b09 cmp r3, #9
2da0: d923 bls.n 2dea <ADC_RegularChannelConfig+0x70>
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR1;
2da2: 687b ldr r3, [r7, #4]
2da4: 68db ldr r3, [r3, #12]
2da6: 60fb str r3, [r7, #12]
/* Calculate the mask to clear */
tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
2da8: 78fb ldrb r3, [r7, #3]
2daa: f1a3 020a sub.w r2, r3, #10
2dae: 4613 mov r3, r2
2db0: 005b lsls r3, r3, #1
2db2: 4413 add r3, r2
2db4: 2207 movs r2, #7
2db6: fa02 f303 lsl.w r3, r2, r3
2dba: 60bb str r3, [r7, #8]
/* Clear the old channel sample time */
tmpreg1 &= ~tmpreg2;
2dbc: 68bb ldr r3, [r7, #8]
2dbe: 43db mvns r3, r3
2dc0: 68fa ldr r2, [r7, #12]
2dc2: 4013 ands r3, r2
2dc4: 60fb str r3, [r7, #12]
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10));
2dc6: 7879 ldrb r1, [r7, #1]
2dc8: 78fb ldrb r3, [r7, #3]
2dca: f1a3 020a sub.w r2, r3, #10
2dce: 4613 mov r3, r2
2dd0: 005b lsls r3, r3, #1
2dd2: 4413 add r3, r2
2dd4: fa01 f303 lsl.w r3, r1, r3
2dd8: 60bb str r3, [r7, #8]
/* Set the new channel sample time */
tmpreg1 |= tmpreg2;
2dda: 68fa ldr r2, [r7, #12]
2ddc: 68bb ldr r3, [r7, #8]
2dde: 4313 orrs r3, r2
2de0: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->SMPR1 = tmpreg1;
2de2: 687b ldr r3, [r7, #4]
2de4: 68fa ldr r2, [r7, #12]
2de6: 60da str r2, [r3, #12]
2de8: e01e b.n 2e28 <ADC_RegularChannelConfig+0xae>
}
else /* ADC_Channel include in ADC_Channel_[0..9] */
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR2;
2dea: 687b ldr r3, [r7, #4]
2dec: 691b ldr r3, [r3, #16]
2dee: 60fb str r3, [r7, #12]
/* Calculate the mask to clear */
tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
2df0: 78fa ldrb r2, [r7, #3]
2df2: 4613 mov r3, r2
2df4: 005b lsls r3, r3, #1
2df6: 4413 add r3, r2
2df8: 2207 movs r2, #7
2dfa: fa02 f303 lsl.w r3, r2, r3
2dfe: 60bb str r3, [r7, #8]
/* Clear the old channel sample time */
tmpreg1 &= ~tmpreg2;
2e00: 68bb ldr r3, [r7, #8]
2e02: 43db mvns r3, r3
2e04: 68fa ldr r2, [r7, #12]
2e06: 4013 ands r3, r2
2e08: 60fb str r3, [r7, #12]
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
2e0a: 7879 ldrb r1, [r7, #1]
2e0c: 78fa ldrb r2, [r7, #3]
2e0e: 4613 mov r3, r2
2e10: 005b lsls r3, r3, #1
2e12: 4413 add r3, r2
2e14: fa01 f303 lsl.w r3, r1, r3
2e18: 60bb str r3, [r7, #8]
/* Set the new channel sample time */
tmpreg1 |= tmpreg2;
2e1a: 68fa ldr r2, [r7, #12]
2e1c: 68bb ldr r3, [r7, #8]
2e1e: 4313 orrs r3, r2
2e20: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->SMPR2 = tmpreg1;
2e22: 687b ldr r3, [r7, #4]
2e24: 68fa ldr r2, [r7, #12]
2e26: 611a str r2, [r3, #16]
}
/* For Rank 1 to 6 */
if (Rank < 7)
2e28: 78bb ldrb r3, [r7, #2]
2e2a: 2b06 cmp r3, #6
2e2c: d821 bhi.n 2e72 <ADC_RegularChannelConfig+0xf8>
{
/* Get the old register value */
tmpreg1 = ADCx->SQR3;
2e2e: 687b ldr r3, [r7, #4]
2e30: 6b5b ldr r3, [r3, #52] ; 0x34
2e32: 60fb str r3, [r7, #12]
/* Calculate the mask to clear */
tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
2e34: 78bb ldrb r3, [r7, #2]
2e36: 1e5a subs r2, r3, #1
2e38: 4613 mov r3, r2
2e3a: 009b lsls r3, r3, #2
2e3c: 4413 add r3, r2
2e3e: 221f movs r2, #31
2e40: fa02 f303 lsl.w r3, r2, r3
2e44: 60bb str r3, [r7, #8]
/* Clear the old SQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
2e46: 68bb ldr r3, [r7, #8]
2e48: 43db mvns r3, r3
2e4a: 68fa ldr r2, [r7, #12]
2e4c: 4013 ands r3, r2
2e4e: 60fb str r3, [r7, #12]
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
2e50: 78f9 ldrb r1, [r7, #3]
2e52: 78bb ldrb r3, [r7, #2]
2e54: 1e5a subs r2, r3, #1
2e56: 4613 mov r3, r2
2e58: 009b lsls r3, r3, #2
2e5a: 4413 add r3, r2
2e5c: fa01 f303 lsl.w r3, r1, r3
2e60: 60bb str r3, [r7, #8]
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
2e62: 68fa ldr r2, [r7, #12]
2e64: 68bb ldr r3, [r7, #8]
2e66: 4313 orrs r3, r2
2e68: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->SQR3 = tmpreg1;
2e6a: 687b ldr r3, [r7, #4]
2e6c: 68fa ldr r2, [r7, #12]
2e6e: 635a str r2, [r3, #52] ; 0x34
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SQR1 = tmpreg1;
}
}
2e70: e047 b.n 2f02 <ADC_RegularChannelConfig+0x188>
else if (Rank < 13)
2e72: 78bb ldrb r3, [r7, #2]
2e74: 2b0c cmp r3, #12
2e76: d821 bhi.n 2ebc <ADC_RegularChannelConfig+0x142>
tmpreg1 = ADCx->SQR2;
2e78: 687b ldr r3, [r7, #4]
2e7a: 6b1b ldr r3, [r3, #48] ; 0x30
2e7c: 60fb str r3, [r7, #12]
tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
2e7e: 78bb ldrb r3, [r7, #2]
2e80: 1fda subs r2, r3, #7
2e82: 4613 mov r3, r2
2e84: 009b lsls r3, r3, #2
2e86: 4413 add r3, r2
2e88: 221f movs r2, #31
2e8a: fa02 f303 lsl.w r3, r2, r3
2e8e: 60bb str r3, [r7, #8]
tmpreg1 &= ~tmpreg2;
2e90: 68bb ldr r3, [r7, #8]
2e92: 43db mvns r3, r3
2e94: 68fa ldr r2, [r7, #12]
2e96: 4013 ands r3, r2
2e98: 60fb str r3, [r7, #12]
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7));
2e9a: 78f9 ldrb r1, [r7, #3]
2e9c: 78bb ldrb r3, [r7, #2]
2e9e: 1fda subs r2, r3, #7
2ea0: 4613 mov r3, r2
2ea2: 009b lsls r3, r3, #2
2ea4: 4413 add r3, r2
2ea6: fa01 f303 lsl.w r3, r1, r3
2eaa: 60bb str r3, [r7, #8]
tmpreg1 |= tmpreg2;
2eac: 68fa ldr r2, [r7, #12]
2eae: 68bb ldr r3, [r7, #8]
2eb0: 4313 orrs r3, r2
2eb2: 60fb str r3, [r7, #12]
ADCx->SQR2 = tmpreg1;
2eb4: 687b ldr r3, [r7, #4]
2eb6: 68fa ldr r2, [r7, #12]
2eb8: 631a str r2, [r3, #48] ; 0x30
}
2eba: e022 b.n 2f02 <ADC_RegularChannelConfig+0x188>
tmpreg1 = ADCx->SQR1;
2ebc: 687b ldr r3, [r7, #4]
2ebe: 6adb ldr r3, [r3, #44] ; 0x2c
2ec0: 60fb str r3, [r7, #12]
tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
2ec2: 78bb ldrb r3, [r7, #2]
2ec4: f1a3 020d sub.w r2, r3, #13
2ec8: 4613 mov r3, r2
2eca: 009b lsls r3, r3, #2
2ecc: 4413 add r3, r2
2ece: 221f movs r2, #31
2ed0: fa02 f303 lsl.w r3, r2, r3
2ed4: 60bb str r3, [r7, #8]
tmpreg1 &= ~tmpreg2;
2ed6: 68bb ldr r3, [r7, #8]
2ed8: 43db mvns r3, r3
2eda: 68fa ldr r2, [r7, #12]
2edc: 4013 ands r3, r2
2ede: 60fb str r3, [r7, #12]
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13));
2ee0: 78f9 ldrb r1, [r7, #3]
2ee2: 78bb ldrb r3, [r7, #2]
2ee4: f1a3 020d sub.w r2, r3, #13
2ee8: 4613 mov r3, r2
2eea: 009b lsls r3, r3, #2
2eec: 4413 add r3, r2
2eee: fa01 f303 lsl.w r3, r1, r3
2ef2: 60bb str r3, [r7, #8]
tmpreg1 |= tmpreg2;
2ef4: 68fa ldr r2, [r7, #12]
2ef6: 68bb ldr r3, [r7, #8]
2ef8: 4313 orrs r3, r2
2efa: 60fb str r3, [r7, #12]
ADCx->SQR1 = tmpreg1;
2efc: 687b ldr r3, [r7, #4]
2efe: 68fa ldr r2, [r7, #12]
2f00: 62da str r2, [r3, #44] ; 0x2c
}
2f02: bf00 nop
2f04: 3714 adds r7, #20
2f06: 46bd mov sp, r7
2f08: bc80 pop {r7}
2f0a: 4770 bx lr
00002f0c <ADC_ExternalTrigConvCmd>:
* @param NewState: new state of the selected ADC external trigger start of conversion.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2f0c: b480 push {r7}
2f0e: b083 sub sp, #12
2f10: af00 add r7, sp, #0
2f12: 6078 str r0, [r7, #4]
2f14: 460b mov r3, r1
2f16: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2f18: 78fb ldrb r3, [r7, #3]
2f1a: 2b00 cmp r3, #0
2f1c: d006 beq.n 2f2c <ADC_ExternalTrigConvCmd+0x20>
{
/* Enable the selected ADC conversion on external event */
ADCx->CR2 |= CR2_EXTTRIG_Set;
2f1e: 687b ldr r3, [r7, #4]
2f20: 689b ldr r3, [r3, #8]
2f22: f443 1280 orr.w r2, r3, #1048576 ; 0x100000
2f26: 687b ldr r3, [r7, #4]
2f28: 609a str r2, [r3, #8]
else
{
/* Disable the selected ADC conversion on external event */
ADCx->CR2 &= CR2_EXTTRIG_Reset;
}
}
2f2a: e005 b.n 2f38 <ADC_ExternalTrigConvCmd+0x2c>
ADCx->CR2 &= CR2_EXTTRIG_Reset;
2f2c: 687b ldr r3, [r7, #4]
2f2e: 689b ldr r3, [r3, #8]
2f30: f423 1280 bic.w r2, r3, #1048576 ; 0x100000
2f34: 687b ldr r3, [r7, #4]
2f36: 609a str r2, [r3, #8]
}
2f38: bf00 nop
2f3a: 370c adds r7, #12
2f3c: 46bd mov sp, r7
2f3e: bc80 pop {r7}
2f40: 4770 bx lr
00002f42 <ADC_GetConversionValue>:
* @brief Returns the last ADCx conversion result data for regular channel.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval The Data conversion value.
*/
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
{
2f42: b480 push {r7}
2f44: b083 sub sp, #12
2f46: af00 add r7, sp, #0
2f48: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Return the selected ADC conversion value */
return (uint16_t) ADCx->DR;
2f4a: 687b ldr r3, [r7, #4]
2f4c: 6cdb ldr r3, [r3, #76] ; 0x4c
2f4e: b29b uxth r3, r3
}
2f50: 4618 mov r0, r3
2f52: 370c adds r7, #12
2f54: 46bd mov sp, r7
2f56: bc80 pop {r7}
2f58: 4770 bx lr
00002f5a <ADC_GetDualModeConversionValue>:
/**
* @brief Returns the last ADC1 and ADC2 conversion result data in dual mode.
* @retval The Data conversion value.
*/
uint32_t ADC_GetDualModeConversionValue(void)
{
2f5a: b480 push {r7}
2f5c: af00 add r7, sp, #0
/* Return the dual mode conversion value */
return (*(__IO uint32_t *) DR_ADDRESS);
2f5e: 4b03 ldr r3, [pc, #12] ; (2f6c <ADC_GetDualModeConversionValue+0x12>)
2f60: 681b ldr r3, [r3, #0]
}
2f62: 4618 mov r0, r3
2f64: 46bd mov sp, r7
2f66: bc80 pop {r7}
2f68: 4770 bx lr
2f6a: bf00 nop
2f6c: 4001244c .word 0x4001244c
00002f70 <ADC_AutoInjectedConvCmd>:
* @param NewState: new state of the selected ADC auto injected conversion
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2f70: b480 push {r7}
2f72: b083 sub sp, #12
2f74: af00 add r7, sp, #0
2f76: 6078 str r0, [r7, #4]
2f78: 460b mov r3, r1
2f7a: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2f7c: 78fb ldrb r3, [r7, #3]
2f7e: 2b00 cmp r3, #0
2f80: d006 beq.n 2f90 <ADC_AutoInjectedConvCmd+0x20>
{
/* Enable the selected ADC automatic injected group conversion */
ADCx->CR1 |= CR1_JAUTO_Set;
2f82: 687b ldr r3, [r7, #4]
2f84: 685b ldr r3, [r3, #4]
2f86: f443 6280 orr.w r2, r3, #1024 ; 0x400
2f8a: 687b ldr r3, [r7, #4]
2f8c: 605a str r2, [r3, #4]
else
{
/* Disable the selected ADC automatic injected group conversion */
ADCx->CR1 &= CR1_JAUTO_Reset;
}
}
2f8e: e005 b.n 2f9c <ADC_AutoInjectedConvCmd+0x2c>
ADCx->CR1 &= CR1_JAUTO_Reset;
2f90: 687b ldr r3, [r7, #4]
2f92: 685b ldr r3, [r3, #4]
2f94: f423 6280 bic.w r2, r3, #1024 ; 0x400
2f98: 687b ldr r3, [r7, #4]
2f9a: 605a str r2, [r3, #4]
}
2f9c: bf00 nop
2f9e: 370c adds r7, #12
2fa0: 46bd mov sp, r7
2fa2: bc80 pop {r7}
2fa4: 4770 bx lr
00002fa6 <ADC_InjectedDiscModeCmd>:
* on injected group channel.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
2fa6: b480 push {r7}
2fa8: b083 sub sp, #12
2faa: af00 add r7, sp, #0
2fac: 6078 str r0, [r7, #4]
2fae: 460b mov r3, r1
2fb0: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
2fb2: 78fb ldrb r3, [r7, #3]
2fb4: 2b00 cmp r3, #0
2fb6: d006 beq.n 2fc6 <ADC_InjectedDiscModeCmd+0x20>
{
/* Enable the selected ADC injected discontinuous mode */
ADCx->CR1 |= CR1_JDISCEN_Set;
2fb8: 687b ldr r3, [r7, #4]
2fba: 685b ldr r3, [r3, #4]
2fbc: f443 5280 orr.w r2, r3, #4096 ; 0x1000
2fc0: 687b ldr r3, [r7, #4]
2fc2: 605a str r2, [r3, #4]
else
{
/* Disable the selected ADC injected discontinuous mode */
ADCx->CR1 &= CR1_JDISCEN_Reset;
}
}
2fc4: e005 b.n 2fd2 <ADC_InjectedDiscModeCmd+0x2c>
ADCx->CR1 &= CR1_JDISCEN_Reset;
2fc6: 687b ldr r3, [r7, #4]
2fc8: 685b ldr r3, [r3, #4]
2fca: f423 5280 bic.w r2, r3, #4096 ; 0x1000
2fce: 687b ldr r3, [r7, #4]
2fd0: 605a str r2, [r3, #4]
}
2fd2: bf00 nop
2fd4: 370c adds r7, #12
2fd6: 46bd mov sp, r7
2fd8: bc80 pop {r7}
2fda: 4770 bx lr
00002fdc <ADC_ExternalTrigInjectedConvConfig>:
* @arg ADC_ExternalTrigInjecConv_None: Injected conversion started by software and not
* by external trigger (for ADC1, ADC2 and ADC3)
* @retval None
*/
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)
{
2fdc: b480 push {r7}
2fde: b085 sub sp, #20
2fe0: af00 add r7, sp, #0
2fe2: 6078 str r0, [r7, #4]
2fe4: 6039 str r1, [r7, #0]
uint32_t tmpreg = 0;
2fe6: 2300 movs r3, #0
2fe8: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv));
/* Get the old register value */
tmpreg = ADCx->CR2;
2fea: 687b ldr r3, [r7, #4]
2fec: 689b ldr r3, [r3, #8]
2fee: 60fb str r3, [r7, #12]
/* Clear the old external event selection for injected group */
tmpreg &= CR2_JEXTSEL_Reset;
2ff0: 68fb ldr r3, [r7, #12]
2ff2: f423 43e0 bic.w r3, r3, #28672 ; 0x7000
2ff6: 60fb str r3, [r7, #12]
/* Set the external event selection for injected group */
tmpreg |= ADC_ExternalTrigInjecConv;
2ff8: 68fa ldr r2, [r7, #12]
2ffa: 683b ldr r3, [r7, #0]
2ffc: 4313 orrs r3, r2
2ffe: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->CR2 = tmpreg;
3000: 687b ldr r3, [r7, #4]
3002: 68fa ldr r2, [r7, #12]
3004: 609a str r2, [r3, #8]
}
3006: bf00 nop
3008: 3714 adds r7, #20
300a: 46bd mov sp, r7
300c: bc80 pop {r7}
300e: 4770 bx lr
00003010 <ADC_ExternalTrigInjectedConvCmd>:
* injected conversion.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
3010: b480 push {r7}
3012: b083 sub sp, #12
3014: af00 add r7, sp, #0
3016: 6078 str r0, [r7, #4]
3018: 460b mov r3, r1
301a: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
301c: 78fb ldrb r3, [r7, #3]
301e: 2b00 cmp r3, #0
3020: d006 beq.n 3030 <ADC_ExternalTrigInjectedConvCmd+0x20>
{
/* Enable the selected ADC external event selection for injected group */
ADCx->CR2 |= CR2_JEXTTRIG_Set;
3022: 687b ldr r3, [r7, #4]
3024: 689b ldr r3, [r3, #8]
3026: f443 4200 orr.w r2, r3, #32768 ; 0x8000
302a: 687b ldr r3, [r7, #4]
302c: 609a str r2, [r3, #8]
else
{
/* Disable the selected ADC external event selection for injected group */
ADCx->CR2 &= CR2_JEXTTRIG_Reset;
}
}
302e: e005 b.n 303c <ADC_ExternalTrigInjectedConvCmd+0x2c>
ADCx->CR2 &= CR2_JEXTTRIG_Reset;
3030: 687b ldr r3, [r7, #4]
3032: 689b ldr r3, [r3, #8]
3034: f423 4200 bic.w r2, r3, #32768 ; 0x8000
3038: 687b ldr r3, [r7, #4]
303a: 609a str r2, [r3, #8]
}
303c: bf00 nop
303e: 370c adds r7, #12
3040: 46bd mov sp, r7
3042: bc80 pop {r7}
3044: 4770 bx lr
00003046 <ADC_SoftwareStartInjectedConvCmd>:
* @param NewState: new state of the selected ADC software start injected conversion.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
3046: b480 push {r7}
3048: b083 sub sp, #12
304a: af00 add r7, sp, #0
304c: 6078 str r0, [r7, #4]
304e: 460b mov r3, r1
3050: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
3052: 78fb ldrb r3, [r7, #3]
3054: 2b00 cmp r3, #0
3056: d006 beq.n 3066 <ADC_SoftwareStartInjectedConvCmd+0x20>
{
/* Enable the selected ADC conversion for injected group on external event and start the selected
ADC injected conversion */
ADCx->CR2 |= CR2_JEXTTRIG_JSWSTART_Set;
3058: 687b ldr r3, [r7, #4]
305a: 689b ldr r3, [r3, #8]
305c: f443 1202 orr.w r2, r3, #2129920 ; 0x208000
3060: 687b ldr r3, [r7, #4]
3062: 609a str r2, [r3, #8]
{
/* Disable the selected ADC conversion on external event for injected group and stop the selected
ADC injected conversion */
ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
}
}
3064: e005 b.n 3072 <ADC_SoftwareStartInjectedConvCmd+0x2c>
ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
3066: 687b ldr r3, [r7, #4]
3068: 689b ldr r3, [r3, #8]
306a: f423 1202 bic.w r2, r3, #2129920 ; 0x208000
306e: 687b ldr r3, [r7, #4]
3070: 609a str r2, [r3, #8]
}
3072: bf00 nop
3074: 370c adds r7, #12
3076: 46bd mov sp, r7
3078: bc80 pop {r7}
307a: 4770 bx lr
0000307c <ADC_GetSoftwareStartInjectedConvCmdStatus>:
* @brief Gets the selected ADC Software start injected conversion Status.
* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
* @retval The new state of ADC software start injected conversion (SET or RESET).
*/
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)
{
307c: b480 push {r7}
307e: b085 sub sp, #20
3080: af00 add r7, sp, #0
3082: 6078 str r0, [r7, #4]
FlagStatus bitstatus = RESET;
3084: 2300 movs r3, #0
3086: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of JSWSTART bit */
if ((ADCx->CR2 & CR2_JSWSTART_Set) != (uint32_t)RESET)
3088: 687b ldr r3, [r7, #4]
308a: 689b ldr r3, [r3, #8]
308c: f403 1300 and.w r3, r3, #2097152 ; 0x200000
3090: 2b00 cmp r3, #0
3092: d002 beq.n 309a <ADC_GetSoftwareStartInjectedConvCmdStatus+0x1e>
{
/* JSWSTART bit is set */
bitstatus = SET;
3094: 2301 movs r3, #1
3096: 73fb strb r3, [r7, #15]
3098: e001 b.n 309e <ADC_GetSoftwareStartInjectedConvCmdStatus+0x22>
}
else
{
/* JSWSTART bit is reset */
bitstatus = RESET;
309a: 2300 movs r3, #0
309c: 73fb strb r3, [r7, #15]
}
/* Return the JSWSTART bit status */
return bitstatus;
309e: 7bfb ldrb r3, [r7, #15]
}
30a0: 4618 mov r0, r3
30a2: 3714 adds r7, #20
30a4: 46bd mov sp, r7
30a6: bc80 pop {r7}
30a8: 4770 bx lr
000030aa <ADC_InjectedChannelConfig>:
* @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
* @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
* @retval None
*/
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
{
30aa: b480 push {r7}
30ac: b087 sub sp, #28
30ae: af00 add r7, sp, #0
30b0: 6078 str r0, [r7, #4]
30b2: 4608 mov r0, r1
30b4: 4611 mov r1, r2
30b6: 461a mov r2, r3
30b8: 4603 mov r3, r0
30ba: 70fb strb r3, [r7, #3]
30bc: 460b mov r3, r1
30be: 70bb strb r3, [r7, #2]
30c0: 4613 mov r3, r2
30c2: 707b strb r3, [r7, #1]
uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0;
30c4: 2300 movs r3, #0
30c6: 617b str r3, [r7, #20]
30c8: 2300 movs r3, #0
30ca: 613b str r3, [r7, #16]
30cc: 2300 movs r3, #0
30ce: 60fb str r3, [r7, #12]
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_INJECTED_RANK(Rank));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* if ADC_Channel_10 ... ADC_Channel_17 is selected */
if (ADC_Channel > ADC_Channel_9)
30d0: 78fb ldrb r3, [r7, #3]
30d2: 2b09 cmp r3, #9
30d4: d923 bls.n 311e <ADC_InjectedChannelConfig+0x74>
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR1;
30d6: 687b ldr r3, [r7, #4]
30d8: 68db ldr r3, [r3, #12]
30da: 617b str r3, [r7, #20]
/* Calculate the mask to clear */
tmpreg2 = SMPR1_SMP_Set << (3*(ADC_Channel - 10));
30dc: 78fb ldrb r3, [r7, #3]
30de: f1a3 020a sub.w r2, r3, #10
30e2: 4613 mov r3, r2
30e4: 005b lsls r3, r3, #1
30e6: 4413 add r3, r2
30e8: 2207 movs r2, #7
30ea: fa02 f303 lsl.w r3, r2, r3
30ee: 613b str r3, [r7, #16]
/* Clear the old channel sample time */
tmpreg1 &= ~tmpreg2;
30f0: 693b ldr r3, [r7, #16]
30f2: 43db mvns r3, r3
30f4: 697a ldr r2, [r7, #20]
30f6: 4013 ands r3, r2
30f8: 617b str r3, [r7, #20]
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10));
30fa: 7879 ldrb r1, [r7, #1]
30fc: 78fb ldrb r3, [r7, #3]
30fe: f1a3 020a sub.w r2, r3, #10
3102: 4613 mov r3, r2
3104: 005b lsls r3, r3, #1
3106: 4413 add r3, r2
3108: fa01 f303 lsl.w r3, r1, r3
310c: 613b str r3, [r7, #16]
/* Set the new channel sample time */
tmpreg1 |= tmpreg2;
310e: 697a ldr r2, [r7, #20]
3110: 693b ldr r3, [r7, #16]
3112: 4313 orrs r3, r2
3114: 617b str r3, [r7, #20]
/* Store the new register value */
ADCx->SMPR1 = tmpreg1;
3116: 687b ldr r3, [r7, #4]
3118: 697a ldr r2, [r7, #20]
311a: 60da str r2, [r3, #12]
311c: e01e b.n 315c <ADC_InjectedChannelConfig+0xb2>
}
else /* ADC_Channel include in ADC_Channel_[0..9] */
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR2;
311e: 687b ldr r3, [r7, #4]
3120: 691b ldr r3, [r3, #16]
3122: 617b str r3, [r7, #20]
/* Calculate the mask to clear */
tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
3124: 78fa ldrb r2, [r7, #3]
3126: 4613 mov r3, r2
3128: 005b lsls r3, r3, #1
312a: 4413 add r3, r2
312c: 2207 movs r2, #7
312e: fa02 f303 lsl.w r3, r2, r3
3132: 613b str r3, [r7, #16]
/* Clear the old channel sample time */
tmpreg1 &= ~tmpreg2;
3134: 693b ldr r3, [r7, #16]
3136: 43db mvns r3, r3
3138: 697a ldr r2, [r7, #20]
313a: 4013 ands r3, r2
313c: 617b str r3, [r7, #20]
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
313e: 7879 ldrb r1, [r7, #1]
3140: 78fa ldrb r2, [r7, #3]
3142: 4613 mov r3, r2
3144: 005b lsls r3, r3, #1
3146: 4413 add r3, r2
3148: fa01 f303 lsl.w r3, r1, r3
314c: 613b str r3, [r7, #16]
/* Set the new channel sample time */
tmpreg1 |= tmpreg2;
314e: 697a ldr r2, [r7, #20]
3150: 693b ldr r3, [r7, #16]
3152: 4313 orrs r3, r2
3154: 617b str r3, [r7, #20]
/* Store the new register value */
ADCx->SMPR2 = tmpreg1;
3156: 687b ldr r3, [r7, #4]
3158: 697a ldr r2, [r7, #20]
315a: 611a str r2, [r3, #16]
}
/* Rank configuration */
/* Get the old register value */
tmpreg1 = ADCx->JSQR;
315c: 687b ldr r3, [r7, #4]
315e: 6b9b ldr r3, [r3, #56] ; 0x38
3160: 617b str r3, [r7, #20]
/* Get JL value: Number = JL+1 */
tmpreg3 = (tmpreg1 & JSQR_JL_Set)>> 20;
3162: 697b ldr r3, [r7, #20]
3164: 0d1b lsrs r3, r3, #20
3166: f003 0303 and.w r3, r3, #3
316a: 60fb str r3, [r7, #12]
/* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */
tmpreg2 = JSQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
316c: 68fb ldr r3, [r7, #12]
316e: b2db uxtb r3, r3
3170: 78ba ldrb r2, [r7, #2]
3172: 1ad3 subs r3, r2, r3
3174: b2db uxtb r3, r3
3176: 3302 adds r3, #2
3178: b2db uxtb r3, r3
317a: 461a mov r2, r3
317c: 4613 mov r3, r2
317e: 009b lsls r3, r3, #2
3180: 4413 add r3, r2
3182: 221f movs r2, #31
3184: fa02 f303 lsl.w r3, r2, r3
3188: 613b str r3, [r7, #16]
/* Clear the old JSQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
318a: 693b ldr r3, [r7, #16]
318c: 43db mvns r3, r3
318e: 697a ldr r2, [r7, #20]
3190: 4013 ands r3, r2
3192: 617b str r3, [r7, #20]
/* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */
tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
3194: 78fa ldrb r2, [r7, #3]
3196: 68fb ldr r3, [r7, #12]
3198: b2db uxtb r3, r3
319a: 78b9 ldrb r1, [r7, #2]
319c: 1acb subs r3, r1, r3
319e: b2db uxtb r3, r3
31a0: 3302 adds r3, #2
31a2: b2db uxtb r3, r3
31a4: 4619 mov r1, r3
31a6: 460b mov r3, r1
31a8: 009b lsls r3, r3, #2
31aa: 440b add r3, r1
31ac: fa02 f303 lsl.w r3, r2, r3
31b0: 613b str r3, [r7, #16]
/* Set the JSQx bits for the selected rank */
tmpreg1 |= tmpreg2;
31b2: 697a ldr r2, [r7, #20]
31b4: 693b ldr r3, [r7, #16]
31b6: 4313 orrs r3, r2
31b8: 617b str r3, [r7, #20]
/* Store the new register value */
ADCx->JSQR = tmpreg1;
31ba: 687b ldr r3, [r7, #4]
31bc: 697a ldr r2, [r7, #20]
31be: 639a str r2, [r3, #56] ; 0x38
}
31c0: bf00 nop
31c2: 371c adds r7, #28
31c4: 46bd mov sp, r7
31c6: bc80 pop {r7}
31c8: 4770 bx lr
000031ca <ADC_InjectedSequencerLengthConfig>:
* @param Length: The sequencer length.
* This parameter must be a number between 1 to 4.
* @retval None
*/
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
{
31ca: b480 push {r7}
31cc: b085 sub sp, #20
31ce: af00 add r7, sp, #0
31d0: 6078 str r0, [r7, #4]
31d2: 460b mov r3, r1
31d4: 70fb strb r3, [r7, #3]
uint32_t tmpreg1 = 0;
31d6: 2300 movs r3, #0
31d8: 60fb str r3, [r7, #12]
uint32_t tmpreg2 = 0;
31da: 2300 movs r3, #0
31dc: 60bb str r3, [r7, #8]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_INJECTED_LENGTH(Length));
/* Get the old register value */
tmpreg1 = ADCx->JSQR;
31de: 687b ldr r3, [r7, #4]
31e0: 6b9b ldr r3, [r3, #56] ; 0x38
31e2: 60fb str r3, [r7, #12]
/* Clear the old injected sequnence lenght JL bits */
tmpreg1 &= JSQR_JL_Reset;
31e4: 68fb ldr r3, [r7, #12]
31e6: f423 1340 bic.w r3, r3, #3145728 ; 0x300000
31ea: 60fb str r3, [r7, #12]
/* Set the injected sequnence lenght JL bits */
tmpreg2 = Length - 1;
31ec: 78fb ldrb r3, [r7, #3]
31ee: 3b01 subs r3, #1
31f0: 60bb str r3, [r7, #8]
tmpreg1 |= tmpreg2 << 20;
31f2: 68bb ldr r3, [r7, #8]
31f4: 051b lsls r3, r3, #20
31f6: 68fa ldr r2, [r7, #12]
31f8: 4313 orrs r3, r2
31fa: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->JSQR = tmpreg1;
31fc: 687b ldr r3, [r7, #4]
31fe: 68fa ldr r2, [r7, #12]
3200: 639a str r2, [r3, #56] ; 0x38
}
3202: bf00 nop
3204: 3714 adds r7, #20
3206: 46bd mov sp, r7
3208: bc80 pop {r7}
320a: 4770 bx lr
0000320c <ADC_SetInjectedOffset>:
* @param Offset: the offset value for the selected ADC injected channel
* This parameter must be a 12bit value.
* @retval None
*/
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
{
320c: b480 push {r7}
320e: b085 sub sp, #20
3210: af00 add r7, sp, #0
3212: 6078 str r0, [r7, #4]
3214: 460b mov r3, r1
3216: 70fb strb r3, [r7, #3]
3218: 4613 mov r3, r2
321a: 803b strh r3, [r7, #0]
__IO uint32_t tmp = 0;
321c: 2300 movs r3, #0
321e: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
assert_param(IS_ADC_OFFSET(Offset));
tmp = (uint32_t)ADCx;
3220: 687b ldr r3, [r7, #4]
3222: 60fb str r3, [r7, #12]
tmp += ADC_InjectedChannel;
3224: 78fa ldrb r2, [r7, #3]
3226: 68fb ldr r3, [r7, #12]
3228: 4413 add r3, r2
322a: 60fb str r3, [r7, #12]
/* Set the selected injected channel data offset */
*(__IO uint32_t *) tmp = (uint32_t)Offset;
322c: 68fb ldr r3, [r7, #12]
322e: 461a mov r2, r3
3230: 883b ldrh r3, [r7, #0]
3232: 6013 str r3, [r2, #0]
}
3234: bf00 nop
3236: 3714 adds r7, #20
3238: 46bd mov sp, r7
323a: bc80 pop {r7}
323c: 4770 bx lr
0000323e <ADC_GetInjectedConversionValue>:
* @arg ADC_InjectedChannel_3: Injected Channel3 selected
* @arg ADC_InjectedChannel_4: Injected Channel4 selected
* @retval The Data conversion value.
*/
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)
{
323e: b480 push {r7}
3240: b085 sub sp, #20
3242: af00 add r7, sp, #0
3244: 6078 str r0, [r7, #4]
3246: 460b mov r3, r1
3248: 70fb strb r3, [r7, #3]
__IO uint32_t tmp = 0;
324a: 2300 movs r3, #0
324c: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
tmp = (uint32_t)ADCx;
324e: 687b ldr r3, [r7, #4]
3250: 60fb str r3, [r7, #12]
tmp += ADC_InjectedChannel + JDR_Offset;
3252: 78fa ldrb r2, [r7, #3]
3254: 68fb ldr r3, [r7, #12]
3256: 4413 add r3, r2
3258: 3328 adds r3, #40 ; 0x28
325a: 60fb str r3, [r7, #12]
/* Returns the selected injected channel conversion data value */
return (uint16_t) (*(__IO uint32_t*) tmp);
325c: 68fb ldr r3, [r7, #12]
325e: 681b ldr r3, [r3, #0]
3260: b29b uxth r3, r3
}
3262: 4618 mov r0, r3
3264: 3714 adds r7, #20
3266: 46bd mov sp, r7
3268: bc80 pop {r7}
326a: 4770 bx lr
0000326c <ADC_AnalogWatchdogCmd>:
* @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels
* @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog
* @retval None
*/
void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)
{
326c: b480 push {r7}
326e: b085 sub sp, #20
3270: af00 add r7, sp, #0
3272: 6078 str r0, [r7, #4]
3274: 6039 str r1, [r7, #0]
uint32_t tmpreg = 0;
3276: 2300 movs r3, #0
3278: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog));
/* Get the old register value */
tmpreg = ADCx->CR1;
327a: 687b ldr r3, [r7, #4]
327c: 685b ldr r3, [r3, #4]
327e: 60fb str r3, [r7, #12]
/* Clear AWDEN, AWDENJ and AWDSGL bits */
tmpreg &= CR1_AWDMode_Reset;
3280: 68fb ldr r3, [r7, #12]
3282: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000
3286: f423 7300 bic.w r3, r3, #512 ; 0x200
328a: 60fb str r3, [r7, #12]
/* Set the analog watchdog enable mode */
tmpreg |= ADC_AnalogWatchdog;
328c: 68fa ldr r2, [r7, #12]
328e: 683b ldr r3, [r7, #0]
3290: 4313 orrs r3, r2
3292: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->CR1 = tmpreg;
3294: 687b ldr r3, [r7, #4]
3296: 68fa ldr r2, [r7, #12]
3298: 605a str r2, [r3, #4]
}
329a: bf00 nop
329c: 3714 adds r7, #20
329e: 46bd mov sp, r7
32a0: bc80 pop {r7}
32a2: 4770 bx lr
000032a4 <ADC_AnalogWatchdogThresholdsConfig>:
* This parameter must be a 12bit value.
* @retval None
*/
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,
uint16_t LowThreshold)
{
32a4: b480 push {r7}
32a6: b083 sub sp, #12
32a8: af00 add r7, sp, #0
32aa: 6078 str r0, [r7, #4]
32ac: 460b mov r3, r1
32ae: 807b strh r3, [r7, #2]
32b0: 4613 mov r3, r2
32b2: 803b strh r3, [r7, #0]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_THRESHOLD(HighThreshold));
assert_param(IS_ADC_THRESHOLD(LowThreshold));
/* Set the ADCx high threshold */
ADCx->HTR = HighThreshold;
32b4: 887a ldrh r2, [r7, #2]
32b6: 687b ldr r3, [r7, #4]
32b8: 625a str r2, [r3, #36] ; 0x24
/* Set the ADCx low threshold */
ADCx->LTR = LowThreshold;
32ba: 883a ldrh r2, [r7, #0]
32bc: 687b ldr r3, [r7, #4]
32be: 629a str r2, [r3, #40] ; 0x28
}
32c0: bf00 nop
32c2: 370c adds r7, #12
32c4: 46bd mov sp, r7
32c6: bc80 pop {r7}
32c8: 4770 bx lr
000032ca <ADC_AnalogWatchdogSingleChannelConfig>:
* @arg ADC_Channel_16: ADC Channel16 selected
* @arg ADC_Channel_17: ADC Channel17 selected
* @retval None
*/
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)
{
32ca: b480 push {r7}
32cc: b085 sub sp, #20
32ce: af00 add r7, sp, #0
32d0: 6078 str r0, [r7, #4]
32d2: 460b mov r3, r1
32d4: 70fb strb r3, [r7, #3]
uint32_t tmpreg = 0;
32d6: 2300 movs r3, #0
32d8: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
/* Get the old register value */
tmpreg = ADCx->CR1;
32da: 687b ldr r3, [r7, #4]
32dc: 685b ldr r3, [r3, #4]
32de: 60fb str r3, [r7, #12]
/* Clear the Analog watchdog channel select bits */
tmpreg &= CR1_AWDCH_Reset;
32e0: 68fb ldr r3, [r7, #12]
32e2: f023 031f bic.w r3, r3, #31
32e6: 60fb str r3, [r7, #12]
/* Set the Analog watchdog channel */
tmpreg |= ADC_Channel;
32e8: 78fb ldrb r3, [r7, #3]
32ea: 68fa ldr r2, [r7, #12]
32ec: 4313 orrs r3, r2
32ee: 60fb str r3, [r7, #12]
/* Store the new register value */
ADCx->CR1 = tmpreg;
32f0: 687b ldr r3, [r7, #4]
32f2: 68fa ldr r2, [r7, #12]
32f4: 605a str r2, [r3, #4]
}
32f6: bf00 nop
32f8: 3714 adds r7, #20
32fa: 46bd mov sp, r7
32fc: bc80 pop {r7}
32fe: 4770 bx lr
00003300 <ADC_TempSensorVrefintCmd>:
* @param NewState: new state of the temperature sensor.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void ADC_TempSensorVrefintCmd(FunctionalState NewState)
{
3300: b480 push {r7}
3302: b083 sub sp, #12
3304: af00 add r7, sp, #0
3306: 4603 mov r3, r0
3308: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
330a: 79fb ldrb r3, [r7, #7]
330c: 2b00 cmp r3, #0
330e: d006 beq.n 331e <ADC_TempSensorVrefintCmd+0x1e>
{
/* Enable the temperature sensor and Vrefint channel*/
ADC1->CR2 |= CR2_TSVREFE_Set;
3310: 4b08 ldr r3, [pc, #32] ; (3334 <ADC_TempSensorVrefintCmd+0x34>)
3312: 689b ldr r3, [r3, #8]
3314: 4a07 ldr r2, [pc, #28] ; (3334 <ADC_TempSensorVrefintCmd+0x34>)
3316: f443 0300 orr.w r3, r3, #8388608 ; 0x800000
331a: 6093 str r3, [r2, #8]
else
{
/* Disable the temperature sensor and Vrefint channel*/
ADC1->CR2 &= CR2_TSVREFE_Reset;
}
}
331c: e005 b.n 332a <ADC_TempSensorVrefintCmd+0x2a>
ADC1->CR2 &= CR2_TSVREFE_Reset;
331e: 4b05 ldr r3, [pc, #20] ; (3334 <ADC_TempSensorVrefintCmd+0x34>)
3320: 689b ldr r3, [r3, #8]
3322: 4a04 ldr r2, [pc, #16] ; (3334 <ADC_TempSensorVrefintCmd+0x34>)
3324: f423 0300 bic.w r3, r3, #8388608 ; 0x800000
3328: 6093 str r3, [r2, #8]
}
332a: bf00 nop
332c: 370c adds r7, #12
332e: 46bd mov sp, r7
3330: bc80 pop {r7}
3332: 4770 bx lr
3334: 40012400 .word 0x40012400
00003338 <ADC_GetFlagStatus>:
* @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
* @arg ADC_FLAG_STRT: Start of regular group conversion flag
* @retval The new state of ADC_FLAG (SET or RESET).
*/
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
3338: b480 push {r7}
333a: b085 sub sp, #20
333c: af00 add r7, sp, #0
333e: 6078 str r0, [r7, #4]
3340: 460b mov r3, r1
3342: 70fb strb r3, [r7, #3]
FlagStatus bitstatus = RESET;
3344: 2300 movs r3, #0
3346: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_GET_FLAG(ADC_FLAG));
/* Check the status of the specified ADC flag */
if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET)
3348: 687b ldr r3, [r7, #4]
334a: 681a ldr r2, [r3, #0]
334c: 78fb ldrb r3, [r7, #3]
334e: 4013 ands r3, r2
3350: 2b00 cmp r3, #0
3352: d002 beq.n 335a <ADC_GetFlagStatus+0x22>
{
/* ADC_FLAG is set */
bitstatus = SET;
3354: 2301 movs r3, #1
3356: 73fb strb r3, [r7, #15]
3358: e001 b.n 335e <ADC_GetFlagStatus+0x26>
}
else
{
/* ADC_FLAG is reset */
bitstatus = RESET;
335a: 2300 movs r3, #0
335c: 73fb strb r3, [r7, #15]
}
/* Return the ADC_FLAG status */
return bitstatus;
335e: 7bfb ldrb r3, [r7, #15]
}
3360: 4618 mov r0, r3
3362: 3714 adds r7, #20
3364: 46bd mov sp, r7
3366: bc80 pop {r7}
3368: 4770 bx lr
0000336a <ADC_ClearFlag>:
* @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
* @arg ADC_FLAG_STRT: Start of regular group conversion flag
* @retval None
*/
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
336a: b480 push {r7}
336c: b083 sub sp, #12
336e: af00 add r7, sp, #0
3370: 6078 str r0, [r7, #4]
3372: 460b mov r3, r1
3374: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
/* Clear the selected ADC flags */
ADCx->SR = ~(uint32_t)ADC_FLAG;
3376: 78fb ldrb r3, [r7, #3]
3378: 43da mvns r2, r3
337a: 687b ldr r3, [r7, #4]
337c: 601a str r2, [r3, #0]
}
337e: bf00 nop
3380: 370c adds r7, #12
3382: 46bd mov sp, r7
3384: bc80 pop {r7}
3386: 4770 bx lr
00003388 <ADC_GetITStatus>:
* @arg ADC_IT_AWD: Analog watchdog interrupt mask
* @arg ADC_IT_JEOC: End of injected conversion interrupt mask
* @retval The new state of ADC_IT (SET or RESET).
*/
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)
{
3388: b480 push {r7}
338a: b087 sub sp, #28
338c: af00 add r7, sp, #0
338e: 6078 str r0, [r7, #4]
3390: 460b mov r3, r1
3392: 807b strh r3, [r7, #2]
ITStatus bitstatus = RESET;
3394: 2300 movs r3, #0
3396: 75fb strb r3, [r7, #23]
uint32_t itmask = 0, enablestatus = 0;
3398: 2300 movs r3, #0
339a: 613b str r3, [r7, #16]
339c: 2300 movs r3, #0
339e: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_GET_IT(ADC_IT));
/* Get the ADC IT index */
itmask = ADC_IT >> 8;
33a0: 887b ldrh r3, [r7, #2]
33a2: 0a1b lsrs r3, r3, #8
33a4: b29b uxth r3, r3
33a6: 613b str r3, [r7, #16]
/* Get the ADC_IT enable bit status */
enablestatus = (ADCx->CR1 & (uint8_t)ADC_IT) ;
33a8: 687b ldr r3, [r7, #4]
33aa: 685b ldr r3, [r3, #4]
33ac: 887a ldrh r2, [r7, #2]
33ae: b2d2 uxtb r2, r2
33b0: 4013 ands r3, r2
33b2: 60fb str r3, [r7, #12]
/* Check the status of the specified ADC interrupt */
if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus)
33b4: 687b ldr r3, [r7, #4]
33b6: 681a ldr r2, [r3, #0]
33b8: 693b ldr r3, [r7, #16]
33ba: 4013 ands r3, r2
33bc: 2b00 cmp r3, #0
33be: d005 beq.n 33cc <ADC_GetITStatus+0x44>
33c0: 68fb ldr r3, [r7, #12]
33c2: 2b00 cmp r3, #0
33c4: d002 beq.n 33cc <ADC_GetITStatus+0x44>
{
/* ADC_IT is set */
bitstatus = SET;
33c6: 2301 movs r3, #1
33c8: 75fb strb r3, [r7, #23]
33ca: e001 b.n 33d0 <ADC_GetITStatus+0x48>
}
else
{
/* ADC_IT is reset */
bitstatus = RESET;
33cc: 2300 movs r3, #0
33ce: 75fb strb r3, [r7, #23]
}
/* Return the ADC_IT status */
return bitstatus;
33d0: 7dfb ldrb r3, [r7, #23]
}
33d2: 4618 mov r0, r3
33d4: 371c adds r7, #28
33d6: 46bd mov sp, r7
33d8: bc80 pop {r7}
33da: 4770 bx lr
000033dc <ADC_ClearITPendingBit>:
* @arg ADC_IT_AWD: Analog watchdog interrupt mask
* @arg ADC_IT_JEOC: End of injected conversion interrupt mask
* @retval None
*/
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)
{
33dc: b480 push {r7}
33de: b085 sub sp, #20
33e0: af00 add r7, sp, #0
33e2: 6078 str r0, [r7, #4]
33e4: 460b mov r3, r1
33e6: 807b strh r3, [r7, #2]
uint8_t itmask = 0;
33e8: 2300 movs r3, #0
33ea: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_IT(ADC_IT));
/* Get the ADC IT index */
itmask = (uint8_t)(ADC_IT >> 8);
33ec: 887b ldrh r3, [r7, #2]
33ee: 0a1b lsrs r3, r3, #8
33f0: b29b uxth r3, r3
33f2: 73fb strb r3, [r7, #15]
/* Clear the selected ADC interrupt pending bits */
ADCx->SR = ~(uint32_t)itmask;
33f4: 7bfb ldrb r3, [r7, #15]
33f6: 43da mvns r2, r3
33f8: 687b ldr r3, [r7, #4]
33fa: 601a str r2, [r3, #0]
}
33fc: bf00 nop
33fe: 3714 adds r7, #20
3400: 46bd mov sp, r7
3402: bc80 pop {r7}
3404: 4770 bx lr
3406: bf00 nop
00003408 <TIM_DeInit>:
* @brief Deinitializes the TIMx peripheral registers to their default reset values.
* @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
* @retval None
*/
void TIM_DeInit(TIM_TypeDef* TIMx)
{
3408: b580 push {r7, lr}
340a: b082 sub sp, #8
340c: af00 add r7, sp, #0
340e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
if (TIMx == TIM1)
3410: 687b ldr r3, [r7, #4]
3412: 4a78 ldr r2, [pc, #480] ; (35f4 <TIM_DeInit+0x1ec>)
3414: 4293 cmp r3, r2
3416: d10a bne.n 342e <TIM_DeInit+0x26>
{
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);
3418: 2101 movs r1, #1
341a: f44f 6000 mov.w r0, #2048 ; 0x800
341e: f7fe f9af bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE);
3422: 2100 movs r1, #0
3424: f44f 6000 mov.w r0, #2048 ; 0x800
3428: f7fe f9aa bl 1780 <RCC_APB2PeriphResetCmd>
{
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE);
}
}
}
342c: e0de b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM2)
342e: 687b ldr r3, [r7, #4]
3430: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
3434: d108 bne.n 3448 <TIM_DeInit+0x40>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE);
3436: 2101 movs r1, #1
3438: 2001 movs r0, #1
343a: f7fe f9bf bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE);
343e: 2100 movs r1, #0
3440: 2001 movs r0, #1
3442: f7fe f9bb bl 17bc <RCC_APB1PeriphResetCmd>
}
3446: e0d1 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM3)
3448: 687b ldr r3, [r7, #4]
344a: 4a6b ldr r2, [pc, #428] ; (35f8 <TIM_DeInit+0x1f0>)
344c: 4293 cmp r3, r2
344e: d108 bne.n 3462 <TIM_DeInit+0x5a>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);
3450: 2101 movs r1, #1
3452: 2002 movs r0, #2
3454: f7fe f9b2 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);
3458: 2100 movs r1, #0
345a: 2002 movs r0, #2
345c: f7fe f9ae bl 17bc <RCC_APB1PeriphResetCmd>
}
3460: e0c4 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM4)
3462: 687b ldr r3, [r7, #4]
3464: 4a65 ldr r2, [pc, #404] ; (35fc <TIM_DeInit+0x1f4>)
3466: 4293 cmp r3, r2
3468: d108 bne.n 347c <TIM_DeInit+0x74>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);
346a: 2101 movs r1, #1
346c: 2004 movs r0, #4
346e: f7fe f9a5 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE);
3472: 2100 movs r1, #0
3474: 2004 movs r0, #4
3476: f7fe f9a1 bl 17bc <RCC_APB1PeriphResetCmd>
}
347a: e0b7 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM5)
347c: 687b ldr r3, [r7, #4]
347e: 4a60 ldr r2, [pc, #384] ; (3600 <TIM_DeInit+0x1f8>)
3480: 4293 cmp r3, r2
3482: d108 bne.n 3496 <TIM_DeInit+0x8e>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, ENABLE);
3484: 2101 movs r1, #1
3486: 2008 movs r0, #8
3488: f7fe f998 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, DISABLE);
348c: 2100 movs r1, #0
348e: 2008 movs r0, #8
3490: f7fe f994 bl 17bc <RCC_APB1PeriphResetCmd>
}
3494: e0aa b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM6)
3496: 687b ldr r3, [r7, #4]
3498: 4a5a ldr r2, [pc, #360] ; (3604 <TIM_DeInit+0x1fc>)
349a: 4293 cmp r3, r2
349c: d108 bne.n 34b0 <TIM_DeInit+0xa8>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, ENABLE);
349e: 2101 movs r1, #1
34a0: 2010 movs r0, #16
34a2: f7fe f98b bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, DISABLE);
34a6: 2100 movs r1, #0
34a8: 2010 movs r0, #16
34aa: f7fe f987 bl 17bc <RCC_APB1PeriphResetCmd>
}
34ae: e09d b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM7)
34b0: 687b ldr r3, [r7, #4]
34b2: 4a55 ldr r2, [pc, #340] ; (3608 <TIM_DeInit+0x200>)
34b4: 4293 cmp r3, r2
34b6: d108 bne.n 34ca <TIM_DeInit+0xc2>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, ENABLE);
34b8: 2101 movs r1, #1
34ba: 2020 movs r0, #32
34bc: f7fe f97e bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, DISABLE);
34c0: 2100 movs r1, #0
34c2: 2020 movs r0, #32
34c4: f7fe f97a bl 17bc <RCC_APB1PeriphResetCmd>
}
34c8: e090 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM8)
34ca: 687b ldr r3, [r7, #4]
34cc: 4a4f ldr r2, [pc, #316] ; (360c <TIM_DeInit+0x204>)
34ce: 4293 cmp r3, r2
34d0: d10a bne.n 34e8 <TIM_DeInit+0xe0>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, ENABLE);
34d2: 2101 movs r1, #1
34d4: f44f 5000 mov.w r0, #8192 ; 0x2000
34d8: f7fe f952 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, DISABLE);
34dc: 2100 movs r1, #0
34de: f44f 5000 mov.w r0, #8192 ; 0x2000
34e2: f7fe f94d bl 1780 <RCC_APB2PeriphResetCmd>
}
34e6: e081 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM9)
34e8: 687b ldr r3, [r7, #4]
34ea: 4a49 ldr r2, [pc, #292] ; (3610 <TIM_DeInit+0x208>)
34ec: 4293 cmp r3, r2
34ee: d10a bne.n 3506 <TIM_DeInit+0xfe>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, ENABLE);
34f0: 2101 movs r1, #1
34f2: f44f 2000 mov.w r0, #524288 ; 0x80000
34f6: f7fe f943 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, DISABLE);
34fa: 2100 movs r1, #0
34fc: f44f 2000 mov.w r0, #524288 ; 0x80000
3500: f7fe f93e bl 1780 <RCC_APB2PeriphResetCmd>
}
3504: e072 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM10)
3506: 687b ldr r3, [r7, #4]
3508: 4a42 ldr r2, [pc, #264] ; (3614 <TIM_DeInit+0x20c>)
350a: 4293 cmp r3, r2
350c: d10a bne.n 3524 <TIM_DeInit+0x11c>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, ENABLE);
350e: 2101 movs r1, #1
3510: f44f 1080 mov.w r0, #1048576 ; 0x100000
3514: f7fe f934 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, DISABLE);
3518: 2100 movs r1, #0
351a: f44f 1080 mov.w r0, #1048576 ; 0x100000
351e: f7fe f92f bl 1780 <RCC_APB2PeriphResetCmd>
}
3522: e063 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM11)
3524: 687b ldr r3, [r7, #4]
3526: 4a3c ldr r2, [pc, #240] ; (3618 <TIM_DeInit+0x210>)
3528: 4293 cmp r3, r2
352a: d10a bne.n 3542 <TIM_DeInit+0x13a>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, ENABLE);
352c: 2101 movs r1, #1
352e: f44f 1000 mov.w r0, #2097152 ; 0x200000
3532: f7fe f925 bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, DISABLE);
3536: 2100 movs r1, #0
3538: f44f 1000 mov.w r0, #2097152 ; 0x200000
353c: f7fe f920 bl 1780 <RCC_APB2PeriphResetCmd>
}
3540: e054 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM12)
3542: 687b ldr r3, [r7, #4]
3544: 4a35 ldr r2, [pc, #212] ; (361c <TIM_DeInit+0x214>)
3546: 4293 cmp r3, r2
3548: d108 bne.n 355c <TIM_DeInit+0x154>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, ENABLE);
354a: 2101 movs r1, #1
354c: 2040 movs r0, #64 ; 0x40
354e: f7fe f935 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, DISABLE);
3552: 2100 movs r1, #0
3554: 2040 movs r0, #64 ; 0x40
3556: f7fe f931 bl 17bc <RCC_APB1PeriphResetCmd>
}
355a: e047 b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM13)
355c: 687b ldr r3, [r7, #4]
355e: 4a30 ldr r2, [pc, #192] ; (3620 <TIM_DeInit+0x218>)
3560: 4293 cmp r3, r2
3562: d108 bne.n 3576 <TIM_DeInit+0x16e>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, ENABLE);
3564: 2101 movs r1, #1
3566: 2080 movs r0, #128 ; 0x80
3568: f7fe f928 bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, DISABLE);
356c: 2100 movs r1, #0
356e: 2080 movs r0, #128 ; 0x80
3570: f7fe f924 bl 17bc <RCC_APB1PeriphResetCmd>
}
3574: e03a b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM14)
3576: 687b ldr r3, [r7, #4]
3578: 4a2a ldr r2, [pc, #168] ; (3624 <TIM_DeInit+0x21c>)
357a: 4293 cmp r3, r2
357c: d10a bne.n 3594 <TIM_DeInit+0x18c>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, ENABLE);
357e: 2101 movs r1, #1
3580: f44f 7080 mov.w r0, #256 ; 0x100
3584: f7fe f91a bl 17bc <RCC_APB1PeriphResetCmd>
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, DISABLE);
3588: 2100 movs r1, #0
358a: f44f 7080 mov.w r0, #256 ; 0x100
358e: f7fe f915 bl 17bc <RCC_APB1PeriphResetCmd>
}
3592: e02b b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM15)
3594: 687b ldr r3, [r7, #4]
3596: 4a24 ldr r2, [pc, #144] ; (3628 <TIM_DeInit+0x220>)
3598: 4293 cmp r3, r2
359a: d10a bne.n 35b2 <TIM_DeInit+0x1aa>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, ENABLE);
359c: 2101 movs r1, #1
359e: f44f 3080 mov.w r0, #65536 ; 0x10000
35a2: f7fe f8ed bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, DISABLE);
35a6: 2100 movs r1, #0
35a8: f44f 3080 mov.w r0, #65536 ; 0x10000
35ac: f7fe f8e8 bl 1780 <RCC_APB2PeriphResetCmd>
}
35b0: e01c b.n 35ec <TIM_DeInit+0x1e4>
else if (TIMx == TIM16)
35b2: 687b ldr r3, [r7, #4]
35b4: 4a1d ldr r2, [pc, #116] ; (362c <TIM_DeInit+0x224>)
35b6: 4293 cmp r3, r2
35b8: d10a bne.n 35d0 <TIM_DeInit+0x1c8>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, ENABLE);
35ba: 2101 movs r1, #1
35bc: f44f 3000 mov.w r0, #131072 ; 0x20000
35c0: f7fe f8de bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, DISABLE);
35c4: 2100 movs r1, #0
35c6: f44f 3000 mov.w r0, #131072 ; 0x20000
35ca: f7fe f8d9 bl 1780 <RCC_APB2PeriphResetCmd>
}
35ce: e00d b.n 35ec <TIM_DeInit+0x1e4>
if (TIMx == TIM17)
35d0: 687b ldr r3, [r7, #4]
35d2: 4a17 ldr r2, [pc, #92] ; (3630 <TIM_DeInit+0x228>)
35d4: 4293 cmp r3, r2
35d6: d109 bne.n 35ec <TIM_DeInit+0x1e4>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE);
35d8: 2101 movs r1, #1
35da: f44f 2080 mov.w r0, #262144 ; 0x40000
35de: f7fe f8cf bl 1780 <RCC_APB2PeriphResetCmd>
RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE);
35e2: 2100 movs r1, #0
35e4: f44f 2080 mov.w r0, #262144 ; 0x40000
35e8: f7fe f8ca bl 1780 <RCC_APB2PeriphResetCmd>
}
35ec: bf00 nop
35ee: 3708 adds r7, #8
35f0: 46bd mov sp, r7
35f2: bd80 pop {r7, pc}
35f4: 40012c00 .word 0x40012c00
35f8: 40000400 .word 0x40000400
35fc: 40000800 .word 0x40000800
3600: 40000c00 .word 0x40000c00
3604: 40001000 .word 0x40001000
3608: 40001400 .word 0x40001400
360c: 40013400 .word 0x40013400
3610: 40014c00 .word 0x40014c00
3614: 40015000 .word 0x40015000
3618: 40015400 .word 0x40015400
361c: 40001800 .word 0x40001800
3620: 40001c00 .word 0x40001c00
3624: 40002000 .word 0x40002000
3628: 40014000 .word 0x40014000
362c: 40014400 .word 0x40014400
3630: 40014800 .word 0x40014800
00003634 <TIM_TimeBaseInit>:
* structure that contains the configuration information for the
* specified TIM peripheral.
* @retval None
*/
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
{
3634: b480 push {r7}
3636: b085 sub sp, #20
3638: af00 add r7, sp, #0
363a: 6078 str r0, [r7, #4]
363c: 6039 str r1, [r7, #0]
uint16_t tmpcr1 = 0;
363e: 2300 movs r3, #0
3640: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode));
assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision));
tmpcr1 = TIMx->CR1;
3642: 687b ldr r3, [r7, #4]
3644: 881b ldrh r3, [r3, #0]
3646: 81fb strh r3, [r7, #14]
if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM2) || (TIMx == TIM3)||
3648: 687b ldr r3, [r7, #4]
364a: 4a2e ldr r2, [pc, #184] ; (3704 <TIM_TimeBaseInit+0xd0>)
364c: 4293 cmp r3, r2
364e: d013 beq.n 3678 <TIM_TimeBaseInit+0x44>
3650: 687b ldr r3, [r7, #4]
3652: 4a2d ldr r2, [pc, #180] ; (3708 <TIM_TimeBaseInit+0xd4>)
3654: 4293 cmp r3, r2
3656: d00f beq.n 3678 <TIM_TimeBaseInit+0x44>
3658: 687b ldr r3, [r7, #4]
365a: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
365e: d00b beq.n 3678 <TIM_TimeBaseInit+0x44>
3660: 687b ldr r3, [r7, #4]
3662: 4a2a ldr r2, [pc, #168] ; (370c <TIM_TimeBaseInit+0xd8>)
3664: 4293 cmp r3, r2
3666: d007 beq.n 3678 <TIM_TimeBaseInit+0x44>
3668: 687b ldr r3, [r7, #4]
366a: 4a29 ldr r2, [pc, #164] ; (3710 <TIM_TimeBaseInit+0xdc>)
366c: 4293 cmp r3, r2
366e: d003 beq.n 3678 <TIM_TimeBaseInit+0x44>
(TIMx == TIM4) || (TIMx == TIM5))
3670: 687b ldr r3, [r7, #4]
3672: 4a28 ldr r2, [pc, #160] ; (3714 <TIM_TimeBaseInit+0xe0>)
3674: 4293 cmp r3, r2
3676: d108 bne.n 368a <TIM_TimeBaseInit+0x56>
{
/* Select the Counter Mode */
tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS)));
3678: 89fb ldrh r3, [r7, #14]
367a: f023 0370 bic.w r3, r3, #112 ; 0x70
367e: 81fb strh r3, [r7, #14]
tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode;
3680: 683b ldr r3, [r7, #0]
3682: 885a ldrh r2, [r3, #2]
3684: 89fb ldrh r3, [r7, #14]
3686: 4313 orrs r3, r2
3688: 81fb strh r3, [r7, #14]
}
if((TIMx != TIM6) && (TIMx != TIM7))
368a: 687b ldr r3, [r7, #4]
368c: 4a22 ldr r2, [pc, #136] ; (3718 <TIM_TimeBaseInit+0xe4>)
368e: 4293 cmp r3, r2
3690: d00c beq.n 36ac <TIM_TimeBaseInit+0x78>
3692: 687b ldr r3, [r7, #4]
3694: 4a21 ldr r2, [pc, #132] ; (371c <TIM_TimeBaseInit+0xe8>)
3696: 4293 cmp r3, r2
3698: d008 beq.n 36ac <TIM_TimeBaseInit+0x78>
{
/* Set the clock division */
tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CR1_CKD));
369a: 89fb ldrh r3, [r7, #14]
369c: f423 7340 bic.w r3, r3, #768 ; 0x300
36a0: 81fb strh r3, [r7, #14]
tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision;
36a2: 683b ldr r3, [r7, #0]
36a4: 88da ldrh r2, [r3, #6]
36a6: 89fb ldrh r3, [r7, #14]
36a8: 4313 orrs r3, r2
36aa: 81fb strh r3, [r7, #14]
}
TIMx->CR1 = tmpcr1;
36ac: 687b ldr r3, [r7, #4]
36ae: 89fa ldrh r2, [r7, #14]
36b0: 801a strh r2, [r3, #0]
/* Set the Autoreload value */
TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ;
36b2: 683b ldr r3, [r7, #0]
36b4: 889a ldrh r2, [r3, #4]
36b6: 687b ldr r3, [r7, #4]
36b8: 859a strh r2, [r3, #44] ; 0x2c
/* Set the Prescaler value */
TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler;
36ba: 683b ldr r3, [r7, #0]
36bc: 881a ldrh r2, [r3, #0]
36be: 687b ldr r3, [r7, #4]
36c0: 851a strh r2, [r3, #40] ; 0x28
if ((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)|| (TIMx == TIM16) || (TIMx == TIM17))
36c2: 687b ldr r3, [r7, #4]
36c4: 4a0f ldr r2, [pc, #60] ; (3704 <TIM_TimeBaseInit+0xd0>)
36c6: 4293 cmp r3, r2
36c8: d00f beq.n 36ea <TIM_TimeBaseInit+0xb6>
36ca: 687b ldr r3, [r7, #4]
36cc: 4a0e ldr r2, [pc, #56] ; (3708 <TIM_TimeBaseInit+0xd4>)
36ce: 4293 cmp r3, r2
36d0: d00b beq.n 36ea <TIM_TimeBaseInit+0xb6>
36d2: 687b ldr r3, [r7, #4]
36d4: 4a12 ldr r2, [pc, #72] ; (3720 <TIM_TimeBaseInit+0xec>)
36d6: 4293 cmp r3, r2
36d8: d007 beq.n 36ea <TIM_TimeBaseInit+0xb6>
36da: 687b ldr r3, [r7, #4]
36dc: 4a11 ldr r2, [pc, #68] ; (3724 <TIM_TimeBaseInit+0xf0>)
36de: 4293 cmp r3, r2
36e0: d003 beq.n 36ea <TIM_TimeBaseInit+0xb6>
36e2: 687b ldr r3, [r7, #4]
36e4: 4a10 ldr r2, [pc, #64] ; (3728 <TIM_TimeBaseInit+0xf4>)
36e6: 4293 cmp r3, r2
36e8: d104 bne.n 36f4 <TIM_TimeBaseInit+0xc0>
{
/* Set the Repetition Counter value */
TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
36ea: 683b ldr r3, [r7, #0]
36ec: 7a1b ldrb r3, [r3, #8]
36ee: b29a uxth r2, r3
36f0: 687b ldr r3, [r7, #4]
36f2: 861a strh r2, [r3, #48] ; 0x30
}
/* Generate an update event to reload the Prescaler and the Repetition counter
values immediately */
TIMx->EGR = TIM_PSCReloadMode_Immediate;
36f4: 687b ldr r3, [r7, #4]
36f6: 2201 movs r2, #1
36f8: 829a strh r2, [r3, #20]
}
36fa: bf00 nop
36fc: 3714 adds r7, #20
36fe: 46bd mov sp, r7
3700: bc80 pop {r7}
3702: 4770 bx lr
3704: 40012c00 .word 0x40012c00
3708: 40013400 .word 0x40013400
370c: 40000400 .word 0x40000400
3710: 40000800 .word 0x40000800
3714: 40000c00 .word 0x40000c00
3718: 40001000 .word 0x40001000
371c: 40001400 .word 0x40001400
3720: 40014000 .word 0x40014000
3724: 40014400 .word 0x40014400
3728: 40014800 .word 0x40014800
0000372c <TIM_OC1Init>:
* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
372c: b480 push {r7}
372e: b085 sub sp, #20
3730: af00 add r7, sp, #0
3732: 6078 str r0, [r7, #4]
3734: 6039 str r1, [r7, #0]
uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
3736: 2300 movs r3, #0
3738: 817b strh r3, [r7, #10]
373a: 2300 movs r3, #0
373c: 81fb strh r3, [r7, #14]
373e: 2300 movs r3, #0
3740: 81bb strh r3, [r7, #12]
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));
/* Disable the Channel 1: Reset the CC1E Bit */
TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E);
3742: 687b ldr r3, [r7, #4]
3744: 8c1b ldrh r3, [r3, #32]
3746: b29b uxth r3, r3
3748: f023 0301 bic.w r3, r3, #1
374c: b29a uxth r2, r3
374e: 687b ldr r3, [r7, #4]
3750: 841a strh r2, [r3, #32]
/* Get the TIMx CCER register value */
tmpccer = TIMx->CCER;
3752: 687b ldr r3, [r7, #4]
3754: 8c1b ldrh r3, [r3, #32]
3756: 81fb strh r3, [r7, #14]
/* Get the TIMx CR2 register value */
tmpcr2 = TIMx->CR2;
3758: 687b ldr r3, [r7, #4]
375a: 889b ldrh r3, [r3, #4]
375c: 81bb strh r3, [r7, #12]
/* Get the TIMx CCMR1 register value */
tmpccmrx = TIMx->CCMR1;
375e: 687b ldr r3, [r7, #4]
3760: 8b1b ldrh r3, [r3, #24]
3762: 817b strh r3, [r7, #10]
/* Reset the Output Compare Mode Bits */
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC1M));
3764: 897b ldrh r3, [r7, #10]
3766: f023 0370 bic.w r3, r3, #112 ; 0x70
376a: 817b strh r3, [r7, #10]
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC1S));
376c: 897b ldrh r3, [r7, #10]
376e: f023 0303 bic.w r3, r3, #3
3772: 817b strh r3, [r7, #10]
/* Select the Output Compare Mode */
tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
3774: 683b ldr r3, [r7, #0]
3776: 881a ldrh r2, [r3, #0]
3778: 897b ldrh r3, [r7, #10]
377a: 4313 orrs r3, r2
377c: 817b strh r3, [r7, #10]
/* Reset the Output Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1P));
377e: 89fb ldrh r3, [r7, #14]
3780: f023 0302 bic.w r3, r3, #2
3784: 81fb strh r3, [r7, #14]
/* Set the Output Compare Polarity */
tmpccer |= TIM_OCInitStruct->TIM_OCPolarity;
3786: 683b ldr r3, [r7, #0]
3788: 891a ldrh r2, [r3, #8]
378a: 89fb ldrh r3, [r7, #14]
378c: 4313 orrs r3, r2
378e: 81fb strh r3, [r7, #14]
/* Set the Output State */
tmpccer |= TIM_OCInitStruct->TIM_OutputState;
3790: 683b ldr r3, [r7, #0]
3792: 885a ldrh r2, [r3, #2]
3794: 89fb ldrh r3, [r7, #14]
3796: 4313 orrs r3, r2
3798: 81fb strh r3, [r7, #14]
if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)||
379a: 687b ldr r3, [r7, #4]
379c: 4a24 ldr r2, [pc, #144] ; (3830 <TIM_OC1Init+0x104>)
379e: 4293 cmp r3, r2
37a0: d00f beq.n 37c2 <TIM_OC1Init+0x96>
37a2: 687b ldr r3, [r7, #4]
37a4: 4a23 ldr r2, [pc, #140] ; (3834 <TIM_OC1Init+0x108>)
37a6: 4293 cmp r3, r2
37a8: d00b beq.n 37c2 <TIM_OC1Init+0x96>
37aa: 687b ldr r3, [r7, #4]
37ac: 4a22 ldr r2, [pc, #136] ; (3838 <TIM_OC1Init+0x10c>)
37ae: 4293 cmp r3, r2
37b0: d007 beq.n 37c2 <TIM_OC1Init+0x96>
37b2: 687b ldr r3, [r7, #4]
37b4: 4a21 ldr r2, [pc, #132] ; (383c <TIM_OC1Init+0x110>)
37b6: 4293 cmp r3, r2
37b8: d003 beq.n 37c2 <TIM_OC1Init+0x96>
(TIMx == TIM16)|| (TIMx == TIM17))
37ba: 687b ldr r3, [r7, #4]
37bc: 4a20 ldr r2, [pc, #128] ; (3840 <TIM_OC1Init+0x114>)
37be: 4293 cmp r3, r2
37c0: d123 bne.n 380a <TIM_OC1Init+0xde>
assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
/* Reset the Output N Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NP));
37c2: 89fb ldrh r3, [r7, #14]
37c4: f023 0308 bic.w r3, r3, #8
37c8: 81fb strh r3, [r7, #14]
/* Set the Output N Polarity */
tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity;
37ca: 683b ldr r3, [r7, #0]
37cc: 895a ldrh r2, [r3, #10]
37ce: 89fb ldrh r3, [r7, #14]
37d0: 4313 orrs r3, r2
37d2: 81fb strh r3, [r7, #14]
/* Reset the Output N State */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NE));
37d4: 89fb ldrh r3, [r7, #14]
37d6: f023 0304 bic.w r3, r3, #4
37da: 81fb strh r3, [r7, #14]
/* Set the Output N State */
tmpccer |= TIM_OCInitStruct->TIM_OutputNState;
37dc: 683b ldr r3, [r7, #0]
37de: 889a ldrh r2, [r3, #4]
37e0: 89fb ldrh r3, [r7, #14]
37e2: 4313 orrs r3, r2
37e4: 81fb strh r3, [r7, #14]
/* Reset the Output Compare and Output Compare N IDLE State */
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1));
37e6: 89bb ldrh r3, [r7, #12]
37e8: f423 7380 bic.w r3, r3, #256 ; 0x100
37ec: 81bb strh r3, [r7, #12]
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1N));
37ee: 89bb ldrh r3, [r7, #12]
37f0: f423 7300 bic.w r3, r3, #512 ; 0x200
37f4: 81bb strh r3, [r7, #12]
/* Set the Output Idle state */
tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState;
37f6: 683b ldr r3, [r7, #0]
37f8: 899a ldrh r2, [r3, #12]
37fa: 89bb ldrh r3, [r7, #12]
37fc: 4313 orrs r3, r2
37fe: 81bb strh r3, [r7, #12]
/* Set the Output N Idle state */
tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState;
3800: 683b ldr r3, [r7, #0]
3802: 89da ldrh r2, [r3, #14]
3804: 89bb ldrh r3, [r7, #12]
3806: 4313 orrs r3, r2
3808: 81bb strh r3, [r7, #12]
}
/* Write to TIMx CR2 */
TIMx->CR2 = tmpcr2;
380a: 687b ldr r3, [r7, #4]
380c: 89ba ldrh r2, [r7, #12]
380e: 809a strh r2, [r3, #4]
/* Write to TIMx CCMR1 */
TIMx->CCMR1 = tmpccmrx;
3810: 687b ldr r3, [r7, #4]
3812: 897a ldrh r2, [r7, #10]
3814: 831a strh r2, [r3, #24]
/* Set the Capture Compare Register value */
TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse;
3816: 683b ldr r3, [r7, #0]
3818: 88da ldrh r2, [r3, #6]
381a: 687b ldr r3, [r7, #4]
381c: 869a strh r2, [r3, #52] ; 0x34
/* Write to TIMx CCER */
TIMx->CCER = tmpccer;
381e: 687b ldr r3, [r7, #4]
3820: 89fa ldrh r2, [r7, #14]
3822: 841a strh r2, [r3, #32]
}
3824: bf00 nop
3826: 3714 adds r7, #20
3828: 46bd mov sp, r7
382a: bc80 pop {r7}
382c: 4770 bx lr
382e: bf00 nop
3830: 40012c00 .word 0x40012c00
3834: 40013400 .word 0x40013400
3838: 40014000 .word 0x40014000
383c: 40014400 .word 0x40014400
3840: 40014800 .word 0x40014800
00003844 <TIM_OC2Init>:
* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
3844: b480 push {r7}
3846: b085 sub sp, #20
3848: af00 add r7, sp, #0
384a: 6078 str r0, [r7, #4]
384c: 6039 str r1, [r7, #0]
uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
384e: 2300 movs r3, #0
3850: 817b strh r3, [r7, #10]
3852: 2300 movs r3, #0
3854: 81fb strh r3, [r7, #14]
3856: 2300 movs r3, #0
3858: 81bb strh r3, [r7, #12]
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));
/* Disable the Channel 2: Reset the CC2E Bit */
TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC2E));
385a: 687b ldr r3, [r7, #4]
385c: 8c1b ldrh r3, [r3, #32]
385e: b29b uxth r3, r3
3860: f023 0310 bic.w r3, r3, #16
3864: b29a uxth r2, r3
3866: 687b ldr r3, [r7, #4]
3868: 841a strh r2, [r3, #32]
/* Get the TIMx CCER register value */
tmpccer = TIMx->CCER;
386a: 687b ldr r3, [r7, #4]
386c: 8c1b ldrh r3, [r3, #32]
386e: 81fb strh r3, [r7, #14]
/* Get the TIMx CR2 register value */
tmpcr2 = TIMx->CR2;
3870: 687b ldr r3, [r7, #4]
3872: 889b ldrh r3, [r3, #4]
3874: 81bb strh r3, [r7, #12]
/* Get the TIMx CCMR1 register value */
tmpccmrx = TIMx->CCMR1;
3876: 687b ldr r3, [r7, #4]
3878: 8b1b ldrh r3, [r3, #24]
387a: 817b strh r3, [r7, #10]
/* Reset the Output Compare mode and Capture/Compare selection Bits */
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC2M));
387c: 897b ldrh r3, [r7, #10]
387e: f423 43e0 bic.w r3, r3, #28672 ; 0x7000
3882: 817b strh r3, [r7, #10]
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S));
3884: 897b ldrh r3, [r7, #10]
3886: f423 7340 bic.w r3, r3, #768 ; 0x300
388a: 817b strh r3, [r7, #10]
/* Select the Output Compare Mode */
tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
388c: 683b ldr r3, [r7, #0]
388e: 881b ldrh r3, [r3, #0]
3890: 021b lsls r3, r3, #8
3892: b29a uxth r2, r3
3894: 897b ldrh r3, [r7, #10]
3896: 4313 orrs r3, r2
3898: 817b strh r3, [r7, #10]
/* Reset the Output Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2P));
389a: 89fb ldrh r3, [r7, #14]
389c: f023 0320 bic.w r3, r3, #32
38a0: 81fb strh r3, [r7, #14]
/* Set the Output Compare Polarity */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
38a2: 683b ldr r3, [r7, #0]
38a4: 891b ldrh r3, [r3, #8]
38a6: 011b lsls r3, r3, #4
38a8: b29a uxth r2, r3
38aa: 89fb ldrh r3, [r7, #14]
38ac: 4313 orrs r3, r2
38ae: 81fb strh r3, [r7, #14]
/* Set the Output State */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4);
38b0: 683b ldr r3, [r7, #0]
38b2: 885b ldrh r3, [r3, #2]
38b4: 011b lsls r3, r3, #4
38b6: b29a uxth r2, r3
38b8: 89fb ldrh r3, [r7, #14]
38ba: 4313 orrs r3, r2
38bc: 81fb strh r3, [r7, #14]
if((TIMx == TIM1) || (TIMx == TIM8))
38be: 687b ldr r3, [r7, #4]
38c0: 4a22 ldr r2, [pc, #136] ; (394c <TIM_OC2Init+0x108>)
38c2: 4293 cmp r3, r2
38c4: d003 beq.n 38ce <TIM_OC2Init+0x8a>
38c6: 687b ldr r3, [r7, #4]
38c8: 4a21 ldr r2, [pc, #132] ; (3950 <TIM_OC2Init+0x10c>)
38ca: 4293 cmp r3, r2
38cc: d12b bne.n 3926 <TIM_OC2Init+0xe2>
assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
/* Reset the Output N Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NP));
38ce: 89fb ldrh r3, [r7, #14]
38d0: f023 0380 bic.w r3, r3, #128 ; 0x80
38d4: 81fb strh r3, [r7, #14]
/* Set the Output N Polarity */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4);
38d6: 683b ldr r3, [r7, #0]
38d8: 895b ldrh r3, [r3, #10]
38da: 011b lsls r3, r3, #4
38dc: b29a uxth r2, r3
38de: 89fb ldrh r3, [r7, #14]
38e0: 4313 orrs r3, r2
38e2: 81fb strh r3, [r7, #14]
/* Reset the Output N State */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NE));
38e4: 89fb ldrh r3, [r7, #14]
38e6: f023 0340 bic.w r3, r3, #64 ; 0x40
38ea: 81fb strh r3, [r7, #14]
/* Set the Output N State */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4);
38ec: 683b ldr r3, [r7, #0]
38ee: 889b ldrh r3, [r3, #4]
38f0: 011b lsls r3, r3, #4
38f2: b29a uxth r2, r3
38f4: 89fb ldrh r3, [r7, #14]
38f6: 4313 orrs r3, r2
38f8: 81fb strh r3, [r7, #14]
/* Reset the Output Compare and Output Compare N IDLE State */
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2));
38fa: 89bb ldrh r3, [r7, #12]
38fc: f423 6380 bic.w r3, r3, #1024 ; 0x400
3900: 81bb strh r3, [r7, #12]
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2N));
3902: 89bb ldrh r3, [r7, #12]
3904: f423 6300 bic.w r3, r3, #2048 ; 0x800
3908: 81bb strh r3, [r7, #12]
/* Set the Output Idle state */
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2);
390a: 683b ldr r3, [r7, #0]
390c: 899b ldrh r3, [r3, #12]
390e: 009b lsls r3, r3, #2
3910: b29a uxth r2, r3
3912: 89bb ldrh r3, [r7, #12]
3914: 4313 orrs r3, r2
3916: 81bb strh r3, [r7, #12]
/* Set the Output N Idle state */
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
3918: 683b ldr r3, [r7, #0]
391a: 89db ldrh r3, [r3, #14]
391c: 009b lsls r3, r3, #2
391e: b29a uxth r2, r3
3920: 89bb ldrh r3, [r7, #12]
3922: 4313 orrs r3, r2
3924: 81bb strh r3, [r7, #12]
}
/* Write to TIMx CR2 */
TIMx->CR2 = tmpcr2;
3926: 687b ldr r3, [r7, #4]
3928: 89ba ldrh r2, [r7, #12]
392a: 809a strh r2, [r3, #4]
/* Write to TIMx CCMR1 */
TIMx->CCMR1 = tmpccmrx;
392c: 687b ldr r3, [r7, #4]
392e: 897a ldrh r2, [r7, #10]
3930: 831a strh r2, [r3, #24]
/* Set the Capture Compare Register value */
TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;
3932: 683b ldr r3, [r7, #0]
3934: 88da ldrh r2, [r3, #6]
3936: 687b ldr r3, [r7, #4]
3938: 871a strh r2, [r3, #56] ; 0x38
/* Write to TIMx CCER */
TIMx->CCER = tmpccer;
393a: 687b ldr r3, [r7, #4]
393c: 89fa ldrh r2, [r7, #14]
393e: 841a strh r2, [r3, #32]
}
3940: bf00 nop
3942: 3714 adds r7, #20
3944: 46bd mov sp, r7
3946: bc80 pop {r7}
3948: 4770 bx lr
394a: bf00 nop
394c: 40012c00 .word 0x40012c00
3950: 40013400 .word 0x40013400
00003954 <TIM_OC3Init>:
* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
3954: b480 push {r7}
3956: b085 sub sp, #20
3958: af00 add r7, sp, #0
395a: 6078 str r0, [r7, #4]
395c: 6039 str r1, [r7, #0]
uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
395e: 2300 movs r3, #0
3960: 817b strh r3, [r7, #10]
3962: 2300 movs r3, #0
3964: 81fb strh r3, [r7, #14]
3966: 2300 movs r3, #0
3968: 81bb strh r3, [r7, #12]
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));
/* Disable the Channel 2: Reset the CC2E Bit */
TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC3E));
396a: 687b ldr r3, [r7, #4]
396c: 8c1b ldrh r3, [r3, #32]
396e: b29b uxth r3, r3
3970: f423 7380 bic.w r3, r3, #256 ; 0x100
3974: b29a uxth r2, r3
3976: 687b ldr r3, [r7, #4]
3978: 841a strh r2, [r3, #32]
/* Get the TIMx CCER register value */
tmpccer = TIMx->CCER;
397a: 687b ldr r3, [r7, #4]
397c: 8c1b ldrh r3, [r3, #32]
397e: 81fb strh r3, [r7, #14]
/* Get the TIMx CR2 register value */
tmpcr2 = TIMx->CR2;
3980: 687b ldr r3, [r7, #4]
3982: 889b ldrh r3, [r3, #4]
3984: 81bb strh r3, [r7, #12]
/* Get the TIMx CCMR2 register value */
tmpccmrx = TIMx->CCMR2;
3986: 687b ldr r3, [r7, #4]
3988: 8b9b ldrh r3, [r3, #28]
398a: 817b strh r3, [r7, #10]
/* Reset the Output Compare mode and Capture/Compare selection Bits */
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC3M));
398c: 897b ldrh r3, [r7, #10]
398e: f023 0370 bic.w r3, r3, #112 ; 0x70
3992: 817b strh r3, [r7, #10]
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC3S));
3994: 897b ldrh r3, [r7, #10]
3996: f023 0303 bic.w r3, r3, #3
399a: 817b strh r3, [r7, #10]
/* Select the Output Compare Mode */
tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
399c: 683b ldr r3, [r7, #0]
399e: 881a ldrh r2, [r3, #0]
39a0: 897b ldrh r3, [r7, #10]
39a2: 4313 orrs r3, r2
39a4: 817b strh r3, [r7, #10]
/* Reset the Output Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3P));
39a6: 89fb ldrh r3, [r7, #14]
39a8: f423 7300 bic.w r3, r3, #512 ; 0x200
39ac: 81fb strh r3, [r7, #14]
/* Set the Output Compare Polarity */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8);
39ae: 683b ldr r3, [r7, #0]
39b0: 891b ldrh r3, [r3, #8]
39b2: 021b lsls r3, r3, #8
39b4: b29a uxth r2, r3
39b6: 89fb ldrh r3, [r7, #14]
39b8: 4313 orrs r3, r2
39ba: 81fb strh r3, [r7, #14]
/* Set the Output State */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8);
39bc: 683b ldr r3, [r7, #0]
39be: 885b ldrh r3, [r3, #2]
39c0: 021b lsls r3, r3, #8
39c2: b29a uxth r2, r3
39c4: 89fb ldrh r3, [r7, #14]
39c6: 4313 orrs r3, r2
39c8: 81fb strh r3, [r7, #14]
if((TIMx == TIM1) || (TIMx == TIM8))
39ca: 687b ldr r3, [r7, #4]
39cc: 4a22 ldr r2, [pc, #136] ; (3a58 <TIM_OC3Init+0x104>)
39ce: 4293 cmp r3, r2
39d0: d003 beq.n 39da <TIM_OC3Init+0x86>
39d2: 687b ldr r3, [r7, #4]
39d4: 4a21 ldr r2, [pc, #132] ; (3a5c <TIM_OC3Init+0x108>)
39d6: 4293 cmp r3, r2
39d8: d12b bne.n 3a32 <TIM_OC3Init+0xde>
assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
/* Reset the Output N Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NP));
39da: 89fb ldrh r3, [r7, #14]
39dc: f423 6300 bic.w r3, r3, #2048 ; 0x800
39e0: 81fb strh r3, [r7, #14]
/* Set the Output N Polarity */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
39e2: 683b ldr r3, [r7, #0]
39e4: 895b ldrh r3, [r3, #10]
39e6: 021b lsls r3, r3, #8
39e8: b29a uxth r2, r3
39ea: 89fb ldrh r3, [r7, #14]
39ec: 4313 orrs r3, r2
39ee: 81fb strh r3, [r7, #14]
/* Reset the Output N State */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NE));
39f0: 89fb ldrh r3, [r7, #14]
39f2: f423 6380 bic.w r3, r3, #1024 ; 0x400
39f6: 81fb strh r3, [r7, #14]
/* Set the Output N State */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8);
39f8: 683b ldr r3, [r7, #0]
39fa: 889b ldrh r3, [r3, #4]
39fc: 021b lsls r3, r3, #8
39fe: b29a uxth r2, r3
3a00: 89fb ldrh r3, [r7, #14]
3a02: 4313 orrs r3, r2
3a04: 81fb strh r3, [r7, #14]
/* Reset the Output Compare and Output Compare N IDLE State */
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3));
3a06: 89bb ldrh r3, [r7, #12]
3a08: f423 5380 bic.w r3, r3, #4096 ; 0x1000
3a0c: 81bb strh r3, [r7, #12]
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3N));
3a0e: 89bb ldrh r3, [r7, #12]
3a10: f423 5300 bic.w r3, r3, #8192 ; 0x2000
3a14: 81bb strh r3, [r7, #12]
/* Set the Output Idle state */
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4);
3a16: 683b ldr r3, [r7, #0]
3a18: 899b ldrh r3, [r3, #12]
3a1a: 011b lsls r3, r3, #4
3a1c: b29a uxth r2, r3
3a1e: 89bb ldrh r3, [r7, #12]
3a20: 4313 orrs r3, r2
3a22: 81bb strh r3, [r7, #12]
/* Set the Output N Idle state */
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
3a24: 683b ldr r3, [r7, #0]
3a26: 89db ldrh r3, [r3, #14]
3a28: 011b lsls r3, r3, #4
3a2a: b29a uxth r2, r3
3a2c: 89bb ldrh r3, [r7, #12]
3a2e: 4313 orrs r3, r2
3a30: 81bb strh r3, [r7, #12]
}
/* Write to TIMx CR2 */
TIMx->CR2 = tmpcr2;
3a32: 687b ldr r3, [r7, #4]
3a34: 89ba ldrh r2, [r7, #12]
3a36: 809a strh r2, [r3, #4]
/* Write to TIMx CCMR2 */
TIMx->CCMR2 = tmpccmrx;
3a38: 687b ldr r3, [r7, #4]
3a3a: 897a ldrh r2, [r7, #10]
3a3c: 839a strh r2, [r3, #28]
/* Set the Capture Compare Register value */
TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
3a3e: 683b ldr r3, [r7, #0]
3a40: 88da ldrh r2, [r3, #6]
3a42: 687b ldr r3, [r7, #4]
3a44: 879a strh r2, [r3, #60] ; 0x3c
/* Write to TIMx CCER */
TIMx->CCER = tmpccer;
3a46: 687b ldr r3, [r7, #4]
3a48: 89fa ldrh r2, [r7, #14]
3a4a: 841a strh r2, [r3, #32]
}
3a4c: bf00 nop
3a4e: 3714 adds r7, #20
3a50: 46bd mov sp, r7
3a52: bc80 pop {r7}
3a54: 4770 bx lr
3a56: bf00 nop
3a58: 40012c00 .word 0x40012c00
3a5c: 40013400 .word 0x40013400
00003a60 <TIM_OC4Init>:
* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
3a60: b480 push {r7}
3a62: b085 sub sp, #20
3a64: af00 add r7, sp, #0
3a66: 6078 str r0, [r7, #4]
3a68: 6039 str r1, [r7, #0]
uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
3a6a: 2300 movs r3, #0
3a6c: 81bb strh r3, [r7, #12]
3a6e: 2300 movs r3, #0
3a70: 817b strh r3, [r7, #10]
3a72: 2300 movs r3, #0
3a74: 81fb strh r3, [r7, #14]
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));
/* Disable the Channel 2: Reset the CC4E Bit */
TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC4E));
3a76: 687b ldr r3, [r7, #4]
3a78: 8c1b ldrh r3, [r3, #32]
3a7a: b29b uxth r3, r3
3a7c: f423 5380 bic.w r3, r3, #4096 ; 0x1000
3a80: b29a uxth r2, r3
3a82: 687b ldr r3, [r7, #4]
3a84: 841a strh r2, [r3, #32]
/* Get the TIMx CCER register value */
tmpccer = TIMx->CCER;
3a86: 687b ldr r3, [r7, #4]
3a88: 8c1b ldrh r3, [r3, #32]
3a8a: 817b strh r3, [r7, #10]
/* Get the TIMx CR2 register value */
tmpcr2 = TIMx->CR2;
3a8c: 687b ldr r3, [r7, #4]
3a8e: 889b ldrh r3, [r3, #4]
3a90: 81fb strh r3, [r7, #14]
/* Get the TIMx CCMR2 register value */
tmpccmrx = TIMx->CCMR2;
3a92: 687b ldr r3, [r7, #4]
3a94: 8b9b ldrh r3, [r3, #28]
3a96: 81bb strh r3, [r7, #12]
/* Reset the Output Compare mode and Capture/Compare selection Bits */
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC4M));
3a98: 89bb ldrh r3, [r7, #12]
3a9a: f423 43e0 bic.w r3, r3, #28672 ; 0x7000
3a9e: 81bb strh r3, [r7, #12]
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC4S));
3aa0: 89bb ldrh r3, [r7, #12]
3aa2: f423 7340 bic.w r3, r3, #768 ; 0x300
3aa6: 81bb strh r3, [r7, #12]
/* Select the Output Compare Mode */
tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
3aa8: 683b ldr r3, [r7, #0]
3aaa: 881b ldrh r3, [r3, #0]
3aac: 021b lsls r3, r3, #8
3aae: b29a uxth r2, r3
3ab0: 89bb ldrh r3, [r7, #12]
3ab2: 4313 orrs r3, r2
3ab4: 81bb strh r3, [r7, #12]
/* Reset the Output Polarity level */
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC4P));
3ab6: 897b ldrh r3, [r7, #10]
3ab8: f423 5300 bic.w r3, r3, #8192 ; 0x2000
3abc: 817b strh r3, [r7, #10]
/* Set the Output Compare Polarity */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12);
3abe: 683b ldr r3, [r7, #0]
3ac0: 891b ldrh r3, [r3, #8]
3ac2: 031b lsls r3, r3, #12
3ac4: b29a uxth r2, r3
3ac6: 897b ldrh r3, [r7, #10]
3ac8: 4313 orrs r3, r2
3aca: 817b strh r3, [r7, #10]
/* Set the Output State */
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12);
3acc: 683b ldr r3, [r7, #0]
3ace: 885b ldrh r3, [r3, #2]
3ad0: 031b lsls r3, r3, #12
3ad2: b29a uxth r2, r3
3ad4: 897b ldrh r3, [r7, #10]
3ad6: 4313 orrs r3, r2
3ad8: 817b strh r3, [r7, #10]
if((TIMx == TIM1) || (TIMx == TIM8))
3ada: 687b ldr r3, [r7, #4]
3adc: 4a12 ldr r2, [pc, #72] ; (3b28 <TIM_OC4Init+0xc8>)
3ade: 4293 cmp r3, r2
3ae0: d003 beq.n 3aea <TIM_OC4Init+0x8a>
3ae2: 687b ldr r3, [r7, #4]
3ae4: 4a11 ldr r2, [pc, #68] ; (3b2c <TIM_OC4Init+0xcc>)
3ae6: 4293 cmp r3, r2
3ae8: d10a bne.n 3b00 <TIM_OC4Init+0xa0>
{
assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
/* Reset the Output Compare IDLE State */
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS4));
3aea: 89fb ldrh r3, [r7, #14]
3aec: f423 4380 bic.w r3, r3, #16384 ; 0x4000
3af0: 81fb strh r3, [r7, #14]
/* Set the Output Idle state */
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6);
3af2: 683b ldr r3, [r7, #0]
3af4: 899b ldrh r3, [r3, #12]
3af6: 019b lsls r3, r3, #6
3af8: b29a uxth r2, r3
3afa: 89fb ldrh r3, [r7, #14]
3afc: 4313 orrs r3, r2
3afe: 81fb strh r3, [r7, #14]
}
/* Write to TIMx CR2 */
TIMx->CR2 = tmpcr2;
3b00: 687b ldr r3, [r7, #4]
3b02: 89fa ldrh r2, [r7, #14]
3b04: 809a strh r2, [r3, #4]
/* Write to TIMx CCMR2 */
TIMx->CCMR2 = tmpccmrx;
3b06: 687b ldr r3, [r7, #4]
3b08: 89ba ldrh r2, [r7, #12]
3b0a: 839a strh r2, [r3, #28]
/* Set the Capture Compare Register value */
TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse;
3b0c: 683b ldr r3, [r7, #0]
3b0e: 88da ldrh r2, [r3, #6]
3b10: 687b ldr r3, [r7, #4]
3b12: f8a3 2040 strh.w r2, [r3, #64] ; 0x40
/* Write to TIMx CCER */
TIMx->CCER = tmpccer;
3b16: 687b ldr r3, [r7, #4]
3b18: 897a ldrh r2, [r7, #10]
3b1a: 841a strh r2, [r3, #32]
}
3b1c: bf00 nop
3b1e: 3714 adds r7, #20
3b20: 46bd mov sp, r7
3b22: bc80 pop {r7}
3b24: 4770 bx lr
3b26: bf00 nop
3b28: 40012c00 .word 0x40012c00
3b2c: 40013400 .word 0x40013400
00003b30 <TIM_ICInit>:
* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
{
3b30: b580 push {r7, lr}
3b32: b082 sub sp, #8
3b34: af00 add r7, sp, #0
3b36: 6078 str r0, [r7, #4]
3b38: 6039 str r1, [r7, #0]
}
else
{
assert_param(IS_TIM_IC_POLARITY_LITE(TIM_ICInitStruct->TIM_ICPolarity));
}
if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
3b3a: 683b ldr r3, [r7, #0]
3b3c: 881b ldrh r3, [r3, #0]
3b3e: 2b00 cmp r3, #0
3b40: d10f bne.n 3b62 <TIM_ICInit+0x32>
{
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
/* TI1 Configuration */
TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
3b42: 683b ldr r3, [r7, #0]
3b44: 8859 ldrh r1, [r3, #2]
3b46: 683b ldr r3, [r7, #0]
3b48: 889a ldrh r2, [r3, #4]
3b4a: 683b ldr r3, [r7, #0]
3b4c: 891b ldrh r3, [r3, #8]
3b4e: 6878 ldr r0, [r7, #4]
3b50: f001 f947 bl 4de2 <TI1_Config>
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value */
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3b54: 683b ldr r3, [r7, #0]
3b56: 88db ldrh r3, [r3, #6]
3b58: 4619 mov r1, r3
3b5a: 6878 ldr r0, [r7, #4]
3b5c: f001 f809 bl 4b72 <TIM_SetIC1Prescaler>
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value */
TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
}
3b60: e036 b.n 3bd0 <TIM_ICInit+0xa0>
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
3b62: 683b ldr r3, [r7, #0]
3b64: 881b ldrh r3, [r3, #0]
3b66: 2b04 cmp r3, #4
3b68: d10f bne.n 3b8a <TIM_ICInit+0x5a>
TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
3b6a: 683b ldr r3, [r7, #0]
3b6c: 8859 ldrh r1, [r3, #2]
3b6e: 683b ldr r3, [r7, #0]
3b70: 889a ldrh r2, [r3, #4]
3b72: 683b ldr r3, [r7, #0]
3b74: 891b ldrh r3, [r3, #8]
3b76: 6878 ldr r0, [r7, #4]
3b78: f001 f9a4 bl 4ec4 <TI2_Config>
TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3b7c: 683b ldr r3, [r7, #0]
3b7e: 88db ldrh r3, [r3, #6]
3b80: 4619 mov r1, r3
3b82: 6878 ldr r0, [r7, #4]
3b84: f001 f810 bl 4ba8 <TIM_SetIC2Prescaler>
}
3b88: e022 b.n 3bd0 <TIM_ICInit+0xa0>
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)
3b8a: 683b ldr r3, [r7, #0]
3b8c: 881b ldrh r3, [r3, #0]
3b8e: 2b08 cmp r3, #8
3b90: d10f bne.n 3bb2 <TIM_ICInit+0x82>
TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
3b92: 683b ldr r3, [r7, #0]
3b94: 8859 ldrh r1, [r3, #2]
3b96: 683b ldr r3, [r7, #0]
3b98: 889a ldrh r2, [r3, #4]
3b9a: 683b ldr r3, [r7, #0]
3b9c: 891b ldrh r3, [r3, #8]
3b9e: 6878 ldr r0, [r7, #4]
3ba0: f001 fa0a bl 4fb8 <TI3_Config>
TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3ba4: 683b ldr r3, [r7, #0]
3ba6: 88db ldrh r3, [r3, #6]
3ba8: 4619 mov r1, r3
3baa: 6878 ldr r0, [r7, #4]
3bac: f001 f819 bl 4be2 <TIM_SetIC3Prescaler>
}
3bb0: e00e b.n 3bd0 <TIM_ICInit+0xa0>
TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
3bb2: 683b ldr r3, [r7, #0]
3bb4: 8859 ldrh r1, [r3, #2]
3bb6: 683b ldr r3, [r7, #0]
3bb8: 889a ldrh r2, [r3, #4]
3bba: 683b ldr r3, [r7, #0]
3bbc: 891b ldrh r3, [r3, #8]
3bbe: 6878 ldr r0, [r7, #4]
3bc0: f001 fa70 bl 50a4 <TI4_Config>
TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3bc4: 683b ldr r3, [r7, #0]
3bc6: 88db ldrh r3, [r3, #6]
3bc8: 4619 mov r1, r3
3bca: 6878 ldr r0, [r7, #4]
3bcc: f001 f824 bl 4c18 <TIM_SetIC4Prescaler>
}
3bd0: bf00 nop
3bd2: 3708 adds r7, #8
3bd4: 46bd mov sp, r7
3bd6: bd80 pop {r7, pc}
00003bd8 <TIM_PWMIConfig>:
* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
* that contains the configuration information for the specified TIM peripheral.
* @retval None
*/
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
{
3bd8: b580 push {r7, lr}
3bda: b084 sub sp, #16
3bdc: af00 add r7, sp, #0
3bde: 6078 str r0, [r7, #4]
3be0: 6039 str r1, [r7, #0]
uint16_t icoppositepolarity = TIM_ICPolarity_Rising;
3be2: 2300 movs r3, #0
3be4: 81fb strh r3, [r7, #14]
uint16_t icoppositeselection = TIM_ICSelection_DirectTI;
3be6: 2301 movs r3, #1
3be8: 81bb strh r3, [r7, #12]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
/* Select the Opposite Input Polarity */
if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising)
3bea: 683b ldr r3, [r7, #0]
3bec: 885b ldrh r3, [r3, #2]
3bee: 2b00 cmp r3, #0
3bf0: d102 bne.n 3bf8 <TIM_PWMIConfig+0x20>
{
icoppositepolarity = TIM_ICPolarity_Falling;
3bf2: 2302 movs r3, #2
3bf4: 81fb strh r3, [r7, #14]
3bf6: e001 b.n 3bfc <TIM_PWMIConfig+0x24>
}
else
{
icoppositepolarity = TIM_ICPolarity_Rising;
3bf8: 2300 movs r3, #0
3bfa: 81fb strh r3, [r7, #14]
}
/* Select the Opposite Input */
if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI)
3bfc: 683b ldr r3, [r7, #0]
3bfe: 889b ldrh r3, [r3, #4]
3c00: 2b01 cmp r3, #1
3c02: d102 bne.n 3c0a <TIM_PWMIConfig+0x32>
{
icoppositeselection = TIM_ICSelection_IndirectTI;
3c04: 2302 movs r3, #2
3c06: 81bb strh r3, [r7, #12]
3c08: e001 b.n 3c0e <TIM_PWMIConfig+0x36>
}
else
{
icoppositeselection = TIM_ICSelection_DirectTI;
3c0a: 2301 movs r3, #1
3c0c: 81bb strh r3, [r7, #12]
}
if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
3c0e: 683b ldr r3, [r7, #0]
3c10: 881b ldrh r3, [r3, #0]
3c12: 2b00 cmp r3, #0
3c14: d11c bne.n 3c50 <TIM_PWMIConfig+0x78>
{
/* TI1 Configuration */
TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
3c16: 683b ldr r3, [r7, #0]
3c18: 8859 ldrh r1, [r3, #2]
3c1a: 683b ldr r3, [r7, #0]
3c1c: 889a ldrh r2, [r3, #4]
3c1e: 683b ldr r3, [r7, #0]
3c20: 891b ldrh r3, [r3, #8]
3c22: 6878 ldr r0, [r7, #4]
3c24: f001 f8dd bl 4de2 <TI1_Config>
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value */
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3c28: 683b ldr r3, [r7, #0]
3c2a: 88db ldrh r3, [r3, #6]
3c2c: 4619 mov r1, r3
3c2e: 6878 ldr r0, [r7, #4]
3c30: f000 ff9f bl 4b72 <TIM_SetIC1Prescaler>
/* TI2 Configuration */
TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
3c34: 683b ldr r3, [r7, #0]
3c36: 891b ldrh r3, [r3, #8]
3c38: 89ba ldrh r2, [r7, #12]
3c3a: 89f9 ldrh r1, [r7, #14]
3c3c: 6878 ldr r0, [r7, #4]
3c3e: f001 f941 bl 4ec4 <TI2_Config>
/* Set the Input Capture Prescaler value */
TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3c42: 683b ldr r3, [r7, #0]
3c44: 88db ldrh r3, [r3, #6]
3c46: 4619 mov r1, r3
3c48: 6878 ldr r0, [r7, #4]
3c4a: f000 ffad bl 4ba8 <TIM_SetIC2Prescaler>
/* TI1 Configuration */
TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value */
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
}
3c4e: e01b b.n 3c88 <TIM_PWMIConfig+0xb0>
TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
3c50: 683b ldr r3, [r7, #0]
3c52: 8859 ldrh r1, [r3, #2]
3c54: 683b ldr r3, [r7, #0]
3c56: 889a ldrh r2, [r3, #4]
3c58: 683b ldr r3, [r7, #0]
3c5a: 891b ldrh r3, [r3, #8]
3c5c: 6878 ldr r0, [r7, #4]
3c5e: f001 f931 bl 4ec4 <TI2_Config>
TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3c62: 683b ldr r3, [r7, #0]
3c64: 88db ldrh r3, [r3, #6]
3c66: 4619 mov r1, r3
3c68: 6878 ldr r0, [r7, #4]
3c6a: f000 ff9d bl 4ba8 <TIM_SetIC2Prescaler>
TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
3c6e: 683b ldr r3, [r7, #0]
3c70: 891b ldrh r3, [r3, #8]
3c72: 89ba ldrh r2, [r7, #12]
3c74: 89f9 ldrh r1, [r7, #14]
3c76: 6878 ldr r0, [r7, #4]
3c78: f001 f8b3 bl 4de2 <TI1_Config>
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
3c7c: 683b ldr r3, [r7, #0]
3c7e: 88db ldrh r3, [r3, #6]
3c80: 4619 mov r1, r3
3c82: 6878 ldr r0, [r7, #4]
3c84: f000 ff75 bl 4b72 <TIM_SetIC1Prescaler>
}
3c88: bf00 nop
3c8a: 3710 adds r7, #16
3c8c: 46bd mov sp, r7
3c8e: bd80 pop {r7, pc}
00003c90 <TIM_BDTRConfig>:
* @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
* @retval None
*/
void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)
{
3c90: b480 push {r7}
3c92: b083 sub sp, #12
3c94: af00 add r7, sp, #0
3c96: 6078 str r0, [r7, #4]
3c98: 6039 str r1, [r7, #0]
assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break));
assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity));
assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput));
/* Set the Lock level, the Break enable Bit and the Ploarity, the OSSR State,
the OSSI State, the dead time value and the Automatic Output Enable Bit */
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3c9a: 683b ldr r3, [r7, #0]
3c9c: 881a ldrh r2, [r3, #0]
3c9e: 683b ldr r3, [r7, #0]
3ca0: 885b ldrh r3, [r3, #2]
3ca2: 4313 orrs r3, r2
3ca4: b29a uxth r2, r3
TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime |
3ca6: 683b ldr r3, [r7, #0]
3ca8: 889b ldrh r3, [r3, #4]
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3caa: 4313 orrs r3, r2
3cac: b29a uxth r2, r3
TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime |
3cae: 683b ldr r3, [r7, #0]
3cb0: 88db ldrh r3, [r3, #6]
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3cb2: 4313 orrs r3, r2
3cb4: b29a uxth r2, r3
TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity |
3cb6: 683b ldr r3, [r7, #0]
3cb8: 891b ldrh r3, [r3, #8]
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3cba: 4313 orrs r3, r2
3cbc: b29a uxth r2, r3
TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity |
3cbe: 683b ldr r3, [r7, #0]
3cc0: 895b ldrh r3, [r3, #10]
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3cc2: 4313 orrs r3, r2
3cc4: b29a uxth r2, r3
TIM_BDTRInitStruct->TIM_AutomaticOutput;
3cc6: 683b ldr r3, [r7, #0]
3cc8: 899b ldrh r3, [r3, #12]
TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
3cca: 4313 orrs r3, r2
3ccc: b29a uxth r2, r3
3cce: 687b ldr r3, [r7, #4]
3cd0: f8a3 2044 strh.w r2, [r3, #68] ; 0x44
}
3cd4: bf00 nop
3cd6: 370c adds r7, #12
3cd8: 46bd mov sp, r7
3cda: bc80 pop {r7}
3cdc: 4770 bx lr
00003cde <TIM_TimeBaseStructInit>:
* @param TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef
* structure which will be initialized.
* @retval None
*/
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
{
3cde: b480 push {r7}
3ce0: b083 sub sp, #12
3ce2: af00 add r7, sp, #0
3ce4: 6078 str r0, [r7, #4]
/* Set the default configuration */
TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF;
3ce6: 687b ldr r3, [r7, #4]
3ce8: f64f 72ff movw r2, #65535 ; 0xffff
3cec: 809a strh r2, [r3, #4]
TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000;
3cee: 687b ldr r3, [r7, #4]
3cf0: 2200 movs r2, #0
3cf2: 801a strh r2, [r3, #0]
TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1;
3cf4: 687b ldr r3, [r7, #4]
3cf6: 2200 movs r2, #0
3cf8: 80da strh r2, [r3, #6]
TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up;
3cfa: 687b ldr r3, [r7, #4]
3cfc: 2200 movs r2, #0
3cfe: 805a strh r2, [r3, #2]
TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000;
3d00: 687b ldr r3, [r7, #4]
3d02: 2200 movs r2, #0
3d04: 721a strb r2, [r3, #8]
}
3d06: bf00 nop
3d08: 370c adds r7, #12
3d0a: 46bd mov sp, r7
3d0c: bc80 pop {r7}
3d0e: 4770 bx lr
00003d10 <TIM_OCStructInit>:
* @param TIM_OCInitStruct : pointer to a TIM_OCInitTypeDef structure which will
* be initialized.
* @retval None
*/
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
{
3d10: b480 push {r7}
3d12: b083 sub sp, #12
3d14: af00 add r7, sp, #0
3d16: 6078 str r0, [r7, #4]
/* Set the default configuration */
TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing;
3d18: 687b ldr r3, [r7, #4]
3d1a: 2200 movs r2, #0
3d1c: 801a strh r2, [r3, #0]
TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable;
3d1e: 687b ldr r3, [r7, #4]
3d20: 2200 movs r2, #0
3d22: 805a strh r2, [r3, #2]
TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable;
3d24: 687b ldr r3, [r7, #4]
3d26: 2200 movs r2, #0
3d28: 809a strh r2, [r3, #4]
TIM_OCInitStruct->TIM_Pulse = 0x0000;
3d2a: 687b ldr r3, [r7, #4]
3d2c: 2200 movs r2, #0
3d2e: 80da strh r2, [r3, #6]
TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High;
3d30: 687b ldr r3, [r7, #4]
3d32: 2200 movs r2, #0
3d34: 811a strh r2, [r3, #8]
TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High;
3d36: 687b ldr r3, [r7, #4]
3d38: 2200 movs r2, #0
3d3a: 815a strh r2, [r3, #10]
TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset;
3d3c: 687b ldr r3, [r7, #4]
3d3e: 2200 movs r2, #0
3d40: 819a strh r2, [r3, #12]
TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset;
3d42: 687b ldr r3, [r7, #4]
3d44: 2200 movs r2, #0
3d46: 81da strh r2, [r3, #14]
}
3d48: bf00 nop
3d4a: 370c adds r7, #12
3d4c: 46bd mov sp, r7
3d4e: bc80 pop {r7}
3d50: 4770 bx lr
00003d52 <TIM_ICStructInit>:
* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will
* be initialized.
* @retval None
*/
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)
{
3d52: b480 push {r7}
3d54: b083 sub sp, #12
3d56: af00 add r7, sp, #0
3d58: 6078 str r0, [r7, #4]
/* Set the default configuration */
TIM_ICInitStruct->TIM_Channel = TIM_Channel_1;
3d5a: 687b ldr r3, [r7, #4]
3d5c: 2200 movs r2, #0
3d5e: 801a strh r2, [r3, #0]
TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising;
3d60: 687b ldr r3, [r7, #4]
3d62: 2200 movs r2, #0
3d64: 805a strh r2, [r3, #2]
TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI;
3d66: 687b ldr r3, [r7, #4]
3d68: 2201 movs r2, #1
3d6a: 809a strh r2, [r3, #4]
TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1;
3d6c: 687b ldr r3, [r7, #4]
3d6e: 2200 movs r2, #0
3d70: 80da strh r2, [r3, #6]
TIM_ICInitStruct->TIM_ICFilter = 0x00;
3d72: 687b ldr r3, [r7, #4]
3d74: 2200 movs r2, #0
3d76: 811a strh r2, [r3, #8]
}
3d78: bf00 nop
3d7a: 370c adds r7, #12
3d7c: 46bd mov sp, r7
3d7e: bc80 pop {r7}
3d80: 4770 bx lr
00003d82 <TIM_BDTRStructInit>:
* @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which
* will be initialized.
* @retval None
*/
void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct)
{
3d82: b480 push {r7}
3d84: b083 sub sp, #12
3d86: af00 add r7, sp, #0
3d88: 6078 str r0, [r7, #4]
/* Set the default configuration */
TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable;
3d8a: 687b ldr r3, [r7, #4]
3d8c: 2200 movs r2, #0
3d8e: 801a strh r2, [r3, #0]
TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable;
3d90: 687b ldr r3, [r7, #4]
3d92: 2200 movs r2, #0
3d94: 805a strh r2, [r3, #2]
TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF;
3d96: 687b ldr r3, [r7, #4]
3d98: 2200 movs r2, #0
3d9a: 809a strh r2, [r3, #4]
TIM_BDTRInitStruct->TIM_DeadTime = 0x00;
3d9c: 687b ldr r3, [r7, #4]
3d9e: 2200 movs r2, #0
3da0: 80da strh r2, [r3, #6]
TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable;
3da2: 687b ldr r3, [r7, #4]
3da4: 2200 movs r2, #0
3da6: 811a strh r2, [r3, #8]
TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low;
3da8: 687b ldr r3, [r7, #4]
3daa: 2200 movs r2, #0
3dac: 815a strh r2, [r3, #10]
TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
3dae: 687b ldr r3, [r7, #4]
3db0: 2200 movs r2, #0
3db2: 819a strh r2, [r3, #12]
}
3db4: bf00 nop
3db6: 370c adds r7, #12
3db8: 46bd mov sp, r7
3dba: bc80 pop {r7}
3dbc: 4770 bx lr
00003dbe <TIM_Cmd>:
* @param NewState: new state of the TIMx peripheral.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
{
3dbe: b480 push {r7}
3dc0: b083 sub sp, #12
3dc2: af00 add r7, sp, #0
3dc4: 6078 str r0, [r7, #4]
3dc6: 460b mov r3, r1
3dc8: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
3dca: 78fb ldrb r3, [r7, #3]
3dcc: 2b00 cmp r3, #0
3dce: d008 beq.n 3de2 <TIM_Cmd+0x24>
{
/* Enable the TIM Counter */
TIMx->CR1 |= TIM_CR1_CEN;
3dd0: 687b ldr r3, [r7, #4]
3dd2: 881b ldrh r3, [r3, #0]
3dd4: b29b uxth r3, r3
3dd6: f043 0301 orr.w r3, r3, #1
3dda: b29a uxth r2, r3
3ddc: 687b ldr r3, [r7, #4]
3dde: 801a strh r2, [r3, #0]
else
{
/* Disable the TIM Counter */
TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
}
}
3de0: e007 b.n 3df2 <TIM_Cmd+0x34>
TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
3de2: 687b ldr r3, [r7, #4]
3de4: 881b ldrh r3, [r3, #0]
3de6: b29b uxth r3, r3
3de8: f023 0301 bic.w r3, r3, #1
3dec: b29a uxth r2, r3
3dee: 687b ldr r3, [r7, #4]
3df0: 801a strh r2, [r3, #0]
}
3df2: bf00 nop
3df4: 370c adds r7, #12
3df6: 46bd mov sp, r7
3df8: bc80 pop {r7}
3dfa: 4770 bx lr
00003dfc <TIM_CtrlPWMOutputs>:
* @param NewState: new state of the TIM peripheral Main Outputs.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
{
3dfc: b480 push {r7}
3dfe: b083 sub sp, #12
3e00: af00 add r7, sp, #0
3e02: 6078 str r0, [r7, #4]
3e04: 460b mov r3, r1
3e06: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
3e08: 78fb ldrb r3, [r7, #3]
3e0a: 2b00 cmp r3, #0
3e0c: d00c beq.n 3e28 <TIM_CtrlPWMOutputs+0x2c>
{
/* Enable the TIM Main Output */
TIMx->BDTR |= TIM_BDTR_MOE;
3e0e: 687b ldr r3, [r7, #4]
3e10: f8b3 3044 ldrh.w r3, [r3, #68] ; 0x44
3e14: b29b uxth r3, r3
3e16: ea6f 4343 mvn.w r3, r3, lsl #17
3e1a: ea6f 4353 mvn.w r3, r3, lsr #17
3e1e: b29a uxth r2, r3
3e20: 687b ldr r3, [r7, #4]
3e22: f8a3 2044 strh.w r2, [r3, #68] ; 0x44
else
{
/* Disable the TIM Main Output */
TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
}
}
3e26: e009 b.n 3e3c <TIM_CtrlPWMOutputs+0x40>
TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
3e28: 687b ldr r3, [r7, #4]
3e2a: f8b3 3044 ldrh.w r3, [r3, #68] ; 0x44
3e2e: b29b uxth r3, r3
3e30: f3c3 030e ubfx r3, r3, #0, #15
3e34: b29a uxth r2, r3
3e36: 687b ldr r3, [r7, #4]
3e38: f8a3 2044 strh.w r2, [r3, #68] ; 0x44
}
3e3c: bf00 nop
3e3e: 370c adds r7, #12
3e40: 46bd mov sp, r7
3e42: bc80 pop {r7}
3e44: 4770 bx lr
00003e46 <TIM_ITConfig>:
* @param NewState: new state of the TIM interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
{
3e46: b480 push {r7}
3e48: b083 sub sp, #12
3e4a: af00 add r7, sp, #0
3e4c: 6078 str r0, [r7, #4]
3e4e: 460b mov r3, r1
3e50: 807b strh r3, [r7, #2]
3e52: 4613 mov r3, r2
3e54: 707b strb r3, [r7, #1]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_IT(TIM_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
3e56: 787b ldrb r3, [r7, #1]
3e58: 2b00 cmp r3, #0
3e5a: d008 beq.n 3e6e <TIM_ITConfig+0x28>
{
/* Enable the Interrupt sources */
TIMx->DIER |= TIM_IT;
3e5c: 687b ldr r3, [r7, #4]
3e5e: 899b ldrh r3, [r3, #12]
3e60: b29a uxth r2, r3
3e62: 887b ldrh r3, [r7, #2]
3e64: 4313 orrs r3, r2
3e66: b29a uxth r2, r3
3e68: 687b ldr r3, [r7, #4]
3e6a: 819a strh r2, [r3, #12]
else
{
/* Disable the Interrupt sources */
TIMx->DIER &= (uint16_t)~TIM_IT;
}
}
3e6c: e009 b.n 3e82 <TIM_ITConfig+0x3c>
TIMx->DIER &= (uint16_t)~TIM_IT;
3e6e: 687b ldr r3, [r7, #4]
3e70: 899b ldrh r3, [r3, #12]
3e72: b29a uxth r2, r3
3e74: 887b ldrh r3, [r7, #2]
3e76: 43db mvns r3, r3
3e78: b29b uxth r3, r3
3e7a: 4013 ands r3, r2
3e7c: b29a uxth r2, r3
3e7e: 687b ldr r3, [r7, #4]
3e80: 819a strh r2, [r3, #12]
}
3e82: bf00 nop
3e84: 370c adds r7, #12
3e86: 46bd mov sp, r7
3e88: bc80 pop {r7}
3e8a: 4770 bx lr
00003e8c <TIM_GenerateEvent>:
* - TIM6 and TIM7 can only generate an update event.
* - TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 and TIM8.
* @retval None
*/
void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource)
{
3e8c: b480 push {r7}
3e8e: b083 sub sp, #12
3e90: af00 add r7, sp, #0
3e92: 6078 str r0, [r7, #4]
3e94: 460b mov r3, r1
3e96: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource));
/* Set the event sources */
TIMx->EGR = TIM_EventSource;
3e98: 687b ldr r3, [r7, #4]
3e9a: 887a ldrh r2, [r7, #2]
3e9c: 829a strh r2, [r3, #20]
}
3e9e: bf00 nop
3ea0: 370c adds r7, #12
3ea2: 46bd mov sp, r7
3ea4: bc80 pop {r7}
3ea6: 4770 bx lr
00003ea8 <TIM_DMAConfig>:
* This parameter can be one value between:
* TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers.
* @retval None
*/
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)
{
3ea8: b480 push {r7}
3eaa: b083 sub sp, #12
3eac: af00 add r7, sp, #0
3eae: 6078 str r0, [r7, #4]
3eb0: 460b mov r3, r1
3eb2: 807b strh r3, [r7, #2]
3eb4: 4613 mov r3, r2
3eb6: 803b strh r3, [r7, #0]
/* Check the parameters */
assert_param(IS_TIM_LIST4_PERIPH(TIMx));
assert_param(IS_TIM_DMA_BASE(TIM_DMABase));
assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));
/* Set the DMA Base and the DMA Burst Length */
TIMx->DCR = TIM_DMABase | TIM_DMABurstLength;
3eb8: 887a ldrh r2, [r7, #2]
3eba: 883b ldrh r3, [r7, #0]
3ebc: 4313 orrs r3, r2
3ebe: b29a uxth r2, r3
3ec0: 687b ldr r3, [r7, #4]
3ec2: f8a3 2048 strh.w r2, [r3, #72] ; 0x48
}
3ec6: bf00 nop
3ec8: 370c adds r7, #12
3eca: 46bd mov sp, r7
3ecc: bc80 pop {r7}
3ece: 4770 bx lr
00003ed0 <TIM_DMACmd>:
* @param NewState: new state of the DMA Request sources.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
{
3ed0: b480 push {r7}
3ed2: b083 sub sp, #12
3ed4: af00 add r7, sp, #0
3ed6: 6078 str r0, [r7, #4]
3ed8: 460b mov r3, r1
3eda: 807b strh r3, [r7, #2]
3edc: 4613 mov r3, r2
3ede: 707b strb r3, [r7, #1]
/* Check the parameters */
assert_param(IS_TIM_LIST9_PERIPH(TIMx));
assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
3ee0: 787b ldrb r3, [r7, #1]
3ee2: 2b00 cmp r3, #0
3ee4: d008 beq.n 3ef8 <TIM_DMACmd+0x28>
{
/* Enable the DMA sources */
TIMx->DIER |= TIM_DMASource;
3ee6: 687b ldr r3, [r7, #4]
3ee8: 899b ldrh r3, [r3, #12]
3eea: b29a uxth r2, r3
3eec: 887b ldrh r3, [r7, #2]
3eee: 4313 orrs r3, r2
3ef0: b29a uxth r2, r3
3ef2: 687b ldr r3, [r7, #4]
3ef4: 819a strh r2, [r3, #12]
else
{
/* Disable the DMA sources */
TIMx->DIER &= (uint16_t)~TIM_DMASource;
}
}
3ef6: e009 b.n 3f0c <TIM_DMACmd+0x3c>
TIMx->DIER &= (uint16_t)~TIM_DMASource;
3ef8: 687b ldr r3, [r7, #4]
3efa: 899b ldrh r3, [r3, #12]
3efc: b29a uxth r2, r3
3efe: 887b ldrh r3, [r7, #2]
3f00: 43db mvns r3, r3
3f02: b29b uxth r3, r3
3f04: 4013 ands r3, r2
3f06: b29a uxth r2, r3
3f08: 687b ldr r3, [r7, #4]
3f0a: 819a strh r2, [r3, #12]
}
3f0c: bf00 nop
3f0e: 370c adds r7, #12
3f10: 46bd mov sp, r7
3f12: bc80 pop {r7}
3f14: 4770 bx lr
00003f16 <TIM_InternalClockConfig>:
* @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15
* to select the TIM peripheral.
* @retval None
*/
void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
{
3f16: b480 push {r7}
3f18: b083 sub sp, #12
3f1a: af00 add r7, sp, #0
3f1c: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
/* Disable slave mode to clock the prescaler directly with the internal clock */
TIMx->SMCR &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
3f1e: 687b ldr r3, [r7, #4]
3f20: 891b ldrh r3, [r3, #8]
3f22: b29b uxth r3, r3
3f24: f023 0307 bic.w r3, r3, #7
3f28: b29a uxth r2, r3
3f2a: 687b ldr r3, [r7, #4]
3f2c: 811a strh r2, [r3, #8]
}
3f2e: bf00 nop
3f30: 370c adds r7, #12
3f32: 46bd mov sp, r7
3f34: bc80 pop {r7}
3f36: 4770 bx lr
00003f38 <TIM_ITRxExternalClockConfig>:
* @param TIM_TS_ITR2: Internal Trigger 2
* @param TIM_TS_ITR3: Internal Trigger 3
* @retval None
*/
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
{
3f38: b580 push {r7, lr}
3f3a: b082 sub sp, #8
3f3c: af00 add r7, sp, #0
3f3e: 6078 str r0, [r7, #4]
3f40: 460b mov r3, r1
3f42: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));
/* Select the Internal Trigger */
TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);
3f44: 887b ldrh r3, [r7, #2]
3f46: 4619 mov r1, r3
3f48: 6878 ldr r0, [r7, #4]
3f4a: f000 f8df bl 410c <TIM_SelectInputTrigger>
/* Select the External clock mode1 */
TIMx->SMCR |= TIM_SlaveMode_External1;
3f4e: 687b ldr r3, [r7, #4]
3f50: 891b ldrh r3, [r3, #8]
3f52: b29b uxth r3, r3
3f54: f043 0307 orr.w r3, r3, #7
3f58: b29a uxth r2, r3
3f5a: 687b ldr r3, [r7, #4]
3f5c: 811a strh r2, [r3, #8]
}
3f5e: bf00 nop
3f60: 3708 adds r7, #8
3f62: 46bd mov sp, r7
3f64: bd80 pop {r7, pc}
00003f66 <TIM_TIxExternalClockConfig>:
* This parameter must be a value between 0x0 and 0xF.
* @retval None
*/
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter)
{
3f66: b580 push {r7, lr}
3f68: b084 sub sp, #16
3f6a: af00 add r7, sp, #0
3f6c: 60f8 str r0, [r7, #12]
3f6e: 4608 mov r0, r1
3f70: 4611 mov r1, r2
3f72: 461a mov r2, r3
3f74: 4603 mov r3, r0
3f76: 817b strh r3, [r7, #10]
3f78: 460b mov r3, r1
3f7a: 813b strh r3, [r7, #8]
3f7c: 4613 mov r3, r2
3f7e: 80fb strh r3, [r7, #6]
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_TIXCLK_SOURCE(TIM_TIxExternalCLKSource));
assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity));
assert_param(IS_TIM_IC_FILTER(ICFilter));
/* Configure the Timer Input Clock Source */
if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)
3f80: 897b ldrh r3, [r7, #10]
3f82: 2b60 cmp r3, #96 ; 0x60
3f84: d106 bne.n 3f94 <TIM_TIxExternalClockConfig+0x2e>
{
TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
3f86: 88fb ldrh r3, [r7, #6]
3f88: 8939 ldrh r1, [r7, #8]
3f8a: 2201 movs r2, #1
3f8c: 68f8 ldr r0, [r7, #12]
3f8e: f000 ff99 bl 4ec4 <TI2_Config>
3f92: e005 b.n 3fa0 <TIM_TIxExternalClockConfig+0x3a>
}
else
{
TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
3f94: 88fb ldrh r3, [r7, #6]
3f96: 8939 ldrh r1, [r7, #8]
3f98: 2201 movs r2, #1
3f9a: 68f8 ldr r0, [r7, #12]
3f9c: f000 ff21 bl 4de2 <TI1_Config>
}
/* Select the Trigger source */
TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);
3fa0: 897b ldrh r3, [r7, #10]
3fa2: 4619 mov r1, r3
3fa4: 68f8 ldr r0, [r7, #12]
3fa6: f000 f8b1 bl 410c <TIM_SelectInputTrigger>
/* Select the External clock mode1 */
TIMx->SMCR |= TIM_SlaveMode_External1;
3faa: 68fb ldr r3, [r7, #12]
3fac: 891b ldrh r3, [r3, #8]
3fae: b29b uxth r3, r3
3fb0: f043 0307 orr.w r3, r3, #7
3fb4: b29a uxth r2, r3
3fb6: 68fb ldr r3, [r7, #12]
3fb8: 811a strh r2, [r3, #8]
}
3fba: bf00 nop
3fbc: 3710 adds r7, #16
3fbe: 46bd mov sp, r7
3fc0: bd80 pop {r7, pc}
00003fc2 <TIM_ETRClockMode1Config>:
* This parameter must be a value between 0x00 and 0x0F
* @retval None
*/
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter)
{
3fc2: b580 push {r7, lr}
3fc4: b086 sub sp, #24
3fc6: af00 add r7, sp, #0
3fc8: 60f8 str r0, [r7, #12]
3fca: 4608 mov r0, r1
3fcc: 4611 mov r1, r2
3fce: 461a mov r2, r3
3fd0: 4603 mov r3, r0
3fd2: 817b strh r3, [r7, #10]
3fd4: 460b mov r3, r1
3fd6: 813b strh r3, [r7, #8]
3fd8: 4613 mov r3, r2
3fda: 80fb strh r3, [r7, #6]
uint16_t tmpsmcr = 0;
3fdc: 2300 movs r3, #0
3fde: 82fb strh r3, [r7, #22]
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
/* Configure the ETR Clock source */
TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
3fe0: 88fb ldrh r3, [r7, #6]
3fe2: 893a ldrh r2, [r7, #8]
3fe4: 8979 ldrh r1, [r7, #10]
3fe6: 68f8 ldr r0, [r7, #12]
3fe8: f000 f839 bl 405e <TIM_ETRConfig>
/* Get the TIMx SMCR register value */
tmpsmcr = TIMx->SMCR;
3fec: 68fb ldr r3, [r7, #12]
3fee: 891b ldrh r3, [r3, #8]
3ff0: 82fb strh r3, [r7, #22]
/* Reset the SMS Bits */
tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
3ff2: 8afb ldrh r3, [r7, #22]
3ff4: f023 0307 bic.w r3, r3, #7
3ff8: 82fb strh r3, [r7, #22]
/* Select the External clock mode1 */
tmpsmcr |= TIM_SlaveMode_External1;
3ffa: 8afb ldrh r3, [r7, #22]
3ffc: f043 0307 orr.w r3, r3, #7
4000: 82fb strh r3, [r7, #22]
/* Select the Trigger selection : ETRF */
tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS));
4002: 8afb ldrh r3, [r7, #22]
4004: f023 0370 bic.w r3, r3, #112 ; 0x70
4008: 82fb strh r3, [r7, #22]
tmpsmcr |= TIM_TS_ETRF;
400a: 8afb ldrh r3, [r7, #22]
400c: f043 0370 orr.w r3, r3, #112 ; 0x70
4010: 82fb strh r3, [r7, #22]
/* Write to TIMx SMCR */
TIMx->SMCR = tmpsmcr;
4012: 68fb ldr r3, [r7, #12]
4014: 8afa ldrh r2, [r7, #22]
4016: 811a strh r2, [r3, #8]
}
4018: bf00 nop
401a: 3718 adds r7, #24
401c: 46bd mov sp, r7
401e: bd80 pop {r7, pc}
00004020 <TIM_ETRClockMode2Config>:
* This parameter must be a value between 0x00 and 0x0F
* @retval None
*/
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)
{
4020: b580 push {r7, lr}
4022: b084 sub sp, #16
4024: af00 add r7, sp, #0
4026: 60f8 str r0, [r7, #12]
4028: 4608 mov r0, r1
402a: 4611 mov r1, r2
402c: 461a mov r2, r3
402e: 4603 mov r3, r0
4030: 817b strh r3, [r7, #10]
4032: 460b mov r3, r1
4034: 813b strh r3, [r7, #8]
4036: 4613 mov r3, r2
4038: 80fb strh r3, [r7, #6]
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
/* Configure the ETR Clock source */
TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
403a: 88fb ldrh r3, [r7, #6]
403c: 893a ldrh r2, [r7, #8]
403e: 8979 ldrh r1, [r7, #10]
4040: 68f8 ldr r0, [r7, #12]
4042: f000 f80c bl 405e <TIM_ETRConfig>
/* Enable the External clock mode2 */
TIMx->SMCR |= TIM_SMCR_ECE;
4046: 68fb ldr r3, [r7, #12]
4048: 891b ldrh r3, [r3, #8]
404a: b29b uxth r3, r3
404c: f443 4380 orr.w r3, r3, #16384 ; 0x4000
4050: b29a uxth r2, r3
4052: 68fb ldr r3, [r7, #12]
4054: 811a strh r2, [r3, #8]
}
4056: bf00 nop
4058: 3710 adds r7, #16
405a: 46bd mov sp, r7
405c: bd80 pop {r7, pc}
0000405e <TIM_ETRConfig>:
* This parameter must be a value between 0x00 and 0x0F
* @retval None
*/
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter)
{
405e: b480 push {r7}
4060: b087 sub sp, #28
4062: af00 add r7, sp, #0
4064: 60f8 str r0, [r7, #12]
4066: 4608 mov r0, r1
4068: 4611 mov r1, r2
406a: 461a mov r2, r3
406c: 4603 mov r3, r0
406e: 817b strh r3, [r7, #10]
4070: 460b mov r3, r1
4072: 813b strh r3, [r7, #8]
4074: 4613 mov r3, r2
4076: 80fb strh r3, [r7, #6]
uint16_t tmpsmcr = 0;
4078: 2300 movs r3, #0
407a: 82fb strh r3, [r7, #22]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
tmpsmcr = TIMx->SMCR;
407c: 68fb ldr r3, [r7, #12]
407e: 891b ldrh r3, [r3, #8]
4080: 82fb strh r3, [r7, #22]
/* Reset the ETR Bits */
tmpsmcr &= SMCR_ETR_Mask;
4082: 8afb ldrh r3, [r7, #22]
4084: b2db uxtb r3, r3
4086: 82fb strh r3, [r7, #22]
/* Set the Prescaler, the Filter value and the Polarity */
tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8)));
4088: 88fb ldrh r3, [r7, #6]
408a: 021b lsls r3, r3, #8
408c: b29a uxth r2, r3
408e: 893b ldrh r3, [r7, #8]
4090: 4313 orrs r3, r2
4092: b29a uxth r2, r3
4094: 897b ldrh r3, [r7, #10]
4096: 4313 orrs r3, r2
4098: b29a uxth r2, r3
409a: 8afb ldrh r3, [r7, #22]
409c: 4313 orrs r3, r2
409e: 82fb strh r3, [r7, #22]
/* Write to TIMx SMCR */
TIMx->SMCR = tmpsmcr;
40a0: 68fb ldr r3, [r7, #12]
40a2: 8afa ldrh r2, [r7, #22]
40a4: 811a strh r2, [r3, #8]
}
40a6: bf00 nop
40a8: 371c adds r7, #28
40aa: 46bd mov sp, r7
40ac: bc80 pop {r7}
40ae: 4770 bx lr
000040b0 <TIM_PrescalerConfig>:
* @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event.
* @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediately.
* @retval None
*/
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
{
40b0: b480 push {r7}
40b2: b083 sub sp, #12
40b4: af00 add r7, sp, #0
40b6: 6078 str r0, [r7, #4]
40b8: 460b mov r3, r1
40ba: 807b strh r3, [r7, #2]
40bc: 4613 mov r3, r2
40be: 803b strh r3, [r7, #0]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));
/* Set the Prescaler value */
TIMx->PSC = Prescaler;
40c0: 687b ldr r3, [r7, #4]
40c2: 887a ldrh r2, [r7, #2]
40c4: 851a strh r2, [r3, #40] ; 0x28
/* Set or reset the UG Bit */
TIMx->EGR = TIM_PSCReloadMode;
40c6: 687b ldr r3, [r7, #4]
40c8: 883a ldrh r2, [r7, #0]
40ca: 829a strh r2, [r3, #20]
}
40cc: bf00 nop
40ce: 370c adds r7, #12
40d0: 46bd mov sp, r7
40d2: bc80 pop {r7}
40d4: 4770 bx lr
000040d6 <TIM_CounterModeConfig>:
* @arg TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2
* @arg TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3
* @retval None
*/
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode)
{
40d6: b480 push {r7}
40d8: b085 sub sp, #20
40da: af00 add r7, sp, #0
40dc: 6078 str r0, [r7, #4]
40de: 460b mov r3, r1
40e0: 807b strh r3, [r7, #2]
uint16_t tmpcr1 = 0;
40e2: 2300 movs r3, #0
40e4: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode));
tmpcr1 = TIMx->CR1;
40e6: 687b ldr r3, [r7, #4]
40e8: 881b ldrh r3, [r3, #0]
40ea: 81fb strh r3, [r7, #14]
/* Reset the CMS and DIR Bits */
tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS)));
40ec: 89fb ldrh r3, [r7, #14]
40ee: f023 0370 bic.w r3, r3, #112 ; 0x70
40f2: 81fb strh r3, [r7, #14]
/* Set the Counter Mode */
tmpcr1 |= TIM_CounterMode;
40f4: 89fa ldrh r2, [r7, #14]
40f6: 887b ldrh r3, [r7, #2]
40f8: 4313 orrs r3, r2
40fa: 81fb strh r3, [r7, #14]
/* Write to TIMx CR1 register */
TIMx->CR1 = tmpcr1;
40fc: 687b ldr r3, [r7, #4]
40fe: 89fa ldrh r2, [r7, #14]
4100: 801a strh r2, [r3, #0]
}
4102: bf00 nop
4104: 3714 adds r7, #20
4106: 46bd mov sp, r7
4108: bc80 pop {r7}
410a: 4770 bx lr
0000410c <TIM_SelectInputTrigger>:
* @arg TIM_TS_TI2FP2: Filtered Timer Input 2
* @arg TIM_TS_ETRF: External Trigger input
* @retval None
*/
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
{
410c: b480 push {r7}
410e: b085 sub sp, #20
4110: af00 add r7, sp, #0
4112: 6078 str r0, [r7, #4]
4114: 460b mov r3, r1
4116: 807b strh r3, [r7, #2]
uint16_t tmpsmcr = 0;
4118: 2300 movs r3, #0
411a: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource));
/* Get the TIMx SMCR register value */
tmpsmcr = TIMx->SMCR;
411c: 687b ldr r3, [r7, #4]
411e: 891b ldrh r3, [r3, #8]
4120: 81fb strh r3, [r7, #14]
/* Reset the TS Bits */
tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS));
4122: 89fb ldrh r3, [r7, #14]
4124: f023 0370 bic.w r3, r3, #112 ; 0x70
4128: 81fb strh r3, [r7, #14]
/* Set the Input Trigger source */
tmpsmcr |= TIM_InputTriggerSource;
412a: 89fa ldrh r2, [r7, #14]
412c: 887b ldrh r3, [r7, #2]
412e: 4313 orrs r3, r2
4130: 81fb strh r3, [r7, #14]
/* Write to TIMx SMCR */
TIMx->SMCR = tmpsmcr;
4132: 687b ldr r3, [r7, #4]
4134: 89fa ldrh r2, [r7, #14]
4136: 811a strh r2, [r3, #8]
}
4138: bf00 nop
413a: 3714 adds r7, #20
413c: 46bd mov sp, r7
413e: bc80 pop {r7}
4140: 4770 bx lr
00004142 <TIM_EncoderInterfaceConfig>:
* @arg TIM_ICPolarity_Rising: IC Rising edge.
* @retval None
*/
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)
{
4142: b480 push {r7}
4144: b087 sub sp, #28
4146: af00 add r7, sp, #0
4148: 60f8 str r0, [r7, #12]
414a: 4608 mov r0, r1
414c: 4611 mov r1, r2
414e: 461a mov r2, r3
4150: 4603 mov r3, r0
4152: 817b strh r3, [r7, #10]
4154: 460b mov r3, r1
4156: 813b strh r3, [r7, #8]
4158: 4613 mov r3, r2
415a: 80fb strh r3, [r7, #6]
uint16_t tmpsmcr = 0;
415c: 2300 movs r3, #0
415e: 82fb strh r3, [r7, #22]
uint16_t tmpccmr1 = 0;
4160: 2300 movs r3, #0
4162: 82bb strh r3, [r7, #20]
uint16_t tmpccer = 0;
4164: 2300 movs r3, #0
4166: 827b strh r3, [r7, #18]
assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode));
assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity));
assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity));
/* Get the TIMx SMCR register value */
tmpsmcr = TIMx->SMCR;
4168: 68fb ldr r3, [r7, #12]
416a: 891b ldrh r3, [r3, #8]
416c: 82fb strh r3, [r7, #22]
/* Get the TIMx CCMR1 register value */
tmpccmr1 = TIMx->CCMR1;
416e: 68fb ldr r3, [r7, #12]
4170: 8b1b ldrh r3, [r3, #24]
4172: 82bb strh r3, [r7, #20]
/* Get the TIMx CCER register value */
tmpccer = TIMx->CCER;
4174: 68fb ldr r3, [r7, #12]
4176: 8c1b ldrh r3, [r3, #32]
4178: 827b strh r3, [r7, #18]
/* Set the encoder Mode */
tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
417a: 8afb ldrh r3, [r7, #22]
417c: f023 0307 bic.w r3, r3, #7
4180: 82fb strh r3, [r7, #22]
tmpsmcr |= TIM_EncoderMode;
4182: 8afa ldrh r2, [r7, #22]
4184: 897b ldrh r3, [r7, #10]
4186: 4313 orrs r3, r2
4188: 82fb strh r3, [r7, #22]
/* Select the Capture Compare 1 and the Capture Compare 2 as input */
tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S)));
418a: 8abb ldrh r3, [r7, #20]
418c: f423 7340 bic.w r3, r3, #768 ; 0x300
4190: f023 0303 bic.w r3, r3, #3
4194: 82bb strh r3, [r7, #20]
tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
4196: 8abb ldrh r3, [r7, #20]
4198: f443 7380 orr.w r3, r3, #256 ; 0x100
419c: f043 0301 orr.w r3, r3, #1
41a0: 82bb strh r3, [r7, #20]
/* Set the TI1 and the TI2 Polarities */
tmpccer &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCER_CC1P)) & ((uint16_t)~((uint16_t)TIM_CCER_CC2P)));
41a2: 8a7b ldrh r3, [r7, #18]
41a4: f023 0322 bic.w r3, r3, #34 ; 0x22
41a8: 827b strh r3, [r7, #18]
tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4));
41aa: 88fb ldrh r3, [r7, #6]
41ac: 011b lsls r3, r3, #4
41ae: b29a uxth r2, r3
41b0: 893b ldrh r3, [r7, #8]
41b2: 4313 orrs r3, r2
41b4: b29a uxth r2, r3
41b6: 8a7b ldrh r3, [r7, #18]
41b8: 4313 orrs r3, r2
41ba: 827b strh r3, [r7, #18]
/* Write to TIMx SMCR */
TIMx->SMCR = tmpsmcr;
41bc: 68fb ldr r3, [r7, #12]
41be: 8afa ldrh r2, [r7, #22]
41c0: 811a strh r2, [r3, #8]
/* Write to TIMx CCMR1 */
TIMx->CCMR1 = tmpccmr1;
41c2: 68fb ldr r3, [r7, #12]
41c4: 8aba ldrh r2, [r7, #20]
41c6: 831a strh r2, [r3, #24]
/* Write to TIMx CCER */
TIMx->CCER = tmpccer;
41c8: 68fb ldr r3, [r7, #12]
41ca: 8a7a ldrh r2, [r7, #18]
41cc: 841a strh r2, [r3, #32]
}
41ce: bf00 nop
41d0: 371c adds r7, #28
41d2: 46bd mov sp, r7
41d4: bc80 pop {r7}
41d6: 4770 bx lr
000041d8 <TIM_ForcedOC1Config>:
* @arg TIM_ForcedAction_Active: Force active level on OC1REF
* @arg TIM_ForcedAction_InActive: Force inactive level on OC1REF.
* @retval None
*/
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
{
41d8: b480 push {r7}
41da: b085 sub sp, #20
41dc: af00 add r7, sp, #0
41de: 6078 str r0, [r7, #4]
41e0: 460b mov r3, r1
41e2: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
41e4: 2300 movs r3, #0
41e6: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
tmpccmr1 = TIMx->CCMR1;
41e8: 687b ldr r3, [r7, #4]
41ea: 8b1b ldrh r3, [r3, #24]
41ec: 81fb strh r3, [r7, #14]
/* Reset the OC1M Bits */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1M);
41ee: 89fb ldrh r3, [r7, #14]
41f0: f023 0370 bic.w r3, r3, #112 ; 0x70
41f4: 81fb strh r3, [r7, #14]
/* Configure The Forced output Mode */
tmpccmr1 |= TIM_ForcedAction;
41f6: 89fa ldrh r2, [r7, #14]
41f8: 887b ldrh r3, [r7, #2]
41fa: 4313 orrs r3, r2
41fc: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
41fe: 687b ldr r3, [r7, #4]
4200: 89fa ldrh r2, [r7, #14]
4202: 831a strh r2, [r3, #24]
}
4204: bf00 nop
4206: 3714 adds r7, #20
4208: 46bd mov sp, r7
420a: bc80 pop {r7}
420c: 4770 bx lr
0000420e <TIM_ForcedOC2Config>:
* @arg TIM_ForcedAction_Active: Force active level on OC2REF
* @arg TIM_ForcedAction_InActive: Force inactive level on OC2REF.
* @retval None
*/
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
{
420e: b480 push {r7}
4210: b085 sub sp, #20
4212: af00 add r7, sp, #0
4214: 6078 str r0, [r7, #4]
4216: 460b mov r3, r1
4218: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
421a: 2300 movs r3, #0
421c: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
tmpccmr1 = TIMx->CCMR1;
421e: 687b ldr r3, [r7, #4]
4220: 8b1b ldrh r3, [r3, #24]
4222: 81fb strh r3, [r7, #14]
/* Reset the OC2M Bits */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2M);
4224: 89fb ldrh r3, [r7, #14]
4226: f423 43e0 bic.w r3, r3, #28672 ; 0x7000
422a: 81fb strh r3, [r7, #14]
/* Configure The Forced output Mode */
tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8);
422c: 887b ldrh r3, [r7, #2]
422e: 021b lsls r3, r3, #8
4230: b29a uxth r2, r3
4232: 89fb ldrh r3, [r7, #14]
4234: 4313 orrs r3, r2
4236: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
4238: 687b ldr r3, [r7, #4]
423a: 89fa ldrh r2, [r7, #14]
423c: 831a strh r2, [r3, #24]
}
423e: bf00 nop
4240: 3714 adds r7, #20
4242: 46bd mov sp, r7
4244: bc80 pop {r7}
4246: 4770 bx lr
00004248 <TIM_ForcedOC3Config>:
* @arg TIM_ForcedAction_Active: Force active level on OC3REF
* @arg TIM_ForcedAction_InActive: Force inactive level on OC3REF.
* @retval None
*/
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
{
4248: b480 push {r7}
424a: b085 sub sp, #20
424c: af00 add r7, sp, #0
424e: 6078 str r0, [r7, #4]
4250: 460b mov r3, r1
4252: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
4254: 2300 movs r3, #0
4256: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
tmpccmr2 = TIMx->CCMR2;
4258: 687b ldr r3, [r7, #4]
425a: 8b9b ldrh r3, [r3, #28]
425c: 81fb strh r3, [r7, #14]
/* Reset the OC1M Bits */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3M);
425e: 89fb ldrh r3, [r7, #14]
4260: f023 0370 bic.w r3, r3, #112 ; 0x70
4264: 81fb strh r3, [r7, #14]
/* Configure The Forced output Mode */
tmpccmr2 |= TIM_ForcedAction;
4266: 89fa ldrh r2, [r7, #14]
4268: 887b ldrh r3, [r7, #2]
426a: 4313 orrs r3, r2
426c: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
426e: 687b ldr r3, [r7, #4]
4270: 89fa ldrh r2, [r7, #14]
4272: 839a strh r2, [r3, #28]
}
4274: bf00 nop
4276: 3714 adds r7, #20
4278: 46bd mov sp, r7
427a: bc80 pop {r7}
427c: 4770 bx lr
0000427e <TIM_ForcedOC4Config>:
* @arg TIM_ForcedAction_Active: Force active level on OC4REF
* @arg TIM_ForcedAction_InActive: Force inactive level on OC4REF.
* @retval None
*/
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
{
427e: b480 push {r7}
4280: b085 sub sp, #20
4282: af00 add r7, sp, #0
4284: 6078 str r0, [r7, #4]
4286: 460b mov r3, r1
4288: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
428a: 2300 movs r3, #0
428c: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
tmpccmr2 = TIMx->CCMR2;
428e: 687b ldr r3, [r7, #4]
4290: 8b9b ldrh r3, [r3, #28]
4292: 81fb strh r3, [r7, #14]
/* Reset the OC2M Bits */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4M);
4294: 89fb ldrh r3, [r7, #14]
4296: f423 43e0 bic.w r3, r3, #28672 ; 0x7000
429a: 81fb strh r3, [r7, #14]
/* Configure The Forced output Mode */
tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8);
429c: 887b ldrh r3, [r7, #2]
429e: 021b lsls r3, r3, #8
42a0: b29a uxth r2, r3
42a2: 89fb ldrh r3, [r7, #14]
42a4: 4313 orrs r3, r2
42a6: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
42a8: 687b ldr r3, [r7, #4]
42aa: 89fa ldrh r2, [r7, #14]
42ac: 839a strh r2, [r3, #28]
}
42ae: bf00 nop
42b0: 3714 adds r7, #20
42b2: 46bd mov sp, r7
42b4: bc80 pop {r7}
42b6: 4770 bx lr
000042b8 <TIM_ARRPreloadConfig>:
* @param NewState: new state of the TIMx peripheral Preload register
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
{
42b8: b480 push {r7}
42ba: b083 sub sp, #12
42bc: af00 add r7, sp, #0
42be: 6078 str r0, [r7, #4]
42c0: 460b mov r3, r1
42c2: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
42c4: 78fb ldrb r3, [r7, #3]
42c6: 2b00 cmp r3, #0
42c8: d008 beq.n 42dc <TIM_ARRPreloadConfig+0x24>
{
/* Set the ARR Preload Bit */
TIMx->CR1 |= TIM_CR1_ARPE;
42ca: 687b ldr r3, [r7, #4]
42cc: 881b ldrh r3, [r3, #0]
42ce: b29b uxth r3, r3
42d0: f043 0380 orr.w r3, r3, #128 ; 0x80
42d4: b29a uxth r2, r3
42d6: 687b ldr r3, [r7, #4]
42d8: 801a strh r2, [r3, #0]
else
{
/* Reset the ARR Preload Bit */
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
}
}
42da: e007 b.n 42ec <TIM_ARRPreloadConfig+0x34>
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
42dc: 687b ldr r3, [r7, #4]
42de: 881b ldrh r3, [r3, #0]
42e0: b29b uxth r3, r3
42e2: f023 0380 bic.w r3, r3, #128 ; 0x80
42e6: b29a uxth r2, r3
42e8: 687b ldr r3, [r7, #4]
42ea: 801a strh r2, [r3, #0]
}
42ec: bf00 nop
42ee: 370c adds r7, #12
42f0: 46bd mov sp, r7
42f2: bc80 pop {r7}
42f4: 4770 bx lr
000042f6 <TIM_SelectCOM>:
* @param NewState: new state of the Commutation event.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState)
{
42f6: b480 push {r7}
42f8: b083 sub sp, #12
42fa: af00 add r7, sp, #0
42fc: 6078 str r0, [r7, #4]
42fe: 460b mov r3, r1
4300: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
4302: 78fb ldrb r3, [r7, #3]
4304: 2b00 cmp r3, #0
4306: d008 beq.n 431a <TIM_SelectCOM+0x24>
{
/* Set the COM Bit */
TIMx->CR2 |= TIM_CR2_CCUS;
4308: 687b ldr r3, [r7, #4]
430a: 889b ldrh r3, [r3, #4]
430c: b29b uxth r3, r3
430e: f043 0304 orr.w r3, r3, #4
4312: b29a uxth r2, r3
4314: 687b ldr r3, [r7, #4]
4316: 809a strh r2, [r3, #4]
else
{
/* Reset the COM Bit */
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS);
}
}
4318: e007 b.n 432a <TIM_SelectCOM+0x34>
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS);
431a: 687b ldr r3, [r7, #4]
431c: 889b ldrh r3, [r3, #4]
431e: b29b uxth r3, r3
4320: f023 0304 bic.w r3, r3, #4
4324: b29a uxth r2, r3
4326: 687b ldr r3, [r7, #4]
4328: 809a strh r2, [r3, #4]
}
432a: bf00 nop
432c: 370c adds r7, #12
432e: 46bd mov sp, r7
4330: bc80 pop {r7}
4332: 4770 bx lr
00004334 <TIM_SelectCCDMA>:
* @param NewState: new state of the Capture Compare DMA source
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState)
{
4334: b480 push {r7}
4336: b083 sub sp, #12
4338: af00 add r7, sp, #0
433a: 6078 str r0, [r7, #4]
433c: 460b mov r3, r1
433e: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_LIST4_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
4340: 78fb ldrb r3, [r7, #3]
4342: 2b00 cmp r3, #0
4344: d008 beq.n 4358 <TIM_SelectCCDMA+0x24>
{
/* Set the CCDS Bit */
TIMx->CR2 |= TIM_CR2_CCDS;
4346: 687b ldr r3, [r7, #4]
4348: 889b ldrh r3, [r3, #4]
434a: b29b uxth r3, r3
434c: f043 0308 orr.w r3, r3, #8
4350: b29a uxth r2, r3
4352: 687b ldr r3, [r7, #4]
4354: 809a strh r2, [r3, #4]
else
{
/* Reset the CCDS Bit */
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS);
}
}
4356: e007 b.n 4368 <TIM_SelectCCDMA+0x34>
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS);
4358: 687b ldr r3, [r7, #4]
435a: 889b ldrh r3, [r3, #4]
435c: b29b uxth r3, r3
435e: f023 0308 bic.w r3, r3, #8
4362: b29a uxth r2, r3
4364: 687b ldr r3, [r7, #4]
4366: 809a strh r2, [r3, #4]
}
4368: bf00 nop
436a: 370c adds r7, #12
436c: 46bd mov sp, r7
436e: bc80 pop {r7}
4370: 4770 bx lr
00004372 <TIM_CCPreloadControl>:
* @param NewState: new state of the Capture Compare Preload Control bit
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState)
{
4372: b480 push {r7}
4374: b083 sub sp, #12
4376: af00 add r7, sp, #0
4378: 6078 str r0, [r7, #4]
437a: 460b mov r3, r1
437c: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_LIST5_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
437e: 78fb ldrb r3, [r7, #3]
4380: 2b00 cmp r3, #0
4382: d008 beq.n 4396 <TIM_CCPreloadControl+0x24>
{
/* Set the CCPC Bit */
TIMx->CR2 |= TIM_CR2_CCPC;
4384: 687b ldr r3, [r7, #4]
4386: 889b ldrh r3, [r3, #4]
4388: b29b uxth r3, r3
438a: f043 0301 orr.w r3, r3, #1
438e: b29a uxth r2, r3
4390: 687b ldr r3, [r7, #4]
4392: 809a strh r2, [r3, #4]
else
{
/* Reset the CCPC Bit */
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC);
}
}
4394: e007 b.n 43a6 <TIM_CCPreloadControl+0x34>
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC);
4396: 687b ldr r3, [r7, #4]
4398: 889b ldrh r3, [r3, #4]
439a: b29b uxth r3, r3
439c: f023 0301 bic.w r3, r3, #1
43a0: b29a uxth r2, r3
43a2: 687b ldr r3, [r7, #4]
43a4: 809a strh r2, [r3, #4]
}
43a6: bf00 nop
43a8: 370c adds r7, #12
43aa: 46bd mov sp, r7
43ac: bc80 pop {r7}
43ae: 4770 bx lr
000043b0 <TIM_OC1PreloadConfig>:
* @arg TIM_OCPreload_Enable
* @arg TIM_OCPreload_Disable
* @retval None
*/
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
{
43b0: b480 push {r7}
43b2: b085 sub sp, #20
43b4: af00 add r7, sp, #0
43b6: 6078 str r0, [r7, #4]
43b8: 460b mov r3, r1
43ba: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
43bc: 2300 movs r3, #0
43be: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
tmpccmr1 = TIMx->CCMR1;
43c0: 687b ldr r3, [r7, #4]
43c2: 8b1b ldrh r3, [r3, #24]
43c4: 81fb strh r3, [r7, #14]
/* Reset the OC1PE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1PE);
43c6: 89fb ldrh r3, [r7, #14]
43c8: f023 0308 bic.w r3, r3, #8
43cc: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Preload feature */
tmpccmr1 |= TIM_OCPreload;
43ce: 89fa ldrh r2, [r7, #14]
43d0: 887b ldrh r3, [r7, #2]
43d2: 4313 orrs r3, r2
43d4: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
43d6: 687b ldr r3, [r7, #4]
43d8: 89fa ldrh r2, [r7, #14]
43da: 831a strh r2, [r3, #24]
}
43dc: bf00 nop
43de: 3714 adds r7, #20
43e0: 46bd mov sp, r7
43e2: bc80 pop {r7}
43e4: 4770 bx lr
000043e6 <TIM_OC2PreloadConfig>:
* @arg TIM_OCPreload_Enable
* @arg TIM_OCPreload_Disable
* @retval None
*/
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
{
43e6: b480 push {r7}
43e8: b085 sub sp, #20
43ea: af00 add r7, sp, #0
43ec: 6078 str r0, [r7, #4]
43ee: 460b mov r3, r1
43f0: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
43f2: 2300 movs r3, #0
43f4: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
tmpccmr1 = TIMx->CCMR1;
43f6: 687b ldr r3, [r7, #4]
43f8: 8b1b ldrh r3, [r3, #24]
43fa: 81fb strh r3, [r7, #14]
/* Reset the OC2PE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2PE);
43fc: 89fb ldrh r3, [r7, #14]
43fe: f423 6300 bic.w r3, r3, #2048 ; 0x800
4402: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Preload feature */
tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8);
4404: 887b ldrh r3, [r7, #2]
4406: 021b lsls r3, r3, #8
4408: b29a uxth r2, r3
440a: 89fb ldrh r3, [r7, #14]
440c: 4313 orrs r3, r2
440e: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
4410: 687b ldr r3, [r7, #4]
4412: 89fa ldrh r2, [r7, #14]
4414: 831a strh r2, [r3, #24]
}
4416: bf00 nop
4418: 3714 adds r7, #20
441a: 46bd mov sp, r7
441c: bc80 pop {r7}
441e: 4770 bx lr
00004420 <TIM_OC3PreloadConfig>:
* @arg TIM_OCPreload_Enable
* @arg TIM_OCPreload_Disable
* @retval None
*/
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
{
4420: b480 push {r7}
4422: b085 sub sp, #20
4424: af00 add r7, sp, #0
4426: 6078 str r0, [r7, #4]
4428: 460b mov r3, r1
442a: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
442c: 2300 movs r3, #0
442e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
tmpccmr2 = TIMx->CCMR2;
4430: 687b ldr r3, [r7, #4]
4432: 8b9b ldrh r3, [r3, #28]
4434: 81fb strh r3, [r7, #14]
/* Reset the OC3PE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3PE);
4436: 89fb ldrh r3, [r7, #14]
4438: f023 0308 bic.w r3, r3, #8
443c: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Preload feature */
tmpccmr2 |= TIM_OCPreload;
443e: 89fa ldrh r2, [r7, #14]
4440: 887b ldrh r3, [r7, #2]
4442: 4313 orrs r3, r2
4444: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
4446: 687b ldr r3, [r7, #4]
4448: 89fa ldrh r2, [r7, #14]
444a: 839a strh r2, [r3, #28]
}
444c: bf00 nop
444e: 3714 adds r7, #20
4450: 46bd mov sp, r7
4452: bc80 pop {r7}
4454: 4770 bx lr
00004456 <TIM_OC4PreloadConfig>:
* @arg TIM_OCPreload_Enable
* @arg TIM_OCPreload_Disable
* @retval None
*/
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
{
4456: b480 push {r7}
4458: b085 sub sp, #20
445a: af00 add r7, sp, #0
445c: 6078 str r0, [r7, #4]
445e: 460b mov r3, r1
4460: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
4462: 2300 movs r3, #0
4464: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
tmpccmr2 = TIMx->CCMR2;
4466: 687b ldr r3, [r7, #4]
4468: 8b9b ldrh r3, [r3, #28]
446a: 81fb strh r3, [r7, #14]
/* Reset the OC4PE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4PE);
446c: 89fb ldrh r3, [r7, #14]
446e: f423 6300 bic.w r3, r3, #2048 ; 0x800
4472: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Preload feature */
tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8);
4474: 887b ldrh r3, [r7, #2]
4476: 021b lsls r3, r3, #8
4478: b29a uxth r2, r3
447a: 89fb ldrh r3, [r7, #14]
447c: 4313 orrs r3, r2
447e: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
4480: 687b ldr r3, [r7, #4]
4482: 89fa ldrh r2, [r7, #14]
4484: 839a strh r2, [r3, #28]
}
4486: bf00 nop
4488: 3714 adds r7, #20
448a: 46bd mov sp, r7
448c: bc80 pop {r7}
448e: 4770 bx lr
00004490 <TIM_OC1FastConfig>:
* @arg TIM_OCFast_Enable: TIM output compare fast enable
* @arg TIM_OCFast_Disable: TIM output compare fast disable
* @retval None
*/
void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
{
4490: b480 push {r7}
4492: b085 sub sp, #20
4494: af00 add r7, sp, #0
4496: 6078 str r0, [r7, #4]
4498: 460b mov r3, r1
449a: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
449c: 2300 movs r3, #0
449e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
/* Get the TIMx CCMR1 register value */
tmpccmr1 = TIMx->CCMR1;
44a0: 687b ldr r3, [r7, #4]
44a2: 8b1b ldrh r3, [r3, #24]
44a4: 81fb strh r3, [r7, #14]
/* Reset the OC1FE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1FE);
44a6: 89fb ldrh r3, [r7, #14]
44a8: f023 0304 bic.w r3, r3, #4
44ac: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Fast Bit */
tmpccmr1 |= TIM_OCFast;
44ae: 89fa ldrh r2, [r7, #14]
44b0: 887b ldrh r3, [r7, #2]
44b2: 4313 orrs r3, r2
44b4: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 */
TIMx->CCMR1 = tmpccmr1;
44b6: 687b ldr r3, [r7, #4]
44b8: 89fa ldrh r2, [r7, #14]
44ba: 831a strh r2, [r3, #24]
}
44bc: bf00 nop
44be: 3714 adds r7, #20
44c0: 46bd mov sp, r7
44c2: bc80 pop {r7}
44c4: 4770 bx lr
000044c6 <TIM_OC2FastConfig>:
* @arg TIM_OCFast_Enable: TIM output compare fast enable
* @arg TIM_OCFast_Disable: TIM output compare fast disable
* @retval None
*/
void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
{
44c6: b480 push {r7}
44c8: b085 sub sp, #20
44ca: af00 add r7, sp, #0
44cc: 6078 str r0, [r7, #4]
44ce: 460b mov r3, r1
44d0: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
44d2: 2300 movs r3, #0
44d4: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
/* Get the TIMx CCMR1 register value */
tmpccmr1 = TIMx->CCMR1;
44d6: 687b ldr r3, [r7, #4]
44d8: 8b1b ldrh r3, [r3, #24]
44da: 81fb strh r3, [r7, #14]
/* Reset the OC2FE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2FE);
44dc: 89fb ldrh r3, [r7, #14]
44de: f423 6380 bic.w r3, r3, #1024 ; 0x400
44e2: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Fast Bit */
tmpccmr1 |= (uint16_t)(TIM_OCFast << 8);
44e4: 887b ldrh r3, [r7, #2]
44e6: 021b lsls r3, r3, #8
44e8: b29a uxth r2, r3
44ea: 89fb ldrh r3, [r7, #14]
44ec: 4313 orrs r3, r2
44ee: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 */
TIMx->CCMR1 = tmpccmr1;
44f0: 687b ldr r3, [r7, #4]
44f2: 89fa ldrh r2, [r7, #14]
44f4: 831a strh r2, [r3, #24]
}
44f6: bf00 nop
44f8: 3714 adds r7, #20
44fa: 46bd mov sp, r7
44fc: bc80 pop {r7}
44fe: 4770 bx lr
00004500 <TIM_OC3FastConfig>:
* @arg TIM_OCFast_Enable: TIM output compare fast enable
* @arg TIM_OCFast_Disable: TIM output compare fast disable
* @retval None
*/
void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
{
4500: b480 push {r7}
4502: b085 sub sp, #20
4504: af00 add r7, sp, #0
4506: 6078 str r0, [r7, #4]
4508: 460b mov r3, r1
450a: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
450c: 2300 movs r3, #0
450e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
/* Get the TIMx CCMR2 register value */
tmpccmr2 = TIMx->CCMR2;
4510: 687b ldr r3, [r7, #4]
4512: 8b9b ldrh r3, [r3, #28]
4514: 81fb strh r3, [r7, #14]
/* Reset the OC3FE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3FE);
4516: 89fb ldrh r3, [r7, #14]
4518: f023 0304 bic.w r3, r3, #4
451c: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Fast Bit */
tmpccmr2 |= TIM_OCFast;
451e: 89fa ldrh r2, [r7, #14]
4520: 887b ldrh r3, [r7, #2]
4522: 4313 orrs r3, r2
4524: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 */
TIMx->CCMR2 = tmpccmr2;
4526: 687b ldr r3, [r7, #4]
4528: 89fa ldrh r2, [r7, #14]
452a: 839a strh r2, [r3, #28]
}
452c: bf00 nop
452e: 3714 adds r7, #20
4530: 46bd mov sp, r7
4532: bc80 pop {r7}
4534: 4770 bx lr
00004536 <TIM_OC4FastConfig>:
* @arg TIM_OCFast_Enable: TIM output compare fast enable
* @arg TIM_OCFast_Disable: TIM output compare fast disable
* @retval None
*/
void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
{
4536: b480 push {r7}
4538: b085 sub sp, #20
453a: af00 add r7, sp, #0
453c: 6078 str r0, [r7, #4]
453e: 460b mov r3, r1
4540: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
4542: 2300 movs r3, #0
4544: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
/* Get the TIMx CCMR2 register value */
tmpccmr2 = TIMx->CCMR2;
4546: 687b ldr r3, [r7, #4]
4548: 8b9b ldrh r3, [r3, #28]
454a: 81fb strh r3, [r7, #14]
/* Reset the OC4FE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4FE);
454c: 89fb ldrh r3, [r7, #14]
454e: f423 6380 bic.w r3, r3, #1024 ; 0x400
4552: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Fast Bit */
tmpccmr2 |= (uint16_t)(TIM_OCFast << 8);
4554: 887b ldrh r3, [r7, #2]
4556: 021b lsls r3, r3, #8
4558: b29a uxth r2, r3
455a: 89fb ldrh r3, [r7, #14]
455c: 4313 orrs r3, r2
455e: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 */
TIMx->CCMR2 = tmpccmr2;
4560: 687b ldr r3, [r7, #4]
4562: 89fa ldrh r2, [r7, #14]
4564: 839a strh r2, [r3, #28]
}
4566: bf00 nop
4568: 3714 adds r7, #20
456a: 46bd mov sp, r7
456c: bc80 pop {r7}
456e: 4770 bx lr
00004570 <TIM_ClearOC1Ref>:
* @arg TIM_OCClear_Enable: TIM Output clear enable
* @arg TIM_OCClear_Disable: TIM Output clear disable
* @retval None
*/
void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
{
4570: b480 push {r7}
4572: b085 sub sp, #20
4574: af00 add r7, sp, #0
4576: 6078 str r0, [r7, #4]
4578: 460b mov r3, r1
457a: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
457c: 2300 movs r3, #0
457e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
tmpccmr1 = TIMx->CCMR1;
4580: 687b ldr r3, [r7, #4]
4582: 8b1b ldrh r3, [r3, #24]
4584: 81fb strh r3, [r7, #14]
/* Reset the OC1CE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1CE);
4586: 89fb ldrh r3, [r7, #14]
4588: f023 0380 bic.w r3, r3, #128 ; 0x80
458c: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Clear Bit */
tmpccmr1 |= TIM_OCClear;
458e: 89fa ldrh r2, [r7, #14]
4590: 887b ldrh r3, [r7, #2]
4592: 4313 orrs r3, r2
4594: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
4596: 687b ldr r3, [r7, #4]
4598: 89fa ldrh r2, [r7, #14]
459a: 831a strh r2, [r3, #24]
}
459c: bf00 nop
459e: 3714 adds r7, #20
45a0: 46bd mov sp, r7
45a2: bc80 pop {r7}
45a4: 4770 bx lr
000045a6 <TIM_ClearOC2Ref>:
* @arg TIM_OCClear_Enable: TIM Output clear enable
* @arg TIM_OCClear_Disable: TIM Output clear disable
* @retval None
*/
void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
{
45a6: b480 push {r7}
45a8: b085 sub sp, #20
45aa: af00 add r7, sp, #0
45ac: 6078 str r0, [r7, #4]
45ae: 460b mov r3, r1
45b0: 807b strh r3, [r7, #2]
uint16_t tmpccmr1 = 0;
45b2: 2300 movs r3, #0
45b4: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
tmpccmr1 = TIMx->CCMR1;
45b6: 687b ldr r3, [r7, #4]
45b8: 8b1b ldrh r3, [r3, #24]
45ba: 81fb strh r3, [r7, #14]
/* Reset the OC2CE Bit */
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2CE);
45bc: 89fb ldrh r3, [r7, #14]
45be: f3c3 030e ubfx r3, r3, #0, #15
45c2: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Clear Bit */
tmpccmr1 |= (uint16_t)(TIM_OCClear << 8);
45c4: 887b ldrh r3, [r7, #2]
45c6: 021b lsls r3, r3, #8
45c8: b29a uxth r2, r3
45ca: 89fb ldrh r3, [r7, #14]
45cc: 4313 orrs r3, r2
45ce: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR1 register */
TIMx->CCMR1 = tmpccmr1;
45d0: 687b ldr r3, [r7, #4]
45d2: 89fa ldrh r2, [r7, #14]
45d4: 831a strh r2, [r3, #24]
}
45d6: bf00 nop
45d8: 3714 adds r7, #20
45da: 46bd mov sp, r7
45dc: bc80 pop {r7}
45de: 4770 bx lr
000045e0 <TIM_ClearOC3Ref>:
* @arg TIM_OCClear_Enable: TIM Output clear enable
* @arg TIM_OCClear_Disable: TIM Output clear disable
* @retval None
*/
void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
{
45e0: b480 push {r7}
45e2: b085 sub sp, #20
45e4: af00 add r7, sp, #0
45e6: 6078 str r0, [r7, #4]
45e8: 460b mov r3, r1
45ea: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
45ec: 2300 movs r3, #0
45ee: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
tmpccmr2 = TIMx->CCMR2;
45f0: 687b ldr r3, [r7, #4]
45f2: 8b9b ldrh r3, [r3, #28]
45f4: 81fb strh r3, [r7, #14]
/* Reset the OC3CE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3CE);
45f6: 89fb ldrh r3, [r7, #14]
45f8: f023 0380 bic.w r3, r3, #128 ; 0x80
45fc: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Clear Bit */
tmpccmr2 |= TIM_OCClear;
45fe: 89fa ldrh r2, [r7, #14]
4600: 887b ldrh r3, [r7, #2]
4602: 4313 orrs r3, r2
4604: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
4606: 687b ldr r3, [r7, #4]
4608: 89fa ldrh r2, [r7, #14]
460a: 839a strh r2, [r3, #28]
}
460c: bf00 nop
460e: 3714 adds r7, #20
4610: 46bd mov sp, r7
4612: bc80 pop {r7}
4614: 4770 bx lr
00004616 <TIM_ClearOC4Ref>:
* @arg TIM_OCClear_Enable: TIM Output clear enable
* @arg TIM_OCClear_Disable: TIM Output clear disable
* @retval None
*/
void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
{
4616: b480 push {r7}
4618: b085 sub sp, #20
461a: af00 add r7, sp, #0
461c: 6078 str r0, [r7, #4]
461e: 460b mov r3, r1
4620: 807b strh r3, [r7, #2]
uint16_t tmpccmr2 = 0;
4622: 2300 movs r3, #0
4624: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
tmpccmr2 = TIMx->CCMR2;
4626: 687b ldr r3, [r7, #4]
4628: 8b9b ldrh r3, [r3, #28]
462a: 81fb strh r3, [r7, #14]
/* Reset the OC4CE Bit */
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4CE);
462c: 89fb ldrh r3, [r7, #14]
462e: f3c3 030e ubfx r3, r3, #0, #15
4632: 81fb strh r3, [r7, #14]
/* Enable or Disable the Output Compare Clear Bit */
tmpccmr2 |= (uint16_t)(TIM_OCClear << 8);
4634: 887b ldrh r3, [r7, #2]
4636: 021b lsls r3, r3, #8
4638: b29a uxth r2, r3
463a: 89fb ldrh r3, [r7, #14]
463c: 4313 orrs r3, r2
463e: 81fb strh r3, [r7, #14]
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
4640: 687b ldr r3, [r7, #4]
4642: 89fa ldrh r2, [r7, #14]
4644: 839a strh r2, [r3, #28]
}
4646: bf00 nop
4648: 3714 adds r7, #20
464a: 46bd mov sp, r7
464c: bc80 pop {r7}
464e: 4770 bx lr
00004650 <TIM_OC1PolarityConfig>:
* @arg TIM_OCPolarity_High: Output Compare active high
* @arg TIM_OCPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
{
4650: b480 push {r7}
4652: b085 sub sp, #20
4654: af00 add r7, sp, #0
4656: 6078 str r0, [r7, #4]
4658: 460b mov r3, r1
465a: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
465c: 2300 movs r3, #0
465e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
tmpccer = TIMx->CCER;
4660: 687b ldr r3, [r7, #4]
4662: 8c1b ldrh r3, [r3, #32]
4664: 81fb strh r3, [r7, #14]
/* Set or Reset the CC1P Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P);
4666: 89fb ldrh r3, [r7, #14]
4668: f023 0302 bic.w r3, r3, #2
466c: 81fb strh r3, [r7, #14]
tmpccer |= TIM_OCPolarity;
466e: 89fa ldrh r2, [r7, #14]
4670: 887b ldrh r3, [r7, #2]
4672: 4313 orrs r3, r2
4674: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
4676: 687b ldr r3, [r7, #4]
4678: 89fa ldrh r2, [r7, #14]
467a: 841a strh r2, [r3, #32]
}
467c: bf00 nop
467e: 3714 adds r7, #20
4680: 46bd mov sp, r7
4682: bc80 pop {r7}
4684: 4770 bx lr
00004686 <TIM_OC1NPolarityConfig>:
* @arg TIM_OCNPolarity_High: Output Compare active high
* @arg TIM_OCNPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
{
4686: b480 push {r7}
4688: b085 sub sp, #20
468a: af00 add r7, sp, #0
468c: 6078 str r0, [r7, #4]
468e: 460b mov r3, r1
4690: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
4692: 2300 movs r3, #0
4694: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
tmpccer = TIMx->CCER;
4696: 687b ldr r3, [r7, #4]
4698: 8c1b ldrh r3, [r3, #32]
469a: 81fb strh r3, [r7, #14]
/* Set or Reset the CC1NP Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1NP);
469c: 89fb ldrh r3, [r7, #14]
469e: f023 0308 bic.w r3, r3, #8
46a2: 81fb strh r3, [r7, #14]
tmpccer |= TIM_OCNPolarity;
46a4: 89fa ldrh r2, [r7, #14]
46a6: 887b ldrh r3, [r7, #2]
46a8: 4313 orrs r3, r2
46aa: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
46ac: 687b ldr r3, [r7, #4]
46ae: 89fa ldrh r2, [r7, #14]
46b0: 841a strh r2, [r3, #32]
}
46b2: bf00 nop
46b4: 3714 adds r7, #20
46b6: 46bd mov sp, r7
46b8: bc80 pop {r7}
46ba: 4770 bx lr
000046bc <TIM_OC2PolarityConfig>:
* @arg TIM_OCPolarity_High: Output Compare active high
* @arg TIM_OCPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
{
46bc: b480 push {r7}
46be: b085 sub sp, #20
46c0: af00 add r7, sp, #0
46c2: 6078 str r0, [r7, #4]
46c4: 460b mov r3, r1
46c6: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
46c8: 2300 movs r3, #0
46ca: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
tmpccer = TIMx->CCER;
46cc: 687b ldr r3, [r7, #4]
46ce: 8c1b ldrh r3, [r3, #32]
46d0: 81fb strh r3, [r7, #14]
/* Set or Reset the CC2P Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2P);
46d2: 89fb ldrh r3, [r7, #14]
46d4: f023 0320 bic.w r3, r3, #32
46d8: 81fb strh r3, [r7, #14]
tmpccer |= (uint16_t)(TIM_OCPolarity << 4);
46da: 887b ldrh r3, [r7, #2]
46dc: 011b lsls r3, r3, #4
46de: b29a uxth r2, r3
46e0: 89fb ldrh r3, [r7, #14]
46e2: 4313 orrs r3, r2
46e4: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
46e6: 687b ldr r3, [r7, #4]
46e8: 89fa ldrh r2, [r7, #14]
46ea: 841a strh r2, [r3, #32]
}
46ec: bf00 nop
46ee: 3714 adds r7, #20
46f0: 46bd mov sp, r7
46f2: bc80 pop {r7}
46f4: 4770 bx lr
000046f6 <TIM_OC2NPolarityConfig>:
* @arg TIM_OCNPolarity_High: Output Compare active high
* @arg TIM_OCNPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
{
46f6: b480 push {r7}
46f8: b085 sub sp, #20
46fa: af00 add r7, sp, #0
46fc: 6078 str r0, [r7, #4]
46fe: 460b mov r3, r1
4700: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
4702: 2300 movs r3, #0
4704: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST1_PERIPH(TIMx));
assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
tmpccer = TIMx->CCER;
4706: 687b ldr r3, [r7, #4]
4708: 8c1b ldrh r3, [r3, #32]
470a: 81fb strh r3, [r7, #14]
/* Set or Reset the CC2NP Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2NP);
470c: 89fb ldrh r3, [r7, #14]
470e: f023 0380 bic.w r3, r3, #128 ; 0x80
4712: 81fb strh r3, [r7, #14]
tmpccer |= (uint16_t)(TIM_OCNPolarity << 4);
4714: 887b ldrh r3, [r7, #2]
4716: 011b lsls r3, r3, #4
4718: b29a uxth r2, r3
471a: 89fb ldrh r3, [r7, #14]
471c: 4313 orrs r3, r2
471e: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
4720: 687b ldr r3, [r7, #4]
4722: 89fa ldrh r2, [r7, #14]
4724: 841a strh r2, [r3, #32]
}
4726: bf00 nop
4728: 3714 adds r7, #20
472a: 46bd mov sp, r7
472c: bc80 pop {r7}
472e: 4770 bx lr
00004730 <TIM_OC3PolarityConfig>:
* @arg TIM_OCPolarity_High: Output Compare active high
* @arg TIM_OCPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
{
4730: b480 push {r7}
4732: b085 sub sp, #20
4734: af00 add r7, sp, #0
4736: 6078 str r0, [r7, #4]
4738: 460b mov r3, r1
473a: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
473c: 2300 movs r3, #0
473e: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
tmpccer = TIMx->CCER;
4740: 687b ldr r3, [r7, #4]
4742: 8c1b ldrh r3, [r3, #32]
4744: 81fb strh r3, [r7, #14]
/* Set or Reset the CC3P Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3P);
4746: 89fb ldrh r3, [r7, #14]
4748: f423 7300 bic.w r3, r3, #512 ; 0x200
474c: 81fb strh r3, [r7, #14]
tmpccer |= (uint16_t)(TIM_OCPolarity << 8);
474e: 887b ldrh r3, [r7, #2]
4750: 021b lsls r3, r3, #8
4752: b29a uxth r2, r3
4754: 89fb ldrh r3, [r7, #14]
4756: 4313 orrs r3, r2
4758: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
475a: 687b ldr r3, [r7, #4]
475c: 89fa ldrh r2, [r7, #14]
475e: 841a strh r2, [r3, #32]
}
4760: bf00 nop
4762: 3714 adds r7, #20
4764: 46bd mov sp, r7
4766: bc80 pop {r7}
4768: 4770 bx lr
0000476a <TIM_OC3NPolarityConfig>:
* @arg TIM_OCNPolarity_High: Output Compare active high
* @arg TIM_OCNPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
{
476a: b480 push {r7}
476c: b085 sub sp, #20
476e: af00 add r7, sp, #0
4770: 6078 str r0, [r7, #4]
4772: 460b mov r3, r1
4774: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
4776: 2300 movs r3, #0
4778: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST1_PERIPH(TIMx));
assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
tmpccer = TIMx->CCER;
477a: 687b ldr r3, [r7, #4]
477c: 8c1b ldrh r3, [r3, #32]
477e: 81fb strh r3, [r7, #14]
/* Set or Reset the CC3NP Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3NP);
4780: 89fb ldrh r3, [r7, #14]
4782: f423 6300 bic.w r3, r3, #2048 ; 0x800
4786: 81fb strh r3, [r7, #14]
tmpccer |= (uint16_t)(TIM_OCNPolarity << 8);
4788: 887b ldrh r3, [r7, #2]
478a: 021b lsls r3, r3, #8
478c: b29a uxth r2, r3
478e: 89fb ldrh r3, [r7, #14]
4790: 4313 orrs r3, r2
4792: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
4794: 687b ldr r3, [r7, #4]
4796: 89fa ldrh r2, [r7, #14]
4798: 841a strh r2, [r3, #32]
}
479a: bf00 nop
479c: 3714 adds r7, #20
479e: 46bd mov sp, r7
47a0: bc80 pop {r7}
47a2: 4770 bx lr
000047a4 <TIM_OC4PolarityConfig>:
* @arg TIM_OCPolarity_High: Output Compare active high
* @arg TIM_OCPolarity_Low: Output Compare active low
* @retval None
*/
void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
{
47a4: b480 push {r7}
47a6: b085 sub sp, #20
47a8: af00 add r7, sp, #0
47aa: 6078 str r0, [r7, #4]
47ac: 460b mov r3, r1
47ae: 807b strh r3, [r7, #2]
uint16_t tmpccer = 0;
47b0: 2300 movs r3, #0
47b2: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
tmpccer = TIMx->CCER;
47b4: 687b ldr r3, [r7, #4]
47b6: 8c1b ldrh r3, [r3, #32]
47b8: 81fb strh r3, [r7, #14]
/* Set or Reset the CC4P Bit */
tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC4P);
47ba: 89fb ldrh r3, [r7, #14]
47bc: f423 5300 bic.w r3, r3, #8192 ; 0x2000
47c0: 81fb strh r3, [r7, #14]
tmpccer |= (uint16_t)(TIM_OCPolarity << 12);
47c2: 887b ldrh r3, [r7, #2]
47c4: 031b lsls r3, r3, #12
47c6: b29a uxth r2, r3
47c8: 89fb ldrh r3, [r7, #14]
47ca: 4313 orrs r3, r2
47cc: 81fb strh r3, [r7, #14]
/* Write to TIMx CCER register */
TIMx->CCER = tmpccer;
47ce: 687b ldr r3, [r7, #4]
47d0: 89fa ldrh r2, [r7, #14]
47d2: 841a strh r2, [r3, #32]
}
47d4: bf00 nop
47d6: 3714 adds r7, #20
47d8: 46bd mov sp, r7
47da: bc80 pop {r7}
47dc: 4770 bx lr
000047de <TIM_CCxCmd>:
* @param TIM_CCx: specifies the TIM Channel CCxE bit new state.
* This parameter can be: TIM_CCx_Enable or TIM_CCx_Disable.
* @retval None
*/
void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)
{
47de: b480 push {r7}
47e0: b085 sub sp, #20
47e2: af00 add r7, sp, #0
47e4: 6078 str r0, [r7, #4]
47e6: 460b mov r3, r1
47e8: 807b strh r3, [r7, #2]
47ea: 4613 mov r3, r2
47ec: 803b strh r3, [r7, #0]
uint16_t tmp = 0;
47ee: 2300 movs r3, #0
47f0: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_CHANNEL(TIM_Channel));
assert_param(IS_TIM_CCX(TIM_CCx));
tmp = CCER_CCE_Set << TIM_Channel;
47f2: 887b ldrh r3, [r7, #2]
47f4: 2201 movs r2, #1
47f6: fa02 f303 lsl.w r3, r2, r3
47fa: 81fb strh r3, [r7, #14]
/* Reset the CCxE Bit */
TIMx->CCER &= (uint16_t)~ tmp;
47fc: 687b ldr r3, [r7, #4]
47fe: 8c1b ldrh r3, [r3, #32]
4800: b29a uxth r2, r3
4802: 89fb ldrh r3, [r7, #14]
4804: 43db mvns r3, r3
4806: b29b uxth r3, r3
4808: 4013 ands r3, r2
480a: b29a uxth r2, r3
480c: 687b ldr r3, [r7, #4]
480e: 841a strh r2, [r3, #32]
/* Set or reset the CCxE Bit */
TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel);
4810: 687b ldr r3, [r7, #4]
4812: 8c1b ldrh r3, [r3, #32]
4814: b29a uxth r2, r3
4816: 8839 ldrh r1, [r7, #0]
4818: 887b ldrh r3, [r7, #2]
481a: fa01 f303 lsl.w r3, r1, r3
481e: b29b uxth r3, r3
4820: 4313 orrs r3, r2
4822: b29a uxth r2, r3
4824: 687b ldr r3, [r7, #4]
4826: 841a strh r2, [r3, #32]
}
4828: bf00 nop
482a: 3714 adds r7, #20
482c: 46bd mov sp, r7
482e: bc80 pop {r7}
4830: 4770 bx lr
00004832 <TIM_CCxNCmd>:
* @param TIM_CCxN: specifies the TIM Channel CCxNE bit new state.
* This parameter can be: TIM_CCxN_Enable or TIM_CCxN_Disable.
* @retval None
*/
void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN)
{
4832: b480 push {r7}
4834: b085 sub sp, #20
4836: af00 add r7, sp, #0
4838: 6078 str r0, [r7, #4]
483a: 460b mov r3, r1
483c: 807b strh r3, [r7, #2]
483e: 4613 mov r3, r2
4840: 803b strh r3, [r7, #0]
uint16_t tmp = 0;
4842: 2300 movs r3, #0
4844: 81fb strh r3, [r7, #14]
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_TIM_COMPLEMENTARY_CHANNEL(TIM_Channel));
assert_param(IS_TIM_CCXN(TIM_CCxN));
tmp = CCER_CCNE_Set << TIM_Channel;
4846: 887b ldrh r3, [r7, #2]
4848: 2204 movs r2, #4
484a: fa02 f303 lsl.w r3, r2, r3
484e: 81fb strh r3, [r7, #14]
/* Reset the CCxNE Bit */
TIMx->CCER &= (uint16_t) ~tmp;
4850: 687b ldr r3, [r7, #4]
4852: 8c1b ldrh r3, [r3, #32]
4854: b29a uxth r2, r3
4856: 89fb ldrh r3, [r7, #14]
4858: 43db mvns r3, r3
485a: b29b uxth r3, r3
485c: 4013 ands r3, r2
485e: b29a uxth r2, r3
4860: 687b ldr r3, [r7, #4]
4862: 841a strh r2, [r3, #32]
/* Set or reset the CCxNE Bit */
TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel);
4864: 687b ldr r3, [r7, #4]
4866: 8c1b ldrh r3, [r3, #32]
4868: b29a uxth r2, r3
486a: 8839 ldrh r1, [r7, #0]
486c: 887b ldrh r3, [r7, #2]
486e: fa01 f303 lsl.w r3, r1, r3
4872: b29b uxth r3, r3
4874: 4313 orrs r3, r2
4876: b29a uxth r2, r3
4878: 687b ldr r3, [r7, #4]
487a: 841a strh r2, [r3, #32]
}
487c: bf00 nop
487e: 3714 adds r7, #20
4880: 46bd mov sp, r7
4882: bc80 pop {r7}
4884: 4770 bx lr
00004886 <TIM_SelectOCxM>:
* @arg TIM_ForcedAction_Active
* @arg TIM_ForcedAction_InActive
* @retval None
*/
void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)
{
4886: b480 push {r7}
4888: b085 sub sp, #20
488a: af00 add r7, sp, #0
488c: 6078 str r0, [r7, #4]
488e: 460b mov r3, r1
4890: 807b strh r3, [r7, #2]
4892: 4613 mov r3, r2
4894: 803b strh r3, [r7, #0]
uint32_t tmp = 0;
4896: 2300 movs r3, #0
4898: 60fb str r3, [r7, #12]
uint16_t tmp1 = 0;
489a: 2300 movs r3, #0
489c: 817b strh r3, [r7, #10]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_CHANNEL(TIM_Channel));
assert_param(IS_TIM_OCM(TIM_OCMode));
tmp = (uint32_t) TIMx;
489e: 687b ldr r3, [r7, #4]
48a0: 60fb str r3, [r7, #12]
tmp += CCMR_Offset;
48a2: 68fb ldr r3, [r7, #12]
48a4: 3318 adds r3, #24
48a6: 60fb str r3, [r7, #12]
tmp1 = CCER_CCE_Set << (uint16_t)TIM_Channel;
48a8: 887b ldrh r3, [r7, #2]
48aa: 2201 movs r2, #1
48ac: fa02 f303 lsl.w r3, r2, r3
48b0: 817b strh r3, [r7, #10]
/* Disable the Channel: Reset the CCxE Bit */
TIMx->CCER &= (uint16_t) ~tmp1;
48b2: 687b ldr r3, [r7, #4]
48b4: 8c1b ldrh r3, [r3, #32]
48b6: b29a uxth r2, r3
48b8: 897b ldrh r3, [r7, #10]
48ba: 43db mvns r3, r3
48bc: b29b uxth r3, r3
48be: 4013 ands r3, r2
48c0: b29a uxth r2, r3
48c2: 687b ldr r3, [r7, #4]
48c4: 841a strh r2, [r3, #32]
if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3))
48c6: 887b ldrh r3, [r7, #2]
48c8: 2b00 cmp r3, #0
48ca: d002 beq.n 48d2 <TIM_SelectOCxM+0x4c>
48cc: 887b ldrh r3, [r7, #2]
48ce: 2b08 cmp r3, #8
48d0: d113 bne.n 48fa <TIM_SelectOCxM+0x74>
{
tmp += (TIM_Channel>>1);
48d2: 887b ldrh r3, [r7, #2]
48d4: 085b lsrs r3, r3, #1
48d6: b29b uxth r3, r3
48d8: 461a mov r2, r3
48da: 68fb ldr r3, [r7, #12]
48dc: 4413 add r3, r2
48de: 60fb str r3, [r7, #12]
/* Reset the OCxM bits in the CCMRx register */
*(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC1M);
48e0: 68fb ldr r3, [r7, #12]
48e2: 681a ldr r2, [r3, #0]
48e4: 68fb ldr r3, [r7, #12]
48e6: f022 0270 bic.w r2, r2, #112 ; 0x70
48ea: 601a str r2, [r3, #0]
/* Configure the OCxM bits in the CCMRx register */
*(__IO uint32_t *) tmp |= TIM_OCMode;
48ec: 68fb ldr r3, [r7, #12]
48ee: 6819 ldr r1, [r3, #0]
48f0: 883a ldrh r2, [r7, #0]
48f2: 68fb ldr r3, [r7, #12]
48f4: 430a orrs r2, r1
48f6: 601a str r2, [r3, #0]
48f8: e018 b.n 492c <TIM_SelectOCxM+0xa6>
}
else
{
tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1;
48fa: 887b ldrh r3, [r7, #2]
48fc: 3b04 subs r3, #4
48fe: b29b uxth r3, r3
4900: 085b lsrs r3, r3, #1
4902: b29b uxth r3, r3
4904: 461a mov r2, r3
4906: 68fb ldr r3, [r7, #12]
4908: 4413 add r3, r2
490a: 60fb str r3, [r7, #12]
/* Reset the OCxM bits in the CCMRx register */
*(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC2M);
490c: 68fb ldr r3, [r7, #12]
490e: 681a ldr r2, [r3, #0]
4910: 68fb ldr r3, [r7, #12]
4912: f422 42e0 bic.w r2, r2, #28672 ; 0x7000
4916: 601a str r2, [r3, #0]
/* Configure the OCxM bits in the CCMRx register */
*(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8);
4918: 68fb ldr r3, [r7, #12]
491a: 681a ldr r2, [r3, #0]
491c: 883b ldrh r3, [r7, #0]
491e: 021b lsls r3, r3, #8
4920: b29b uxth r3, r3
4922: 4619 mov r1, r3
4924: 68fb ldr r3, [r7, #12]
4926: 430a orrs r2, r1
4928: 601a str r2, [r3, #0]
}
}
492a: bf00 nop
492c: bf00 nop
492e: 3714 adds r7, #20
4930: 46bd mov sp, r7
4932: bc80 pop {r7}
4934: 4770 bx lr
00004936 <TIM_UpdateDisableConfig>:
* @param NewState: new state of the TIMx UDIS bit
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
{
4936: b480 push {r7}
4938: b083 sub sp, #12
493a: af00 add r7, sp, #0
493c: 6078 str r0, [r7, #4]
493e: 460b mov r3, r1
4940: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
4942: 78fb ldrb r3, [r7, #3]
4944: 2b00 cmp r3, #0
4946: d008 beq.n 495a <TIM_UpdateDisableConfig+0x24>
{
/* Set the Update Disable Bit */
TIMx->CR1 |= TIM_CR1_UDIS;
4948: 687b ldr r3, [r7, #4]
494a: 881b ldrh r3, [r3, #0]
494c: b29b uxth r3, r3
494e: f043 0302 orr.w r3, r3, #2
4952: b29a uxth r2, r3
4954: 687b ldr r3, [r7, #4]
4956: 801a strh r2, [r3, #0]
else
{
/* Reset the Update Disable Bit */
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS);
}
}
4958: e007 b.n 496a <TIM_UpdateDisableConfig+0x34>
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS);
495a: 687b ldr r3, [r7, #4]
495c: 881b ldrh r3, [r3, #0]
495e: b29b uxth r3, r3
4960: f023 0302 bic.w r3, r3, #2
4964: b29a uxth r2, r3
4966: 687b ldr r3, [r7, #4]
4968: 801a strh r2, [r3, #0]
}
496a: bf00 nop
496c: 370c adds r7, #12
496e: 46bd mov sp, r7
4970: bc80 pop {r7}
4972: 4770 bx lr
00004974 <TIM_UpdateRequestConfig>:
through the slave mode controller.
* @arg TIM_UpdateSource_Global: Source of update is counter overflow/underflow.
* @retval None
*/
void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource)
{
4974: b480 push {r7}
4976: b083 sub sp, #12
4978: af00 add r7, sp, #0
497a: 6078 str r0, [r7, #4]
497c: 460b mov r3, r1
497e: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource));
if (TIM_UpdateSource != TIM_UpdateSource_Global)
4980: 887b ldrh r3, [r7, #2]
4982: 2b00 cmp r3, #0
4984: d008 beq.n 4998 <TIM_UpdateRequestConfig+0x24>
{
/* Set the URS Bit */
TIMx->CR1 |= TIM_CR1_URS;
4986: 687b ldr r3, [r7, #4]
4988: 881b ldrh r3, [r3, #0]
498a: b29b uxth r3, r3
498c: f043 0304 orr.w r3, r3, #4
4990: b29a uxth r2, r3
4992: 687b ldr r3, [r7, #4]
4994: 801a strh r2, [r3, #0]
else
{
/* Reset the URS Bit */
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS);
}
}
4996: e007 b.n 49a8 <TIM_UpdateRequestConfig+0x34>
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS);
4998: 687b ldr r3, [r7, #4]
499a: 881b ldrh r3, [r3, #0]
499c: b29b uxth r3, r3
499e: f023 0304 bic.w r3, r3, #4
49a2: b29a uxth r2, r3
49a4: 687b ldr r3, [r7, #4]
49a6: 801a strh r2, [r3, #0]
}
49a8: bf00 nop
49aa: 370c adds r7, #12
49ac: 46bd mov sp, r7
49ae: bc80 pop {r7}
49b0: 4770 bx lr
000049b2 <TIM_SelectHallSensor>:
* @param NewState: new state of the TIMx Hall sensor interface.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState)
{
49b2: b480 push {r7}
49b4: b083 sub sp, #12
49b6: af00 add r7, sp, #0
49b8: 6078 str r0, [r7, #4]
49ba: 460b mov r3, r1
49bc: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
49be: 78fb ldrb r3, [r7, #3]
49c0: 2b00 cmp r3, #0
49c2: d008 beq.n 49d6 <TIM_SelectHallSensor+0x24>
{
/* Set the TI1S Bit */
TIMx->CR2 |= TIM_CR2_TI1S;
49c4: 687b ldr r3, [r7, #4]
49c6: 889b ldrh r3, [r3, #4]
49c8: b29b uxth r3, r3
49ca: f043 0380 orr.w r3, r3, #128 ; 0x80
49ce: b29a uxth r2, r3
49d0: 687b ldr r3, [r7, #4]
49d2: 809a strh r2, [r3, #4]
else
{
/* Reset the TI1S Bit */
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S);
}
}
49d4: e007 b.n 49e6 <TIM_SelectHallSensor+0x34>
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S);
49d6: 687b ldr r3, [r7, #4]
49d8: 889b ldrh r3, [r3, #4]
49da: b29b uxth r3, r3
49dc: f023 0380 bic.w r3, r3, #128 ; 0x80
49e0: b29a uxth r2, r3
49e2: 687b ldr r3, [r7, #4]
49e4: 809a strh r2, [r3, #4]
}
49e6: bf00 nop
49e8: 370c adds r7, #12
49ea: 46bd mov sp, r7
49ec: bc80 pop {r7}
49ee: 4770 bx lr
000049f0 <TIM_SelectOnePulseMode>:
* @arg TIM_OPMode_Single
* @arg TIM_OPMode_Repetitive
* @retval None
*/
void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode)
{
49f0: b480 push {r7}
49f2: b083 sub sp, #12
49f4: af00 add r7, sp, #0
49f6: 6078 str r0, [r7, #4]
49f8: 460b mov r3, r1
49fa: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_OPM_MODE(TIM_OPMode));
/* Reset the OPM Bit */
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_OPM);
49fc: 687b ldr r3, [r7, #4]
49fe: 881b ldrh r3, [r3, #0]
4a00: b29b uxth r3, r3
4a02: f023 0308 bic.w r3, r3, #8
4a06: b29a uxth r2, r3
4a08: 687b ldr r3, [r7, #4]
4a0a: 801a strh r2, [r3, #0]
/* Configure the OPM Mode */
TIMx->CR1 |= TIM_OPMode;
4a0c: 687b ldr r3, [r7, #4]
4a0e: 881b ldrh r3, [r3, #0]
4a10: b29a uxth r2, r3
4a12: 887b ldrh r3, [r7, #2]
4a14: 4313 orrs r3, r2
4a16: b29a uxth r2, r3
4a18: 687b ldr r3, [r7, #4]
4a1a: 801a strh r2, [r3, #0]
}
4a1c: bf00 nop
4a1e: 370c adds r7, #12
4a20: 46bd mov sp, r7
4a22: bc80 pop {r7}
4a24: 4770 bx lr
00004a26 <TIM_SelectOutputTrigger>:
* @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO).
*
* @retval None
*/
void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource)
{
4a26: b480 push {r7}
4a28: b083 sub sp, #12
4a2a: af00 add r7, sp, #0
4a2c: 6078 str r0, [r7, #4]
4a2e: 460b mov r3, r1
4a30: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST7_PERIPH(TIMx));
assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource));
/* Reset the MMS Bits */
TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_MMS);
4a32: 687b ldr r3, [r7, #4]
4a34: 889b ldrh r3, [r3, #4]
4a36: b29b uxth r3, r3
4a38: f023 0370 bic.w r3, r3, #112 ; 0x70
4a3c: b29a uxth r2, r3
4a3e: 687b ldr r3, [r7, #4]
4a40: 809a strh r2, [r3, #4]
/* Select the TRGO source */
TIMx->CR2 |= TIM_TRGOSource;
4a42: 687b ldr r3, [r7, #4]
4a44: 889b ldrh r3, [r3, #4]
4a46: b29a uxth r2, r3
4a48: 887b ldrh r3, [r7, #2]
4a4a: 4313 orrs r3, r2
4a4c: b29a uxth r2, r3
4a4e: 687b ldr r3, [r7, #4]
4a50: 809a strh r2, [r3, #4]
}
4a52: bf00 nop
4a54: 370c adds r7, #12
4a56: 46bd mov sp, r7
4a58: bc80 pop {r7}
4a5a: 4770 bx lr
00004a5c <TIM_SelectSlaveMode>:
* @arg TIM_SlaveMode_Trigger: The counter starts at a rising edge of the trigger TRGI.
* @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter.
* @retval None
*/
void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode)
{
4a5c: b480 push {r7}
4a5e: b083 sub sp, #12
4a60: af00 add r7, sp, #0
4a62: 6078 str r0, [r7, #4]
4a64: 460b mov r3, r1
4a66: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode));
/* Reset the SMS Bits */
TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_SMS);
4a68: 687b ldr r3, [r7, #4]
4a6a: 891b ldrh r3, [r3, #8]
4a6c: b29b uxth r3, r3
4a6e: f023 0307 bic.w r3, r3, #7
4a72: b29a uxth r2, r3
4a74: 687b ldr r3, [r7, #4]
4a76: 811a strh r2, [r3, #8]
/* Select the Slave Mode */
TIMx->SMCR |= TIM_SlaveMode;
4a78: 687b ldr r3, [r7, #4]
4a7a: 891b ldrh r3, [r3, #8]
4a7c: b29a uxth r2, r3
4a7e: 887b ldrh r3, [r7, #2]
4a80: 4313 orrs r3, r2
4a82: b29a uxth r2, r3
4a84: 687b ldr r3, [r7, #4]
4a86: 811a strh r2, [r3, #8]
}
4a88: bf00 nop
4a8a: 370c adds r7, #12
4a8c: 46bd mov sp, r7
4a8e: bc80 pop {r7}
4a90: 4770 bx lr
00004a92 <TIM_SelectMasterSlaveMode>:
* and its slaves (through TRGO).
* @arg TIM_MasterSlaveMode_Disable: No action
* @retval None
*/
void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode)
{
4a92: b480 push {r7}
4a94: b083 sub sp, #12
4a96: af00 add r7, sp, #0
4a98: 6078 str r0, [r7, #4]
4a9a: 460b mov r3, r1
4a9c: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode));
/* Reset the MSM Bit */
TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_MSM);
4a9e: 687b ldr r3, [r7, #4]
4aa0: 891b ldrh r3, [r3, #8]
4aa2: b29b uxth r3, r3
4aa4: f023 0380 bic.w r3, r3, #128 ; 0x80
4aa8: b29a uxth r2, r3
4aaa: 687b ldr r3, [r7, #4]
4aac: 811a strh r2, [r3, #8]
/* Set or Reset the MSM Bit */
TIMx->SMCR |= TIM_MasterSlaveMode;
4aae: 687b ldr r3, [r7, #4]
4ab0: 891b ldrh r3, [r3, #8]
4ab2: b29a uxth r2, r3
4ab4: 887b ldrh r3, [r7, #2]
4ab6: 4313 orrs r3, r2
4ab8: b29a uxth r2, r3
4aba: 687b ldr r3, [r7, #4]
4abc: 811a strh r2, [r3, #8]
}
4abe: bf00 nop
4ac0: 370c adds r7, #12
4ac2: 46bd mov sp, r7
4ac4: bc80 pop {r7}
4ac6: 4770 bx lr
00004ac8 <TIM_SetCounter>:
* @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
* @param Counter: specifies the Counter register new value.
* @retval None
*/
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter)
{
4ac8: b480 push {r7}
4aca: b083 sub sp, #12
4acc: af00 add r7, sp, #0
4ace: 6078 str r0, [r7, #4]
4ad0: 460b mov r3, r1
4ad2: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Set the Counter Register value */
TIMx->CNT = Counter;
4ad4: 687b ldr r3, [r7, #4]
4ad6: 887a ldrh r2, [r7, #2]
4ad8: 849a strh r2, [r3, #36] ; 0x24
}
4ada: bf00 nop
4adc: 370c adds r7, #12
4ade: 46bd mov sp, r7
4ae0: bc80 pop {r7}
4ae2: 4770 bx lr
00004ae4 <TIM_SetAutoreload>:
* @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
* @param Autoreload: specifies the Autoreload register new value.
* @retval None
*/
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)
{
4ae4: b480 push {r7}
4ae6: b083 sub sp, #12
4ae8: af00 add r7, sp, #0
4aea: 6078 str r0, [r7, #4]
4aec: 460b mov r3, r1
4aee: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Set the Autoreload Register value */
TIMx->ARR = Autoreload;
4af0: 687b ldr r3, [r7, #4]
4af2: 887a ldrh r2, [r7, #2]
4af4: 859a strh r2, [r3, #44] ; 0x2c
}
4af6: bf00 nop
4af8: 370c adds r7, #12
4afa: 46bd mov sp, r7
4afc: bc80 pop {r7}
4afe: 4770 bx lr
00004b00 <TIM_SetCompare1>:
* @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
* @param Compare1: specifies the Capture Compare1 register new value.
* @retval None
*/
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
{
4b00: b480 push {r7}
4b02: b083 sub sp, #12
4b04: af00 add r7, sp, #0
4b06: 6078 str r0, [r7, #4]
4b08: 460b mov r3, r1
4b0a: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
/* Set the Capture Compare1 Register value */
TIMx->CCR1 = Compare1;
4b0c: 687b ldr r3, [r7, #4]
4b0e: 887a ldrh r2, [r7, #2]
4b10: 869a strh r2, [r3, #52] ; 0x34
}
4b12: bf00 nop
4b14: 370c adds r7, #12
4b16: 46bd mov sp, r7
4b18: bc80 pop {r7}
4b1a: 4770 bx lr
00004b1c <TIM_SetCompare2>:
* @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
* @param Compare2: specifies the Capture Compare2 register new value.
* @retval None
*/
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
{
4b1c: b480 push {r7}
4b1e: b083 sub sp, #12
4b20: af00 add r7, sp, #0
4b22: 6078 str r0, [r7, #4]
4b24: 460b mov r3, r1
4b26: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
/* Set the Capture Compare2 Register value */
TIMx->CCR2 = Compare2;
4b28: 687b ldr r3, [r7, #4]
4b2a: 887a ldrh r2, [r7, #2]
4b2c: 871a strh r2, [r3, #56] ; 0x38
}
4b2e: bf00 nop
4b30: 370c adds r7, #12
4b32: 46bd mov sp, r7
4b34: bc80 pop {r7}
4b36: 4770 bx lr
00004b38 <TIM_SetCompare3>:
* @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
* @param Compare3: specifies the Capture Compare3 register new value.
* @retval None
*/
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3)
{
4b38: b480 push {r7}
4b3a: b083 sub sp, #12
4b3c: af00 add r7, sp, #0
4b3e: 6078 str r0, [r7, #4]
4b40: 460b mov r3, r1
4b42: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Set the Capture Compare3 Register value */
TIMx->CCR3 = Compare3;
4b44: 687b ldr r3, [r7, #4]
4b46: 887a ldrh r2, [r7, #2]
4b48: 879a strh r2, [r3, #60] ; 0x3c
}
4b4a: bf00 nop
4b4c: 370c adds r7, #12
4b4e: 46bd mov sp, r7
4b50: bc80 pop {r7}
4b52: 4770 bx lr
00004b54 <TIM_SetCompare4>:
* @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
* @param Compare4: specifies the Capture Compare4 register new value.
* @retval None
*/
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4)
{
4b54: b480 push {r7}
4b56: b083 sub sp, #12
4b58: af00 add r7, sp, #0
4b5a: 6078 str r0, [r7, #4]
4b5c: 460b mov r3, r1
4b5e: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Set the Capture Compare4 Register value */
TIMx->CCR4 = Compare4;
4b60: 687b ldr r3, [r7, #4]
4b62: 887a ldrh r2, [r7, #2]
4b64: f8a3 2040 strh.w r2, [r3, #64] ; 0x40
}
4b68: bf00 nop
4b6a: 370c adds r7, #12
4b6c: 46bd mov sp, r7
4b6e: bc80 pop {r7}
4b70: 4770 bx lr
00004b72 <TIM_SetIC1Prescaler>:
* @arg TIM_ICPSC_DIV4: capture is done once every 4 events
* @arg TIM_ICPSC_DIV8: capture is done once every 8 events
* @retval None
*/
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
{
4b72: b480 push {r7}
4b74: b083 sub sp, #12
4b76: af00 add r7, sp, #0
4b78: 6078 str r0, [r7, #4]
4b7a: 460b mov r3, r1
4b7c: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
/* Reset the IC1PSC Bits */
TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC1PSC);
4b7e: 687b ldr r3, [r7, #4]
4b80: 8b1b ldrh r3, [r3, #24]
4b82: b29b uxth r3, r3
4b84: f023 030c bic.w r3, r3, #12
4b88: b29a uxth r2, r3
4b8a: 687b ldr r3, [r7, #4]
4b8c: 831a strh r2, [r3, #24]
/* Set the IC1PSC value */
TIMx->CCMR1 |= TIM_ICPSC;
4b8e: 687b ldr r3, [r7, #4]
4b90: 8b1b ldrh r3, [r3, #24]
4b92: b29a uxth r2, r3
4b94: 887b ldrh r3, [r7, #2]
4b96: 4313 orrs r3, r2
4b98: b29a uxth r2, r3
4b9a: 687b ldr r3, [r7, #4]
4b9c: 831a strh r2, [r3, #24]
}
4b9e: bf00 nop
4ba0: 370c adds r7, #12
4ba2: 46bd mov sp, r7
4ba4: bc80 pop {r7}
4ba6: 4770 bx lr
00004ba8 <TIM_SetIC2Prescaler>:
* @arg TIM_ICPSC_DIV4: capture is done once every 4 events
* @arg TIM_ICPSC_DIV8: capture is done once every 8 events
* @retval None
*/
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
{
4ba8: b480 push {r7}
4baa: b083 sub sp, #12
4bac: af00 add r7, sp, #0
4bae: 6078 str r0, [r7, #4]
4bb0: 460b mov r3, r1
4bb2: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
/* Reset the IC2PSC Bits */
TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC2PSC);
4bb4: 687b ldr r3, [r7, #4]
4bb6: 8b1b ldrh r3, [r3, #24]
4bb8: b29b uxth r3, r3
4bba: f423 6340 bic.w r3, r3, #3072 ; 0xc00
4bbe: b29a uxth r2, r3
4bc0: 687b ldr r3, [r7, #4]
4bc2: 831a strh r2, [r3, #24]
/* Set the IC2PSC value */
TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8);
4bc4: 687b ldr r3, [r7, #4]
4bc6: 8b1b ldrh r3, [r3, #24]
4bc8: b29a uxth r2, r3
4bca: 887b ldrh r3, [r7, #2]
4bcc: 021b lsls r3, r3, #8
4bce: b29b uxth r3, r3
4bd0: 4313 orrs r3, r2
4bd2: b29a uxth r2, r3
4bd4: 687b ldr r3, [r7, #4]
4bd6: 831a strh r2, [r3, #24]
}
4bd8: bf00 nop
4bda: 370c adds r7, #12
4bdc: 46bd mov sp, r7
4bde: bc80 pop {r7}
4be0: 4770 bx lr
00004be2 <TIM_SetIC3Prescaler>:
* @arg TIM_ICPSC_DIV4: capture is done once every 4 events
* @arg TIM_ICPSC_DIV8: capture is done once every 8 events
* @retval None
*/
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
{
4be2: b480 push {r7}
4be4: b083 sub sp, #12
4be6: af00 add r7, sp, #0
4be8: 6078 str r0, [r7, #4]
4bea: 460b mov r3, r1
4bec: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
/* Reset the IC3PSC Bits */
TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC3PSC);
4bee: 687b ldr r3, [r7, #4]
4bf0: 8b9b ldrh r3, [r3, #28]
4bf2: b29b uxth r3, r3
4bf4: f023 030c bic.w r3, r3, #12
4bf8: b29a uxth r2, r3
4bfa: 687b ldr r3, [r7, #4]
4bfc: 839a strh r2, [r3, #28]
/* Set the IC3PSC value */
TIMx->CCMR2 |= TIM_ICPSC;
4bfe: 687b ldr r3, [r7, #4]
4c00: 8b9b ldrh r3, [r3, #28]
4c02: b29a uxth r2, r3
4c04: 887b ldrh r3, [r7, #2]
4c06: 4313 orrs r3, r2
4c08: b29a uxth r2, r3
4c0a: 687b ldr r3, [r7, #4]
4c0c: 839a strh r2, [r3, #28]
}
4c0e: bf00 nop
4c10: 370c adds r7, #12
4c12: 46bd mov sp, r7
4c14: bc80 pop {r7}
4c16: 4770 bx lr
00004c18 <TIM_SetIC4Prescaler>:
* @arg TIM_ICPSC_DIV4: capture is done once every 4 events
* @arg TIM_ICPSC_DIV8: capture is done once every 8 events
* @retval None
*/
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
{
4c18: b480 push {r7}
4c1a: b083 sub sp, #12
4c1c: af00 add r7, sp, #0
4c1e: 6078 str r0, [r7, #4]
4c20: 460b mov r3, r1
4c22: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
/* Reset the IC4PSC Bits */
TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC4PSC);
4c24: 687b ldr r3, [r7, #4]
4c26: 8b9b ldrh r3, [r3, #28]
4c28: b29b uxth r3, r3
4c2a: f423 6340 bic.w r3, r3, #3072 ; 0xc00
4c2e: b29a uxth r2, r3
4c30: 687b ldr r3, [r7, #4]
4c32: 839a strh r2, [r3, #28]
/* Set the IC4PSC value */
TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8);
4c34: 687b ldr r3, [r7, #4]
4c36: 8b9b ldrh r3, [r3, #28]
4c38: b29a uxth r2, r3
4c3a: 887b ldrh r3, [r7, #2]
4c3c: 021b lsls r3, r3, #8
4c3e: b29b uxth r3, r3
4c40: 4313 orrs r3, r2
4c42: b29a uxth r2, r3
4c44: 687b ldr r3, [r7, #4]
4c46: 839a strh r2, [r3, #28]
}
4c48: bf00 nop
4c4a: 370c adds r7, #12
4c4c: 46bd mov sp, r7
4c4e: bc80 pop {r7}
4c50: 4770 bx lr
00004c52 <TIM_SetClockDivision>:
* @arg TIM_CKD_DIV2: TDTS = 2*Tck_tim
* @arg TIM_CKD_DIV4: TDTS = 4*Tck_tim
* @retval None
*/
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD)
{
4c52: b480 push {r7}
4c54: b083 sub sp, #12
4c56: af00 add r7, sp, #0
4c58: 6078 str r0, [r7, #4]
4c5a: 460b mov r3, r1
4c5c: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
assert_param(IS_TIM_CKD_DIV(TIM_CKD));
/* Reset the CKD Bits */
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_CKD);
4c5e: 687b ldr r3, [r7, #4]
4c60: 881b ldrh r3, [r3, #0]
4c62: b29b uxth r3, r3
4c64: f423 7340 bic.w r3, r3, #768 ; 0x300
4c68: b29a uxth r2, r3
4c6a: 687b ldr r3, [r7, #4]
4c6c: 801a strh r2, [r3, #0]
/* Set the CKD value */
TIMx->CR1 |= TIM_CKD;
4c6e: 687b ldr r3, [r7, #4]
4c70: 881b ldrh r3, [r3, #0]
4c72: b29a uxth r2, r3
4c74: 887b ldrh r3, [r7, #2]
4c76: 4313 orrs r3, r2
4c78: b29a uxth r2, r3
4c7a: 687b ldr r3, [r7, #4]
4c7c: 801a strh r2, [r3, #0]
}
4c7e: bf00 nop
4c80: 370c adds r7, #12
4c82: 46bd mov sp, r7
4c84: bc80 pop {r7}
4c86: 4770 bx lr
00004c88 <TIM_GetCapture1>:
* @brief Gets the TIMx Input Capture 1 value.
* @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
* @retval Capture Compare 1 Register value.
*/
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx)
{
4c88: b480 push {r7}
4c8a: b083 sub sp, #12
4c8c: af00 add r7, sp, #0
4c8e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
/* Get the Capture 1 Register value */
return TIMx->CCR1;
4c90: 687b ldr r3, [r7, #4]
4c92: 8e9b ldrh r3, [r3, #52] ; 0x34
4c94: b29b uxth r3, r3
}
4c96: 4618 mov r0, r3
4c98: 370c adds r7, #12
4c9a: 46bd mov sp, r7
4c9c: bc80 pop {r7}
4c9e: 4770 bx lr
00004ca0 <TIM_GetCapture2>:
* @brief Gets the TIMx Input Capture 2 value.
* @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
* @retval Capture Compare 2 Register value.
*/
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx)
{
4ca0: b480 push {r7}
4ca2: b083 sub sp, #12
4ca4: af00 add r7, sp, #0
4ca6: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
/* Get the Capture 2 Register value */
return TIMx->CCR2;
4ca8: 687b ldr r3, [r7, #4]
4caa: 8f1b ldrh r3, [r3, #56] ; 0x38
4cac: b29b uxth r3, r3
}
4cae: 4618 mov r0, r3
4cb0: 370c adds r7, #12
4cb2: 46bd mov sp, r7
4cb4: bc80 pop {r7}
4cb6: 4770 bx lr
00004cb8 <TIM_GetCapture3>:
* @brief Gets the TIMx Input Capture 3 value.
* @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
* @retval Capture Compare 3 Register value.
*/
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx)
{
4cb8: b480 push {r7}
4cba: b083 sub sp, #12
4cbc: af00 add r7, sp, #0
4cbe: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Get the Capture 3 Register value */
return TIMx->CCR3;
4cc0: 687b ldr r3, [r7, #4]
4cc2: 8f9b ldrh r3, [r3, #60] ; 0x3c
4cc4: b29b uxth r3, r3
}
4cc6: 4618 mov r0, r3
4cc8: 370c adds r7, #12
4cca: 46bd mov sp, r7
4ccc: bc80 pop {r7}
4cce: 4770 bx lr
00004cd0 <TIM_GetCapture4>:
* @brief Gets the TIMx Input Capture 4 value.
* @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
* @retval Capture Compare 4 Register value.
*/
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx)
{
4cd0: b480 push {r7}
4cd2: b083 sub sp, #12
4cd4: af00 add r7, sp, #0
4cd6: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Get the Capture 4 Register value */
return TIMx->CCR4;
4cd8: 687b ldr r3, [r7, #4]
4cda: f8b3 3040 ldrh.w r3, [r3, #64] ; 0x40
4cde: b29b uxth r3, r3
}
4ce0: 4618 mov r0, r3
4ce2: 370c adds r7, #12
4ce4: 46bd mov sp, r7
4ce6: bc80 pop {r7}
4ce8: 4770 bx lr
00004cea <TIM_GetCounter>:
* @brief Gets the TIMx Counter value.
* @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
* @retval Counter Register value.
*/
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx)
{
4cea: b480 push {r7}
4cec: b083 sub sp, #12
4cee: af00 add r7, sp, #0
4cf0: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Get the Counter Register value */
return TIMx->CNT;
4cf2: 687b ldr r3, [r7, #4]
4cf4: 8c9b ldrh r3, [r3, #36] ; 0x24
4cf6: b29b uxth r3, r3
}
4cf8: 4618 mov r0, r3
4cfa: 370c adds r7, #12
4cfc: 46bd mov sp, r7
4cfe: bc80 pop {r7}
4d00: 4770 bx lr
00004d02 <TIM_GetPrescaler>:
* @brief Gets the TIMx Prescaler value.
* @param TIMx: where x can be 1 to 17 to select the TIM peripheral.
* @retval Prescaler Register value.
*/
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx)
{
4d02: b480 push {r7}
4d04: b083 sub sp, #12
4d06: af00 add r7, sp, #0
4d08: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Get the Prescaler Register value */
return TIMx->PSC;
4d0a: 687b ldr r3, [r7, #4]
4d0c: 8d1b ldrh r3, [r3, #40] ; 0x28
4d0e: b29b uxth r3, r3
}
4d10: 4618 mov r0, r3
4d12: 370c adds r7, #12
4d14: 46bd mov sp, r7
4d16: bc80 pop {r7}
4d18: 4770 bx lr
00004d1a <TIM_GetFlagStatus>:
* - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15.
* - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
* @retval The new state of TIM_FLAG (SET or RESET).
*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
{
4d1a: b480 push {r7}
4d1c: b085 sub sp, #20
4d1e: af00 add r7, sp, #0
4d20: 6078 str r0, [r7, #4]
4d22: 460b mov r3, r1
4d24: 807b strh r3, [r7, #2]
ITStatus bitstatus = RESET;
4d26: 2300 movs r3, #0
4d28: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_GET_FLAG(TIM_FLAG));
if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET)
4d2a: 687b ldr r3, [r7, #4]
4d2c: 8a1b ldrh r3, [r3, #16]
4d2e: b29a uxth r2, r3
4d30: 887b ldrh r3, [r7, #2]
4d32: 4013 ands r3, r2
4d34: b29b uxth r3, r3
4d36: 2b00 cmp r3, #0
4d38: d002 beq.n 4d40 <TIM_GetFlagStatus+0x26>
{
bitstatus = SET;
4d3a: 2301 movs r3, #1
4d3c: 73fb strb r3, [r7, #15]
4d3e: e001 b.n 4d44 <TIM_GetFlagStatus+0x2a>
}
else
{
bitstatus = RESET;
4d40: 2300 movs r3, #0
4d42: 73fb strb r3, [r7, #15]
}
return bitstatus;
4d44: 7bfb ldrb r3, [r7, #15]
}
4d46: 4618 mov r0, r3
4d48: 3714 adds r7, #20
4d4a: 46bd mov sp, r7
4d4c: bc80 pop {r7}
4d4e: 4770 bx lr
00004d50 <TIM_ClearFlag>:
* - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15.
* - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
* @retval None
*/
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
{
4d50: b480 push {r7}
4d52: b083 sub sp, #12
4d54: af00 add r7, sp, #0
4d56: 6078 str r0, [r7, #4]
4d58: 460b mov r3, r1
4d5a: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG));
/* Clear the flags */
TIMx->SR = (uint16_t)~TIM_FLAG;
4d5c: 887b ldrh r3, [r7, #2]
4d5e: 43db mvns r3, r3
4d60: b29a uxth r2, r3
4d62: 687b ldr r3, [r7, #4]
4d64: 821a strh r2, [r3, #16]
}
4d66: bf00 nop
4d68: 370c adds r7, #12
4d6a: 46bd mov sp, r7
4d6c: bc80 pop {r7}
4d6e: 4770 bx lr
00004d70 <TIM_GetITStatus>:
* - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
* - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
* @retval The new state of the TIM_IT(SET or RESET).
*/
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
{
4d70: b480 push {r7}
4d72: b085 sub sp, #20
4d74: af00 add r7, sp, #0
4d76: 6078 str r0, [r7, #4]
4d78: 460b mov r3, r1
4d7a: 807b strh r3, [r7, #2]
ITStatus bitstatus = RESET;
4d7c: 2300 movs r3, #0
4d7e: 73fb strb r3, [r7, #15]
uint16_t itstatus = 0x0, itenable = 0x0;
4d80: 2300 movs r3, #0
4d82: 81bb strh r3, [r7, #12]
4d84: 2300 movs r3, #0
4d86: 817b strh r3, [r7, #10]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_GET_IT(TIM_IT));
itstatus = TIMx->SR & TIM_IT;
4d88: 687b ldr r3, [r7, #4]
4d8a: 8a1b ldrh r3, [r3, #16]
4d8c: b29a uxth r2, r3
4d8e: 887b ldrh r3, [r7, #2]
4d90: 4013 ands r3, r2
4d92: 81bb strh r3, [r7, #12]
itenable = TIMx->DIER & TIM_IT;
4d94: 687b ldr r3, [r7, #4]
4d96: 899b ldrh r3, [r3, #12]
4d98: b29a uxth r2, r3
4d9a: 887b ldrh r3, [r7, #2]
4d9c: 4013 ands r3, r2
4d9e: 817b strh r3, [r7, #10]
if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))
4da0: 89bb ldrh r3, [r7, #12]
4da2: 2b00 cmp r3, #0
4da4: d005 beq.n 4db2 <TIM_GetITStatus+0x42>
4da6: 897b ldrh r3, [r7, #10]
4da8: 2b00 cmp r3, #0
4daa: d002 beq.n 4db2 <TIM_GetITStatus+0x42>
{
bitstatus = SET;
4dac: 2301 movs r3, #1
4dae: 73fb strb r3, [r7, #15]
4db0: e001 b.n 4db6 <TIM_GetITStatus+0x46>
}
else
{
bitstatus = RESET;
4db2: 2300 movs r3, #0
4db4: 73fb strb r3, [r7, #15]
}
return bitstatus;
4db6: 7bfb ldrb r3, [r7, #15]
}
4db8: 4618 mov r0, r3
4dba: 3714 adds r7, #20
4dbc: 46bd mov sp, r7
4dbe: bc80 pop {r7}
4dc0: 4770 bx lr
00004dc2 <TIM_ClearITPendingBit>:
* - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
* - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.
* @retval None
*/
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
{
4dc2: b480 push {r7}
4dc4: b083 sub sp, #12
4dc6: af00 add r7, sp, #0
4dc8: 6078 str r0, [r7, #4]
4dca: 460b mov r3, r1
4dcc: 807b strh r3, [r7, #2]
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_IT(TIM_IT));
/* Clear the IT pending Bit */
TIMx->SR = (uint16_t)~TIM_IT;
4dce: 887b ldrh r3, [r7, #2]
4dd0: 43db mvns r3, r3
4dd2: b29a uxth r2, r3
4dd4: 687b ldr r3, [r7, #4]
4dd6: 821a strh r2, [r3, #16]
}
4dd8: bf00 nop
4dda: 370c adds r7, #12
4ddc: 46bd mov sp, r7
4dde: bc80 pop {r7}
4de0: 4770 bx lr
00004de2 <TI1_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
4de2: b480 push {r7}
4de4: b087 sub sp, #28
4de6: af00 add r7, sp, #0
4de8: 60f8 str r0, [r7, #12]
4dea: 4608 mov r0, r1
4dec: 4611 mov r1, r2
4dee: 461a mov r2, r3
4df0: 4603 mov r3, r0
4df2: 817b strh r3, [r7, #10]
4df4: 460b mov r3, r1
4df6: 813b strh r3, [r7, #8]
4df8: 4613 mov r3, r2
4dfa: 80fb strh r3, [r7, #6]
uint16_t tmpccmr1 = 0, tmpccer = 0;
4dfc: 2300 movs r3, #0
4dfe: 82bb strh r3, [r7, #20]
4e00: 2300 movs r3, #0
4e02: 82fb strh r3, [r7, #22]
/* Disable the Channel 1: Reset the CC1E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E);
4e04: 68fb ldr r3, [r7, #12]
4e06: 8c1b ldrh r3, [r3, #32]
4e08: b29b uxth r3, r3
4e0a: f023 0301 bic.w r3, r3, #1
4e0e: b29a uxth r2, r3
4e10: 68fb ldr r3, [r7, #12]
4e12: 841a strh r2, [r3, #32]
tmpccmr1 = TIMx->CCMR1;
4e14: 68fb ldr r3, [r7, #12]
4e16: 8b1b ldrh r3, [r3, #24]
4e18: 82bb strh r3, [r7, #20]
tmpccer = TIMx->CCER;
4e1a: 68fb ldr r3, [r7, #12]
4e1c: 8c1b ldrh r3, [r3, #32]
4e1e: 82fb strh r3, [r7, #22]
/* Select the Input and set the filter */
tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC1F)));
4e20: 8abb ldrh r3, [r7, #20]
4e22: f023 03f3 bic.w r3, r3, #243 ; 0xf3
4e26: 82bb strh r3, [r7, #20]
tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
4e28: 88fb ldrh r3, [r7, #6]
4e2a: 011b lsls r3, r3, #4
4e2c: b29a uxth r2, r3
4e2e: 893b ldrh r3, [r7, #8]
4e30: 4313 orrs r3, r2
4e32: b29a uxth r2, r3
4e34: 8abb ldrh r3, [r7, #20]
4e36: 4313 orrs r3, r2
4e38: 82bb strh r3, [r7, #20]
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
4e3a: 68fb ldr r3, [r7, #12]
4e3c: 4a1c ldr r2, [pc, #112] ; (4eb0 <TI1_Config+0xce>)
4e3e: 4293 cmp r3, r2
4e40: d013 beq.n 4e6a <TI1_Config+0x88>
4e42: 68fb ldr r3, [r7, #12]
4e44: 4a1b ldr r2, [pc, #108] ; (4eb4 <TI1_Config+0xd2>)
4e46: 4293 cmp r3, r2
4e48: d00f beq.n 4e6a <TI1_Config+0x88>
4e4a: 68fb ldr r3, [r7, #12]
4e4c: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
4e50: d00b beq.n 4e6a <TI1_Config+0x88>
4e52: 68fb ldr r3, [r7, #12]
4e54: 4a18 ldr r2, [pc, #96] ; (4eb8 <TI1_Config+0xd6>)
4e56: 4293 cmp r3, r2
4e58: d007 beq.n 4e6a <TI1_Config+0x88>
4e5a: 68fb ldr r3, [r7, #12]
4e5c: 4a17 ldr r2, [pc, #92] ; (4ebc <TI1_Config+0xda>)
4e5e: 4293 cmp r3, r2
4e60: d003 beq.n 4e6a <TI1_Config+0x88>
(TIMx == TIM4) ||(TIMx == TIM5))
4e62: 68fb ldr r3, [r7, #12]
4e64: 4a16 ldr r2, [pc, #88] ; (4ec0 <TI1_Config+0xde>)
4e66: 4293 cmp r3, r2
4e68: d10b bne.n 4e82 <TI1_Config+0xa0>
{
/* Select the Polarity and set the CC1E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P));
4e6a: 8afb ldrh r3, [r7, #22]
4e6c: f023 0302 bic.w r3, r3, #2
4e70: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
4e72: 897a ldrh r2, [r7, #10]
4e74: 8afb ldrh r3, [r7, #22]
4e76: 4313 orrs r3, r2
4e78: b29b uxth r3, r3
4e7a: f043 0301 orr.w r3, r3, #1
4e7e: 82fb strh r3, [r7, #22]
4e80: e00a b.n 4e98 <TI1_Config+0xb6>
}
else
{
/* Select the Polarity and set the CC1E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP));
4e82: 8afb ldrh r3, [r7, #22]
4e84: f023 030a bic.w r3, r3, #10
4e88: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
4e8a: 897a ldrh r2, [r7, #10]
4e8c: 8afb ldrh r3, [r7, #22]
4e8e: 4313 orrs r3, r2
4e90: b29b uxth r3, r3
4e92: f043 0301 orr.w r3, r3, #1
4e96: 82fb strh r3, [r7, #22]
}
/* Write to TIMx CCMR1 and CCER registers */
TIMx->CCMR1 = tmpccmr1;
4e98: 68fb ldr r3, [r7, #12]
4e9a: 8aba ldrh r2, [r7, #20]
4e9c: 831a strh r2, [r3, #24]
TIMx->CCER = tmpccer;
4e9e: 68fb ldr r3, [r7, #12]
4ea0: 8afa ldrh r2, [r7, #22]
4ea2: 841a strh r2, [r3, #32]
}
4ea4: bf00 nop
4ea6: 371c adds r7, #28
4ea8: 46bd mov sp, r7
4eaa: bc80 pop {r7}
4eac: 4770 bx lr
4eae: bf00 nop
4eb0: 40012c00 .word 0x40012c00
4eb4: 40013400 .word 0x40013400
4eb8: 40000400 .word 0x40000400
4ebc: 40000800 .word 0x40000800
4ec0: 40000c00 .word 0x40000c00
00004ec4 <TI2_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
4ec4: b480 push {r7}
4ec6: b087 sub sp, #28
4ec8: af00 add r7, sp, #0
4eca: 60f8 str r0, [r7, #12]
4ecc: 4608 mov r0, r1
4ece: 4611 mov r1, r2
4ed0: 461a mov r2, r3
4ed2: 4603 mov r3, r0
4ed4: 817b strh r3, [r7, #10]
4ed6: 460b mov r3, r1
4ed8: 813b strh r3, [r7, #8]
4eda: 4613 mov r3, r2
4edc: 80fb strh r3, [r7, #6]
uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0;
4ede: 2300 movs r3, #0
4ee0: 82bb strh r3, [r7, #20]
4ee2: 2300 movs r3, #0
4ee4: 82fb strh r3, [r7, #22]
4ee6: 2300 movs r3, #0
4ee8: 827b strh r3, [r7, #18]
/* Disable the Channel 2: Reset the CC2E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC2E);
4eea: 68fb ldr r3, [r7, #12]
4eec: 8c1b ldrh r3, [r3, #32]
4eee: b29b uxth r3, r3
4ef0: f023 0310 bic.w r3, r3, #16
4ef4: b29a uxth r2, r3
4ef6: 68fb ldr r3, [r7, #12]
4ef8: 841a strh r2, [r3, #32]
tmpccmr1 = TIMx->CCMR1;
4efa: 68fb ldr r3, [r7, #12]
4efc: 8b1b ldrh r3, [r3, #24]
4efe: 82bb strh r3, [r7, #20]
tmpccer = TIMx->CCER;
4f00: 68fb ldr r3, [r7, #12]
4f02: 8c1b ldrh r3, [r3, #32]
4f04: 82fb strh r3, [r7, #22]
tmp = (uint16_t)(TIM_ICPolarity << 4);
4f06: 897b ldrh r3, [r7, #10]
4f08: 011b lsls r3, r3, #4
4f0a: 827b strh r3, [r7, #18]
/* Select the Input and set the filter */
tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC2S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC2F)));
4f0c: 8abb ldrh r3, [r7, #20]
4f0e: f423 7340 bic.w r3, r3, #768 ; 0x300
4f12: 051b lsls r3, r3, #20
4f14: 0d1b lsrs r3, r3, #20
4f16: 82bb strh r3, [r7, #20]
tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12);
4f18: 88fb ldrh r3, [r7, #6]
4f1a: 031b lsls r3, r3, #12
4f1c: b29a uxth r2, r3
4f1e: 8abb ldrh r3, [r7, #20]
4f20: 4313 orrs r3, r2
4f22: 82bb strh r3, [r7, #20]
tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8);
4f24: 893b ldrh r3, [r7, #8]
4f26: 021b lsls r3, r3, #8
4f28: b29a uxth r2, r3
4f2a: 8abb ldrh r3, [r7, #20]
4f2c: 4313 orrs r3, r2
4f2e: 82bb strh r3, [r7, #20]
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
4f30: 68fb ldr r3, [r7, #12]
4f32: 4a1c ldr r2, [pc, #112] ; (4fa4 <TI2_Config+0xe0>)
4f34: 4293 cmp r3, r2
4f36: d013 beq.n 4f60 <TI2_Config+0x9c>
4f38: 68fb ldr r3, [r7, #12]
4f3a: 4a1b ldr r2, [pc, #108] ; (4fa8 <TI2_Config+0xe4>)
4f3c: 4293 cmp r3, r2
4f3e: d00f beq.n 4f60 <TI2_Config+0x9c>
4f40: 68fb ldr r3, [r7, #12]
4f42: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
4f46: d00b beq.n 4f60 <TI2_Config+0x9c>
4f48: 68fb ldr r3, [r7, #12]
4f4a: 4a18 ldr r2, [pc, #96] ; (4fac <TI2_Config+0xe8>)
4f4c: 4293 cmp r3, r2
4f4e: d007 beq.n 4f60 <TI2_Config+0x9c>
4f50: 68fb ldr r3, [r7, #12]
4f52: 4a17 ldr r2, [pc, #92] ; (4fb0 <TI2_Config+0xec>)
4f54: 4293 cmp r3, r2
4f56: d003 beq.n 4f60 <TI2_Config+0x9c>
(TIMx == TIM4) ||(TIMx == TIM5))
4f58: 68fb ldr r3, [r7, #12]
4f5a: 4a16 ldr r2, [pc, #88] ; (4fb4 <TI2_Config+0xf0>)
4f5c: 4293 cmp r3, r2
4f5e: d10b bne.n 4f78 <TI2_Config+0xb4>
{
/* Select the Polarity and set the CC2E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P));
4f60: 8afb ldrh r3, [r7, #22]
4f62: f023 0320 bic.w r3, r3, #32
4f66: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E);
4f68: 8a7a ldrh r2, [r7, #18]
4f6a: 8afb ldrh r3, [r7, #22]
4f6c: 4313 orrs r3, r2
4f6e: b29b uxth r3, r3
4f70: f043 0310 orr.w r3, r3, #16
4f74: 82fb strh r3, [r7, #22]
4f76: e00a b.n 4f8e <TI2_Config+0xca>
}
else
{
/* Select the Polarity and set the CC2E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP));
4f78: 8afb ldrh r3, [r7, #22]
4f7a: f023 03a0 bic.w r3, r3, #160 ; 0xa0
4f7e: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC2E);
4f80: 897a ldrh r2, [r7, #10]
4f82: 8afb ldrh r3, [r7, #22]
4f84: 4313 orrs r3, r2
4f86: b29b uxth r3, r3
4f88: f043 0310 orr.w r3, r3, #16
4f8c: 82fb strh r3, [r7, #22]
}
/* Write to TIMx CCMR1 and CCER registers */
TIMx->CCMR1 = tmpccmr1 ;
4f8e: 68fb ldr r3, [r7, #12]
4f90: 8aba ldrh r2, [r7, #20]
4f92: 831a strh r2, [r3, #24]
TIMx->CCER = tmpccer;
4f94: 68fb ldr r3, [r7, #12]
4f96: 8afa ldrh r2, [r7, #22]
4f98: 841a strh r2, [r3, #32]
}
4f9a: bf00 nop
4f9c: 371c adds r7, #28
4f9e: 46bd mov sp, r7
4fa0: bc80 pop {r7}
4fa2: 4770 bx lr
4fa4: 40012c00 .word 0x40012c00
4fa8: 40013400 .word 0x40013400
4fac: 40000400 .word 0x40000400
4fb0: 40000800 .word 0x40000800
4fb4: 40000c00 .word 0x40000c00
00004fb8 <TI3_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
4fb8: b480 push {r7}
4fba: b087 sub sp, #28
4fbc: af00 add r7, sp, #0
4fbe: 60f8 str r0, [r7, #12]
4fc0: 4608 mov r0, r1
4fc2: 4611 mov r1, r2
4fc4: 461a mov r2, r3
4fc6: 4603 mov r3, r0
4fc8: 817b strh r3, [r7, #10]
4fca: 460b mov r3, r1
4fcc: 813b strh r3, [r7, #8]
4fce: 4613 mov r3, r2
4fd0: 80fb strh r3, [r7, #6]
uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
4fd2: 2300 movs r3, #0
4fd4: 82bb strh r3, [r7, #20]
4fd6: 2300 movs r3, #0
4fd8: 82fb strh r3, [r7, #22]
4fda: 2300 movs r3, #0
4fdc: 827b strh r3, [r7, #18]
/* Disable the Channel 3: Reset the CC3E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC3E);
4fde: 68fb ldr r3, [r7, #12]
4fe0: 8c1b ldrh r3, [r3, #32]
4fe2: b29b uxth r3, r3
4fe4: f423 7380 bic.w r3, r3, #256 ; 0x100
4fe8: b29a uxth r2, r3
4fea: 68fb ldr r3, [r7, #12]
4fec: 841a strh r2, [r3, #32]
tmpccmr2 = TIMx->CCMR2;
4fee: 68fb ldr r3, [r7, #12]
4ff0: 8b9b ldrh r3, [r3, #28]
4ff2: 82bb strh r3, [r7, #20]
tmpccer = TIMx->CCER;
4ff4: 68fb ldr r3, [r7, #12]
4ff6: 8c1b ldrh r3, [r3, #32]
4ff8: 82fb strh r3, [r7, #22]
tmp = (uint16_t)(TIM_ICPolarity << 8);
4ffa: 897b ldrh r3, [r7, #10]
4ffc: 021b lsls r3, r3, #8
4ffe: 827b strh r3, [r7, #18]
/* Select the Input and set the filter */
tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR2_CC3S)) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC3F)));
5000: 8abb ldrh r3, [r7, #20]
5002: f023 03f3 bic.w r3, r3, #243 ; 0xf3
5006: 82bb strh r3, [r7, #20]
tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
5008: 88fb ldrh r3, [r7, #6]
500a: 011b lsls r3, r3, #4
500c: b29a uxth r2, r3
500e: 893b ldrh r3, [r7, #8]
5010: 4313 orrs r3, r2
5012: b29a uxth r2, r3
5014: 8abb ldrh r3, [r7, #20]
5016: 4313 orrs r3, r2
5018: 82bb strh r3, [r7, #20]
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
501a: 68fb ldr r3, [r7, #12]
501c: 4a1c ldr r2, [pc, #112] ; (5090 <TI3_Config+0xd8>)
501e: 4293 cmp r3, r2
5020: d013 beq.n 504a <TI3_Config+0x92>
5022: 68fb ldr r3, [r7, #12]
5024: 4a1b ldr r2, [pc, #108] ; (5094 <TI3_Config+0xdc>)
5026: 4293 cmp r3, r2
5028: d00f beq.n 504a <TI3_Config+0x92>
502a: 68fb ldr r3, [r7, #12]
502c: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
5030: d00b beq.n 504a <TI3_Config+0x92>
5032: 68fb ldr r3, [r7, #12]
5034: 4a18 ldr r2, [pc, #96] ; (5098 <TI3_Config+0xe0>)
5036: 4293 cmp r3, r2
5038: d007 beq.n 504a <TI3_Config+0x92>
503a: 68fb ldr r3, [r7, #12]
503c: 4a17 ldr r2, [pc, #92] ; (509c <TI3_Config+0xe4>)
503e: 4293 cmp r3, r2
5040: d003 beq.n 504a <TI3_Config+0x92>
(TIMx == TIM4) ||(TIMx == TIM5))
5042: 68fb ldr r3, [r7, #12]
5044: 4a16 ldr r2, [pc, #88] ; (50a0 <TI3_Config+0xe8>)
5046: 4293 cmp r3, r2
5048: d10b bne.n 5062 <TI3_Config+0xaa>
{
/* Select the Polarity and set the CC3E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P));
504a: 8afb ldrh r3, [r7, #22]
504c: f423 7300 bic.w r3, r3, #512 ; 0x200
5050: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E);
5052: 8a7a ldrh r2, [r7, #18]
5054: 8afb ldrh r3, [r7, #22]
5056: 4313 orrs r3, r2
5058: b29b uxth r3, r3
505a: f443 7380 orr.w r3, r3, #256 ; 0x100
505e: 82fb strh r3, [r7, #22]
5060: e00a b.n 5078 <TI3_Config+0xc0>
}
else
{
/* Select the Polarity and set the CC3E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC3NP));
5062: 8afb ldrh r3, [r7, #22]
5064: f423 6320 bic.w r3, r3, #2560 ; 0xa00
5068: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC3E);
506a: 897a ldrh r2, [r7, #10]
506c: 8afb ldrh r3, [r7, #22]
506e: 4313 orrs r3, r2
5070: b29b uxth r3, r3
5072: f443 7380 orr.w r3, r3, #256 ; 0x100
5076: 82fb strh r3, [r7, #22]
}
/* Write to TIMx CCMR2 and CCER registers */
TIMx->CCMR2 = tmpccmr2;
5078: 68fb ldr r3, [r7, #12]
507a: 8aba ldrh r2, [r7, #20]
507c: 839a strh r2, [r3, #28]
TIMx->CCER = tmpccer;
507e: 68fb ldr r3, [r7, #12]
5080: 8afa ldrh r2, [r7, #22]
5082: 841a strh r2, [r3, #32]
}
5084: bf00 nop
5086: 371c adds r7, #28
5088: 46bd mov sp, r7
508a: bc80 pop {r7}
508c: 4770 bx lr
508e: bf00 nop
5090: 40012c00 .word 0x40012c00
5094: 40013400 .word 0x40013400
5098: 40000400 .word 0x40000400
509c: 40000800 .word 0x40000800
50a0: 40000c00 .word 0x40000c00
000050a4 <TI4_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
50a4: b480 push {r7}
50a6: b087 sub sp, #28
50a8: af00 add r7, sp, #0
50aa: 60f8 str r0, [r7, #12]
50ac: 4608 mov r0, r1
50ae: 4611 mov r1, r2
50b0: 461a mov r2, r3
50b2: 4603 mov r3, r0
50b4: 817b strh r3, [r7, #10]
50b6: 460b mov r3, r1
50b8: 813b strh r3, [r7, #8]
50ba: 4613 mov r3, r2
50bc: 80fb strh r3, [r7, #6]
uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
50be: 2300 movs r3, #0
50c0: 82bb strh r3, [r7, #20]
50c2: 2300 movs r3, #0
50c4: 82fb strh r3, [r7, #22]
50c6: 2300 movs r3, #0
50c8: 827b strh r3, [r7, #18]
/* Disable the Channel 4: Reset the CC4E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC4E);
50ca: 68fb ldr r3, [r7, #12]
50cc: 8c1b ldrh r3, [r3, #32]
50ce: b29b uxth r3, r3
50d0: f423 5380 bic.w r3, r3, #4096 ; 0x1000
50d4: b29a uxth r2, r3
50d6: 68fb ldr r3, [r7, #12]
50d8: 841a strh r2, [r3, #32]
tmpccmr2 = TIMx->CCMR2;
50da: 68fb ldr r3, [r7, #12]
50dc: 8b9b ldrh r3, [r3, #28]
50de: 82bb strh r3, [r7, #20]
tmpccer = TIMx->CCER;
50e0: 68fb ldr r3, [r7, #12]
50e2: 8c1b ldrh r3, [r3, #32]
50e4: 82fb strh r3, [r7, #22]
tmp = (uint16_t)(TIM_ICPolarity << 12);
50e6: 897b ldrh r3, [r7, #10]
50e8: 031b lsls r3, r3, #12
50ea: 827b strh r3, [r7, #18]
/* Select the Input and set the filter */
tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CCMR2_CC4S) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC4F)));
50ec: 8abb ldrh r3, [r7, #20]
50ee: f423 7340 bic.w r3, r3, #768 ; 0x300
50f2: 051b lsls r3, r3, #20
50f4: 0d1b lsrs r3, r3, #20
50f6: 82bb strh r3, [r7, #20]
tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8);
50f8: 893b ldrh r3, [r7, #8]
50fa: 021b lsls r3, r3, #8
50fc: b29a uxth r2, r3
50fe: 8abb ldrh r3, [r7, #20]
5100: 4313 orrs r3, r2
5102: 82bb strh r3, [r7, #20]
tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12);
5104: 88fb ldrh r3, [r7, #6]
5106: 031b lsls r3, r3, #12
5108: b29a uxth r2, r3
510a: 8abb ldrh r3, [r7, #20]
510c: 4313 orrs r3, r2
510e: 82bb strh r3, [r7, #20]
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
5110: 68fb ldr r3, [r7, #12]
5112: 4a1d ldr r2, [pc, #116] ; (5188 <TI4_Config+0xe4>)
5114: 4293 cmp r3, r2
5116: d013 beq.n 5140 <TI4_Config+0x9c>
5118: 68fb ldr r3, [r7, #12]
511a: 4a1c ldr r2, [pc, #112] ; (518c <TI4_Config+0xe8>)
511c: 4293 cmp r3, r2
511e: d00f beq.n 5140 <TI4_Config+0x9c>
5120: 68fb ldr r3, [r7, #12]
5122: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000
5126: d00b beq.n 5140 <TI4_Config+0x9c>
5128: 68fb ldr r3, [r7, #12]
512a: 4a19 ldr r2, [pc, #100] ; (5190 <TI4_Config+0xec>)
512c: 4293 cmp r3, r2
512e: d007 beq.n 5140 <TI4_Config+0x9c>
5130: 68fb ldr r3, [r7, #12]
5132: 4a18 ldr r2, [pc, #96] ; (5194 <TI4_Config+0xf0>)
5134: 4293 cmp r3, r2
5136: d003 beq.n 5140 <TI4_Config+0x9c>
(TIMx == TIM4) ||(TIMx == TIM5))
5138: 68fb ldr r3, [r7, #12]
513a: 4a17 ldr r2, [pc, #92] ; (5198 <TI4_Config+0xf4>)
513c: 4293 cmp r3, r2
513e: d10b bne.n 5158 <TI4_Config+0xb4>
{
/* Select the Polarity and set the CC4E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC4P));
5140: 8afb ldrh r3, [r7, #22]
5142: f423 5300 bic.w r3, r3, #8192 ; 0x2000
5146: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E);
5148: 8a7a ldrh r2, [r7, #18]
514a: 8afb ldrh r3, [r7, #22]
514c: 4313 orrs r3, r2
514e: b29b uxth r3, r3
5150: f443 5380 orr.w r3, r3, #4096 ; 0x1000
5154: 82fb strh r3, [r7, #22]
5156: e00c b.n 5172 <TI4_Config+0xce>
}
else
{
/* Select the Polarity and set the CC4E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC4NP));
5158: 8afb ldrh r3, [r7, #22]
515a: f423 7300 bic.w r3, r3, #512 ; 0x200
515e: 045b lsls r3, r3, #17
5160: 0c5b lsrs r3, r3, #17
5162: 82fb strh r3, [r7, #22]
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC4E);
5164: 897a ldrh r2, [r7, #10]
5166: 8afb ldrh r3, [r7, #22]
5168: 4313 orrs r3, r2
516a: b29b uxth r3, r3
516c: f443 5380 orr.w r3, r3, #4096 ; 0x1000
5170: 82fb strh r3, [r7, #22]
}
/* Write to TIMx CCMR2 and CCER registers */
TIMx->CCMR2 = tmpccmr2;
5172: 68fb ldr r3, [r7, #12]
5174: 8aba ldrh r2, [r7, #20]
5176: 839a strh r2, [r3, #28]
TIMx->CCER = tmpccer;
5178: 68fb ldr r3, [r7, #12]
517a: 8afa ldrh r2, [r7, #22]
517c: 841a strh r2, [r3, #32]
}
517e: bf00 nop
5180: 371c adds r7, #28
5182: 46bd mov sp, r7
5184: bc80 pop {r7}
5186: 4770 bx lr
5188: 40012c00 .word 0x40012c00
518c: 40013400 .word 0x40013400
5190: 40000400 .word 0x40000400
5194: 40000800 .word 0x40000800
5198: 40000c00 .word 0x40000c00
0000519c <RTC_ITConfig>:
* @param NewState: new state of the specified RTC interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState)
{
519c: b480 push {r7}
519e: b083 sub sp, #12
51a0: af00 add r7, sp, #0
51a2: 4603 mov r3, r0
51a4: 460a mov r2, r1
51a6: 80fb strh r3, [r7, #6]
51a8: 4613 mov r3, r2
51aa: 717b strb r3, [r7, #5]
/* Check the parameters */
assert_param(IS_RTC_IT(RTC_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
51ac: 797b ldrb r3, [r7, #5]
51ae: 2b00 cmp r3, #0
51b0: d008 beq.n 51c4 <RTC_ITConfig+0x28>
{
RTC->CRH |= RTC_IT;
51b2: 4b0c ldr r3, [pc, #48] ; (51e4 <RTC_ITConfig+0x48>)
51b4: 881b ldrh r3, [r3, #0]
51b6: b29a uxth r2, r3
51b8: 490a ldr r1, [pc, #40] ; (51e4 <RTC_ITConfig+0x48>)
51ba: 88fb ldrh r3, [r7, #6]
51bc: 4313 orrs r3, r2
51be: b29b uxth r3, r3
51c0: 800b strh r3, [r1, #0]
}
else
{
RTC->CRH &= (uint16_t)~RTC_IT;
}
}
51c2: e009 b.n 51d8 <RTC_ITConfig+0x3c>
RTC->CRH &= (uint16_t)~RTC_IT;
51c4: 4b07 ldr r3, [pc, #28] ; (51e4 <RTC_ITConfig+0x48>)
51c6: 881b ldrh r3, [r3, #0]
51c8: b29a uxth r2, r3
51ca: 88fb ldrh r3, [r7, #6]
51cc: 43db mvns r3, r3
51ce: b29b uxth r3, r3
51d0: 4904 ldr r1, [pc, #16] ; (51e4 <RTC_ITConfig+0x48>)
51d2: 4013 ands r3, r2
51d4: b29b uxth r3, r3
51d6: 800b strh r3, [r1, #0]
}
51d8: bf00 nop
51da: 370c adds r7, #12
51dc: 46bd mov sp, r7
51de: bc80 pop {r7}
51e0: 4770 bx lr
51e2: bf00 nop
51e4: 40002800 .word 0x40002800
000051e8 <RTC_EnterConfigMode>:
* @brief Enters the RTC configuration mode.
* @param None
* @retval None
*/
void RTC_EnterConfigMode(void)
{
51e8: b480 push {r7}
51ea: af00 add r7, sp, #0
/* Set the CNF flag to enter in the Configuration Mode */
RTC->CRL |= RTC_CRL_CNF;
51ec: 4b05 ldr r3, [pc, #20] ; (5204 <RTC_EnterConfigMode+0x1c>)
51ee: 889b ldrh r3, [r3, #4]
51f0: b29b uxth r3, r3
51f2: 4a04 ldr r2, [pc, #16] ; (5204 <RTC_EnterConfigMode+0x1c>)
51f4: f043 0310 orr.w r3, r3, #16
51f8: b29b uxth r3, r3
51fa: 8093 strh r3, [r2, #4]
}
51fc: bf00 nop
51fe: 46bd mov sp, r7
5200: bc80 pop {r7}
5202: 4770 bx lr
5204: 40002800 .word 0x40002800
00005208 <RTC_ExitConfigMode>:
* @brief Exits from the RTC configuration mode.
* @param None
* @retval None
*/
void RTC_ExitConfigMode(void)
{
5208: b480 push {r7}
520a: af00 add r7, sp, #0
/* Reset the CNF flag to exit from the Configuration Mode */
RTC->CRL &= (uint16_t)~((uint16_t)RTC_CRL_CNF);
520c: 4b05 ldr r3, [pc, #20] ; (5224 <RTC_ExitConfigMode+0x1c>)
520e: 889b ldrh r3, [r3, #4]
5210: b29b uxth r3, r3
5212: 4a04 ldr r2, [pc, #16] ; (5224 <RTC_ExitConfigMode+0x1c>)
5214: f023 0310 bic.w r3, r3, #16
5218: b29b uxth r3, r3
521a: 8093 strh r3, [r2, #4]
}
521c: bf00 nop
521e: 46bd mov sp, r7
5220: bc80 pop {r7}
5222: 4770 bx lr
5224: 40002800 .word 0x40002800
00005228 <RTC_GetCounter>:
* @brief Gets the RTC counter value.
* @param None
* @retval RTC counter value.
*/
uint32_t RTC_GetCounter(void)
{
5228: b480 push {r7}
522a: b083 sub sp, #12
522c: af00 add r7, sp, #0
uint16_t tmp = 0;
522e: 2300 movs r3, #0
5230: 80fb strh r3, [r7, #6]
tmp = RTC->CNTL;
5232: 4b07 ldr r3, [pc, #28] ; (5250 <RTC_GetCounter+0x28>)
5234: 8b9b ldrh r3, [r3, #28]
5236: 80fb strh r3, [r7, #6]
return (((uint32_t)RTC->CNTH << 16 ) | tmp) ;
5238: 4b05 ldr r3, [pc, #20] ; (5250 <RTC_GetCounter+0x28>)
523a: 8b1b ldrh r3, [r3, #24]
523c: b29b uxth r3, r3
523e: 041a lsls r2, r3, #16
5240: 88fb ldrh r3, [r7, #6]
5242: 4313 orrs r3, r2
}
5244: 4618 mov r0, r3
5246: 370c adds r7, #12
5248: 46bd mov sp, r7
524a: bc80 pop {r7}
524c: 4770 bx lr
524e: bf00 nop
5250: 40002800 .word 0x40002800
00005254 <RTC_SetCounter>:
* @brief Sets the RTC counter value.
* @param CounterValue: RTC counter new value.
* @retval None
*/
void RTC_SetCounter(uint32_t CounterValue)
{
5254: b580 push {r7, lr}
5256: b082 sub sp, #8
5258: af00 add r7, sp, #0
525a: 6078 str r0, [r7, #4]
RTC_EnterConfigMode();
525c: f7ff ffc4 bl 51e8 <RTC_EnterConfigMode>
/* Set RTC COUNTER MSB word */
RTC->CNTH = CounterValue >> 16;
5260: 687b ldr r3, [r7, #4]
5262: 0c1a lsrs r2, r3, #16
5264: 4b06 ldr r3, [pc, #24] ; (5280 <RTC_SetCounter+0x2c>)
5266: b292 uxth r2, r2
5268: 831a strh r2, [r3, #24]
/* Set RTC COUNTER LSB word */
RTC->CNTL = (CounterValue & RTC_LSB_MASK);
526a: 4b05 ldr r3, [pc, #20] ; (5280 <RTC_SetCounter+0x2c>)
526c: 687a ldr r2, [r7, #4]
526e: b292 uxth r2, r2
5270: 839a strh r2, [r3, #28]
RTC_ExitConfigMode();
5272: f7ff ffc9 bl 5208 <RTC_ExitConfigMode>
}
5276: bf00 nop
5278: 3708 adds r7, #8
527a: 46bd mov sp, r7
527c: bd80 pop {r7, pc}
527e: bf00 nop
5280: 40002800 .word 0x40002800
00005284 <RTC_SetPrescaler>:
* @brief Sets the RTC prescaler value.
* @param PrescalerValue: RTC prescaler new value.
* @retval None
*/
void RTC_SetPrescaler(uint32_t PrescalerValue)
{
5284: b580 push {r7, lr}
5286: b082 sub sp, #8
5288: af00 add r7, sp, #0
528a: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_RTC_PRESCALER(PrescalerValue));
RTC_EnterConfigMode();
528c: f7ff ffac bl 51e8 <RTC_EnterConfigMode>
/* Set RTC PRESCALER MSB word */
RTC->PRLH = (PrescalerValue & PRLH_MSB_MASK) >> 16;
5290: 687b ldr r3, [r7, #4]
5292: 0c1b lsrs r3, r3, #16
5294: b29b uxth r3, r3
5296: 4a07 ldr r2, [pc, #28] ; (52b4 <RTC_SetPrescaler+0x30>)
5298: f003 030f and.w r3, r3, #15
529c: b29b uxth r3, r3
529e: 8113 strh r3, [r2, #8]
/* Set RTC PRESCALER LSB word */
RTC->PRLL = (PrescalerValue & RTC_LSB_MASK);
52a0: 4b04 ldr r3, [pc, #16] ; (52b4 <RTC_SetPrescaler+0x30>)
52a2: 687a ldr r2, [r7, #4]
52a4: b292 uxth r2, r2
52a6: 819a strh r2, [r3, #12]
RTC_ExitConfigMode();
52a8: f7ff ffae bl 5208 <RTC_ExitConfigMode>
}
52ac: bf00 nop
52ae: 3708 adds r7, #8
52b0: 46bd mov sp, r7
52b2: bd80 pop {r7, pc}
52b4: 40002800 .word 0x40002800
000052b8 <RTC_SetAlarm>:
* @brief Sets the RTC alarm value.
* @param AlarmValue: RTC alarm new value.
* @retval None
*/
void RTC_SetAlarm(uint32_t AlarmValue)
{
52b8: b580 push {r7, lr}
52ba: b082 sub sp, #8
52bc: af00 add r7, sp, #0
52be: 6078 str r0, [r7, #4]
RTC_EnterConfigMode();
52c0: f7ff ff92 bl 51e8 <RTC_EnterConfigMode>
/* Set the ALARM MSB word */
RTC->ALRH = AlarmValue >> 16;
52c4: 687b ldr r3, [r7, #4]
52c6: 0c1a lsrs r2, r3, #16
52c8: 4b06 ldr r3, [pc, #24] ; (52e4 <RTC_SetAlarm+0x2c>)
52ca: b292 uxth r2, r2
52cc: 841a strh r2, [r3, #32]
/* Set the ALARM LSB word */
RTC->ALRL = (AlarmValue & RTC_LSB_MASK);
52ce: 4b05 ldr r3, [pc, #20] ; (52e4 <RTC_SetAlarm+0x2c>)
52d0: 687a ldr r2, [r7, #4]
52d2: b292 uxth r2, r2
52d4: 849a strh r2, [r3, #36] ; 0x24
RTC_ExitConfigMode();
52d6: f7ff ff97 bl 5208 <RTC_ExitConfigMode>
}
52da: bf00 nop
52dc: 3708 adds r7, #8
52de: 46bd mov sp, r7
52e0: bd80 pop {r7, pc}
52e2: bf00 nop
52e4: 40002800 .word 0x40002800
000052e8 <RTC_GetDivider>:
* @brief Gets the RTC divider value.
* @param None
* @retval RTC Divider value.
*/
uint32_t RTC_GetDivider(void)
{
52e8: b480 push {r7}
52ea: b083 sub sp, #12
52ec: af00 add r7, sp, #0
uint32_t tmp = 0x00;
52ee: 2300 movs r3, #0
52f0: 607b str r3, [r7, #4]
tmp = ((uint32_t)RTC->DIVH & (uint32_t)0x000F) << 16;
52f2: 4b0a ldr r3, [pc, #40] ; (531c <RTC_GetDivider+0x34>)
52f4: 8a1b ldrh r3, [r3, #16]
52f6: b29b uxth r3, r3
52f8: 041b lsls r3, r3, #16
52fa: f403 2370 and.w r3, r3, #983040 ; 0xf0000
52fe: 607b str r3, [r7, #4]
tmp |= RTC->DIVL;
5300: 4b06 ldr r3, [pc, #24] ; (531c <RTC_GetDivider+0x34>)
5302: 8a9b ldrh r3, [r3, #20]
5304: b29b uxth r3, r3
5306: 461a mov r2, r3
5308: 687b ldr r3, [r7, #4]
530a: 4313 orrs r3, r2
530c: 607b str r3, [r7, #4]
return tmp;
530e: 687b ldr r3, [r7, #4]
}
5310: 4618 mov r0, r3
5312: 370c adds r7, #12
5314: 46bd mov sp, r7
5316: bc80 pop {r7}
5318: 4770 bx lr
531a: bf00 nop
531c: 40002800 .word 0x40002800
00005320 <RTC_WaitForLastTask>:
* @note This function must be called before any write to RTC registers.
* @param None
* @retval None
*/
void RTC_WaitForLastTask(void)
{
5320: b480 push {r7}
5322: af00 add r7, sp, #0
/* Loop until RTOFF flag is set */
while ((RTC->CRL & RTC_FLAG_RTOFF) == (uint16_t)RESET)
5324: bf00 nop
5326: 4b06 ldr r3, [pc, #24] ; (5340 <RTC_WaitForLastTask+0x20>)
5328: 889b ldrh r3, [r3, #4]
532a: b29b uxth r3, r3
532c: f003 0320 and.w r3, r3, #32
5330: 2b00 cmp r3, #0
5332: d0f8 beq.n 5326 <RTC_WaitForLastTask+0x6>
{
}
}
5334: bf00 nop
5336: bf00 nop
5338: 46bd mov sp, r7
533a: bc80 pop {r7}
533c: 4770 bx lr
533e: bf00 nop
5340: 40002800 .word 0x40002800
00005344 <RTC_WaitForSynchro>:
* or an APB clock stop.
* @param None
* @retval None
*/
void RTC_WaitForSynchro(void)
{
5344: b480 push {r7}
5346: af00 add r7, sp, #0
/* Clear RSF flag */
RTC->CRL &= (uint16_t)~RTC_FLAG_RSF;
5348: 4b0a ldr r3, [pc, #40] ; (5374 <RTC_WaitForSynchro+0x30>)
534a: 889b ldrh r3, [r3, #4]
534c: b29b uxth r3, r3
534e: 4a09 ldr r2, [pc, #36] ; (5374 <RTC_WaitForSynchro+0x30>)
5350: f023 0308 bic.w r3, r3, #8
5354: b29b uxth r3, r3
5356: 8093 strh r3, [r2, #4]
/* Loop until RSF flag is set */
while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET)
5358: bf00 nop
535a: 4b06 ldr r3, [pc, #24] ; (5374 <RTC_WaitForSynchro+0x30>)
535c: 889b ldrh r3, [r3, #4]
535e: b29b uxth r3, r3
5360: f003 0308 and.w r3, r3, #8
5364: 2b00 cmp r3, #0
5366: d0f8 beq.n 535a <RTC_WaitForSynchro+0x16>
{
}
}
5368: bf00 nop
536a: bf00 nop
536c: 46bd mov sp, r7
536e: bc80 pop {r7}
5370: 4770 bx lr
5372: bf00 nop
5374: 40002800 .word 0x40002800
00005378 <RTC_GetFlagStatus>:
* @arg RTC_FLAG_ALR: Alarm flag
* @arg RTC_FLAG_SEC: Second flag
* @retval The new state of RTC_FLAG (SET or RESET).
*/
FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG)
{
5378: b480 push {r7}
537a: b085 sub sp, #20
537c: af00 add r7, sp, #0
537e: 4603 mov r3, r0
5380: 80fb strh r3, [r7, #6]
FlagStatus bitstatus = RESET;
5382: 2300 movs r3, #0
5384: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_RTC_GET_FLAG(RTC_FLAG));
if ((RTC->CRL & RTC_FLAG) != (uint16_t)RESET)
5386: 4b09 ldr r3, [pc, #36] ; (53ac <RTC_GetFlagStatus+0x34>)
5388: 889b ldrh r3, [r3, #4]
538a: b29a uxth r2, r3
538c: 88fb ldrh r3, [r7, #6]
538e: 4013 ands r3, r2
5390: b29b uxth r3, r3
5392: 2b00 cmp r3, #0
5394: d002 beq.n 539c <RTC_GetFlagStatus+0x24>
{
bitstatus = SET;
5396: 2301 movs r3, #1
5398: 73fb strb r3, [r7, #15]
539a: e001 b.n 53a0 <RTC_GetFlagStatus+0x28>
}
else
{
bitstatus = RESET;
539c: 2300 movs r3, #0
539e: 73fb strb r3, [r7, #15]
}
return bitstatus;
53a0: 7bfb ldrb r3, [r7, #15]
}
53a2: 4618 mov r0, r3
53a4: 3714 adds r7, #20
53a6: 46bd mov sp, r7
53a8: bc80 pop {r7}
53aa: 4770 bx lr
53ac: 40002800 .word 0x40002800
000053b0 <RTC_ClearFlag>:
* @arg RTC_FLAG_ALR: Alarm flag
* @arg RTC_FLAG_SEC: Second flag
* @retval None
*/
void RTC_ClearFlag(uint16_t RTC_FLAG)
{
53b0: b480 push {r7}
53b2: b083 sub sp, #12
53b4: af00 add r7, sp, #0
53b6: 4603 mov r3, r0
53b8: 80fb strh r3, [r7, #6]
/* Check the parameters */
assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG));
/* Clear the corresponding RTC flag */
RTC->CRL &= (uint16_t)~RTC_FLAG;
53ba: 4b07 ldr r3, [pc, #28] ; (53d8 <RTC_ClearFlag+0x28>)
53bc: 889b ldrh r3, [r3, #4]
53be: b29a uxth r2, r3
53c0: 88fb ldrh r3, [r7, #6]
53c2: 43db mvns r3, r3
53c4: b29b uxth r3, r3
53c6: 4904 ldr r1, [pc, #16] ; (53d8 <RTC_ClearFlag+0x28>)
53c8: 4013 ands r3, r2
53ca: b29b uxth r3, r3
53cc: 808b strh r3, [r1, #4]
}
53ce: bf00 nop
53d0: 370c adds r7, #12
53d2: 46bd mov sp, r7
53d4: bc80 pop {r7}
53d6: 4770 bx lr
53d8: 40002800 .word 0x40002800
000053dc <RTC_GetITStatus>:
* @arg RTC_IT_ALR: Alarm interrupt
* @arg RTC_IT_SEC: Second interrupt
* @retval The new state of the RTC_IT (SET or RESET).
*/
ITStatus RTC_GetITStatus(uint16_t RTC_IT)
{
53dc: b480 push {r7}
53de: b085 sub sp, #20
53e0: af00 add r7, sp, #0
53e2: 4603 mov r3, r0
53e4: 80fb strh r3, [r7, #6]
ITStatus bitstatus = RESET;
53e6: 2300 movs r3, #0
53e8: 73fb strb r3, [r7, #15]
/* Check the parameters */
assert_param(IS_RTC_GET_IT(RTC_IT));
bitstatus = (ITStatus)(RTC->CRL & RTC_IT);
53ea: 4b0f ldr r3, [pc, #60] ; (5428 <RTC_GetITStatus+0x4c>)
53ec: 889b ldrh r3, [r3, #4]
53ee: b29b uxth r3, r3
53f0: b2da uxtb r2, r3
53f2: 88fb ldrh r3, [r7, #6]
53f4: b2db uxtb r3, r3
53f6: 4013 ands r3, r2
53f8: 73fb strb r3, [r7, #15]
if (((RTC->CRH & RTC_IT) != (uint16_t)RESET) && (bitstatus != (uint16_t)RESET))
53fa: 4b0b ldr r3, [pc, #44] ; (5428 <RTC_GetITStatus+0x4c>)
53fc: 881b ldrh r3, [r3, #0]
53fe: b29a uxth r2, r3
5400: 88fb ldrh r3, [r7, #6]
5402: 4013 ands r3, r2
5404: b29b uxth r3, r3
5406: 2b00 cmp r3, #0
5408: d005 beq.n 5416 <RTC_GetITStatus+0x3a>
540a: 7bfb ldrb r3, [r7, #15]
540c: 2b00 cmp r3, #0
540e: d002 beq.n 5416 <RTC_GetITStatus+0x3a>
{
bitstatus = SET;
5410: 2301 movs r3, #1
5412: 73fb strb r3, [r7, #15]
5414: e001 b.n 541a <RTC_GetITStatus+0x3e>
}
else
{
bitstatus = RESET;
5416: 2300 movs r3, #0
5418: 73fb strb r3, [r7, #15]
}
return bitstatus;
541a: 7bfb ldrb r3, [r7, #15]
}
541c: 4618 mov r0, r3
541e: 3714 adds r7, #20
5420: 46bd mov sp, r7
5422: bc80 pop {r7}
5424: 4770 bx lr
5426: bf00 nop
5428: 40002800 .word 0x40002800
0000542c <RTC_ClearITPendingBit>:
* @arg RTC_IT_ALR: Alarm interrupt
* @arg RTC_IT_SEC: Second interrupt
* @retval None
*/
void RTC_ClearITPendingBit(uint16_t RTC_IT)
{
542c: b480 push {r7}
542e: b083 sub sp, #12
5430: af00 add r7, sp, #0
5432: 4603 mov r3, r0
5434: 80fb strh r3, [r7, #6]
/* Check the parameters */
assert_param(IS_RTC_IT(RTC_IT));
/* Clear the corresponding RTC pending bit */
RTC->CRL &= (uint16_t)~RTC_IT;
5436: 4b07 ldr r3, [pc, #28] ; (5454 <RTC_ClearITPendingBit+0x28>)
5438: 889b ldrh r3, [r3, #4]
543a: b29a uxth r2, r3
543c: 88fb ldrh r3, [r7, #6]
543e: 43db mvns r3, r3
5440: b29b uxth r3, r3
5442: 4904 ldr r1, [pc, #16] ; (5454 <RTC_ClearITPendingBit+0x28>)
5444: 4013 ands r3, r2
5446: b29b uxth r3, r3
5448: 808b strh r3, [r1, #4]
}
544a: bf00 nop
544c: 370c adds r7, #12
544e: 46bd mov sp, r7
5450: bc80 pop {r7}
5452: 4770 bx lr
5454: 40002800 .word 0x40002800
00005458 <DAC_DeInit>:
* @brief Deinitializes the DAC peripheral registers to their default reset values.
* @param None
* @retval None
*/
void DAC_DeInit(void)
{
5458: b580 push {r7, lr}
545a: af00 add r7, sp, #0
/* Enable DAC reset state */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);
545c: 2101 movs r1, #1
545e: f04f 5000 mov.w r0, #536870912 ; 0x20000000
5462: f7fc f9ab bl 17bc <RCC_APB1PeriphResetCmd>
/* Release DAC from reset state */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);
5466: 2100 movs r1, #0
5468: f04f 5000 mov.w r0, #536870912 ; 0x20000000
546c: f7fc f9a6 bl 17bc <RCC_APB1PeriphResetCmd>
}
5470: bf00 nop
5472: bd80 pop {r7, pc}
00005474 <DAC_Init>:
* @param DAC_InitStruct: pointer to a DAC_InitTypeDef structure that
* contains the configuration information for the specified DAC channel.
* @retval None
*/
void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
{
5474: b480 push {r7}
5476: b085 sub sp, #20
5478: af00 add r7, sp, #0
547a: 6078 str r0, [r7, #4]
547c: 6039 str r1, [r7, #0]
uint32_t tmpreg1 = 0, tmpreg2 = 0;
547e: 2300 movs r3, #0
5480: 60fb str r3, [r7, #12]
5482: 2300 movs r3, #0
5484: 60bb str r3, [r7, #8]
assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));
assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));
assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));
/*---------------------------- DAC CR Configuration --------------------------*/
/* Get the DAC CR value */
tmpreg1 = DAC->CR;
5486: 4b13 ldr r3, [pc, #76] ; (54d4 <DAC_Init+0x60>)
5488: 681b ldr r3, [r3, #0]
548a: 60fb str r3, [r7, #12]
/* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel);
548c: f640 72fe movw r2, #4094 ; 0xffe
5490: 687b ldr r3, [r7, #4]
5492: fa02 f303 lsl.w r3, r2, r3
5496: 43db mvns r3, r3
5498: 68fa ldr r2, [r7, #12]
549a: 4013 ands r3, r2
549c: 60fb str r3, [r7, #12]
mask/amplitude for wave generation */
/* Set TSELx and TENx bits according to DAC_Trigger value */
/* Set WAVEx bits according to DAC_WaveGeneration value */
/* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */
/* Set BOFFx bit according to DAC_OutputBuffer value */
tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
549e: 683b ldr r3, [r7, #0]
54a0: 681a ldr r2, [r3, #0]
54a2: 683b ldr r3, [r7, #0]
54a4: 685b ldr r3, [r3, #4]
54a6: 431a orrs r2, r3
DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
54a8: 683b ldr r3, [r7, #0]
54aa: 689b ldr r3, [r3, #8]
tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
54ac: 431a orrs r2, r3
DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
54ae: 683b ldr r3, [r7, #0]
54b0: 68db ldr r3, [r3, #12]
tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
54b2: 4313 orrs r3, r2
54b4: 60bb str r3, [r7, #8]
/* Calculate CR register value depending on DAC_Channel */
tmpreg1 |= tmpreg2 << DAC_Channel;
54b6: 68ba ldr r2, [r7, #8]
54b8: 687b ldr r3, [r7, #4]
54ba: fa02 f303 lsl.w r3, r2, r3
54be: 68fa ldr r2, [r7, #12]
54c0: 4313 orrs r3, r2
54c2: 60fb str r3, [r7, #12]
/* Write to DAC CR */
DAC->CR = tmpreg1;
54c4: 4a03 ldr r2, [pc, #12] ; (54d4 <DAC_Init+0x60>)
54c6: 68fb ldr r3, [r7, #12]
54c8: 6013 str r3, [r2, #0]
}
54ca: bf00 nop
54cc: 3714 adds r7, #20
54ce: 46bd mov sp, r7
54d0: bc80 pop {r7}
54d2: 4770 bx lr
54d4: 40007400 .word 0x40007400
000054d8 <DAC_StructInit>:
* @param DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will
* be initialized.
* @retval None
*/
void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)
{
54d8: b480 push {r7}
54da: b083 sub sp, #12
54dc: af00 add r7, sp, #0
54de: 6078 str r0, [r7, #4]
/*--------------- Reset DAC init structure parameters values -----------------*/
/* Initialize the DAC_Trigger member */
DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;
54e0: 687b ldr r3, [r7, #4]
54e2: 2200 movs r2, #0
54e4: 601a str r2, [r3, #0]
/* Initialize the DAC_WaveGeneration member */
DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;
54e6: 687b ldr r3, [r7, #4]
54e8: 2200 movs r2, #0
54ea: 605a str r2, [r3, #4]
/* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */
DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
54ec: 687b ldr r3, [r7, #4]
54ee: 2200 movs r2, #0
54f0: 609a str r2, [r3, #8]
/* Initialize the DAC_OutputBuffer member */
DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;
54f2: 687b ldr r3, [r7, #4]
54f4: 2200 movs r2, #0
54f6: 60da str r2, [r3, #12]
}
54f8: bf00 nop
54fa: 370c adds r7, #12
54fc: 46bd mov sp, r7
54fe: bc80 pop {r7}
5500: 4770 bx lr
00005502 <DAC_Cmd>:
* @param NewState: new state of the DAC channel.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)
{
5502: b480 push {r7}
5504: b083 sub sp, #12
5506: af00 add r7, sp, #0
5508: 6078 str r0, [r7, #4]
550a: 460b mov r3, r1
550c: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_DAC_CHANNEL(DAC_Channel));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
550e: 78fb ldrb r3, [r7, #3]
5510: 2b00 cmp r3, #0
5512: d009 beq.n 5528 <DAC_Cmd+0x26>
{
/* Enable the selected DAC channel */
DAC->CR |= (DAC_CR_EN1 << DAC_Channel);
5514: 4b0c ldr r3, [pc, #48] ; (5548 <DAC_Cmd+0x46>)
5516: 681a ldr r2, [r3, #0]
5518: 2101 movs r1, #1
551a: 687b ldr r3, [r7, #4]
551c: fa01 f303 lsl.w r3, r1, r3
5520: 4909 ldr r1, [pc, #36] ; (5548 <DAC_Cmd+0x46>)
5522: 4313 orrs r3, r2
5524: 600b str r3, [r1, #0]
else
{
/* Disable the selected DAC channel */
DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);
}
}
5526: e009 b.n 553c <DAC_Cmd+0x3a>
DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);
5528: 4b07 ldr r3, [pc, #28] ; (5548 <DAC_Cmd+0x46>)
552a: 681a ldr r2, [r3, #0]
552c: 2101 movs r1, #1
552e: 687b ldr r3, [r7, #4]
5530: fa01 f303 lsl.w r3, r1, r3
5534: 43db mvns r3, r3
5536: 4904 ldr r1, [pc, #16] ; (5548 <DAC_Cmd+0x46>)
5538: 4013 ands r3, r2
553a: 600b str r3, [r1, #0]
}
553c: bf00 nop
553e: 370c adds r7, #12
5540: 46bd mov sp, r7
5542: bc80 pop {r7}
5544: 4770 bx lr
5546: bf00 nop
5548: 40007400 .word 0x40007400
0000554c <DAC_DMACmd>:
* @param NewState: new state of the selected DAC channel DMA request.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)
{
554c: b480 push {r7}
554e: b083 sub sp, #12
5550: af00 add r7, sp, #0
5552: 6078 str r0, [r7, #4]
5554: 460b mov r3, r1
5556: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_DAC_CHANNEL(DAC_Channel));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
5558: 78fb ldrb r3, [r7, #3]
555a: 2b00 cmp r3, #0
555c: d00a beq.n 5574 <DAC_DMACmd+0x28>
{
/* Enable the selected DAC channel DMA request */
DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel);
555e: 4b0d ldr r3, [pc, #52] ; (5594 <DAC_DMACmd+0x48>)
5560: 681a ldr r2, [r3, #0]
5562: f44f 5180 mov.w r1, #4096 ; 0x1000
5566: 687b ldr r3, [r7, #4]
5568: fa01 f303 lsl.w r3, r1, r3
556c: 4909 ldr r1, [pc, #36] ; (5594 <DAC_DMACmd+0x48>)
556e: 4313 orrs r3, r2
5570: 600b str r3, [r1, #0]
else
{
/* Disable the selected DAC channel DMA request */
DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);
}
}
5572: e00a b.n 558a <DAC_DMACmd+0x3e>
DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);
5574: 4b07 ldr r3, [pc, #28] ; (5594 <DAC_DMACmd+0x48>)
5576: 681a ldr r2, [r3, #0]
5578: f44f 5180 mov.w r1, #4096 ; 0x1000
557c: 687b ldr r3, [r7, #4]
557e: fa01 f303 lsl.w r3, r1, r3
5582: 43db mvns r3, r3
5584: 4903 ldr r1, [pc, #12] ; (5594 <DAC_DMACmd+0x48>)
5586: 4013 ands r3, r2
5588: 600b str r3, [r1, #0]
}
558a: bf00 nop
558c: 370c adds r7, #12
558e: 46bd mov sp, r7
5590: bc80 pop {r7}
5592: 4770 bx lr
5594: 40007400 .word 0x40007400
00005598 <DAC_SoftwareTriggerCmd>:
* @param NewState: new state of the selected DAC channel software trigger.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)
{
5598: b480 push {r7}
559a: b083 sub sp, #12
559c: af00 add r7, sp, #0
559e: 6078 str r0, [r7, #4]
55a0: 460b mov r3, r1
55a2: 70fb strb r3, [r7, #3]
/* Check the parameters */
assert_param(IS_DAC_CHANNEL(DAC_Channel));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
55a4: 78fb ldrb r3, [r7, #3]
55a6: 2b00 cmp r3, #0
55a8: d00a beq.n 55c0 <DAC_SoftwareTriggerCmd+0x28>
{
/* Enable software trigger for the selected DAC channel */
DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4);
55aa: 4b0d ldr r3, [pc, #52] ; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
55ac: 685a ldr r2, [r3, #4]
55ae: 687b ldr r3, [r7, #4]
55b0: 091b lsrs r3, r3, #4
55b2: 2101 movs r1, #1
55b4: fa01 f303 lsl.w r3, r1, r3
55b8: 4909 ldr r1, [pc, #36] ; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
55ba: 4313 orrs r3, r2
55bc: 604b str r3, [r1, #4]
else
{
/* Disable software trigger for the selected DAC channel */
DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
}
}
55be: e00a b.n 55d6 <DAC_SoftwareTriggerCmd+0x3e>
DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
55c0: 4b07 ldr r3, [pc, #28] ; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
55c2: 685a ldr r2, [r3, #4]
55c4: 687b ldr r3, [r7, #4]
55c6: 091b lsrs r3, r3, #4
55c8: 2101 movs r1, #1
55ca: fa01 f303 lsl.w r3, r1, r3
55ce: 43db mvns r3, r3
55d0: 4903 ldr r1, [pc, #12] ; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
55d2: 4013 ands r3, r2
55d4: 604b str r3, [r1, #4]
}
55d6: bf00 nop
55d8: 370c adds r7, #12
55da: 46bd mov sp, r7
55dc: bc80 pop {r7}
55de: 4770 bx lr
55e0: 40007400 .word 0x40007400
000055e4 <DAC_DualSoftwareTriggerCmd>:
* @param NewState: new state of the DAC channels software triggers.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)
{
55e4: b480 push {r7}
55e6: b083 sub sp, #12
55e8: af00 add r7, sp, #0
55ea: 4603 mov r3, r0
55ec: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
55ee: 79fb ldrb r3, [r7, #7]
55f0: 2b00 cmp r3, #0
55f2: d006 beq.n 5602 <DAC_DualSoftwareTriggerCmd+0x1e>
{
/* Enable software trigger for both DAC channels */
DAC->SWTRIGR |= DUAL_SWTRIG_SET ;
55f4: 4b08 ldr r3, [pc, #32] ; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
55f6: 685b ldr r3, [r3, #4]
55f8: 4a07 ldr r2, [pc, #28] ; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
55fa: f043 0303 orr.w r3, r3, #3
55fe: 6053 str r3, [r2, #4]
else
{
/* Disable software trigger for both DAC channels */
DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
}
}
5600: e005 b.n 560e <DAC_DualSoftwareTriggerCmd+0x2a>
DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
5602: 4b05 ldr r3, [pc, #20] ; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
5604: 685b ldr r3, [r3, #4]
5606: 4a04 ldr r2, [pc, #16] ; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
5608: f023 0303 bic.w r3, r3, #3
560c: 6053 str r3, [r2, #4]
}
560e: bf00 nop
5610: 370c adds r7, #12
5612: 46bd mov sp, r7
5614: bc80 pop {r7}
5616: 4770 bx lr
5618: 40007400 .word 0x40007400
0000561c <DAC_WaveGenerationCmd>:
* @param NewState: new state of the selected DAC channel wave generation.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)
{
561c: b480 push {r7}
561e: b085 sub sp, #20
5620: af00 add r7, sp, #0
5622: 60f8 str r0, [r7, #12]
5624: 60b9 str r1, [r7, #8]
5626: 4613 mov r3, r2
5628: 71fb strb r3, [r7, #7]
/* Check the parameters */
assert_param(IS_DAC_CHANNEL(DAC_Channel));
assert_param(IS_DAC_WAVE(DAC_Wave));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
562a: 79fb ldrb r3, [r7, #7]
562c: 2b00 cmp r3, #0
562e: d009 beq.n 5644 <DAC_WaveGenerationCmd+0x28>
{
/* Enable the selected wave generation for the selected DAC channel */
DAC->CR |= DAC_Wave << DAC_Channel;
5630: 4b0c ldr r3, [pc, #48] ; (5664 <DAC_WaveGenerationCmd+0x48>)
5632: 681a ldr r2, [r3, #0]
5634: 68b9 ldr r1, [r7, #8]
5636: 68fb ldr r3, [r7, #12]
5638: fa01 f303 lsl.w r3, r1, r3
563c: 4909 ldr r1, [pc, #36] ; (5664 <DAC_WaveGenerationCmd+0x48>)
563e: 4313 orrs r3, r2
5640: 600b str r3, [r1, #0]
else
{
/* Disable the selected wave generation for the selected DAC channel */
DAC->CR &= ~(DAC_Wave << DAC_Channel);
}
}
5642: e009 b.n 5658 <DAC_WaveGenerationCmd+0x3c>
DAC->CR &= ~(DAC_Wave << DAC_Channel);
5644: 4b07 ldr r3, [pc, #28] ; (5664 <DAC_WaveGenerationCmd+0x48>)
5646: 681a ldr r2, [r3, #0]
5648: 68b9 ldr r1, [r7, #8]
564a: 68fb ldr r3, [r7, #12]
564c: fa01 f303 lsl.w r3, r1, r3
5650: 43db mvns r3, r3
5652: 4904 ldr r1, [pc, #16] ; (5664 <DAC_WaveGenerationCmd+0x48>)
5654: 4013 ands r3, r2
5656: 600b str r3, [r1, #0]
}
5658: bf00 nop
565a: 3714 adds r7, #20
565c: 46bd mov sp, r7
565e: bc80 pop {r7}
5660: 4770 bx lr
5662: bf00 nop
5664: 40007400 .word 0x40007400
00005668 <DAC_SetChannel1Data>:
* @arg DAC_Align_12b_R: 12bit right data alignment selected
* @param Data : Data to be loaded in the selected data holding register.
* @retval None
*/
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
{
5668: b480 push {r7}
566a: b085 sub sp, #20
566c: af00 add r7, sp, #0
566e: 6078 str r0, [r7, #4]
5670: 460b mov r3, r1
5672: 807b strh r3, [r7, #2]
__IO uint32_t tmp = 0;
5674: 2300 movs r3, #0
5676: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_DAC_ALIGN(DAC_Align));
assert_param(IS_DAC_DATA(Data));
tmp = (uint32_t)DAC_BASE;
5678: 4b07 ldr r3, [pc, #28] ; (5698 <DAC_SetChannel1Data+0x30>)
567a: 60fb str r3, [r7, #12]
tmp += DHR12R1_OFFSET + DAC_Align;
567c: 68fa ldr r2, [r7, #12]
567e: 687b ldr r3, [r7, #4]
5680: 4413 add r3, r2
5682: 3308 adds r3, #8
5684: 60fb str r3, [r7, #12]
/* Set the DAC channel1 selected data holding register */
*(__IO uint32_t *) tmp = Data;
5686: 68fb ldr r3, [r7, #12]
5688: 461a mov r2, r3
568a: 887b ldrh r3, [r7, #2]
568c: 6013 str r3, [r2, #0]
}
568e: bf00 nop
5690: 3714 adds r7, #20
5692: 46bd mov sp, r7
5694: bc80 pop {r7}
5696: 4770 bx lr
5698: 40007400 .word 0x40007400
0000569c <DAC_SetChannel2Data>:
* @arg DAC_Align_12b_R: 12bit right data alignment selected
* @param Data : Data to be loaded in the selected data holding register.
* @retval None
*/
void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)
{
569c: b480 push {r7}
569e: b085 sub sp, #20
56a0: af00 add r7, sp, #0
56a2: 6078 str r0, [r7, #4]
56a4: 460b mov r3, r1
56a6: 807b strh r3, [r7, #2]
__IO uint32_t tmp = 0;
56a8: 2300 movs r3, #0
56aa: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_DAC_ALIGN(DAC_Align));
assert_param(IS_DAC_DATA(Data));
tmp = (uint32_t)DAC_BASE;
56ac: 4b07 ldr r3, [pc, #28] ; (56cc <DAC_SetChannel2Data+0x30>)
56ae: 60fb str r3, [r7, #12]
tmp += DHR12R2_OFFSET + DAC_Align;
56b0: 68fa ldr r2, [r7, #12]
56b2: 687b ldr r3, [r7, #4]
56b4: 4413 add r3, r2
56b6: 3314 adds r3, #20
56b8: 60fb str r3, [r7, #12]
/* Set the DAC channel2 selected data holding register */
*(__IO uint32_t *)tmp = Data;
56ba: 68fb ldr r3, [r7, #12]
56bc: 461a mov r2, r3
56be: 887b ldrh r3, [r7, #2]
56c0: 6013 str r3, [r2, #0]
}
56c2: bf00 nop
56c4: 3714 adds r7, #20
56c6: 46bd mov sp, r7
56c8: bc80 pop {r7}
56ca: 4770 bx lr
56cc: 40007400 .word 0x40007400
000056d0 <DAC_SetDualChannelData>:
* @param Data1: Data for DAC Channel1 to be loaded in the selected data
* holding register.
* @retval None
*/
void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)
{
56d0: b480 push {r7}
56d2: b085 sub sp, #20
56d4: af00 add r7, sp, #0
56d6: 6078 str r0, [r7, #4]
56d8: 460b mov r3, r1
56da: 807b strh r3, [r7, #2]
56dc: 4613 mov r3, r2
56de: 803b strh r3, [r7, #0]
uint32_t data = 0, tmp = 0;
56e0: 2300 movs r3, #0
56e2: 60fb str r3, [r7, #12]
56e4: 2300 movs r3, #0
56e6: 60bb str r3, [r7, #8]
assert_param(IS_DAC_ALIGN(DAC_Align));
assert_param(IS_DAC_DATA(Data1));
assert_param(IS_DAC_DATA(Data2));
/* Calculate and set dual DAC data holding register value */
if (DAC_Align == DAC_Align_8b_R)
56e8: 687b ldr r3, [r7, #4]
56ea: 2b08 cmp r3, #8
56ec: d105 bne.n 56fa <DAC_SetDualChannelData+0x2a>
{
data = ((uint32_t)Data2 << 8) | Data1;
56ee: 887b ldrh r3, [r7, #2]
56f0: 021a lsls r2, r3, #8
56f2: 883b ldrh r3, [r7, #0]
56f4: 4313 orrs r3, r2
56f6: 60fb str r3, [r7, #12]
56f8: e004 b.n 5704 <DAC_SetDualChannelData+0x34>
}
else
{
data = ((uint32_t)Data2 << 16) | Data1;
56fa: 887b ldrh r3, [r7, #2]
56fc: 041a lsls r2, r3, #16
56fe: 883b ldrh r3, [r7, #0]
5700: 4313 orrs r3, r2
5702: 60fb str r3, [r7, #12]
}
tmp = (uint32_t)DAC_BASE;
5704: 4b07 ldr r3, [pc, #28] ; (5724 <DAC_SetDualChannelData+0x54>)
5706: 60bb str r3, [r7, #8]
tmp += DHR12RD_OFFSET + DAC_Align;
5708: 687a ldr r2, [r7, #4]
570a: 68bb ldr r3, [r7, #8]
570c: 4413 add r3, r2
570e: 3320 adds r3, #32
5710: 60bb str r3, [r7, #8]
/* Set the dual DAC selected data holding register */
*(__IO uint32_t *)tmp = data;
5712: 68bb ldr r3, [r7, #8]
5714: 68fa ldr r2, [r7, #12]
5716: 601a str r2, [r3, #0]
}
5718: bf00 nop
571a: 3714 adds r7, #20
571c: 46bd mov sp, r7
571e: bc80 pop {r7}
5720: 4770 bx lr
5722: bf00 nop
5724: 40007400 .word 0x40007400
00005728 <DAC_GetDataOutputValue>:
* @arg DAC_Channel_1: DAC Channel1 selected
* @arg DAC_Channel_2: DAC Channel2 selected
* @retval The selected DAC channel data output value.
*/
uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)
{
5728: b480 push {r7}
572a: b085 sub sp, #20
572c: af00 add r7, sp, #0
572e: 6078 str r0, [r7, #4]
__IO uint32_t tmp = 0;
5730: 2300 movs r3, #0
5732: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_DAC_CHANNEL(DAC_Channel));
tmp = (uint32_t) DAC_BASE ;
5734: 4b07 ldr r3, [pc, #28] ; (5754 <DAC_GetDataOutputValue+0x2c>)
5736: 60fb str r3, [r7, #12]
tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2);
5738: 687b ldr r3, [r7, #4]
573a: 089a lsrs r2, r3, #2
573c: 68fb ldr r3, [r7, #12]
573e: 4413 add r3, r2
5740: 332c adds r3, #44 ; 0x2c
5742: 60fb str r3, [r7, #12]
/* Returns the DAC channel data output register value */
return (uint16_t) (*(__IO uint32_t*) tmp);
5744: 68fb ldr r3, [r7, #12]
5746: 681b ldr r3, [r3, #0]
5748: b29b uxth r3, r3
}
574a: 4618 mov r0, r3
574c: 3714 adds r7, #20
574e: 46bd mov sp, r7
5750: bc80 pop {r7}
5752: 4770 bx lr
5754: 40007400 .word 0x40007400
00005758 <NVIC_PriorityGroupConfig>:
* @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
* 0 bits for subpriority
* @retval None
*/
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
5758: b480 push {r7}
575a: b083 sub sp, #12
575c: af00 add r7, sp, #0
575e: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
/* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
5760: 4a05 ldr r2, [pc, #20] ; (5778 <NVIC_PriorityGroupConfig+0x20>)
5762: 687b ldr r3, [r7, #4]
5764: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000
5768: f443 3300 orr.w r3, r3, #131072 ; 0x20000
576c: 60d3 str r3, [r2, #12]
}
576e: bf00 nop
5770: 370c adds r7, #12
5772: 46bd mov sp, r7
5774: bc80 pop {r7}
5776: 4770 bx lr
5778: e000ed00 .word 0xe000ed00
0000577c <NVIC_Init>:
* @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
* the configuration information for the specified NVIC peripheral.
* @retval None
*/
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
577c: b480 push {r7}
577e: b087 sub sp, #28
5780: af00 add r7, sp, #0
5782: 6078 str r0, [r7, #4]
uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
5784: 2300 movs r3, #0
5786: 617b str r3, [r7, #20]
5788: 2300 movs r3, #0
578a: 613b str r3, [r7, #16]
578c: 230f movs r3, #15
578e: 60fb str r3, [r7, #12]
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
5790: 687b ldr r3, [r7, #4]
5792: 78db ldrb r3, [r3, #3]
5794: 2b00 cmp r3, #0
5796: d03a beq.n 580e <NVIC_Init+0x92>
{
/* Compute the Corresponding IRQ Priority --------------------------------*/
tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
5798: 4b27 ldr r3, [pc, #156] ; (5838 <NVIC_Init+0xbc>)
579a: 68db ldr r3, [r3, #12]
579c: 43db mvns r3, r3
579e: 0a1b lsrs r3, r3, #8
57a0: f003 0307 and.w r3, r3, #7
57a4: 617b str r3, [r7, #20]
tmppre = (0x4 - tmppriority);
57a6: 697b ldr r3, [r7, #20]
57a8: f1c3 0304 rsb r3, r3, #4
57ac: 613b str r3, [r7, #16]
tmpsub = tmpsub >> tmppriority;
57ae: 68fa ldr r2, [r7, #12]
57b0: 697b ldr r3, [r7, #20]
57b2: fa22 f303 lsr.w r3, r2, r3
57b6: 60fb str r3, [r7, #12]
tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
57b8: 687b ldr r3, [r7, #4]
57ba: 785b ldrb r3, [r3, #1]
57bc: 461a mov r2, r3
57be: 693b ldr r3, [r7, #16]
57c0: fa02 f303 lsl.w r3, r2, r3
57c4: 617b str r3, [r7, #20]
tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
57c6: 687b ldr r3, [r7, #4]
57c8: 789b ldrb r3, [r3, #2]
57ca: 461a mov r2, r3
57cc: 68fb ldr r3, [r7, #12]
57ce: 4013 ands r3, r2
57d0: 697a ldr r2, [r7, #20]
57d2: 4313 orrs r3, r2
57d4: 617b str r3, [r7, #20]
tmppriority = tmppriority << 0x04;
57d6: 697b ldr r3, [r7, #20]
57d8: 011b lsls r3, r3, #4
57da: 617b str r3, [r7, #20]
NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
57dc: 4a17 ldr r2, [pc, #92] ; (583c <NVIC_Init+0xc0>)
57de: 687b ldr r3, [r7, #4]
57e0: 781b ldrb r3, [r3, #0]
57e2: 6979 ldr r1, [r7, #20]
57e4: b2c9 uxtb r1, r1
57e6: 4413 add r3, r2
57e8: 460a mov r2, r1
57ea: f883 2300 strb.w r2, [r3, #768] ; 0x300
/* Enable the Selected IRQ Channels --------------------------------------*/
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
57ee: 687b ldr r3, [r7, #4]
57f0: 781b ldrb r3, [r3, #0]
57f2: f003 031f and.w r3, r3, #31
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
57f6: 4911 ldr r1, [pc, #68] ; (583c <NVIC_Init+0xc0>)
57f8: 687a ldr r2, [r7, #4]
57fa: 7812 ldrb r2, [r2, #0]
57fc: 0952 lsrs r2, r2, #5
57fe: b2d2 uxtb r2, r2
5800: 4610 mov r0, r2
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
5802: 2201 movs r2, #1
5804: fa02 f303 lsl.w r3, r2, r3
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
5808: f841 3020 str.w r3, [r1, r0, lsl #2]
{
/* Disable the Selected IRQ Channels -------------------------------------*/
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
}
}
580c: e00f b.n 582e <NVIC_Init+0xb2>
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
580e: 687b ldr r3, [r7, #4]
5810: 781b ldrb r3, [r3, #0]
5812: f003 031f and.w r3, r3, #31
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
5816: 4909 ldr r1, [pc, #36] ; (583c <NVIC_Init+0xc0>)
5818: 687a ldr r2, [r7, #4]
581a: 7812 ldrb r2, [r2, #0]
581c: 0952 lsrs r2, r2, #5
581e: b2d2 uxtb r2, r2
5820: 4610 mov r0, r2
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
5822: 2201 movs r2, #1
5824: 409a lsls r2, r3
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
5826: f100 0320 add.w r3, r0, #32
582a: f841 2023 str.w r2, [r1, r3, lsl #2]
}
582e: bf00 nop
5830: 371c adds r7, #28
5832: 46bd mov sp, r7
5834: bc80 pop {r7}
5836: 4770 bx lr
5838: e000ed00 .word 0xe000ed00
583c: e000e100 .word 0xe000e100
00005840 <NVIC_SetVectorTable>:
* @param Offset: Vector Table base offset field. This value must be a multiple
* of 0x200.
* @retval None
*/
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{
5840: b480 push {r7}
5842: b083 sub sp, #12
5844: af00 add r7, sp, #0
5846: 6078 str r0, [r7, #4]
5848: 6039 str r1, [r7, #0]
/* Check the parameters */
assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
assert_param(IS_NVIC_OFFSET(Offset));
SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
584a: 683b ldr r3, [r7, #0]
584c: f023 4360 bic.w r3, r3, #3758096384 ; 0xe0000000
5850: f023 037f bic.w r3, r3, #127 ; 0x7f
5854: 4904 ldr r1, [pc, #16] ; (5868 <NVIC_SetVectorTable+0x28>)
5856: 687a ldr r2, [r7, #4]
5858: 4313 orrs r3, r2
585a: 608b str r3, [r1, #8]
}
585c: bf00 nop
585e: 370c adds r7, #12
5860: 46bd mov sp, r7
5862: bc80 pop {r7}
5864: 4770 bx lr
5866: bf00 nop
5868: e000ed00 .word 0xe000ed00
0000586c <NVIC_SystemLPConfig>:
* @arg NVIC_LP_SLEEPONEXIT
* @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
{
586c: b480 push {r7}
586e: b083 sub sp, #12
5870: af00 add r7, sp, #0
5872: 4603 mov r3, r0
5874: 460a mov r2, r1
5876: 71fb strb r3, [r7, #7]
5878: 4613 mov r3, r2
587a: 71bb strb r3, [r7, #6]
/* Check the parameters */
assert_param(IS_NVIC_LP(LowPowerMode));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
587c: 79bb ldrb r3, [r7, #6]
587e: 2b00 cmp r3, #0
5880: d006 beq.n 5890 <NVIC_SystemLPConfig+0x24>
{
SCB->SCR |= LowPowerMode;
5882: 4b09 ldr r3, [pc, #36] ; (58a8 <NVIC_SystemLPConfig+0x3c>)
5884: 691a ldr r2, [r3, #16]
5886: 79fb ldrb r3, [r7, #7]
5888: 4907 ldr r1, [pc, #28] ; (58a8 <NVIC_SystemLPConfig+0x3c>)
588a: 4313 orrs r3, r2
588c: 610b str r3, [r1, #16]
}
else
{
SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
}
}
588e: e006 b.n 589e <NVIC_SystemLPConfig+0x32>
SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
5890: 4b05 ldr r3, [pc, #20] ; (58a8 <NVIC_SystemLPConfig+0x3c>)
5892: 691a ldr r2, [r3, #16]
5894: 79fb ldrb r3, [r7, #7]
5896: 43db mvns r3, r3
5898: 4903 ldr r1, [pc, #12] ; (58a8 <NVIC_SystemLPConfig+0x3c>)
589a: 4013 ands r3, r2
589c: 610b str r3, [r1, #16]
}
589e: bf00 nop
58a0: 370c adds r7, #12
58a2: 46bd mov sp, r7
58a4: bc80 pop {r7}
58a6: 4770 bx lr
58a8: e000ed00 .word 0xe000ed00
000058ac <SysTick_CLKSourceConfig>:
* @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
* @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
* @retval None
*/
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
58ac: b480 push {r7}
58ae: b083 sub sp, #12
58b0: af00 add r7, sp, #0
58b2: 6078 str r0, [r7, #4]
/* Check the parameters */
assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
58b4: 687b ldr r3, [r7, #4]
58b6: 2b04 cmp r3, #4
58b8: d106 bne.n 58c8 <SysTick_CLKSourceConfig+0x1c>
{
SysTick->CTRL |= SysTick_CLKSource_HCLK;
58ba: 4b09 ldr r3, [pc, #36] ; (58e0 <SysTick_CLKSourceConfig+0x34>)
58bc: 681b ldr r3, [r3, #0]
58be: 4a08 ldr r2, [pc, #32] ; (58e0 <SysTick_CLKSourceConfig+0x34>)
58c0: f043 0304 orr.w r3, r3, #4
58c4: 6013 str r3, [r2, #0]
}
else
{
SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
}
}
58c6: e005 b.n 58d4 <SysTick_CLKSourceConfig+0x28>
SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
58c8: 4b05 ldr r3, [pc, #20] ; (58e0 <SysTick_CLKSourceConfig+0x34>)
58ca: 681b ldr r3, [r3, #0]
58cc: 4a04 ldr r2, [pc, #16] ; (58e0 <SysTick_CLKSourceConfig+0x34>)
58ce: f023 0304 bic.w r3, r3, #4
58d2: 6013 str r3, [r2, #0]
}
58d4: bf00 nop
58d6: 370c adds r7, #12
58d8: 46bd mov sp, r7
58da: bc80 pop {r7}
58dc: 4770 bx lr
58de: bf00 nop
58e0: e000e010 .word 0xe000e010
000058e4 <sleep>:
#define USE_STDPERIPH_DRIVER
#include "stm32_p103.h"
#include "myprintk.h"
void sleep()
{
58e4: b480 push {r7}
58e6: b083 sub sp, #12
58e8: af00 add r7, sp, #0
int i=1000000;
58ea: 4b07 ldr r3, [pc, #28] ; (5908 <sleep+0x24>)
58ec: 607b str r3, [r7, #4]
while(i-->0);
58ee: bf00 nop
58f0: 687b ldr r3, [r7, #4]
58f2: 1e5a subs r2, r3, #1
58f4: 607a str r2, [r7, #4]
58f6: 2b00 cmp r3, #0
58f8: dcfa bgt.n 58f0 <sleep+0xc>
}
58fa: bf00 nop
58fc: bf00 nop
58fe: 370c adds r7, #12
5900: 46bd mov sp, r7
5902: bc80 pop {r7}
5904: 4770 bx lr
5906: bf00 nop
5908: 000f4240 .word 0x000f4240
0000590c <main>:
int main(void)
{
590c: b580 push {r7, lr}
590e: b086 sub sp, #24
5910: af02 add r7, sp, #8
uint8_t b;
int32_t num1=0x1234;
5912: f241 2334 movw r3, #4660 ; 0x1234
5916: 60fb str r3, [r7, #12]
char *str1="Strings";
5918: 4b08 ldr r3, [pc, #32] ; (593c <main+0x30>)
591a: 60bb str r3, [r7, #8]
char ch1='Z';
591c: 235a movs r3, #90 ; 0x5a
591e: 71fb strb r3, [r7, #7]
//first init myprintf device(usart2)
myprintf_init();
5920: f7fa ffbe bl 8a0 <myprintf_init>
while(1) {
myprintf("test num %d=0x%x str %s ch %c\n",num1,num1,str1,ch1);
5924: 79fb ldrb r3, [r7, #7]
5926: 9300 str r3, [sp, #0]
5928: 68bb ldr r3, [r7, #8]
592a: 68fa ldr r2, [r7, #12]
592c: 68f9 ldr r1, [r7, #12]
592e: 4804 ldr r0, [pc, #16] ; (5940 <main+0x34>)
5930: f7fb fbfb bl 112a <myprintf>
sleep();
5934: f7ff ffd6 bl 58e4 <sleep>
myprintf("test num %d=0x%x str %s ch %c\n",num1,num1,str1,ch1);
5938: e7f4 b.n 5924 <main+0x18>
593a: bf00 nop
593c: 00005a84 .word 0x00005a84
5940: 00005a8c .word 0x00005a8c
00005944 <memset>:
5944: b4f0 push {r4, r5, r6, r7}
5946: 0786 lsls r6, r0, #30
5948: d046 beq.n 59d8 <memset+0x94>
594a: 1e54 subs r4, r2, #1
594c: 2a00 cmp r2, #0
594e: d03c beq.n 59ca <memset+0x86>
5950: 4603 mov r3, r0
5952: b2ca uxtb r2, r1
5954: e001 b.n 595a <memset+0x16>
5956: 3c01 subs r4, #1
5958: d337 bcc.n 59ca <memset+0x86>
595a: f803 2b01 strb.w r2, [r3], #1
595e: 079d lsls r5, r3, #30
5960: d1f9 bne.n 5956 <memset+0x12>
5962: 2c03 cmp r4, #3
5964: d92a bls.n 59bc <memset+0x78>
5966: b2cd uxtb r5, r1
5968: ea45 2505 orr.w r5, r5, r5, lsl #8
596c: 2c0f cmp r4, #15
596e: ea45 4505 orr.w r5, r5, r5, lsl #16
5972: d934 bls.n 59de <memset+0x9a>
5974: f1a4 0210 sub.w r2, r4, #16
5978: f022 0c0f bic.w ip, r2, #15
597c: f103 0720 add.w r7, r3, #32
5980: 0916 lsrs r6, r2, #4
5982: 4467 add r7, ip
5984: f103 0210 add.w r2, r3, #16
5988: e942 5504 strd r5, r5, [r2, #-16]
598c: e942 5502 strd r5, r5, [r2, #-8]
5990: 3210 adds r2, #16
5992: 42ba cmp r2, r7
5994: d1f8 bne.n 5988 <memset+0x44>
5996: 1c72 adds r2, r6, #1
5998: f014 0f0c tst.w r4, #12
599c: eb03 1202 add.w r2, r3, r2, lsl #4
59a0: f004 060f and.w r6, r4, #15
59a4: d013 beq.n 59ce <memset+0x8a>
59a6: 1f33 subs r3, r6, #4
59a8: f023 0303 bic.w r3, r3, #3
59ac: 3304 adds r3, #4
59ae: 4413 add r3, r2
59b0: f842 5b04 str.w r5, [r2], #4
59b4: 4293 cmp r3, r2
59b6: d1fb bne.n 59b0 <memset+0x6c>
59b8: f006 0403 and.w r4, r6, #3
59bc: b12c cbz r4, 59ca <memset+0x86>
59be: b2ca uxtb r2, r1
59c0: 441c add r4, r3
59c2: f803 2b01 strb.w r2, [r3], #1
59c6: 429c cmp r4, r3
59c8: d1fb bne.n 59c2 <memset+0x7e>
59ca: bcf0 pop {r4, r5, r6, r7}
59cc: 4770 bx lr
59ce: 4634 mov r4, r6
59d0: 4613 mov r3, r2
59d2: 2c00 cmp r4, #0
59d4: d1f3 bne.n 59be <memset+0x7a>
59d6: e7f8 b.n 59ca <memset+0x86>
59d8: 4614 mov r4, r2
59da: 4603 mov r3, r0
59dc: e7c1 b.n 5962 <memset+0x1e>
59de: 461a mov r2, r3
59e0: 4626 mov r6, r4
59e2: e7e0 b.n 59a6 <memset+0x62>
000059e4 <Reset_Handler>:
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
59e4: 2100 movs r1, #0
b LoopCopyDataInit
59e6: e003 b.n 59f0 <LoopCopyDataInit>
000059e8 <CopyDataInit>:
CopyDataInit:
ldr r3, =_sidata
59e8: 4b0a ldr r3, [pc, #40] ; (5a14 <LoopFillZerobss+0x10>)
ldr r3, [r3, r1]
59ea: 585b ldr r3, [r3, r1]
str r3, [r0, r1]
59ec: 5043 str r3, [r0, r1]
adds r1, r1, #4
59ee: 3104 adds r1, #4
000059f0 <LoopCopyDataInit>:
LoopCopyDataInit:
ldr r0, =_sdata
59f0: 4809 ldr r0, [pc, #36] ; (5a18 <LoopFillZerobss+0x14>)
ldr r3, =_edata
59f2: 4b0a ldr r3, [pc, #40] ; (5a1c <LoopFillZerobss+0x18>)
adds r2, r0, r1
59f4: 1842 adds r2, r0, r1
cmp r2, r3
59f6: 429a cmp r2, r3
bcc CopyDataInit
59f8: d3f6 bcc.n 59e8 <CopyDataInit>
ldr r2, =_sbss
59fa: 4a09 ldr r2, [pc, #36] ; (5a20 <LoopFillZerobss+0x1c>)
b LoopFillZerobss
59fc: e002 b.n 5a04 <LoopFillZerobss>
000059fe <FillZerobss>:
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
59fe: 2300 movs r3, #0
str r3, [r2], #4
5a00: f842 3b04 str.w r3, [r2], #4
00005a04 <LoopFillZerobss>:
LoopFillZerobss:
ldr r3, = _ebss
5a04: 4b07 ldr r3, [pc, #28] ; (5a24 <LoopFillZerobss+0x20>)
cmp r2, r3
5a06: 429a cmp r2, r3
bcc FillZerobss
5a08: d3f9 bcc.n 59fe <FillZerobss>
/* Call the clock system intitialization function.*/
bl SystemInit
5a0a: f7fa fca9 bl 360 <SystemInit>
/* Call the application's entry point.*/
bl main
5a0e: f7ff ff7d bl 590c <main>
bx lr
5a12: 4770 bx lr
ldr r3, =_sidata
5a14: 00005bad .word 0x00005bad
ldr r0, =_sdata
5a18: 20000000 .word 0x20000000
ldr r3, =_edata
5a1c: 20000028 .word 0x20000028
ldr r2, =_sbss
5a20: 20000028 .word 0x20000028
ldr r3, = _ebss
5a24: 20000028 .word 0x20000028
00005a28 <ADC1_2_IRQHandler>:
* @retval None
*/
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
5a28: e7fe b.n 5a28 <ADC1_2_IRQHandler>
5a2a: 0000 movs r0, r0
5a2c: 33323130 .word 0x33323130
5a30: 37363534 .word 0x37363534
5a34: 62613938 .word 0x62613938
5a38: 66656463 .word 0x66656463
5a3c: 6a696867 .word 0x6a696867
5a40: 6e6d6c6b .word 0x6e6d6c6b
5a44: 7271706f .word 0x7271706f
5a48: 76757473 .word 0x76757473
5a4c: 7a797877 .word 0x7a797877
5a50: 00000000 .word 0x00000000
5a54: 33323130 .word 0x33323130
5a58: 37363534 .word 0x37363534
5a5c: 42413938 .word 0x42413938
5a60: 46454443 .word 0x46454443
5a64: 4a494847 .word 0x4a494847
5a68: 4e4d4c4b .word 0x4e4d4c4b
5a6c: 5251504f .word 0x5251504f
5a70: 56555453 .word 0x56555453
5a74: 5a595857 .word 0x5a595857
5a78: 00000000 .word 0x00000000
5a7c: 4c554e3c .word 0x4c554e3c
5a80: 00003e4c .word 0x00003e4c
5a84: 69727453 .word 0x69727453
5a88: 0073676e .word 0x0073676e
5a8c: 74736574 .word 0x74736574
5a90: 6d756e20 .word 0x6d756e20
5a94: 3d642520 .word 0x3d642520
5a98: 78257830 .word 0x78257830
5a9c: 72747320 .word 0x72747320
5aa0: 20732520 .word 0x20732520
5aa4: 25206863 .word 0x25206863
5aa8: 00000a63 .word 0x00000a63
00005aac <_ctype_>:
5aac: 20202000 20202020 28282020 20282828 . (((((
5abc: 20202020 20202020 20202020 20202020
5acc: 10108820 10101010 10101010 10101010 ...............
5adc: 04040410 04040404 10040404 10101010 ................
5aec: 41411010 41414141 01010101 01010101 ..AAAAAA........
5afc: 01010101 01010101 01010101 10101010 ................
5b0c: 42421010 42424242 02020202 02020202 ..BBBBBB........
5b1c: 02020202 02020202 02020202 10101010 ................
5b2c: 00000020 00000000 00000000 00000000 ...............
...