📄 intvecs.asm
字号:
;******************************************************************************
; TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
;
; Property of Texas Instruments
; For Unrestricted Internal Use Only
; Unauthorized reproduction and/or distribution is strictly prohibited.
; This product is protected under copyright law and trade secret law
; as an unpublished work.
;
; Created 1999, (C) Copyright 1999 Texas Instruments. All rights reserved.
;
;
;*******************************************************************************
.state32
.global _reset
.global _c_int00
.global _EX_AbortD
.global _EX_Irq
.global _EX_Fiq
.global INT_Swi
.global $INT_SetSupervisor
.global $INT_SetUser
.global $INT_EnableIRQ
.global $INT_EnableFIQ
.global $INT_SetIRQBit
.global $INT_ClearIRQBit
.global $INT_SetFIQBit
.global $INT_ClearFIQBit
.global $INT_Set_SVC_Stack
.global $INT_Set_AbortD_Stack
.sect ".intvecs"
_reset LDR pc, initBasicCall ; RESET INTERRUPT
undef: B undef ; UNDEFINED INSTRUCTION INTERRUPT
LDR pc, INT_SwiCall ; SOFTWARE INTERRUPT
abort1: B abort1 ; ABORT (PREFETCH) INTERRUPT
LDR pc, _EX_AbortDCall ; ABORT (DATA) INTERRUPT
reserv: B reserv ; RESERVED
LDR pc, _EX_IrqCall ; IRQ INTERRUPT
LDR pc, _EX_FiqCall ; FIQ INTERRUPT
IRQ_MASK .equ 0x80 ; IRQ mask value
FIQ_MASK .equ 0x40 ; FIQ mask value
MODE_MASK .equ 0x1F ; Processor Mode Mask
FIQ_MODE .equ 0x11 ; Fast Interrupt Mode (FIQ)
IRQ_MODE .equ 0x12 ; Interrupt Mode (IRQ)
SUP_MODE .equ 0x13 ; Supervisor Mode
USR_MODE .equ 0x10 ; User Mode
ABORT_MODE .equ 0x17 ; Abort Mode
SYS_MODE .equ 0x1F ; System mode
CLEAR_BIT .equ 0x00 ; Clear Bit
SET_BIT .equ 0x01 ; Set Bit
initBasicCall .word initBasic
INT_SwiCall .word INT_Swi
_EX_AbortDCall .word _EX_AbortD
_EX_IrqCall .word _EX_Irq
_EX_FiqCall .word _EX_Fiq
.sect ".boot"
; Basic Initializations
initBasic:
;; -------Flush Instruction cache-------
;; --------------------------------------
;MOV r1,#0
;MCR p15, #0, r1, c7, c5 ; Flush Instruction Cache
;; -------Enable Instruction cache-------
;; --------------------------------------
;MRC p15, #0, R1, C1, C0
;ORR R1, R1, #0x1000
;MCR P15, #0, R1, C1, C0
;; --------------------------------------
;
; Enables ARMPERCK and ARMXORCK
;
LDR r0, ARM_IDLECT2_ADDR
LDR r1, ARM_IDLECT2_VAL
LDRH r2, [r0]
ORR r2, r2, r1
STRH r2, [r0]
;
; Releases ARMPERRST
;
LDR r0, ARM_RSTCT2_ADDR
LDR r1, ARM_RSTCT2_VAL
LDRH r2, [r0]
ORR r2, r2, r1
STRH r2, [r0]
;Select emifs_nfcs_1 instead og gpio19 to access SPY
;CONFIG_SetModePin(IO_CONFIGURATION_BASE_ADDR_ARM+IO_CONFIGURATION_CONF_GPIO_19_OFFSET,MODE1); // emifs_nfcs_1
LDR r0,IO_CONFIG_GPIO_19_reg
LDR r2,IO_CONFIG_GPIO_19_val
STR r2,[r0]
LDR r0,CONF_COMP_MODE_reg
LDR r2,CONF_COMP_MODE_val
STR r2,[r0]
emiff_setup:
; LDR r0, EMIFF_SDRAM_OPERATION_ADDR ; Setup DDR type
; MOV r2, #0x00000007 ; DDR SDRAM K4X28163 configuration (mobile DDR, HPHB mode)
; STR r2, [r0]
;
; LDR r5, EMIFF_SDRAM_CONFIG_ADDR
; LDR r2, emiff_cfg_val ; Setup DDR cfg
; STR r2, [r5]
;
; LDR r6, EMIFF_SDRAM_MANUAL_CMD_ADDR ; Manual init sequence
; MOV r2, #0x00000007 ; Set CKE high command
; STR r2, [r6]
; MOV r2, #0x00000000 ; NOP command
; STR r2, [r6]
;
; MOV r2, #0x0100 ; a little loop
;wait_loop:
; SUBS r2, r2, #1
; BNE wait_loop
;
; MOV r2, #0x00000001 ; Precharge command
; STR r2, [r6]
; MOV r2, #0x00000002 ; Auto-refresh command (x2)
; STR r2, [r6]
; STR r2, [r6]
;
; LDR r6, EMIFF_SDRAM_MRS_NEW_ADDR ; MRS
; MOV r2, #0x00000033 ;
; STR r2, [r6]
;
; LDR r6, EMIFF_SDRAM_EMRS1_ADDR ; EMRS1
; MOV r2, #0 ; Self refresh on all banks
; STR r2, [r6]
;
; MOV r2, #6
; LDR r6, EMIFF_DLL_URD_CONTROL_ADDR
; STR r2, [r6]
; LDR r6, EMIFF_DLL_LRD_CONTROL_ADDR
; STR r2, [r6]
; LDR r6, EMIFF_DLL_WRT_CONTROL_ADDR
; STR r2, [r6]
; B emifs_setup
LDR r0, EMIFF_SDRAM_CONFIG_ADDR
LDR r2, mode0_emiff_cfg_val
STR r2, [r0]
LDR r0, EMIFF_SDRAM_MRS_ADDR
LDR r2, ValueEmifFastMRS
STR r2, [r0]
emifs_setup:
LDR r2, emifs_cfg_val
LDR r0, EMIFS_CS_CFG3_ADDR
STR r2, [r0]
LDR r2, emifs_adv_cfg_val
LDR r0, EMIFS_CS_ACFG3_ADDR
STR r2, [r0]
B stack_setup
stack_setup:
LDR r0, privilege_stack_base
MOV r1, #0x50
;
; SWI handler needs to be called in thumb mode, so that the SWI function
; can be directly called from C code. We switch to thumb mode
;
ADR r2, to_thumb + 1
BX r2
.state16
to_thumb:
;
; Sets up SVC stack
;
SWI #0xF5
;
; Sets up DATA ABORT stack
;
; r1 contains size of stack (in words = 0x50)
MOV r1, #0x50
LSL r2, r1, #2
; r0 contains stack base address (= previous base address + size*4)
ADD r0, r2
SWI #0xF4
;
; Sets up FIQ stack and enables FIQ
;
MOV r1, #0x50
LSL r2, r1, #2
ADD r0, r2
SWI #0xFC
;
; Sets up IRQ stack and enables IRQ
;
MOV r1, #0x50
LSL r2, r1, #2
ADD r0, r2
SWI #0xFD
;
; Back to ARM mode
ADR r0, to_arm_code ; Switch to ARM mode
BX r0
.state32
to_arm_code:
;
; Sets up
; Initialize ARM925T internal registers.
MOV r0, #0
MOV r1, #0
MOV r2, #0
MOV r3, #0
MOV r4, #0
MOV r5, #0
MOV r6, #0
MOV r7, #0
MOV r8, #0
MOV r9, #0
MOV r10, #0
MOV r11, #0
MOV r12, #0
LDR r0, prog_entry
MOV pc, r0 ; RESET INTERRUPT
;; ===========================================================================================
prog_entry .word _c_int00
;OMAP1610_CONF_STATUS_ADDR .word 0xFFFE1130
;
; EMIFF init constants
;
EMIFF_SDRAM_CONFIG_ADDR .word 0xFFFECC20
EMIFF_SDRAM_MRS_ADDR .word 0xFFFECC24
EMIFF_SDRAM_MRS_NEW_ADDR .word 0xFFFECC70
EMIFF_SDRAM_EMRS1_ADDR .word 0xFFFECC78
EMIFF_SDRAM_OPERATION_ADDR .word 0xFFFECC80
EMIFF_SDRAM_MANUAL_CMD_ADDR .word 0xFFFECC84
EMIFF_DLL_URD_CONTROL_ADDR .word 0xFFFECCC0
EMIFF_DLL_LRD_CONTROL_ADDR .word 0xFFFECCCC
EMIFF_DLL_WRT_CONTROL_ADDR .word 0xFFFECC64
;
; EMIFF SDRAM Configuration Register
; -> self refresh disabled
; -> auto refresh enabled
; -> SDRAM type 128 Mb, 16 bits bus 4 banks
; -> SDRAM frequency range : reset value
; -> power down disabled
; -> SDRAM clock enabled
;
;mode1_emiff_cfg_val .word 0x001200B4
;mode0_emiff_cfg_val .word 0x0D039174
mode0_emiff_cfg_val .word 0x0F0391F6
emiff_cfg_val .word 0x0D039174
; burst full-page length/cas latency = 3
;ValueEmifFastMRS .word 0x00000027
ValueEmifFastMRS .word 0x00000037
;
; EMIFS init constants
;
EMIFS_CS_CFG1_ADDR .word 0xFFFECC14
EMIFS_CS_ACFG1_ADDR .word 0xFFFECC54
EMIFS_CS_CFG2_ADDR .word 0xFFFECC18
EMIFS_CS_ACFG2_ADDR .word 0xFFFECC58
EMIFS_CS_CFG3_ADDR .word 0xFFFECC1C
EMIFS_CS_ACFG3_ADDR .word 0xFFFECC5C
; no clk div/no retiming/9 rw wait state/RDMODE 0 (async)/MUXDED 16 bits/Ref clk= TCK(env 102.1MHZ/9,8ns)
; insert 5 wait states to respect slowest norflash (cs3) rw timing >= 85 ns
;mode1_emifs_cfg_val .word 0xFFC0F990
; BT mode=0/ADVHOLD=1/OEHOLD=0/OESETUP=3
; increase adv to respect slowest norflash (cs3) adv timing >= 10ns
;mode1_emifs_adv_cfg_val .word 0x00000103
emifs_adv_cfg_val .word 0x00000103
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -