📄 wdg.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.30A/W32 KICKSTART 14/Dec/2005 14:41:50 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\Library\wdg.c #
# Command line = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\Library\wdg.c -D _NDEBUG -D STR71X_IAR -lC #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\List\ --diag_suppress pe191,pa082 -o #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\Obj\ -s9 --no_clustering --cpu_mode thumb #
# --endian little --cpu ARM7TDMI --stack_align 4 #
# --interwork -e --require_prototypes --fpu None #
# --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl4tptinl8n.h" -I #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\ -I D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR #
# 71x_IAR\library\include\ -I #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\..\common\include\ -I D:\board\FreeRTOSV3.2.3\Free #
# RTOS\Demo\ARM7_STR71x_IAR\..\..\source\include\ -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Kickstart\arm\INC\" #
# List file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\List\wdg.lst #
# Object file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\Obj\wdg.r79 #
# #
# #
##############################################################################
D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\Library\wdg.c
1 /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
2 * File Name : WDG.c
3 * Author : MCD Application Team
4 * Date First Issued : 10/24/2003
5 * Description : This file provides all the WDG software functions
6 ********************************************************************************
7 * History:
8 * 30/11/2004 : V2.0
9 * 14/07/2004 : V1.3
10 * 01/01/2004 : V1.2
11 *******************************************************************************
12 THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
13 CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
14 AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT
15 OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
16 OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
17 CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
18 *******************************************************************************/
19
20 #include "wdg.h"
21
22 #ifndef abs
23 #define abs(x) ((x)>0 ? (x) : -(x))
24 #endif
25
26 /*******************************************************************************
27 * Function Name : FindFactors
28 * Description : Search for the best (a,b) values that fit n = a*b
29 * with the following constraints: 1<=a<=256, 1<=b<=65536
30 * Input 1 : n: the number to decompose
31 * Input/Output 2 : a: a pointer to the first factor
32 * Input/Output 3 : b: a pointer to the second factor
33 * Return : None
34 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
35 static void FindFactors(unsigned long n, unsigned int *a, unsigned long *b)
36 {
\ ??FindFactors:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 83B0 SUB SP,#+0xC
\ 00000004 031C MOV R3,R0
\ 00000006 0C1C MOV R4,R1
\ 00000008 151C MOV R5,R2
37 unsigned long b0;
38 unsigned int a0;
39 long err, err_min=n;
\ 0000000A 0090 STR R0,[SP, #+0]
40
41 *a = a0 = ((n-1)/65536ul) + 1;
\ 0000000C 401E SUB R0,R0,#+0x1
\ 0000000E 020C LSR R2,R0,#+0x10
\ 00000010 521C ADD R2,R2,#+0x1
\ 00000012 0192 STR R2,[SP, #+0x4]
\ 00000014 0A60 STR R2,[R1, #+0]
42 *b = b0 = n / *a;
\ 00000016 181C MOV R0,R3
\ 00000018 111C MOV R1,R2
\ 0000001A ........ _BLF ??divu32_t,??rT??divu32_t
\ 0000001E 0291 STR R1,[SP, #+0x8]
\ 00000020 FF20 MOV R0,#+0xFF
\ 00000022 801C ADD R0,R0,#+0x2 ;; #+0x101
\ 00000024 8242 CMP R2,R0
\ 00000026 29D2 BCS ??FindFactors_1
43
44 for (; *a <= 256; (*a)++)
45 {
46 *b = n / *a;
\ ??FindFactors_2:
\ 00000028 2268 LDR R2,[R4, #+0]
\ 0000002A 181C MOV R0,R3
\ 0000002C 111C MOV R1,R2
\ 0000002E ........ _BLF ??divu32_t,??rT??divu32_t
47 err = (long)*a * (long)*b - (long)n;
\ 00000032 101C MOV R0,R2
\ 00000034 4843 MUL R0,R1
\ 00000036 C01A SUB R0,R0,R3
48 if (abs(err) > (*a / 2))
\ 00000038 0128 CMP R0,#+0x1
\ 0000003A 01DB BLT ??FindFactors_3
\ 0000003C 061C MOV R6,R0
\ 0000003E 00E0 B ??FindFactors_4
\ ??FindFactors_3:
\ 00000040 4642 NEG R6,R0
\ ??FindFactors_4:
\ 00000042 5708 LSR R7,R2,#+0x1
\ 00000044 B742 CMP R7,R6
\ 00000046 03D2 BCS ??FindFactors_5
49 {
50 (*b)++;
\ 00000048 491C ADD R1,R1,#+0x1
51 err = (long)*a * (long)*b - (long)n;
\ 0000004A 101C MOV R0,R2
\ 0000004C 4843 MUL R0,R1
\ 0000004E C01A SUB R0,R0,R3
\ ??FindFactors_5:
\ 00000050 2960 STR R1,[R5, #+0]
52 }
53 if (abs(err) < abs(err_min))
\ 00000052 011C MOV R1,R0
\ 00000054 00D5 BPL ??FindFactors_6
\ 00000056 4942 NEG R1,R1
\ ??FindFactors_6:
\ 00000058 009E LDR R6,[SP, #+0]
\ 0000005A 002E CMP R6,#+0
\ 0000005C 00D5 BPL ??FindFactors_7
\ 0000005E 7642 NEG R6,R6
\ ??FindFactors_7:
\ 00000060 B142 CMP R1,R6
\ 00000062 05DA BGE ??FindFactors_8
54 {
55 err_min = err;
\ 00000064 0090 STR R0,[SP, #+0]
56 a0 = *a;
\ 00000066 0192 STR R2,[SP, #+0x4]
57 b0 = *b;
\ 00000068 2968 LDR R1,[R5, #+0]
\ 0000006A 0291 STR R1,[SP, #+0x8]
58 if (err == 0) break;
\ 0000006C 0028 CMP R0,#+0
\ 0000006E 05D0 BEQ ??FindFactors_1
59 }
60 }
\ ??FindFactors_8:
\ 00000070 521C ADD R2,R2,#+0x1
\ 00000072 2260 STR R2,[R4, #+0]
\ 00000074 FF20 MOV R0,#+0xFF
\ 00000076 801C ADD R0,R0,#+0x2 ;; #+0x101
\ 00000078 8242 CMP R2,R0
\ 0000007A D5D3 BCC ??FindFactors_2
61
62 *a = a0;
\ ??FindFactors_1:
\ 0000007C 0198 LDR R0,[SP, #+0x4]
\ 0000007E 2060 STR R0,[R4, #+0]
63 *b = b0;
\ 00000080 0298 LDR R0,[SP, #+0x8]
\ 00000082 2860 STR R0,[R5, #+0]
64 }
\ 00000084 03B0 ADD SP,#+0xC
\ 00000086 F0BC POP {R4-R7}
\ 00000088 01BC POP {R0}
\ 0000008A 0047 BX R0 ;; return
65
66 /*******************************************************************************
67 * Function Name : WDG_PeriodValueConfig
68 * Description : Set the prescaler and counter reload value
69 * Input : Amount of time (us) needed
70 * Return : None
71 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
72 void WDG_PeriodValueConfig ( u32 Time )
73 {
\ WDG_PeriodValueConfig:
\ 00000000 10B5 PUSH {R4,LR}
\ 00000002 82B0 SUB SP,#+0x8
74 unsigned int a;
75 unsigned long n, b;
76
77 n = Time * (RCCU_FrequencyValue(RCCU_PCLK) / 1000000);
\ 00000004 041C MOV R4,R0
\ 00000006 0320 MOV R0,#+0x3
\ 00000008 ........ _BLF RCCU_FrequencyValue,RCCU_FrequencyValue??rT
\ 0000000C 0A49 LDR R1,??WDG_PeriodValueConfig_0 ;; 0xf4240
\ 0000000E ........ _BLF ??divu32_t,??rT??divu32_t
\ 00000012 201C MOV R0,R4
\ 00000014 4843 MUL R0,R1
78 FindFactors(n, &a, &b);
\ 00000016 01AA ADD R2,SP,#+0x4
\ 00000018 6946 MOV R1,SP
\ 0000001A ........ BL ??FindFactors
79 WDG->PR = a - 1;
\ 0000001E 0748 LDR R0,??WDG_PeriodValueConfig_0+0x4 ;; 0xffff
\ 00000020 0749 LDR R1,??WDG_PeriodValueConfig_0+0x8 ;; 0xe000e004
\ 00000022 009A LDR R2,[SP, #+0]
\ 00000024 1218 ADD R2,R2,R0
\ 00000026 0A80 STRH R2,[R1, #+0]
80 WDG->VR = b - 1;
\ 00000028 0649 LDR R1,??WDG_PeriodValueConfig_0+0xC ;; 0xe000e008
\ 0000002A 019A LDR R2,[SP, #+0x4]
\ 0000002C 1018 ADD R0,R2,R0
\ 0000002E 0880 STRH R0,[R1, #+0]
81 }
\ 00000030 02B0 ADD SP,#+0x8
\ 00000032 10BC POP {R4}
\ 00000034 01BC POP {R0}
\ 00000036 0047 BX R0 ;; return
\ ??WDG_PeriodValueConfig_0:
\ 00000038 40420F00 DC32 0xf4240
\ 0000003C FFFF0000 DC32 0xffff
\ 00000040 04E000E0 DC32 0xe000e004
\ 00000044 08E000E0 DC32 0xe000e008
82
83 /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/
Maximum stack usage in bytes:
Function CSTACK
-------- ------
FindFactors 32
WDG_PeriodValueConfig 16
Segment part sizes:
Function/Label Bytes
-------------- -----
FindFactors 140
WDG_PeriodValueConfig 72
Others 40
252 bytes in segment CODE
212 bytes of CODE memory (+ 40 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -