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

📄 xlli_lowlev_init.s

📁 pxa270的bootloader,linux下的,好不容易搞到的
💻 S
📖 第 1 页 / 共 5 页
字号:
        ldreq   r3,  =xlli_MSC0_26   @ Yes - load values        ldreq   r5,  =xlli_DTC_26        ldreq   r7,  =xlli_DRI_26        cmp     r2,  #3              @ Is L=3?        ldreq   r3,  =xlli_MSC0_39   @ Yes - load values        ldreq   r5,  =xlli_DTC_39        ldreq   r7,  =xlli_DRI_39        cmp     r2,  #4              @ Is L=4?        ldreq   r3,  =xlli_MSC0_52   @ Yes - load values        ldreq   r5,  =xlli_DTC_52        ldreq   r7,  =xlli_DRI_52        cmp     r2,  #5              @ Is L=5?        ldreq   r3,  =xlli_MSC0_65   @ Yes - load values        ldreq   r5,  =xlli_DTC_65        ldreq   r7,  =xlli_DRI_65        cmp     r2,  #6              @ Is L=6?        ldreq   r3,  =xlli_MSC0_78   @ Yes - load values        ldreq   r5,  =xlli_DTC_78        ldreq   r7,  =xlli_DRI_78        cmp     r2,  #7              @ Is L=7?        ldreq   r3,  =xlli_MSC0_91   @ Yes - load values        ldreq   r5,  =xlli_DTC_91        ldreq   r7,  =xlli_DRI_91        cmp     r2,  #8              @ Is L=8?        ldreq   r3,  =xlli_MSC0_104  @ Yes - load values        ldreq   r5,  =xlli_DTC_104        ldreq   r7,  =xlli_DRI_104        cmp     r2,  #9              @ Is L=9?        ldreq   r3,  =xlli_MSC0_117  @ Yes - load values        ldreq   r5,  =xlli_DTC_117        ldreq   r7,  =xlli_DRI_117        cmp     r2,  #10             @ Is L=10?        ldreq   r3,  =xlli_MSC0_130  @ Yes - load values        ldreq   r5,  =xlli_DTC_130        ldreq   r7,  =xlli_DRI_130        cmp     r2,  #11             @ Is L=11?        ldreq   r3,  =xlli_MSC0_143   @ Yes - load values        ldreq   r5,  =xlli_DTC_143        ldreq   r7,  =xlli_DRI_143        cmp     r2,  #12             @ Is L=12?        ldreq   r3,  =xlli_MSC0_156   @ Yes - load values        ldreq   r5,  =xlli_DTC_156        ldreq   r7,  =xlli_DRI_156        cmp     r2,  #13             @ Is L=13?        ldreq   r3,  =xlli_MSC0_169   @ Yes - load values        ldreq   r5,  =xlli_DTC_169        ldreq   r7,  =xlli_DRI_169        cmp     r2,  #14             @ Is L=14?        ldreq   r3,  =xlli_MSC0_182   @ Yes - load values        ldreq   r5,  =xlli_DTC_182        ldreq   r7,  =xlli_DRI_182        cmp     r2,  #15             @ Is L=15?        ldreq   r3,  =xlli_MSC0_195   @ Yes - load values        ldreq   r5,  =xlli_DTC_195        ldreq   r7,  =xlli_DRI_195        cmp     r2,  #16             @ Is L=16?        ldreq   r3,  =xlli_MSC0_208  @ Yes - load values        ldreq   r5,  =xlli_DTC_208        ldreq   r7,  =xlli_DRI_208XLLI_Done_MSC0_Opt_Update:@@       Update MSC0@        orr     r4,  r4,  r3                    @ Update the RDF, RDN and RRR bits        str     r4,  [r1, #xlli_MSC0_offset]    @ Set the new MSC0 value        ldr     r4,  [r1, #xlli_MSC0_offset]    @ Read MSC0 value back to lock the values@@       Update DRI bits@        orr     r8,  r8,  r7                    @ Update the DRI bits        str     r8,  [r1, #xlli_MDREFR_offset]  @ Set the new MDREFR value@@       Update DTC bits@        orr     r6,  r6,  r5                    @ Update DTC0 and DTC2 bits        str     r6,  [r1, #xlli_MDCNFG_offset]  @ Write back the MDCNFG value        mov     pc,  lr                         @ return to calling routine        .endfunc        .ltorg@**************************************************************************************************@@ ******************************************************@ **********                                  **********@ ********** INITIALIZE (MASK) ALL INTERRUPTS **********@ **********                                  **********@ ******************************************************@@ NOTE: On system reset, all interrupts should be cleared by hardware.@       This enforces disabling of all interrupts to HW boot default conditions.@.func xlli_intr_initxlli_intr_init:        ldr     r4,  =xlli_INTERREGS_PHYSICAL_BASE  @ Load controller physical base address        ldr     r2,  =0x0                           @ zero out a work register        str     r2,  [r4, #xlli_ICMR_offset]        @ Mask all interrupts (clear mask register)        str     r2,  [r4, #xlli_ICMR2_offset]       @ Mask all interrupts (clear mask register) 2        str     r2,  [r4, #xlli_ICLR_offset]        @ Clear the interrupt level register        str     r2,  [r4, #xlli_ICLR2_offset]       @ Clear the interrupt level register 2        str     r2,  [r4, #xlli_ICCR_offset]        @ Clear Interrupt Control Register        str     r2,  [r4, #xlli_ICCR2_offset]       @ Clear Interrupt Control Register 2        mov     pc,  lr                             @ return to calling routine        .endfunc@**************************************************************************************************@@ **********************************************@ **********                          **********@ ********** INITIALIZE CLOCK MANAGER **********@ **********                          **********@ **********************************************@@ Disable the peripheral clocks, and set the core clock frequency@@ NOTE: The Change Frequency Sequence should be called after this function in order@       for the clock frequencies set in the CCCR register to take effect.@@       The code then spins on the oscillator OK bit until the oscilator is stable@       which can take as long as two seconds.@.func xlli_clks_initxlli_clks_init:@ Turn Off ALL on-chip peripheral clocks for re-configuration@        ldr     r4,  =xlli_CLKREGS_PHYSICAL_BASE@ Load clock registers base address        ldr     r1,  =0x400000                  @ Forces memory clock to stay ON!!        ldr     r2,  =xlli_CKEN_value           @ Get any other bits required from the include file        orr     r1,  r1,  r2                    @ OR everything together        str     r1,  [r4, #xlli_CKEN_offset]    @ ... and write out to the clock enable register@@ Set Crystal: Memory Freq, Memory:RunMode Freq, RunMode, TurboMode Freq Multipliers,@ set RunMode & TurboMode to default frequency.@        ldr     r2,  =xlli_CCCR_value           @ Get CORE_CLK_DEFAULT value        str     r2,  [r4, #xlli_CCCR_offset]    @ Write to the clock config register@@ Enable the 32 KHz oscillator and set the 32KHz output enable bits@        mov     r1,  #(xlli_OSCC_OON | xlli_OSCC_TOUT_EN)        str     r1,  [r4, #xlli_OSCC_offset]    @ for RTC and Power Manager@@ Init Real Time Clock (RTC) registers@        ldr     r4,  =xlli_RTCREGS_PHYSICAL_BASE @ Load RTC registers base address        mov     r2,  #0                          @ Clear a work register        str     r2,  [r4, #xlli_RTSR_offset]     @ Clear RTC Status register        str     r2,  [r4, #xlli_RCNR_offset]     @ Clear RTC Counter Register        str     r2,  [r4, #xlli_RTAR_offset]     @ Clear RTC Alarm Register        str     r2,  [r4, #xlli_SWCR_offset]     @ Clear Stopwatch Counter Register        str     r2,  [r4, #xlli_SWAR1_offset]    @ Clear Stopwatch Alarm Register 1        str     r2,  [r4, #xlli_SWAR2_offset]    @ Clear Stopwatch Alarm Register 2        str     r2,  [r4, #xlli_PICR_offset]     @ Clear Periodic Counter Register        str     r2,  [r4, #xlli_PIAR_offset]     @ Clear Interrupt Alarm Register@       mov     pc,  lr                          ; DISABLED - Return here if A0 silicon@@ Check the Oscillator OK (OOK) bit in clock register OSCC to insure the timekeeping oscillator@ is enabled and stable before returning to the calling program.@        ldr     r4,  =xlli_CLKREGS_PHYSICAL_BASE@ Reload clock registers base addressxlli_6:        ldr     r1,  [r4, #xlli_OSCC_offset]    @ Get the status of the OSCC register        ands    r1,  r1,  #xlli_OSCC_OOK        @ is the oscillator OK bit set?        beq     xlli_6                          @ Spin in this loop until the bit is set        mov     pc,  lr                                 @ return to calling routine        .endfunc@**************************************************************************************************@@ ****************************************************************@ **********                                            **********@ ********** INITIALIZE CLOCK MANAGER (FROM SLEEP MODE) **********@ **********                                            **********@ ****************************************************************@@ Disable the peripheral clocks, and set the core clock frequency@@       The code then spins on the oscillator OK bit until the oscilator is stable@       which can take as long as two seconds.@.func xlli_clks_init_sleepResetxlli_clks_init_sleepReset:@ Turn Off ALL on-chip peripheral clocks for re-configuration@        ldr     r4,  =xlli_CLKREGS_PHYSICAL_BASE@ Load clock registers base address        ldr     r1,  =0x400000                  @ Forces memory clock to stay ON!!        ldr     r2,  =xlli_CKEN_value           @ Get any other bits required from the include file        orr     r1,  r1,  r2                    @ OR everything together        str     r1,  [r4, #xlli_CKEN_offset]    @ ... and write out to the clock enable register@@ Set Crystal: Memory Freq, Memory:RunMode Freq, RunMode, TurboMode Freq Multipliers,@ set RunMode & TurboMode to default frequency.@        ldr     r2,  =xlli_CCCR_value           @ Get CORE_CLK_DEFAULT value        str     r2,  [r4, #xlli_CCCR_offset]    @ Write to the clock config register        mov     pc,  lr                                 @ return to calling routine        .endfunc@**************************************************************************************************@@ ***********************************************@ **********                           **********@ ********** FREQUENCY CHANGE SEQUENCE **********@ **********                           **********@ ***********************************************@@ This subroutine initiates the frequency change sequence and restarts the memory controller@.func xlli_freq_changexlli_freq_change:        mrc     p14, 0, r2, c6, c0, 0       @ Get present status (preserve Turbo and Fast Bus bits)        orr     r2,  r2,  #2                @ Set the F bit        mcr     p14, 0, r2, c6, c0, 0       @ initiate the frequency change sequence - Wheeeeeeeee!@@       If the clock frequency is chaged, the MDREFR Register must be  rewritten, even@       if it's the same value. This will result in a refresh being performed and the@       refresh counter being reset to the reset interval. (Section 13.10.3, pg 13-17 of EAS)@        ldr     r4,  =xlli_MEMORY_CONFIG_BASE       @ Get memory controller base address        ldr     r1,  [r4, #xlli_MDREFR_offset]      @ Get the current state of MDREFR        str     r1,  [r4, #xlli_MDREFR_offset]      @ Re-write this value        mov     pc,  lr @ return to calling routine        .endfunc@**************************************************************************************************@@ ********************************************************@ **********                                    **********@ ********** INITIALIZE OPERATING SYSTEM TIMERS **********@ **********                                    **********@ ********************************************************@@ This code segment initializes the OST count registers to zero, clears the@ status bits in OSSR, and zeroes out the match registers.@@ After this function is called, the OS timers should be initalized to the@ same state as on HW reset.@@ The interrupt bit for match register 1 is set for use by timing macros.@.func xlli_ost_initxlli_ost_init:        ldr    r2,  =xlli_OSTREGS_PHYSICAL_BASE @ get base address for os timer registers        mov    r3,  #0                          @ clear work register        str    r3,  [r2, #xlli_OSCR0_offset]    @ zero out OS Timer Count register        str    r3,  [r2, #xlli_OWER_offset]     @ zero out OS Timer Watchdog Match Enable Register        str    r3,  [r2, #xlli_OIER_offset]     @ zero out OS Timer Interrupt Enable register        str    r3,  [r2, #xlli_OSSR_offset]     @ zero out OS Timer Status register        str    r3,  [r2, #xlli_OMCR4_offset]    @ Zero out Match Control Registers        str    r3,  [r2, #xlli_OMCR5_offset]        str    r3,  [r2, #xlli_OMCR6_offset] 

⌨️ 快捷键说明

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