mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
17326 lines
594 KiB
Plaintext
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 ...............
|
|
...
|