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

📄 init.s

📁 嵌入式linux的bsp
💻 S
📖 第 1 页 / 共 2 页
字号:
                                          // via STRAP reg to calc PLB speed.                                          // SDRAM speed is the same as the PLB				          // speed.        rlwinm  r4,r5,4,0x3             // get FBK divide bits..chk_66:        cmpi    %cr0,0,r4,0x1        bne     ..chk_100	addis	r6,0,0x0085		// SDTR1 value for 66Mhz	ori     r6,r6,0x4005	addis	r7,0,0x03F8		// RTR value for 66Mhz        b	..sdram_ok..chk_100:        cmpi    %cr0,0,r4,0x2        bne     ..chk_133        addis   r6,0,0x0086            // SDTR1 value for 100Mhz        ori     r6,r6,0x400D        addis   r7,0,0x05F0            // RTR value for 100Mhz        b       ..sdram_ok..chk_133:        addis   r6,0,0x0107            // SDTR1 value for 133Mhz        ori     r6,r6,0x4015        addis   r7,0,0x07F0            // RTR value for 133Mhz..sdram_ok:        //-------------------------------------------------------------------        // Set SDTR1        //-------------------------------------------------------------------        addi    r4,0,mem_sdtr1        mtdcr   memcfga,r4        mtdcr   memcfgd,r6        //-------------------------------------------------------------------        // Set RTR        //-------------------------------------------------------------------        addi    r4,0,mem_rtr        mtdcr   memcfga,r4        mtdcr   memcfgd,r7        //-------------------------------------------------------------------        // Delay to ensure 200usec have elapsed since reset. Assume worst        // case that the core is running 200Mhz:        //   200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles        //-------------------------------------------------------------------        addis   r3,0,0x0000        ori     r3,r3,0xA000          // ensure 200usec have passed since reset        mtctr   r3..spinlp2:        bdnz    ..spinlp2               // spin loop        //-------------------------------------------------------------------        // Set memory controller options reg, MCOPT1.	// Set DC_EN to '1' and BRD_PRF to '01' for 16 byte PLB Burst	// read/prefetch.        //-------------------------------------------------------------------        addi    r4,0,mem_mcopt1        mtdcr   memcfga,r4        addis   r4,0,0x8080             // set DC_EN=1        ori     r4,r4,0x0000        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Delay to ensure 10msec have elapsed since reset. This is        // required for the MPC952 to stabalize. Assume worst        // case that the core is running 200Mhz:        //   200,000,000 (cycles/sec) X .010 (sec) = 0x1E8480 cycles        // This delay should occur before accessing SDRAM.        //-------------------------------------------------------------------        addis   r3,0,0x001E        ori     r3,r3,0x8480          // ensure 10msec have passed since reset        mtctr   r3..spinlp3:        bdnz    ..spinlp3                // spin loop        //-------------------------------------------------------------------        // Test if 64MByte is ok.        //-------------------------------------------------------------------        addis   r3,0,MAGIC0@h       	ori	r3,r3,MAGIC0@l        addis   r4,0,ADDR_ZERO@h        ori     r4,r4,ADDR_ZERO@l        stw     r3,0x00(r4)            // store magic at 0        addis   r3,0,MAGIC1@h       	ori	r3,r3,MAGIC1@l        addis   r4,0,ADDR_08MB@h        ori     r4,r4,ADDR_08MB@l        stw     r3,0x00(r4)            // store magic at 8MB        addis   r3,0,MAGIC2@h       	ori	r3,r3,MAGIC2@l        addis   r4,0,ADDR_16MB@h        ori     r4,r4,ADDR_16MB@l        stw     r3,0x00(r4)            // store magic at 16MB        addis   r3,0,MAGIC3@h       	ori	r3,r3,MAGIC3@l        addis   r4,0,ADDR_32MB@h        ori     r4,r4,ADDR_32MB@l        stw     r3,0x00(r4)            // store magic at 32MB        addis   r3,0,MAGIC0@h       	ori	r3,r3,MAGIC0@l        addis   r4,0,ADDR_ZERO@h        ori     r4,r4,ADDR_ZERO@l        lwz     r5,0x00(r4)            // load from 0        cmplw   0,r3,r5        bne     ..chk_32mb        addis   r3,0,MAGIC1@h       	ori	r3,r3,MAGIC1@l        addis   r4,0,ADDR_08MB@h        ori     r4,r4,ADDR_08MB@l        lwz     r5,0x00(r4)            // load from 8mb        cmplw   0,r3,r5        bne     ..chk_32mb        addis   r3,0,MAGIC2@h       	ori	r3,r3,MAGIC2@l        addis   r4,0,ADDR_16MB@h        ori     r4,r4,ADDR_16MB@l        lwz     r5,0x00(r4)            // load from 8mb        beq     ..sdram_done..chk_32mb:        //-------------------------------------------------------------------        // Disable memory controller.        //-------------------------------------------------------------------        addi    r4,0,mem_mcopt1        mtdcr   memcfga,r4        addis   r4,0,0x0000             // set DC_EN=0        ori     r4,r4,0x0000        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Set MB0CF for bank 0. (0-32MB) Address Mode 2 since 12x9(4)        //-------------------------------------------------------------------        addi    r4,0,mem_mb0cf        mtdcr   memcfga,r4        addis   r4,0,0x0006        ori     r4,r4,0x2001        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Set memory controller options reg, MCOPT1.	// Set DC_EN to '1' and BRD_PRF to '01' for 16 byte PLB Burst	// read/prefetch.        //-------------------------------------------------------------------        addi    r4,0,mem_mcopt1        mtdcr   memcfga,r4        addis   r4,0,0x8080             // set DC_EN=1        ori     r4,r4,0x0000        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Wait some time        //-------------------------------------------------------------------        addis   r3,0,0x001E        ori     r3,r3,0x8480          // ensure 10msec have passed since reset        mtctr   r3..spinlp4:        bdnz    ..spinlp4                // spin loop                //-------------------------------------------------------------------        // Test if 32MByte is ok.        //-------------------------------------------------------------------        addis   r3,0,MAGIC0@h       	ori	r3,r3,MAGIC0@l        addis   r4,0,ADDR_ZERO@h        ori     r4,r4,ADDR_ZERO@l        stw     r3,0x00(r4)            // store magic at 0        addis   r3,0,MAGIC1@h       	ori	r3,r3,MAGIC1@l        addis   r4,0,ADDR_400@h        ori     r4,r4,ADDR_400@l        stw     r3,0x00(r4)            // store magic at 0x400        addis   r3,0,MAGIC2@h       	ori	r3,r3,MAGIC2@l        addis   r4,0,ADDR_08MB@h        ori     r4,r4,ADDR_08MB@l        stw     r3,0x00(r4)            // store magic at 8MB        addis   r3,0,MAGIC3@h       	ori	r3,r3,MAGIC3@l        addis   r4,0,ADDR_16MB@h        ori     r4,r4,ADDR_16MB@l        stw     r3,0x00(r4)            // store magic at 16MB        addis   r3,0,MAGIC0@h       	ori	r3,r3,MAGIC0@l        addis   r4,0,ADDR_ZERO@h        ori     r4,r4,ADDR_ZERO@l        lwz     r5,0x00(r4)            // load from 0        cmplw   0,r3,r5        bne     ..chk_16mb        addis   r3,0,MAGIC1@h       	ori	r3,r3,MAGIC1@l        addis   r4,0,ADDR_400@h        ori     r4,r4,ADDR_400@l        lwz     r5,0x00(r4)            // load from 0x400        cmplw   0,r3,r5        bne     ..chk_16mb        addis   r3,0,MAGIC2@h       	ori	r3,r3,MAGIC2@l        addis   r4,0,ADDR_08MB@h        ori     r4,r4,ADDR_08MB@l        lwz     r5,0x00(r4)            // load from 8mb        cmplw   0,r3,r5        beq     ..sdram_done        ..chk_16mb:        //-------------------------------------------------------------------        // Disable memory controller.        //-------------------------------------------------------------------        addi    r4,0,mem_mcopt1        mtdcr   memcfga,r4        addis   r4,0,0x0000             // set DC_EN=0        ori     r4,r4,0x0000        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // 16 MB is left.        // Set MB0CF for bank 0. (0-16MB) Address Mode 4 since 12x8(4)        //-------------------------------------------------------------------        addi    r4,0,mem_mb0cf        mtdcr   memcfga,r4        addis   r4,0,0x0004        ori     r4,r4,0x6001        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Set memory controller options reg, MCOPT1.	// Set DC_EN to '1' and BRD_PRF to '01' for 16 byte PLB Burst	// read/prefetch.        //-------------------------------------------------------------------        addi    r4,0,mem_mcopt1        mtdcr   memcfga,r4        addis   r4,0,0x8080             // set DC_EN=1        ori     r4,r4,0x0000        mtdcr   memcfgd,r4        //-------------------------------------------------------------------        // Wait some time        //-------------------------------------------------------------------        addis   r3,0,0x001E        ori     r3,r3,0x8480          // ensure 10msec have passed since reset        mtctr   r3..spinlp5:        bdnz    ..spinlp5                // spin loop        ..sdram_done:        mtlr    r31                     // restore lr        blr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -