在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
楼主: spot

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

[复制链接]
发表于 2005-4-30 14:33:03 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

好东西! :em09:
发表于 2005-5-27 15:37:31 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

三星网站上有好多相关资料,自己去下载吧
http://www.samsung.com/Products/Semiconductor/SystemLSI/MobileSolutions/MobileASSP/MobileComputing/S3C2410X/S3C2410X.htm
发表于 2005-6-8 15:03:58 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)



下面引用由北方2004/07/11 05:06pm 发表的内容:
加上密码就好了  那样容易理解些

发表于 2005-6-15 01:05:05 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

支持free的阿
支持楼主的奉献
发表于 2005-7-1 11:50:59 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

好啊, 不错, 学习学习
发表于 2005-7-31 02:15:18 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

我对这段代码看了两三天仍然不懂啊,兄弟加点注释啊
发表于 2005-8-2 16:54:22 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

请能人加些注释啊 我找相关资料很久了,此段代码理解真实困难啊
发表于 2005-8-15 16:37:13 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

只是注释了一小部分,权当抛砖引玉了.
注:
1)  CPU:   Samsung S3C2410x
   SDRAM: 64MB/Bank6
   Flash: 16MB/NAND or 16MB/Intel Strata NOR(bank0)
2)  写一个空的C_Entry()函数,然后在ADS1.2中编译后生成bin文件直接烧入Flash即可作为一个简单的初始化代码,完成s3c2410的初始化,后续调试代码可以直接下载到SDRAM中.(RAM_STARTADDRESS=0x30000000)
;=====================================
; NAME: 2410INIT.S ;
; DESC: S3C2410 EVB Startup Code ;
; AUTH: PALaDiN@nicesun.com ;
; REV: 1.0.1 ;
; DATE: MAY,2003 ;
;=====================================
GBLL IDE_TYPE;声明全局的逻辑变量,并且初始化为FALSE。
GBLL CPU_CLK_200;声明全局的逻辑变量,并且初始化为FALSE。
IDE_TYPE SETL {TRUE}     ;TRUE=ADS1.2给逻辑变量赋值,在ADS1。2时为 TRUE。
                        ;FALSE=SDT2.5 在SDT2。5为FALSE。
[ IDE_TYPE
   GET option.s;GET 将一个源文件包含到当前文件里,并将包含的文件在当前位置进行汇编处理。
   GET memcfg.s
   GET 2410addr.s ;here GET means INCLUDE used in C language。GET等同于C中的INCLUDE功能
|
   GET option.a
   GET memcfg.a
   GET 2410addr.a
]
re-defined constants
USERMODE EQU 0x10;CPSR中各种处理器模式对应的控制位
FIQMODE EQU 0x11;快速中断响应模式控制位
IRQMODE EQU 0x12;一般中断响应模式控制位
SVCMODE EQU 0x13;
ABORTMODE EQU 0x17;出错处理模式控制位
UNDEFMODE EQU 0x1b;未定义模式控制位
MODEMASK EQU 0x1f ;This means System Mode.系统模式控制位
NOINT EQU 0xc0 ;;没有中断控制位
;The location of stacks
FIQStack EQU _STACK_BASEADDRESS;快速中断stacks地址,堆栈指针
IRQStack EQU FIQStack+0x1000;一般中断stacks地址,堆栈指针
AbortStack EQU IRQStack+0x1000;出错处理stacks地址,堆栈指针
UndefStack EQU AbortStack+0x400;未定义stacks地址,堆栈指针
SVCStack EQU UndefStack+0x400;,堆栈指针
UserStack EQU SVCStack+0x1000;用户stacks地址,堆栈指针
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MACRO
   $HandlerLabel HANDLER $HandleLabel
   ; HANDLER is macroname
   ; $HandlerLabel is special macro name
   ; $HandleLabel is a variable
