⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysinit.lst

📁 Cortex-M4+example
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   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 + -