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

📄 main.s

📁 pxa27x下rtc程序
💻 S
📖 第 1 页 / 共 3 页
字号:

;------------------------------------------------------------------------------
;
; FUNCTION:
;    IsICacheEnabled()
;
; DESCRIPTION:
;    This routine is called by "C" to determine if the ICache is enabled.
;
; INPUT PARAMETERS:
;    None.
;
; RETURNS:
;    R0 - zero if ICache not enabled, non-zero of ICache enabled.
;
; GLOBAL EFFECTS:
;    None.
;
; ASSUMPTIONS:
;    None.
;
; CALLS:
;    None.
;
; CALLED BY:
;    "C" code.
;
; PROTOTYPE:
;    UINT IsICacheEnabled(VOID);
;
;------------------------------------------------------------------------------
IsICacheEnabled
    stmfd   sp!, {r1, lr}               ; Save registers

    getARMControl  r0                   ; Get co-processor 15 register 1
    tst    r0, #CONTROL_ICACHE          ; Check ICache enable bit
    bne    %F600                        ; If set, return ICache enabled

    mov    r0, #0                       ; ICache not enabled
    b      %F610                        ; Exit

600 mov    r0, #1                       ; ICache enabled

610
    ldmfd   sp!, {r1, pc}               ; Restore registers and return

;------------------------------------------------------------------------------
;
; FUNCTION:
;    IsDCacheEnabled()
;
; DESCRIPTION:
;    This routine is called by "C" to determine if the DCache is enabled.
;
; INPUT PARAMETERS:
;    None.
;
; RETURNS:
;    R0 - zero if DCache not enabled, non-zero of DCache enabled.
;
; GLOBAL EFFECTS:
;    None.
;
; ASSUMPTIONS:
;    None.
;
; CALLS:
;    None.
;
; CALLED BY:
;    "C" code.
;
; PROTOTYPE:
;    UINT IsDCacheEnabled(VOID);
;
;------------------------------------------------------------------------------
IsDCacheEnabled
    stmfd   sp!, {r1, lr}               ; Save registers

    getARMControl  r0                   ; Get co-processor 15 register 1
    tst    r0, #CONTROL_DCACHE          ; Check DCache enable bit
    bne    %F700                        ; If set, return DCache enabled

    mov    r0, #0                       ; DCache not enabled
    b      %F710                        ; Exit

700 mov    r0, #1                       ; DCache enabled

710
    ldmfd   sp!, {r1, pc}               ; Restore registers and return

;------------------------------------------------------------------------------
;
; FUNCTION:
;    InitiateFCS
;
; DESCRIPTION:
;    This subroutine checks r0 and r1 to see if	turbo and/or fast bus mode, then 
;		initiates the frequency change sequence and restarts the memory controller
;
; INPUT PARAMETERS:
;    int turbo:  1 - turbo mode;  0 - run mode.
;	 int fastBus: 1 - start fast bus mode; 0 - normal bus mode
;
; RETURNS:
;    None.
;
; GLOBAL EFFECTS:
;    Completes the process of changes the core frequency.
;
; ASSUMPTIONS:
;    None.
;
; CALLS:
;    None.
;
; CALLED BY:
;    DVM device driver.
;
; PROTOTYPE:
;    VOID InitiateFcs(int, int);
;
;------------------------------------------------------------------------------
;
InitiateFcs
;        stmfd   sp!, {r1, r2, lr}           ; Save r1, r2 and link register on the stack
        stmfd   sp!, {r0, r1, r2, lr}           ; Save r0, r1, r2 and link register on the stack
	    and     r0,  r0,  #1             	; Isolate LSB for turbo mode
	    and     r1,  r1,  #1             	; Isolate LSB for fast bus mode
        mov     r1,  r1,  LSL #3		    ; Move to bit position #3
        mrc     p14, 0, r2, c6, c0, 0       ; get present status of CP14 
	    orr     r2,  r2,  r0                ; Update with value from user for turbo
	    orr     r2,  r2,  r1                ; Update with value from user for fast bus
        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     r2,  =xlli_MEMORY_CONFIG_BASE       ; Get memory controller base address
        ldr     r1,  [r2, #xlli_MDREFR_offset]      ; Get the current state of MDREFR
        str     r1,  [r2, #xlli_MDREFR_offset]      ; Re-write this value

        ldmfd   sp!, {r0, r1, r2, pc}                   ; Restore r0, r1, r2 and return to caller                   

;

Undefined_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF0005         ; Display pattern: 0xFFFF0005
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1000
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b      %B1000

SWI_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF0006         ; Display pattern: 0xFFFF0006
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1100
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b      %B1100

Prefetch_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF0007         ; Display pattern: 0xFFFF0007
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1200
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b      %B1200

Abort_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF0008         ; Display pattern: 0xFFFF0008
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1300
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b     %B1300

IRQ_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF0009         ; Display pattern: 0xFFFF0009
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1400
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b      %B1400

FIQ_Handler
    ;
    ; Capture the register set
    ;
    stmfd  sp!, {r0}               ; Save registers
    ldr    r0, =regset
    str    r1,  [r0, #4]
    str    r2,  [r0, #8]
    str    r3,  [r0, #12]
    str    r4,  [r0, #16]
    str    r5,  [r0, #20]
    str    r6,  [r0, #24]
    str    r7,  [r0, #28]
    str    r8,  [r0, #32]
    str    r9,  [r0, #36]
    str    r10, [r0, #40]
    str    r11, [r0, #44]
    str    r12, [r0, #48]
    str    r14, [r0, #56]
    str    r15, [r0, #60]
    ldmfd  sp!, {r0}               ; Restore registers and return
    ;
    ; Store the remaining registers
    ;
    ldr    r1, =regset
    str    r0,  [r1, #0]
    str    r13, [r1, #52]
    mrs    r2, CPSR                ; get the processor status
    str    r2, [r1, #64]
    ;
    ; Display the LED error codes here
    ;
    ldr    r0, =0xFFFF000A         ; Display pattern: 0xFFFF000A
    setHexLED r0, r2
    ;
    ; Dump the registers
    ;
    bl    DumpProcessorRegisters
    ;
    ; Flash the LEDs if returned
    ;
1500
    ldr    r1, =0xFFFF
    maskHexLED r1, r2, r3
    pauseMilliSecs #250, r1, r2, r3
    ldr    r1, =0
    maskHexLED r1, r2, r3
    pauseMilliSecs #500, r1, r2, r3
    b      %B1500


    END

⌨️ 快捷键说明

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