$HandlerLabel
   sub sp,sp,#4 ;decrement sp(to store jump address); sp<----sp - 4, ARM Stack is Full_Decending
   stmfd sp!,{r0} USH the work register to stack(lr does not push because it return to original address)
   ldr r0,=$HandleLabel ;load the address of HandleXXX to r0
   ldr r0,[r0] ;load the contents(service routine start address) of HandleXX
   str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
   ldmfd sp!,{r0,pc} OP the work register and pc(jump to ISR)
MEND
;===============================================================
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IMPORT伪操作告诉编译器当前的符号不是在本源文件定义的。
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AREA Init,CODE,READONLY;定义一个代码段,代码段的名称Init,属性为READONLY
   CODE32 ;下面的指令是ARM指令,不是THUMB指令
   ENTRY ;应用程序的入口点
;每当一个中断发生以后,ARM 处理器便强制把PC 指针置为向量表中对应中断类型的地址值。
;因为每个中断只占据向量表中1 个字的存储器空间,只能放置1 条ARM 指令,所以通常在向
;量表中放的是跳转指令,使程序能从向量表里跳转到存储器里的其他地方,再执行中断处理。
b ResetHandler ; 复位中断
b HandlerUndef ;handler for Undefined mode 0x4未定义指令中断
b HandlerSWI ;handler for SWI interrupt 0x8软件中断
b HandlerPabort ;handler for PAbort 0xC指令预取异常
b HandlerDabort ;handler for DAbort 0x10数据异常
b . ;reserved 0x14
b HandlerIRQ ;handler for IRQ interrupt 0x18普通外部中断
b HandlerFIQ ;handler for FIQ interrupt 0x1C外部快速中断

HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
;=======
; ENTRY
;=======
ResetHandler
;Initialize stacks
bl InitStacks;跳到堆栈初始化程序部分
;=============================
; Configure Crucial Peripherals
;=============================
ldr r0,=WTCON ;watch dog disable @0x5300_0000看门沟设置
ldr r1,=0x0 ;= means 0x0 is 32bit contant
str r1,[r0] ;
ldr r0,=INTMSK ;
ldr r1,=0xffffffff ;all interrupt disable
str r1,[r0]
ldr r0,=INTSUBMSK
ldr r1,=0x7ff ;
str r1,[r0]
;To reduce PLL lock time, adjust the LOCKTIME register.
ldr r0,=LOCKTIME //锁向环设置。时钟。
ldr r1,=0xffffff
str r1,[r0]
;Configure MPLL
ldr r0,=MPLLCON
ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHz,Fout=100MHz
str r1,[r0]
;=============================
; Configure MEMORY CONTROLLER
;=============================
;Set memory control registers according to SMRDATA section
ldr r0,=SMRDATA;SMRDATA 是存放参数的数据区起始地址,
ldr r1,=BWSCON ;BWSCON Address,;memory controller。BWSCON 是寄存器组的开始地址,
add r2, r0, #52 ;End address of SMRDATA,存放参数的数据区的末尾地址
0
   ldr r3, [r0], #4 ; load r3 from r0, then r0=r0+4
   str r3, [r1], #4 ; store r3 to r1, then r1=r1+4
   cmp r2, r0
   bne %B0
