?? sysinit.lst
字號:
\ 00000010 0x2A10 CMP R2,#+16
\ 00000012 0xD301 BCC.N ??pll_init_2
\ 00000014 0x2001 MOVS R0,#+1
\ 00000016 0xE06D B.N ??pll_init_1
85
86 //這里處在默認的FEI模式
87 //首先移動到FBE模式
88 #if (defined(K60_CLK) || defined(ASB817))
89 MCG_C2 = 0;
\ ??pll_init_2:
\ 00000018 0x.... LDR.N R2,??DataTable3_9 ;; 0x40064001
\ 0000001A 0x2300 MOVS R3,#+0
\ 0000001C 0x7013 STRB R3,[R2, #+0]
90 #else
91 //使能外部晶振
92 MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
93 #endif
94
95 //初始化晶振后釋放鎖定狀態的振蕩器和GPIO
96 SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
\ 0000001E 0x.... LDR.N R2,??DataTable3_10 ;; 0x40048034
\ 00000020 0x6812 LDR R2,[R2, #+0]
\ 00000022 0xF052 0x5280 ORRS R2,R2,#0x10000000
\ 00000026 0x.... LDR.N R3,??DataTable3_10 ;; 0x40048034
\ 00000028 0x601A STR R2,[R3, #+0]
97 LLWU_CS |= LLWU_CS_ACKISO_MASK;
\ 0000002A 0x.... LDR.N R2,??DataTable3_11 ;; 0x4007c008
\ 0000002C 0x7812 LDRB R2,[R2, #+0]
\ 0000002E 0xF052 0x0280 ORRS R2,R2,#0x80
\ 00000032 0x.... LDR.N R3,??DataTable3_11 ;; 0x4007c008
\ 00000034 0x701A STRB R2,[R3, #+0]
98
99 //選擇外部晶振,參考分頻器,清IREFS來啟動外部晶振
100 MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
\ 00000036 0x.... LDR.N R2,??DataTable3_12 ;; 0x40064000
\ 00000038 0x2398 MOVS R3,#+152
\ 0000003A 0x7013 STRB R3,[R2, #+0]
101
102 //等待晶振穩定
103 #if (!defined(K60_CLK) && !defined(ASB817))
104 while (!(MCG_S & MCG_S_OSCINIT_MASK)){};
105 #endif
106
107 //等待參考時鐘狀態位清零
108 while (MCG_S & MCG_S_IREFST_MASK){};
\ ??pll_init_3:
\ 0000003C 0x.... LDR.N R2,??DataTable3_13 ;; 0x40064006
\ 0000003E 0x7812 LDRB R2,[R2, #+0]
\ 00000040 0x06D2 LSLS R2,R2,#+27
\ 00000042 0xD4FB BMI.N ??pll_init_3
109 //等待時鐘狀態位顯示時鐘源來自外部參考時鐘
110 while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){};
\ ??pll_init_4:
\ 00000044 0x.... LDR.N R2,??DataTable3_13 ;; 0x40064006
\ 00000046 0x7812 LDRB R2,[R2, #+0]
\ 00000048 0xF3C2 0x0281 UBFX R2,R2,#+2,#+2
\ 0000004C 0xB2D2 UXTB R2,R2 ;; ZeroExt R2,R2,#+24,#+24
\ 0000004E 0x2A02 CMP R2,#+2
\ 00000050 0xD1F8 BNE.N ??pll_init_4
111
112 //進入FBE模式
113 #if (defined(K60_CLK))
114 MCG_C5 = MCG_C5_PRDIV(0x18);
\ 00000052 0x.... LDR.N R2,??DataTable3_14 ;; 0x40064004
\ 00000054 0x2318 MOVS R3,#+24
\ 00000056 0x7013 STRB R3,[R2, #+0]
115 #else
116
117 //配置PLL分頻器來匹配所用的晶振
118 MCG_C5 = MCG_C5_PRDIV(crystal_val);
119 #endif
120
121 //確保MCG_C6處于復位狀態,禁止LOLIE、PLL、和時鐘控制器,清PLL VCO分頻器
122 MCG_C6 = 0x0;
\ 00000058 0x.... LDR.N R2,??DataTable3_15 ;; 0x40064005
\ 0000005A 0x2300 MOVS R3,#+0
\ 0000005C 0x7013 STRB R3,[R2, #+0]
123 //選擇PLL VCO分頻器,系統時鐘分頻器取決于時鐘選項
124 switch (clk_option) {
\ 0000005E 0xB2C0 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000060 0x2800 CMP R0,#+0
\ 00000062 0xD005 BEQ.N ??pll_init_5
\ 00000064 0x2802 CMP R0,#+2
\ 00000066 0xD019 BEQ.N ??pll_init_6
\ 00000068 0xD30D BCC.N ??pll_init_7
\ 0000006A 0x2803 CMP R0,#+3
\ 0000006C 0xD021 BEQ.N ??pll_init_8
\ 0000006E 0xE02A B.N ??pll_init_9
125 case 0:
126 //設置系統分頻器
127 //MCG=PLL, core = MCG, bus = MCG, FlexBus = MCG, Flash clock= MCG/2
128 set_sys_dividers(0,0,0,1);
\ ??pll_init_5:
\ 00000070 0x2301 MOVS R3,#+1
\ 00000072 0x2200 MOVS R2,#+0
\ 00000074 0x2100 MOVS R1,#+0
\ 00000076 0x2000 MOVS R0,#+0
\ 00000078 0x.... 0x.... BL set_sys_dividers
129 //設置VCO分頻器,使能PLL為50MHz, LOLIE=0, PLLS=1, CME=0, VDIV=1
130 MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(1); //VDIV = 1 (x25)
\ 0000007C 0x.... LDR.N R0,??DataTable3_15 ;; 0x40064005
\ 0000007E 0x2141 MOVS R1,#+65
\ 00000080 0x7001 STRB R1,[R0, #+0]
131 pll_freq = 50;
\ 00000082 0x2132 MOVS R1,#+50
132 break;
\ 00000084 0xE01F B.N ??pll_init_9
133 case 1:
134 //設置系統分頻器
135 //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/2, Flash clock= MCG/4
136 set_sys_dividers(0,1,1,3);
\ ??pll_init_7:
\ 00000086 0x2303 MOVS R3,#+3
\ 00000088 0x2201 MOVS R2,#+1
\ 0000008A 0x2101 MOVS R1,#+1
\ 0000008C 0x2000 MOVS R0,#+0
\ 0000008E 0x.... 0x.... BL set_sys_dividers
137 //設置VCO分頻器,使能PLL為100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
138 MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(26); //VDIV = 26 (x50)
\ 00000092 0x.... LDR.N R0,??DataTable3_15 ;; 0x40064005
\ 00000094 0x215A MOVS R1,#+90
\ 00000096 0x7001 STRB R1,[R0, #+0]
139 pll_freq = 100;
\ 00000098 0x2164 MOVS R1,#+100
140 break;
\ 0000009A 0xE014 B.N ??pll_init_9
141 case 2:
142 //設置系統分頻器
143 //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/2, Flash clock= MCG/4
144 set_sys_dividers(0,1,1,3);
\ ??pll_init_6:
\ 0000009C 0x2303 MOVS R3,#+3
\ 0000009E 0x2201 MOVS R2,#+1
\ 000000A0 0x2101 MOVS R1,#+1
\ 000000A2 0x2000 MOVS R0,#+0
\ 000000A4 0x.... 0x.... BL set_sys_dividers
145 //設置VCO分頻器,使能PLL為96MHz, LOLIE=0, PLLS=1, CME=0, VDIV=24
146 MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(24); //VDIV = 24 (x48)
\ 000000A8 0x.... LDR.N R0,??DataTable3_15 ;; 0x40064005
\ 000000AA 0x2158 MOVS R1,#+88
\ 000000AC 0x7001 STRB R1,[R0, #+0]
147 pll_freq = 96;
\ 000000AE 0x2160 MOVS R1,#+96
148 break;
\ 000000B0 0xE009 B.N ??pll_init_9
149 case 3:
150 //設置系統分頻器
151 //MCG=PLL, core = MCG, bus = MCG, FlexBus = MCG, Flash clock= MCG/2
152 set_sys_dividers(0,0,0,1);
\ ??pll_init_8:
\ 000000B2 0x2301 MOVS R3,#+1
\ 000000B4 0x2200 MOVS R2,#+0
\ 000000B6 0x2100 MOVS R1,#+0
\ 000000B8 0x2000 MOVS R0,#+0
\ 000000BA 0x.... 0x.... BL set_sys_dividers
153 //設置VCO分頻器,使能PLL為48MHz, LOLIE=0, PLLS=1, CME=0, VDIV=0
154 MCG_C6 = MCG_C6_PLLS_MASK; //VDIV = 0 (x24)
\ 000000BE 0x.... LDR.N R0,??DataTable3_15 ;; 0x40064005
\ 000000C0 0x2140 MOVS R1,#+64
\ 000000C2 0x7001 STRB R1,[R0, #+0]
155 pll_freq = 48;
\ 000000C4 0x2130 MOVS R1,#+48
156 break;
157 }
158 while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set
\ ??pll_init_9:
\ 000000C6 0x.... LDR.N R0,??DataTable3_13 ;; 0x40064006
\ 000000C8 0x7800 LDRB R0,[R0, #+0]
\ 000000CA 0x0680 LSLS R0,R0,#+26
\ 000000CC 0xD5FB BPL.N ??pll_init_9
159
160 while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set
\ ??pll_init_10:
\ 000000CE 0x.... LDR.N R0,??DataTable3_13 ;; 0x40064006
\ 000000D0 0x7800 LDRB R0,[R0, #+0]
\ 000000D2 0x0640 LSLS R0,R0,#+25
\ 000000D4 0xD5FB BPL.N ??pll_init_10
161
162 //進入PBE模式
163
164 //通過清零CLKS位來進入PEE模式
165 // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
166 MCG_C1 &= ~MCG_C1_CLKS_MASK;
\ 000000D6 0x.... LDR.N R0,??DataTable3_12 ;; 0x40064000
\ 000000D8 0x7800 LDRB R0,[R0, #+0]
\ 000000DA 0xF010 0x003F ANDS R0,R0,#0x3F
\ 000000DE 0x.... LDR.N R2,??DataTable3_12 ;; 0x40064000
\ 000000E0 0x7010 STRB R0,[R2, #+0]
167
168 //等待時鐘狀態位更新
169 while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
\ ??pll_init_11:
\ 000000E2 0x.... LDR.N R0,??DataTable3_13 ;; 0x40064006
\ 000000E4 0x7800 LDRB R0,[R0, #+0]
\ 000000E6 0xF3C0 0x0081 UBFX R0,R0,#+2,#+2
\ 000000EA 0xB2C0 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 000000EC 0x2803 CMP R0,#+3
\ 000000EE 0xD1F8 BNE.N ??pll_init_11
170
171 //開始進入PEE模式
172
173 return pll_freq;
\ 000000F0 0x0008 MOVS R0,R1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -