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

📄 startup.s

📁 The LN2410SBC is a high performance single board computer based on ARM920T (MMU included). Its ultra
💻 S
字号:
@@ *****************************************************
@@ * NAME    : Startup.s ver 1.0                       *
@@ * Date    : 2004/02/02                              *
@@ * Author  : dae hong, Kim                           *
@@ * E-mail  : redizi@armkorea.com                     *
@@ * Description:                                      *
@@ *   S3C2410X ARM920T LN2410SBC Rev 1.0              *
@@ *   XTAL= 12MHz                                     *
@@ *   MCLK= 266MHz                                    *
@@ *   ROM = K9F5608U0M (32MB, 8bit, NAND)             *
@@ *   RAM = K4S561632D (64MB, 32bit, SDRAM)           *
@@ *****************************************************

@****************** Register  ********************
@=================
@ Memory control 
@=================
BWSCON      =  0x48000000     @Bus width & wait status
BANKCON0    =  0x48000004     @Boot ROM control
BANKCON1    =  0x48000008     @BANK1 control
BANKCON2    =  0x4800000c     @BANK2 cControl
BANKCON3    =  0x48000010     @BANK3 control
BANKCON4    =  0x48000014     @BANK4 control
BANKCON5    =  0x48000018     @BANK5 control
BANKCON6    =  0x4800001c     @BANK6 control
BANKCON7    =  0x48000020     @BANK7 control
REFRESH     =  0x48000024     @DRAM/SDRAM refresh
BANKSIZE    =  0x48000028     @Flexible Bank Size
MRSRB6      =  0x4800002c     @Mode register set for SDRAM
MRSRB7      =  0x48000030     @Mode register set for SDRAM

@=================
@ INTERRUPT
@=================
SRCPND       =  0x4a000000    @Interrupt r=est status
INTMOD       =  0x4a000004    @Interrupt mode control
INTMSK       =  0x4a000008    @Interrupt mask control
PRIORITY     =  0x4a00000c    @IRQ priority control           <-- May 06, 2002 SOP
INTPND       =  0x4a000010    @Interrupt r=est status
INTOFFSET    =  0x4a000014    @Interruot r=est source offset
SUSSRCPND    =  0x4a000018    @Sub source pending
INTSUBMSK    =  0x4a00001c    @Interrupt sub mask

@==========================
@ CLOCK & POWER MANAGEMENT
@==========================
LOCKTIME    =  0x4c000000     @PLL lock time counter
MPLLCON     =  0x4c000004     @MPLL Control
UPLLCON     =  0x4c000008     @UPLL Control
CLKCON      =  0x4c00000c     @Clock generator control
CLKSLOW     =  0x4c000010     @Slow clock control
CLKDIVN     =  0x4c000014     @Clock divider control

@=================
@ I/O PORT 
@=================
GPACON      =  0x56000000     @Port A control
GPADAT      =  0x56000004     @Port A data
                        
GPBCON      =  0x56000010     @Port B control
GPBDAT      =  0x56000014     @Port B data
GPBUP       =  0x56000018     @Pull-up control B
                        
GPCCON      =  0x56000020     @Port C control
GPCDAT      =  0x56000024     @Port C data
GPCUP       =  0x56000028     @Pull-up control C
                        
GPDCON      =  0x56000030     @Port D control
GPDDAT      =  0x56000034     @Port D data
GPDUP       =  0x56000038     @Pull-up control D
                        
GPECON      =  0x56000040     @Port E control
GPEDAT      =  0x56000044     @Port E data
GPEUP       =  0x56000048     @Pull-up control E
                        
GPFCON      =  0x56000050     @Port F control
GPFDAT      =  0x56000054     @Port F data
GPFUP       =  0x56000058     @Pull-up control F
                        
GPGCON      =  0x56000060     @Port G control
GPGDAT      =  0x56000064     @Port G data
GPGUP       =  0x56000068     @Pull-up control G
                        
GPHCON      =  0x56000070     @Port H control
GPHDAT      =  0x56000074     @Port H data
GPHUP       =  0x56000078     @Pull-up control H


@=================
@ WATCH DOG TIMER
@=================
WTCON       =  0x53000000     @Watch-dog timer mode
WTDAT       =  0x53000004     @Watch-dog timer data
WTCNT       =  0x53000008     @Eatch-dog timer count

@*************************************************


@ Pre-defined constants
USERMODE    = 0x10
FIQMODE     = 0x11
IRQMODE     = 0x12
SVCMODE     = 0x13
ABORTMODE   = 0x17
UNDEFMODE   = 0x1b
SYSMODE     = 0x1f
MODEMASK    = 0x1f
INTMASK     = 0xc0



.macro   WR8   addr, data
   ldr      r0, =\addr
   ldr      r1, =\data
   strb     r1, [r0]
.endm

.macro   WR16  addr, data
   ldr      r0, =\addr
   ldr      r1, =\data
   strh     r1, [r0]
.endm

.macro   WR32  addr, data
   ldr      r0, =\addr
   ldr      r1, =\data
   str      r1, [r0]
.endm

.macro   ExceptionHandler addr
   stmfd    sp!, {r0-r3, lr}
   ldr      r0, =\addr
   ldr      r0, [r0]
   add      lr, pc, #0
   mov      pc, r0
   ldmfd    sp!, {r0-r3, lr}
   subs     pc, lr, #4
.endm



   .global  Main
   .global  ResetHandler

   .text                @ AREA ???, CODE, READONLY
   .code 32             @ CODE32
@---------------------------------------------------------------------
@  Main Routine
@---------------------------------------------------------------------
ResetHandler:

   WR32     WTCON, (47<<8)+(0<<5)+(0<<0)        @ Disable Watch-Dog Timer (66KHz=15us)
   WR32     INTMSK, 0xFFFFFFFF                  @ All Interrupt Disable
   WR32     INTSUBMSK, 0x7FF                    @ All sub-interrupt disable
   WR32     CLKDIVN, (0<<2)+(1<<1)+(1<<0)       @ 1:2:4
   WR32     LOCKTIME, 0xFFFFFF   

@  WR32  MPLLCON, (0xA1<<12)+(3<<4)+(1)         @ Fin=12MHz, Fout=202.8MHz
   WR32  MPLLCON, (0x7D<<12)+(4<<4)+(0)         @ Fin=12MHz, Fout=266MHz
@  WR32  UPLLCON, (0x28<<12)+(1<<4)+(2)         @ Fin=12MHz, Fout=48MHz

   WR32     HandleIRQ, IsrIRQ                   @ Set IRQ Handler    


   BL    InitPort
   ;BL      InitMemoryController 
   BL    InitStacks                    @ Initialize Stack
   BL    InitVariables                 @ Initialize Global Variables

   LDR      pc, =Main
   B     .

@---------------------------------------------------------------------
@  ISR(Interrupt Service Routine) IRQ = Non Vector
@---------------------------------------------------------------------
IsrIRQ:
   STMFD    sp!,{r0-r3, lr}
   LDR      r1,=INTOFFSET
   LDR      r1,[r1]  
   LDR      r2,=HandleEINT0
   ADD      r3,r2,r1,lsl #2
   MOV      lr, pc
   LDR      pc,[r3]
        
   LDMFD    sp!,{r0-r3, lr}
   SUBS     pc, lr, #4
   .LTORG   


@---------------------------------------------------------------------
@  Initialize Port
@---------------------------------------------------------------------
InitPort:
   LDR      r0, =GPHCON                @ Set TxD0/RxD0
   LDR      r1, [r0]
   BIC      r1, r1, #0xF0
   ORR      r1, r1, #0xA0
   STR      r1, [r0]
   
   LDR      r0, =GPBCON                @ Set GPB5/6
   LDR      r1, [r0]
   BIC      r1, r1, #(0xF<<10)
   ORR      r1, r1, #(0x5<<10)
   STR      r1, [r0]

   LDR      r0, =GPBDAT                @ Initial Value
   LDR      r1, [r0]
   ORR      r1, r1, #(3<<5);
   STR      r1, [r0]
   
   MOV      pc, lr
   .LTORG   



@---------------------------------------------------------------------
@  Initialize Stack
@---------------------------------------------------------------------
InitStacks:
   mrs      r0, cpsr
   bic      r0, r0, #MODEMASK
   orr      r1, r0, #SYSMODE
   msr      cpsr_cxsf, r1                      @ System Mode
   ldr      sp, =__STACK_USER_END__

   orr      r1, r0, #IRQMODE
   msr      cpsr_cxsf, r1                      @ IRQ Mode
   ldr      sp, =__STACK_IRQ_END__

   orr      r1, r0, #FIQMODE
   msr      cpsr_cxsf, r1                      @ FIQ Mode
   ldr      sp, =__STACK_FIQ_END__

   orr      r1, r0, #UNDEFMODE
   msr      cpsr_cxsf, r1                      @ UND Mode
   ldr      sp, =__STACK_UNDEF_END__

   orr      r1, r0, #SVCMODE
   bic      r1, r1, #INTMASK              @ IRQ,FIQ enable
   msr      cpsr_cxsf, r1                      @ Supervisor Mode
   ldr      sp, =__STACK_SVC_END__

   mov      pc, lr
   .LTORG   

@---------------------------------------------------------------------
@  Initialize Data Regien
@---------------------------------------------------------------------
InitVariables:
   @ zero bss
_Lzero_bss:
   ldr   r0, =__bss_start__
   ldr   r1, =__bss_end__
   mov   r2, #0
_Lzero_words:
   cmp   r0, r1
   strne    r2, [r0], #0x4
   bne   _Lzero_words

   mov   pc, lr
   .LTORG   

@---------------------------------------------------------------------
@  Initialize Memory Controller
@---------------------------------------------------------------------
InitMemoryController:
   LDR   r0,=SMRDATA
   LDR   r1,=BWSCON           @BWSCON Address
   ADD   r2, r0, #52          @End address of SMRDATA
_L1:       
   LDR   r3, [r0], #4    
   STR   r3, [r1], #4    
   CMP   r2, r0      
   BNE   _L1
   MOV   pc, lr
   .LTORG   

@------------------------------------------------------------------------------
@  Memory Controller
@------------------------------------------------------------------------------
SMRDATA:
   .word (0+(5<<4)+(5<<8)+(0<<12)+(0<<16)+(0<<20)+(2<<24)+(0<<28))
   .word ((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+(0))  @GCS0
   .word ((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(0<<2)+(0))  @GCS1 
   .word ((0<<13)+(1<<11)+(2<<8)+(1<<6)+(0<<4)+(0<<2)+(0))  @GCS2 
   .word ((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+(0))  @GCS3
   .word ((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+(0))  @GCS4
   .word ((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+(0))  @GCS5
   .word ((3<<15)+(1<<2)+(1))                               @GCS6
   .word ((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+(0))  @GCS7
   .word ((1<<23)+(0<<22)+(0<<20)+(3<<18)+(2<<16)+1113)    
   .word 0x32                                               @BANKSIZE 128M/128M
   .word 0x30                                               @MRSR6 CL=3clk
   .word 0x30                                               @MRSR7

@------------------------------------------------------------------------------
@  Data Region
@------------------------------------------------------------------------------
   .section .vector
HandleReset:      .space   4     @ 0x00 Reset Exception
HandleUndef:      .space   4     @ 0x04 Undefine Instruction Exception
HandleSWI:        .space   4     @ 0x08 Software Interrupt Exception
HandlePabort:     .space   4     @ 0x0C Prefetch Abort Exception
HandleDabort:     .space   4     @ 0x10 Data Abort Exception
HandleReserved:   .space   4     @ 0x14
HandleIRQ:        .space   4     @ 0x18 IRQ Exception
HandleFIQ:        .space   4     @ 0x1C FIQ Exception

HandleEINT0:      .space   4     @Interrupt Resouces
HandleEINT1:      .space   4     
HandleEINT2:      .space   4     
HandleEINT3:      .space   4     
HandleEINT4_7:    .space   4
HandleEINT8_23:   .space   4  
HandleRSV6:       .space   4  
HandleBATFLT:     .space   4   
HandleTICK:       .space   4    
HandleWDT:        .space   4  
HandleTIMER0:     .space   4   
HandleTIMER1:     .space   4   
HandleTIMER2:     .space   4   
HandleTIMER3:     .space   4  
HandleTIMER4:     .space   4  
HandleUART2:      .space   4  
HandleLCD:        .space   4 
HandleDMA0:       .space   4  
HandleDMA1:       .space   4 
HandleDMA2:       .space   4 
HandleDMA3:       .space   4 
HandleMMC:        .space   4  
HandleSPI0:       .space   4
HandleUART1:      .space   4   
HandleRSV24:      .space   4   
HandleUSBD:       .space   4
HandleUSBH:       .space   4
HandleIIC:        .space   4
HandleUART0:      .space   4
HandleSPI1:       .space   4   
HandleRTC:        .space   4
HandleADC:        .space   4
   
   .END

⌨️ 快捷键说明

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