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

📄 memsetup.s

📁 ARMboot is a firmware monitor/bootloader for embedded systems based on ARM or StrongARM CPUs
💻 S
📖 第 1 页 / 共 2 页
字号:
        str     r4,  [r1, #MDREFR_OFFSET]        ldr     r4,  [r1, #MDREFR_OFFSET]        @ deassert SLFRSH        @        bic     r4,  r4,  #0x00400000                @ write back mdrefr        @        str     r4,  [r1, #MDREFR_OFFSET]        @ assert E1PIN        @        orr     r4,  r4,  #0x00008000                @ write back mdrefr        @        str     r4,  [r1, #MDREFR_OFFSET]        ldr     r4,  [r1, #MDREFR_OFFSET]        nop        nop@****************************************************************************@  Step 4@        @ fetch platform value of mdcnfg        @        ldr     r2,  =CFG_MDCNFG_VAL                               @ disable all sdram banks        @        bic     r2,  r2,  #(MDCNFG_DE0 | MDCNFG_DE1)        bic     r2,  r2,  #(MDCNFG_DE2 | MDCNFG_DE3)        @ program banks 0/1 for bus width        @        bic   r2,  r2,  #MDCNFG_DWID0      @0=32-bit        @ write initial value of mdcnfg, w/o enabling sdram banks        @        str     r2,  [r1, #MDCNFG_OFFSET]@ ****************************************************************************@  Step 5@                @ pause for 200 uSecs        @    	ldr r3, =OSCR   @reset the OS Timer Count to zero    	mov r2, #0 	    str r2, [r3] 	    ldr r4, =0x300			@really 0x2E1 is about 200usec, so 0x300 should be plenty1:		    ldr r2, [r3] 	    cmp r4, r2	    bgt 1b        @****************************************************************************@  Step 6@	    mov    r0, #0x78				    @turn everything off       mcr    p15, 0, r0, c1, c0, 0		@(caches off, MMU off, etc.)@ ****************************************************************************@  Step 7@        @ Access memory *not yet enabled* for CBR refresh cycles (8)        @ - CBR is generated for all banks        	    ldr     r2, =CFG_DRAM_BASE	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]@ ****************************************************************************@  Step 8: NOP (enable dcache if you wanna... we dont)@@ ****************************************************************************@  Step 9@        @get memory controller base address        @        ldr     r1,  =MEMC_BASE        @fetch current mdcnfg value        @        ldr     r3,  [r1, #MDCNFG_OFFSET]        @enable sdram bank 0 if installed (must do for any populated bank)        @        orr     r3,  r3,  #MDCNFG_DE0        @write back mdcnfg, enabling the sdram bank(s)        @        str     r3,  [r1, #MDCNFG_OFFSET]@****************************************************************************@  Step 10@                @ write mdmrs        @        ldr     r2,  =CFG_MDMRS_VAL        str     r2,  [r1, #MDMRS_OFFSET]                @****************************************************************************@  Step 11: Final Step@@INITINTC                @********************************************************************        @ Disable (mask) all interrupts at the interrupt controller        @        @ clear the interrupt level register (use IRQ, not FIQ)        @        mov     r1, #0        ldr     r2,  =ICLR        str     r1,  [r2]                @ mask all interrupts at the controller        @               ldr     r2,  =ICMR        str     r1,  [r2]@INITCLKS                @ ********************************************************************                @ Disable the peripheral clocks, and set the core clock        @ frequency (hard-coding at 398.12MHz for now).        @		@ Turn Off ALL on-chip peripheral clocks for re-configuration		@ *Note: See label 'ENABLECLKS' for the re-enabling		@        ldr     r1,  =CKEN        mov     r2,  #0        str     r2,  [r1]        @ default value in case no valid rotary switch setting is found        ldr     r2, =(CCCR_L27 | CCCR_M2 | CCCR_N10)        @ DEFAULT: {200/200/100}                   @... and write the core clock config register        @        ldr     r1,  =CCCR        str     r2,  [r1]/*        @ enable the 32Khz oscillator for RTC and PowerManager        @        ldr     r1,  =OSCC        mov     r2,  #OSCC_OON          str     r2,  [r1]	        @ NOTE:  spin here until OSCC.OOK get set,        @        meaning the PLL has settled.        @ 60:                ldr     r2, [r1]        ands    r2, r2, #1        beq     60b*/@OSCC_OON_DONE        #ifdef  A0_COTULLA        @****************************************************************************    @ !!! Take care of A0 Errata Sighting #4 --     @ after a frequency change, the memory controller must be restarted    @        @ get memory controller base address        ldr     r1,  =MEMC_BASE        @ get the current state of MDREFR        @        ldr     r2,  [r1, #MDREFR_OFFSET]        @ clear E0PIN, E1PIN        @        bic     r3,  r2,  #(MDREFR_E0PIN | MDREFR_E1PIN)        @ write MDREFR with E0PIN, E1PIN cleared (disable sdclk[0,1])        @        str     r3,  [r1, #MDREFR_OFFSET]        @ then write MDREFR with E0PIN, E1PIN set (enable sdclk[0,1])        @        str     r2,  [r1, #MDREFR_OFFSET]        @ get the current state of MDCNFG        @        ldr     r3,  [r1, #MDCNFG_OFFSET]        @ disable all SDRAM banks        @        bic     r3,  r3,  #(MDCNFG_DE0 | MDCNFG_DE1)        bic     r3,  r3,  #(MDCNFG_DE2 |  MDCNFG_DE3)             @ write back MDCNFG           @        ldr     r3,  [r1, #MDCNFG_OFFSET]	    @ Access memory not yet enabled for CBR refresh cycles (8)        @ - CBR is generated for *all* banks	    ldr     r2, =CFG_DRAM_BASE	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]	    str     r2, [r2]        @ fetch current mdcnfg value        @        ldr     r3,  [r1, #MDCNFG_OFFSET]        @ enable sdram bank 0 if installed        @        orr     r3,  r3,  #MDCNFG_DE0        @ write back mdcnfg, enabling the sdram bank(s)        @        str     r3,  [r1, #MDCNFG_OFFSET]        @ write mdmrs        @        ldr     r2,  =CFG_MDMRS_VAL        str     r2,  [r1, #MDMRS_OFFSET]                    //    @ errata: don't enable auto power-down        @ get current value of mdrefr        @ldr     r3,  [r1, #MDREFR_OFFSET]        @ enable auto-power down         @orr     r3,  r3,  #MDREFR_APD        @write back mdrefr        @str     r3,  [r1, #MDREFR_OFFSET]    #endif A0_Cotulla  ldr     r0, =0x000C0dE3  ldr    	r1, =_LED  str    	r0, [r1]    		// hex display@ ^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%@ ^%^%^%^%^%^%^%^%^%   above could be replaced by prememLLI ^%^%^%^%^%^%^%^%^%@ ^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%^%	// Save SDRAM size    ldr     r1, =DRAM_SIZE  	 str	   r8, [r1]       ldr     r0, =0xC0DE0006    ldr    	r1, =_LED    str    	r0, [r1]    		// hex display  	// Interrupt init	// Mask all interrupts    ldr	r0, =ICMR // enable no sources	mov r1, #0    str r1, [r0]#define NODEBUG#ifdef NODEBUG	//Disable software and data breakpoints	mov	r0,#0	mcr	p15,0,r0,c14,c8,0  // ibcr0	mcr	p15,0,r0,c14,c9,0  // ibcr1	mcr	p15,0,r0,c14,c4,0  // dbcon	//Enable all debug functionality	mov	r0,#0x80000000	mcr	p14,0,r0,c10,c0,0  // dcsr#endif	ldr     r0, =0xBEEF001D    ldr    	r1, =_LED    str    	r0, [r1]    		// hex display  	mov	pc, r10@ End memsetup  @ %%%%%%%%%%%   Useful subroutinesGET_S23:    @ This macro will read S23 and return its value in r3    @ r2 contains the base address of the Lubbock user registers    ldr r2, =FPGA_REGS_BASE_PHYSICAL    //@ read S23's value            ldr     r3, [r2, #USER_SWITCHES_OFFSET]        @ mask out irrelevant bits    and     r3, r3, #0x200        @ get bit into position 0    mov     r3, r3, LSR #9    mov     pc, lr@ End GET_S23GET_S24:    @ This macro will read S24 and return its value in r0    @ r2 contains the base address of the Lubbock user registers    ldr r2, =FPGA_REGS_BASE_PHYSICAL    //@ read S24's value            ldr     r0, [r2, #USER_SWITCHES_OFFSET]        @ mask out irrelevant bits    and     r0, r0, #0x100        @ get bit into position 0    mov     r0, r0, LSR #8    mov     pc, lr@ End GET_S23GET_S25:    @ This macro will read rotary S25 and return its value in r0    @ r2 contains the base address of the Lubbock user registers    @ read the user switches register          ldr     r0, [r2, #USER_SWITCHES_OFFSET]        @ mask out irrelevant bits    and     r0, r0, #0xF0    mov     pc, lr@ End subroutineGET_S26:    @ This macro will read rotary S26 and return its value in r3    @ r2 contains the base address of the Lubbock user registers    @ read the user switches register           ldr     r3, [r2, #USER_SWITCHES_OFFSET]            @ mask out irrelevant bits    and     r3, r3, #0x0F    mov     pc, lr@ End subroutine GET_S26

⌨️ 快捷键说明

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