📄 sysinit.lst
字号:
###############################################################################
# #
# IAR ANSI C/C++ Compiler V6.40.1.53790/W32 for ARM 09/Aug/2012 10:07:33 #
# Copyright 1999-2012 IAR Systems AB. #
# #
# Cpu mode = thumb #
# Endian = little #
# Source file = C:\Users\305030973\Desktop\M4 #
# example\01_light\src\Sources\C\Frame_C\sysinit.c #
# Command line = "C:\Users\305030973\Desktop\M4 #
# example\01_light\src\Sources\C\Frame_C\sysinit.c" -D #
# IAR -D TWR_K60N512 -lCN "C:\Users\305030973\Desktop\M4 #
# example\01_light\bin\Flash\List\" -lB #
# "C:\Users\305030973\Desktop\M4 #
# example\01_light\bin\Flash\List\" -o #
# "C:\Users\305030973\Desktop\M4 #
# example\01_light\bin\Flash\Obj\" --no_cse --no_unroll #
# --no_inline --no_code_motion --no_tbaa --no_clustering #
# --no_scheduling --debug --endian=little --cpu=Cortex-M4 #
# -e --fpu=None --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 6.4_2\arm\INC\c\DLib_Config_N #
# ormal.h" -I "C:\Users\305030973\Desktop\M4 #
# example\01_light\src\Sources\H\" -I #
# "C:\Users\305030973\Desktop\M4 #
# example\01_light\src\Sources\H\Component_H\" -I #
# "C:\Users\305030973\Desktop\M4 #
# example\01_light\src\Sources\H\Frame_H\" -I "C:\Program #
# Files\IAR Systems\Embedded Workbench 6.4_2\arm\INC\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 6.4_2\arm\INC\CLIB\" -Ol --use_c++_inline #
# List file = C:\Users\305030973\Desktop\M4 #
# example\01_light\bin\Flash\List\sysinit.lst #
# Object file = C:\Users\305030973\Desktop\M4 #
# example\01_light\bin\Flash\Obj\sysinit.o #
# #
# #
###############################################################################
C:\Users\305030973\Desktop\M4 example\01_light\src\Sources\C\Frame_C\sysinit.c
1 //-------------------------------------------------------------------------*
2 // 文件名:sysinit.c *
3 // 说 明: 系统配置文件 *
4 //-------------------------------------------------------------------------*
5
6 #include "sysinit.h" //头文件
7
8 //全局变量声明
\ In section .bss, align 4
9 int core_clk_khz;
\ core_clk_khz:
\ 00000000 DS8 4
\ In section .bss, align 4
10 int core_clk_mhz;
\ core_clk_mhz:
\ 00000000 DS8 4
\ In section .bss, align 4
11 int periph_clk_khz;
\ periph_clk_khz:
\ 00000000 DS8 4
12
13 //-------------------------------------------------------------------------*
14 //函数名: sysinit *
15 //功 能: 系统设置 *
16 //参 数: 无 *
17 //返 回: 无 *
18 //说 明: 无 *
19 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
20 void sysinit (void)
21 {
\ sysinit:
\ 00000000 0xB580 PUSH {R7,LR}
22 //使能IO端口时钟
23 SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
24 | SIM_SCGC5_PORTB_MASK
25 | SIM_SCGC5_PORTC_MASK
26 | SIM_SCGC5_PORTD_MASK
27 | SIM_SCGC5_PORTE_MASK );
\ 00000002 0x.... LDR.N R0,??DataTable3 ;; 0x40048038
\ 00000004 0x6800 LDR R0,[R0, #+0]
\ 00000006 0xF450 0x5078 ORRS R0,R0,#0x3E00
\ 0000000A 0x.... LDR.N R1,??DataTable3 ;; 0x40048038
\ 0000000C 0x6008 STR R0,[R1, #+0]
28
29 //开启系统时钟
30 core_clk_mhz = pll_init(CORE_CLK_MHZ, REF_CLK);
\ 0000000E 0x2103 MOVS R1,#+3
\ 00000010 0x2002 MOVS R0,#+2
\ 00000012 0x.... 0x.... BL pll_init
\ 00000016 0x.... LDR.N R1,??DataTable3_1
\ 00000018 0x6008 STR R0,[R1, #+0]
31 //通过pll_init函数的返回值来计算内核时钟和外设时钟
32 core_clk_khz = core_clk_mhz * 1000;
\ 0000001A 0x.... LDR.N R0,??DataTable3_1
\ 0000001C 0x6800 LDR R0,[R0, #+0]
\ 0000001E 0xF44F 0x717A MOV R1,#+1000
\ 00000022 0x4348 MULS R0,R1,R0
\ 00000024 0x.... LDR.N R1,??DataTable3_2
\ 00000026 0x6008 STR R0,[R1, #+0]
33 periph_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> 24)+ 1);
\ 00000028 0x.... LDR.N R0,??DataTable3_2
\ 0000002A 0x6800 LDR R0,[R0, #+0]
\ 0000002C 0x.... LDR.N R1,??DataTable3_3 ;; 0x40048044
\ 0000002E 0x6809 LDR R1,[R1, #+0]
\ 00000030 0xF3C1 0x6103 UBFX R1,R1,#+24,#+4
\ 00000034 0x1C49 ADDS R1,R1,#+1
\ 00000036 0xFBB0 0xF0F1 UDIV R0,R0,R1
\ 0000003A 0x.... LDR.N R1,??DataTable3_4
\ 0000003C 0x6008 STR R0,[R1, #+0]
34 //使能跟踪时钟,用于调试
35 trace_clk_init();
\ 0000003E 0x.... 0x.... BL trace_clk_init
36 //FlexBus时钟初始化
37 fb_clk_init();
\ 00000042 0x.... 0x.... BL fb_clk_init
38
39 }
\ 00000046 0xBD01 POP {R0,PC} ;; return
40
41 //-------------------------------------------------------------------------*
42 //函数名: trace_clk_init *
43 //功 能: 跟踪时钟初始化 *
44 //参 数: 无 *
45 //返 回: 无 *
46 //说 明: 用于调试 *
47 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
48 void trace_clk_init(void)
49 {
50 //设置跟踪时钟为内核时钟
51 SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;
\ trace_clk_init:
\ 00000000 0x.... LDR.N R0,??DataTable3_5 ;; 0x40048004
\ 00000002 0x6800 LDR R0,[R0, #+0]
\ 00000004 0xF450 0x5080 ORRS R0,R0,#0x1000
\ 00000008 0x.... LDR.N R1,??DataTable3_5 ;; 0x40048004
\ 0000000A 0x6008 STR R0,[R1, #+0]
52 //在PTA6引脚上使能TRACE_CLKOU功能
53 PORTA_PCR6 = ( PORT_PCR_MUX(0x7));
\ 0000000C 0x.... LDR.N R0,??DataTable3_6 ;; 0x40049018
\ 0000000E 0xF44F 0x61E0 MOV R1,#+1792
\ 00000012 0x6001 STR R1,[R0, #+0]
54 }
\ 00000014 0x4770 BX LR ;; return
55
56 //-------------------------------------------------------------------------*
57 //函数名: fb_clk_init *
58 //功 能: FlexBus时钟初始化 *
59 //参 数: 无 *
60 //返 回: 无 *
61 //说 明: *
62 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
63 void fb_clk_init(void)
64 {
65 //使能FlexBus模块时钟
66 SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
\ fb_clk_init:
\ 00000000 0x.... LDR.N R0,??DataTable3_7 ;; 0x40048040
\ 00000002 0x6800 LDR R0,[R0, #+0]
\ 00000004 0xF050 0x0001 ORRS R0,R0,#0x1
\ 00000008 0x.... LDR.N R1,??DataTable3_7 ;; 0x40048040
\ 0000000A 0x6008 STR R0,[R1, #+0]
67 //在PTA6引脚上使能FB_CLKOUT功能
68 PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
\ 0000000C 0x.... LDR.N R0,??DataTable3_8 ;; 0x4004b00c
\ 0000000E 0xF44F 0x61A0 MOV R1,#+1280
\ 00000012 0x6001 STR R1,[R0, #+0]
69 }
\ 00000014 0x4770 BX LR ;; return
70
71 //-------------------------------------------------------------------------*
72 //函数名: pll_init *
73 //功 能: pll初始化 *
74 //参 数: clk_option:时钟选项 *
75 // crystal_val:时钟值 *
76 //返 回: 时钟频率值 *
77 //说 明: *
78 //-------------------------------------------------------------------------*
\ In section .text, align 2, keep-with-next
79 unsigned char pll_init(unsigned char clk_option, unsigned char crystal_val)
80 {
\ pll_init:
\ 00000000 0xB580 PUSH {R7,LR}
\ 00000002 0x000A MOVS R2,R1
81 unsigned char pll_freq;
82
83 if (clk_option > 3) {return 0;} //如果没有选择可用的选项则返回0
\ 00000004 0xB2C0 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000006 0x2804 CMP R0,#+4
\ 00000008 0xD301 BCC.N ??pll_init_0
\ 0000000A 0x2000 MOVS R0,#+0
\ 0000000C 0xE072 B.N ??pll_init_1
84 if (crystal_val > 15) {return 1;} // 如果如果可用的晶体选项不可用则返回1
\ ??pll_init_0:
\ 0000000E 0xB2D2 UXTB R2,R2 ;; ZeroExt R2,R2,#+24,#+24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -