5546|3

354

帖子

1

TA的资源

五彩晶圆(中级)

楼主
 

S3C6410 SDboot程序求解,送SDBOOT完整程序。 [复制链接]

我编译时CPU_NAME报错,汇编代码如下:

;
;  Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
;  Use of this source code is subject to the terms of the Microsoft end-user
;  license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
;  If you did not accept the terms of the EULA, you are not authorized to use
;  this source code. For a copy of the EULA, please see the LICENSE.RTF on your
;  install media.
;
;------------------------------------------------------------------------------
;
;   File:  startup.s
;
;   Kernel startup routine for Samsung SMDK6410 board. Hardware is
;   initialized in boot loader - so there isn't much code at all.
;
;------------------------------------------------------------------------------

  INCLUDE kxarm.h
  INCLUDE s3c6410.inc
  INCLUDE image_cfg.inc

  IMPORT OALClearUTLB
  IMPORT OALFlushICache
  IMPORT OALFlushDCache

  IMPORT System_DisableVIC
  IMPORT System_EnableIRQ
 [  CPU_NAME = S3C6410
  IMPORT System_SetSyncMode
 ]
  IMPORT System_SetAsyncMode
  IMPORT System_EnableICache

;-------------------------------------------------------------------------------
; Definition for MMU table initialization
;-------------------------------------------------------------------------------

PT_1ST_BASE   EQU  (DRAM_BASE_PA_START+0x10000)  ; 1st level Page Table Base Address (PHYBASE + 0x10000) save room for interrupt vectors
PT_1ST_ENTRY_CNB EQU  (DRAM_BASE_PA_START+0x40E)   ; Cached Area Page Table Entry (Cache/Unbuffer/RW), PA base = 0x50000000
PT_1ST_ENTRY_NCNB EQU  (DRAM_BASE_PA_START+0x402)   ; Uncached Area Page Table Entry (Uncache/Unbuffer/RW), PA base = 0x50000000
PTR_1ST_PTE   EQU  ((DRAM_BASE_PA_START>>16)/4)  ; Ptr to 1st PTE for 0x50000000
BANK_SHIFT EQU  20

;------------------------------------------------------------------------------
;
; Macro for LED on SMDK Board (GPN[15:12])
;
; LED_ON for physical address domain
; VLED_ON for virtual address domain
;
;------------------------------------------------------------------------------

 MACRO

  LED_ON $data

  ldr  r10, =GPNPUD
  ldr  r11, [r10]
  bic  r11, r11, #0xFF000000 ; Pull-Up-Down Disable
  str  r11, [r10]

  ldr  r10, =GPNDAT
  ldr  r11, [r10]
  bic  r11, r11, #0xF000
  ldr  r12, =$data
  mov  r12, r12, lsl #12 ; [15:12]
  orr  r11, r11, r12
  str  r11, [r10]

  ldr  r10, =GPNCON
  ldr  r11, [r10]
  bic  r11, r11, #0xFF000000
  orr  r11, r11, #0x55000000 ; GPN[15:12] Output .
  str  r11, [r10]

  MEND


 MACRO

  VLED_ON $data

  ldr  r10, =vGPNPUD
  ldr  r11, [r10]
  bic  r11, r11, #0xFF000000 ; Pull-Up-Down Disable
  str  r11, [r10]

  ldr  r10, =vGPNDAT
  ldr  r11, [r10]
  bic  r11, r11, #0xF000
  ldr  r12, =$data
  mov  r12, r12, lsl #12 ; [15:12]
  orr  r11, r11, r12
  str  r11, [r10]

  ldr  r10, =vGPNCON
  ldr  r11, [r10]
  bic  r11, r11, #0xFF000000
  orr  r11, r11, #0x55000000 ; GPN[15:12] Output .
  str  r11, [r10]

  MEND

;------------------------------------------------------------------------------
; End of Macro
;------------------------------------------------------------------------------

  TEXTAREA

  IMPORT  main

  INCLUDE oemaddrtab_cfg.inc

;------------------------------------------------------------------------------
;
; StartUp Entry
;
; Main entry point for CPU initialization.
;
;------------------------------------------------------------------------------
 LEAF_ENTRY      StartUp

  b  ResetHandler
  b  .    ; HandlerUndef
  b  .    ; HandlerSWI
  b  .    ; HandlerPabort
  b  .    ; HandlerDabort
  b  .    ; HandlerReserved
  b  .    ; HandlerIRQ
  b  .    ; HandlerFIQ

;------------------------------------------------------------------------------
;
; ResetHandler Function
;
; Reset Exception Handler
;
;------------------------------------------------------------------------------

ResetHandler

  LED_ON 0xf

;------------------------------------
; Enable Instruction Cache
;------------------------------------

  mov  r0, #0
  mcr  p15, 0, r0, c7, c7, 0   ; Invalidate Entire I&D Cache
  bl  System_EnableICache   ; Enable I Cache

;------------------------------------
; Peripheral Port Setup
;------------------------------------

  ldr  r0, =0x70000013  ; Base Addres : 0x70000000, Size : 256 MB (0x13)
  mcr  p15,0,r0,c15,c2,4

;------------------------------------
; Interrupt Disable
;------------------------------------

  ldr  r0, =VIC0INTENCLEAR
  ldr  r1, =0xFFFFFFFF;
  str  r1, [r0]

  ldr  r0, =VIC1INTENCLEAR
  ldr  r1, =0xFFFFFFFF;
  str  r1, [r0]

;------------------------------------
; Disable WatchDog Timer
;------------------------------------

  ldr  r0, =WTCON
  ldr  r1, =0x0
  str  r1, [r0]


 [ CHANGE_PLL_CLKDIV_ON_EBOOT

;-----------------------------------------------
; Change Operation Mode to Sync Mode or Async Mode
;-----------------------------------------------

  ldr  r0, =OTHERS
  ldr  r1, [r0]
  and  r1, r1, #0x80

  cmp  r1, #0x80   ; OTHERS[7] = 0:AsyncModde 1:SyncMode
 [  CPU_NAME = S3C6410
  [ (SYNCMODE)
   bne  System_SetSyncMode
  |
   beq  System_SetAsyncMode
  ]
 ]
 [  CPU_NAME = S3C6400
  beq  System_SetAsyncMode
 ]
  

;---------------------------------------
; Check PLL and CLKDIV
;---------------------------------------

  ldr  r3, =0x83FF3F07  ; Mask for APLL_CON/MPLL_CON
  ldr  r4, =0x80FF3F07  ; Mask for EPLL_CON0
  ldr  r5, =0x0000FFFF  ; Mask for EPLL_CON1
  ldr  r6, =0x0003FF17  ; Mask for CLKDIV0
  ldr  r0, =APLL_CON  ; Check APLL
  ldr  r1, [r0]
  and  r1, r1, r3
  ldr  r2, =((1<<31)+(APLL_MVAL<<16)+(APLL_PVAL<<8)+(APLL_SVAL)) ; APLL_CON value to configure
  cmp  r1, r2
  bne  PLL_NeedToConfigure

  ldr  r0, =MPLL_CON  ; Check MPLL
  ldr  r1, [r0]
  and  r1, r1, r3
  ldr  r2, =((1<<31)+(MPLL_MVAL<<16)+(MPLL_PVAL<<8)+(MPLL_SVAL)) ; MPLL_CON value to configure
  cmp  r1, r2
  bne  PLL_NeedToConfigure

  ldr  r0, =EPLL_CON0  ; Check EPLL_CON0
  ldr  r1, [r0]
  and  r1, r1, r4
  ldr  r2, =((1<<31)+(EPLL_MVAL<<16)+(EPLL_PVAL<<8)+(EPLL_SVAL))  ; EPLL_CON0 value to configure
  cmp  r1, r2
  bne  PLL_NeedToConfigure

  ldr  r0, =EPLL_CON1  ; Check EPLL_CON1
  ldr  r1, [r0]
  and  r1, r1, r5
  ldr  r2, =EPLL_KVAL  ; EPLL_CON1 value to configure
  cmp  r1, r2
  bne  PLL_NeedToConfigure

  ldr  r0, =CLK_DIV0  ; Check CLKDIV0
  ldr  r1, [r0]
  and  r1, r1, r6
 [  CPU_NAME = S3C6410
  ldr  r2, =((PCLK_DIV<<12)+(HCLKx2_DIV<<9)+(HCLK_DIV<<8)+(MPLL_DIV<<4)+(APLL_DIV<<0))  ; CLKDIV0 value to configure
 ]
 [  CPU_NAME = S3C6400
  ldr  r2, =((OND_DIV<<16)+(PCLK_DIV<<12)+(HCLKx2_DIV<<9)+(HCLK_DIV<<8)+(MPLL_DIV<<4)+(APLL_DIV<<0))  ; CLKDIV0 value to configure
 ]
  cmp  r1, r2
  bne  CLKDIV_NeedToConfigure

  b  PLL_CLKDIV_AlreadyConfigured ; APLL/MPLL/EPLL and CLKDIV0 is already configured

;------------------------------------
; Prepare to Change PLL
;------------------------------------

PLL_NeedToConfigure
 [ CPU_NAME = S3C6410

;------------------------------------
; Disable PLL Clock Out
;------------------------------------

  ldr  r0, =CLK_SRC
  ldr  r1, [r0]
  bic  r1, r1, #0x7   ; FIN out
  str  r1, [r0]    
  
  ldr  r0, =CLK_DIV0
  ldr  r1, [r0]
  bic  r1, r1, #0xff00
  bic  r1, r1, #0xff
  [ SYNCMODE
  ldr  r2, =0x1300   ; ARM:HCLKx2:HCLK:PCLK = 1:2:2:2
  |
  ldr  r2, =0x1100   ; ARM:HCLKx2:HCLK:PCLK = 1:1:2:2
  ]
  orr  r1, r1, r2
  str  r1, [r0]
 ]

 [ CPU_NAME = S3C6400
  ldr  r0, =CLK_DIV0
  ldr  r1, [r0]
  bic  r1, r1, #0xff00
  bic  r1, r1, #0xff
  ldr  r2, =0x1100   ; ARM:HCLKx2:HCLK:PCLK = 1:1:2:2
  orr  r1, r1, r2
  str  r1, [r0]

 ]

;------------------------------------
; Change PLL Value
;------------------------------------

  ldr  r1, =0x4B1   ; Lock Time : 0x4b1 (100us @Fin12MHz) for APLL/MPLL
  ldr  r2, =0xE13   ; Lock Time : 0xe13 (300us @Fin12MHz) for EPLL

  ldr  r0, =APLL_LOCK
  str  r1, [r0]    ; APLL Lock Time
  str  r1, [r0, #0x4]   ; MPLL Lock Time
  str  r2, [r0, #0x8]   ; EPLL Lock Time

  ldr  r0, =APLL_CON
  ldr  r1, =((1<<31)+(APLL_MVAL<<16)+(APLL_PVAL<<8)+(APLL_SVAL))
  str  r1, [r0]

  ldr  r0, =MPLL_CON
  ldr  r1, =((1<<31)+(MPLL_MVAL<<16)+(MPLL_PVAL<<8)+(MPLL_SVAL))
  str  r1, [r0]

  ldr  r0, =EPLL_CON1
  ldr  r1, =EPLL_KVAL
  str  r1, [r0]

  ldr  r0, =EPLL_CON0
  ldr  r1, =((1<<31)+(EPLL_MVAL<<16)+(EPLL_PVAL<<8)+(EPLL_SVAL))
  str  r1, [r0]

;------------------------------------
; Set System Clock Divider
;------------------------------------

CLKDIV_NeedToConfigure

  ldr  r0, =CLK_DIV0
  ldr  r1, [r0]
  bic  r1, r1, #0x30000
  bic  r1, r1, #0xff00
  bic  r1, r1, #0xff
 [  CPU_NAME = S3C6410
  ldr  r2, =((PCLK_DIV<<12)+(HCLKx2_DIV<<9)+(HCLK_DIV<<8)+(MPLL_DIV<<4)+(APLL_DIV<<0))
 ]
 [  CPU_NAME = S3C6400
  ldr  r2, =((OND_DIV<<16)+(PCLK_DIV<<12)+(HCLKx2_DIV<<9)+(HCLK_DIV<<8)+(MPLL_DIV<<4)+(APLL_DIV<<0))  ; CLKDIV0 value to configure
 ]
  orr  r1, r1, r2
  str  r1, [r0]

;------------------------------------
; Enable PLL Clock Out
;------------------------------------

  ldr  r0, =CLK_SRC
  ldr  r1, [r0]
  orr  r1, r1, #0x7   ; PLL  Clockout
  str  r1, [r0]    ; System will be waiting for PLL unlocked after this instruction

PLL_CLKDIV_AlreadyConfigured

 ] ; CHANGE_PLL_CLKDIV_ON_EBOOT

;------------------------------------
; Expand Memory Port 1 to x32
;------------------------------------

  ldr  r0, =MEM_SYS_CFG
  ldr  r1, [r0]
  bic  r1, r1, #0x80   ; ADDR_EXPAND to "0"
  str  r1, [r0]

;------------------------------------
; Disable VIC
;------------------------------------

  bl  System_DisableVIC

;------------------------------------
; Enable IRQ
;------------------------------------

  bl  System_EnableIRQ

;------------------------------------
; Clear DRAM
;------------------------------------

 [ CLEAR_DRAM_ON_EBOOT

  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  r0, =IMAGE_NK_PA_START    ; Start address (Physical 0x5010.0000)
  ldr  r9, =(DRAM_SIZE-IMAGE_NK_OFFSET) ; 127 MB of RAM (1MB + 127MB)
10
  stmia r0!, {r1-r8}
  subs  r9, r9, #32
  bne  %B10
 ]

;------------------------------------
; Initialize MMU Table
;------------------------------------

 ;----------------------------
 ; Compute physical address of the OEMAddressTable.

20
  add  r11, pc, #g_oalAddressTable -(. + 8)
  ldr  r10, =PT_1ST_BASE    ; (r10) = 1st level page table

 ;----------------------------
 ; Setup 1st level page table (using section descriptor)
 ; Fill in first level page table entries to create "un-mapped" regions
 ; from the contents of the MemoryMap array.
 ;
 ; (r10) = 1st level page table
 ; (r11) = ptr to MemoryMap array

  add  r10, r10, #0x2000  ; (r10) = ptr to 1st PTE for "unmapped space"
  mov  r0, #0x0E   ; (r0) = PTE for 0: 1MB cachable bufferable
  orr  r0, r0, #0x400  ; set kernel r/w permission
25
  mov  r1, r11    ; (r1) = ptr to MemoryMap array

30
  ldr  r2, [r1], #4   ; (r2) = virtual address to map Bank at
  ldr  r3, [r1], #4   ; (r3) = physical address to map from
  ldr  r4, [r1], #4   ; (r4) = num MB to map

  cmp  r4, #0    ; End of table?
  beq  %F40

  ldr  r5, =0x1FF00000
  and  r2, r2, r5    ; VA needs 512MB, 1MB aligned.

  ldr  r5, =0xFFF00000
  and  r3, r3, r5    ; PA needs 4GB, 1MB aligned.

  add  r2, r10, r2, LSR #18
  add  r0, r0, r3    ; (r0) = PTE for next physical page

35
  str  r0, [r2], #4
  add  r0, r0, #0x00100000 ; (r0) = PTE for next physical page
  sub  r4, r4, #1   ; Decrement number of MB left
  cmp  r4, #0
  bne  %B35    ; Map next MB

  bic  r0, r0, #0xF0000000 ; Clear Section Base Address Field
  bic  r0, r0, #0x0FF00000 ; Clear Section Base Address Field
  b  %B30    ; Get next element

40
  tst  r0, #8
  bic  r0, r0, #0x0C   ; clear cachable & bufferable bits in PTE
  add  r10, r10, #0x0800  ; (r10) = ptr to 1st PTE for "unmapped uncached space"
  bne  %B25    ; go setup PTEs for uncached space
  sub  r10, r10, #0x3000  ; (r10) = restore address of 1st level page table

 ;----------------------------------------------
 ; Setup mmu to map (VA == 0) to (PA == 0x30000000).

  ; cached area
  ldr  r0, =PT_1ST_BASE   ; PTE entry for VA = 0
  ldr  r1, =PT_1ST_ENTRY_CNB ; Cache/Unbuffer/RW
  str  r1, [r0]

  ; uncached area.
  add  r0, r0, #0x0800   ; PTE entry for VA = 0x02000000
  ldr  r1, =PT_1ST_ENTRY_NCNB ; Uncache/Unbuffer/RW
  str  r1, [r0]

  ; Comment:
  ; The following loop is to direct map RAM VA == PA. i.e.
  ;   VA == 0x50XXXXXX => PA == 0x50XXXXXX for S3C6410
  ; Fill in 8 entries to have a direct mapping for DRAM

  ldr  r10, =PT_1ST_BASE  ; Restore address of 1st level page table
  ldr  r0,  =DRAM_BASE_PA_START

  add  r10, r10, #PTR_1ST_PTE ; (r10) = ptr to 1st PTE for 0x50000000

  add  r0, r0, #0x1E   ; 1MB cachable bufferable
  orr  r0, r0, #0x400  ; set kernel r/w permission
  mov  r1, #0
;  mov  r3, #64    ; 64MB DRAM
  mov  r3, #128    ; 128MB DRAM
45
  mov  r2, r1    ; (r2) = virtual address to map Bank at
  cmp  r2, #0x20000000:SHR:BANK_SHIFT
  add  r2, r10, r2, LSL #BANK_SHIFT-18
  strlo  r0, [r2]
  add  r0, r0, #0x00100000 ; (r0) = PTE for next physical page
  subs  r3, r3, #1
  add  r1, r1, #1
  bgt  %B45

  ldr  r10, =PT_1ST_BASE ; (r10) = restore address of 1st level page table

  ; The page tables and exception vectors are setup.
  ; Initialize the MMU and turn it on.
  mov  r1, #1
  mcr  p15, 0, r1, c3, c0, 0 ; setup access to domain 0
  mcr  p15, 0, r10, c2, c0, 0

  mcr  p15, 0, r0, c8, c7, 0 ; flush I+D TLBs

  mrc  p15, 0, r1, c1, c0, 0
  orr  r1, r1, #0x0071  ; Enable MMU
  orr  r1, r1, #0x0004  ; Enable the Data Cache

  ldr  r0, =VirtualStart

  cmp  r0, #0    ; make sure no stall on "mov pc,r0" below
  mcr  p15, 0, r1, c1, c0, 0
  mov  pc, r0    ; & jump to new virtual address
  nop

         ; MMU & caches now enabled.
         ;   (r10) = physcial address of 1st level page table

;-----------------------------------------------
; MMU Enabled and Virtual Address is Valid from here
;-----------------------------------------------

VirtualStart

;--------------------------------------------------
; Initialize Stack
; Stack size and location information is in "image_cfg.inc"
;--------------------------------------------------

  mrs  r0, cpsr

  bic  r0, r0, #Mode_MASK
  orr  r1, r0, #Mode_IRQ | NOINT
  msr  cpsr_cxsf, r1    ; IRQMode
  ldr  sp, =IRQStack_VA   ; IRQStack

  bic  r0, r0, #Mode_MASK | NOINT
  orr  r1, r0, #Mode_SVC
  msr  cpsr_cxsf, r1    ; SVCMode
  ldr  sp, =SVCStack_VA   ; SVCStack

;------------------------------------
; Jump to Main() "C" Routine
;------------------------------------

  b  main
  b  .  ; Should no be here...

  ENTRY_END

;------------------------------------------------------------------------------
; End of StartUp
;------------------------------------------------------------------------------

  END

###################################################################################

SMDK6410 BSP SDBoot完整的文件包图片:

 

 

[ 本帖最后由 青叶漂零 于 2011-3-18 09:27 编辑 ]

SDBoot.jpg (16.73 KB, 下载次数: 3)

SDBoot.jpg

最新回复

必须有   详情 回复 发表于 2011-3-18 11:44
点赞 关注

回复
举报

5979

帖子

8

TA的资源

版主

沙发
 
不是有编译好的版本吗 你怎么还要自己编译啊
 
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 

回复

354

帖子

1

TA的资源

五彩晶圆(中级)

板凳
 
你有吗,
 
 
 

回复

5979

帖子

8

TA的资源

版主

4
 
必须有
 
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表