;=============================
; Clear SDRAM
;=============================
ldr r0,=GPFCON
ldr r1,=0x55aa ;GPF[7:4]--output GPF[3:0]--EINT[3:0]
str r1,[r0]
ldr r0,=GPFUP
ldr r1,=0xff ;GPF up-pull resistors are disabled
str r1,[r0]
ldr r0,=GPFDAT
ldr r1,=0x0
str r1,[r0] ;
mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0
ldr r9,=0x3ff0000 ;Lower 32MB
ldr r0,=0x30010000 ;leave 64kb for code//=0x30000000
LOOP ;SDRAM clearSDRAM 清零
stmia r0!,{r1-r8} ;stack starts from 0x30000000,
subs r9,r9,#32 ;
bne LOOP
;=============================
; Exception Vector Table Setup
;=============================
EXCEPTION_VECTOR_TABLE_SETUP
LDR r0, =HandleReset ; Exception Vector Table Memory Loc.
LDR r1, =ExceptionHandlerTable ; Exception Handler Assign
MOV r2, #8 ; Number of Exception is 8
ExceptLoop
LDR r3, [r1], #4
STR r3, [r0], #4
SUBS r2, r2, #1
BNE ExceptLoop
;====================================================
;Copy and paste RW data/zero initialized data
;====================================================
ldr r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
;|Image$$RO$$Limit|:表示RO 区末地址后面的地址,即RW 数据源的起始地址。
ldr r1, =|Image$$RW$$Base| ; and RAM copy
;|Image$$RW$$Base|:RW 区在RAM 里的执行区起始地址,也就是编译选项
;RW_Base 指定的地址;程序里是RW数据拷贝的目标地址。
ldr r3, =|Image$$ZI$$Base| ; Zero init base => top of initialised data
;|Image$$ZI$$Base|:ZI 区在RAM 里面的起始地址。
cmp r0, r1 ; Check that they are different
beq %F2 ; F means forward
1
   cmp r1, r3 ; Copy init data
   ldrcc r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
   strcc r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4
   bcc %B1 ;B means backward
2
   ldr r1, =|Image$$ZI$$Limit| ; Top of zero init segment
   ;|Image$$ZI$$Limit|:ZI 区在RAM 里面的结束地址后面的一个地址。
   mov r2, #0
3
   cmp r3, r1 ; Zero init
   strcc r2, [r3], #4
   bcc %B3
;====================================================
;程序先把ROM里 |Image$$RO$$Limit| 开始的RW 初始数据拷贝到RAM 里
;|Image$$RW$$Base| 开始的地址, 当RAM 这边的目标地址到达
;|Image$$ZI$$Base| 后就表示RW 区的结束和ZI 区的开始,接下去就对这片ZI
;区进行清零操作,直到遇到结束地址 |Image$$ZI$$Limit|。
; Now change to user mode and set up user mode stack.
;====================================================
MRS r0, cpsr
BIC r0, r0, #MODEMASK ;MODEMASK=0X1F
ORR r0, r0, #USERMODE|NOINT ;R
MSR cpsr_cxsf, r0
LDR sp, =UserStack
;====================================================
;Jump To C Routines,下面是跳到C程序。
;====================================================
IMPORT C_Entry
bl C_Entry ;Don not use main() because ......
;bl .
;直接从启动代码跳入应用程序主函数入口,主函数名字可由用户自己定义。C_Entry  主函数
;====================================================
;Initialize Stacks
;====================================================
;function initializing stacks
InitStacks
;Don not use DRAM,such as stmfd,ldmfd......
;SVCstack is initialized before
;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
mrs r0,cpsr
bic r0,r0,#MODEMASK ;MODEMASK=0x1f
orr r1,r0,#UNDEFMODE|NOINT ;r1=0xDB
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack
bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
;USER mode has not be initialized.
mov pc,lr ;′ó????3?ê??ˉ3ìDò?D·μ??
;The LR register won not be valid if the current mode is not SVC mode.
;====================================================
;The following DATA section is used to init MEMORY CONTROLLER
;====================================================
LTORG
SMRDATA DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in ADS1.2 help documents, there is the following discription about DATA directive:
;;;;The DATA directive is no longer needed. It is ignored by the assembler.;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Memory configuration should be optimized for best performance
; The following parameter is not optimized.
; Memory access cycle parameter strategy
; 1) The memory settings is safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK=75Mhz.
DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
;DCD ((B6_BWSCON<<24)+(B7_BWSCON<<28))
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) ;GCS2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;GCS3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) ;GCS4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) ;GCS5
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6
DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;GCS7
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+REFCNT)
DCD (0x31|0x80) ;SCLK power saving mode, BANKSIZE 64M/64M, 4-burst
DCD 0x30 ;MRSR6 CL=3clk
DCD 0x20 ;MRSR7
;===========================================
; Exception Vector Function Definition
; Consist of function Call from C-Program.
;===========================================
SystemResetHandler
b ResetHandler
SystemUndefinedHandler
IMPORT ISR_UndefHandler
STMFD sp!, {r0-r12,lr}
B ISR_UndefHandler
LDMFD sp!, {r0-r12, pc}^
SystemSwiHandler
STMFD sp!, {r0-r12,lr}
LDR r0, [lr, #-4]
BIC r0, r0, #0xff000000
CMP r0, #0xff
BEQ MakeSVC
LDMFD sp!, {r0-r12, pc}^
MakeSVC
MRS r1, spsr
BIC r1, r1, #MODEMASK
ORR r2, r1, #SVCMODE
MSR spsr_cf, r2
LDMFD sp!, {r0-r12, pc}^
SystemPrefetchHandler
IMPORT ISR_PrefetchHandler
STMFD sp!, {r0-r12, lr}
B ISR_PrefetchHandler
LDMFD sp!, {r0-r12, lr}
SUBS pc, lr, #4
SystemAbortHandler
IMPORT ISR_AbortHandler
STMFD sp!, {r0-r12, lr}
B ISR_AbortHandler
LDMFD sp!, {r0-r12, lr}
SUBS pc, lr, #8
SystemReserv
SUBS pc, lr, #4
SystemIrqHandler
IMPORT ISR_IrqHandler
STMFD sp!, {r0-r12, lr}
BL ISR_IrqHandler
LDMFD sp!, {r0-r12, lr}
SUBS pc, lr, #4
SystemFiqHandler
IMPORT ISR_FiqHandler
STMFD sp!, {r0-r7, lr}
BL ISR_FiqHandler
LDMFD sp!, {r0-r7, lr}
SUBS pc, lr, #4
ALIGN
AREA RomData, DATA, READONLY
ExceptionHandlerTable
DCD SystemResetHandler
DCD SystemUndefinedHandler
DCD SystemSwiHandler
DCD SystemPrefetchHandler
DCD SystemAbortHandler
DCD SystemReserv
DCD SystemIrqHandler
DCD SystemFiqHandler
AREA RamData, DATA, READWRITE
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
;Don not use the label 'IntVectorTable',
;The value of IntVectorTable is different with the address you think it may be.
;IntVectorTable
HandleEINT0 # 4
HandleEINT1 # 4
HandleEINT2 # 4
HandleEINT3 # 4
HandleEINT4_7 # 4
HandleEINT8_23 # 4
HandleRSV6 # 4
HandleBATFLT # 4
HandleTICK # 4
HandleWDT # 4
HandleTIMER0 # 4
HandleTIMER1 # 4
HandleTIMER2 # 4
HandleTIMER3 # 4
HandleTIMER4 # 4
HandleUART2 # 4
HandleLCD # 4
HandleDMA0 # 4
HandleDMA1 # 4
HandleDMA2 # 4
HandleDMA3 # 4
HandleMMC # 4
HandleSPI0 # 4
HandleUART1 # 4
HandleRSV24 # 4
HandleUSBD # 4
HandleUSBH # 4
HandleIIC # 4
HandleUART0 # 4
HandleSPI1 # 4
HandleRTC # 4
HandleADC # 4
END

发表于 2005-8-17 17:56:41 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

  什么东东呀,这么贵  
发表于 2005-8-20 09:30:08 | 显示全部楼层

[转帖]Samsung S3C2410初始化代码(ARmPALaDiN@sohu.com)

我们主营Samsung Lattice的全系列产品.
   010-62981247
  MSN:ZHYIYI9@HOTMAIL.COM
  QQ:472721526
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-17 02:31 , Processed in 0.033639 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表