加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Norflash启动代码

发布时间:2020-12-15 18:14:19 所属栏目:百科 来源:网络整理
导读:启动代码文件 INCLUDE .2440addr.inc ;GPB for LED? IMPORT |Image$$ER_ROM1$$Base| ? ;ROM base ? ? ? 抵格开始 IMPORT |Image$$ER_ROM1$$Limit| ? ;ROM limit IMPORT |Image$$RW_RAM1$$Base| ? ;RW base IMPORT |Image$$RW_RAM1$$Limit| ? ;RW limit IMPO

启动代码文件

INCLUDE .2440addr.inc

;GPB for LED?


IMPORT |Image$$ER_ROM1$$Base| ? ;ROM base ? ? ? 抵格开始
IMPORT |Image$$ER_ROM1$$Limit| ? ;ROM limit
IMPORT |Image$$RW_RAM1$$Base| ? ;RW base
IMPORT |Image$$RW_RAM1$$Limit| ? ;RW limit
IMPORT |Image$$RW_RAM1$$ZI$$Limit| ;ZI limit
IMPORT |Image$$RW_RAM1$$ZI$$Base| ?;ZI base


IMPORT Main
PRESERVE8
AREA RESET,CODE,READONLY ;entry point
ENTRY
? ? b Reset ;reset tackle func ? ? ? ? ? ? ? ? ? ?空格
? ? b blank ; b HandleUndef
? ? b blank ; b HandleSWI
? ? b blank ; b HandlePrefetchAbort
? ? b blank ; b HandleDataAbort
? ? b blank ; b HandleNotUsed
? ? b blank ?; b HandleIRQ ? ?
? ? b blank ; b HandleFIQ
? ? blank ;JUST BLANK
? ? b blank
Reset
? ? ;cpu mode
? ? mrs r0,cpsr ? ;cpsr->r0
? ? bic r0,r0,#0x3f ? ;0b0011 1111
? ? orr r0,#0xd3 ? ? ? ?;0b1101 0011 |I|F|T|M4|M3|M2|M1|M0|
? ? msr cpsr_cxsf,r0 ? ;r0->cpsr ? ? 1 1 0 1 ?0 0 1 ?1


;INT disable
? ? ldr r0,=INTMSK ? ? ? ? ? ? ? ? ? ? ? 空格
? ? ldr r1,=0xffffffff
? ? str r1,[r0]
? ? ldr r0,=INTSUBMSK
? ? ldr r1,=0x7fff
? ? str r1,[r0]


;watchdog
? ? ldr r0,=WTCON ? ? ? ? ?;WTCON ? ?0x53000000 ? ?R0 store WTCON addr
? ? mov r1,#0x0?
? ? str r1,[r0] ? ? ? ? ? ?;value in r1,that is 0x0,store in the addr,that is the content in r0,make watch dog stop working


;clk setting
? ? ldr r0,=0x4c000014 ? ? ;CLKDIVN
? ? mov r1,#0x05 ? ;0b0000 0101
? ? str r1,[r0] ? ;FCLK:HCLK:PCLK=1:4:8 ?
? ? mrc p15,c1,c0,0 ? ;If HDIVN is not 0 and the CPU bus mode is the fast bus mode,the CPU will operate
? ? orr r0,#0xc0000000 ?;by the HCLK.This feature can be used to change the CPU frequency as a half or more
? ? mcr p15,0 ? ;without affecting the HCLKand PCLK. P7-9 in s3c2440 datasheet
? ? ldr r0,=0x4c000004 ? ;MPLLCON
? ? ldr r1,=0x0005c011 ? ;0b 0101 1100 0000 0001 0001
? ? str r1,[r0] ? ;SDIV=1 PDIV=1 MDIV=92 ?FCLK=400MHZ HCLK=100MHz ?PCLK=50MHz


;SDRAM init
? ? adrl ?r0,SMRDATA ? ;you should re-ensure the parameter of the SDRAM
? ? ldmia r0,{r1-r13}
? ? ldr ? r0,=BWSCON
? ? stmia r0,{r1-r13}
;set sp
? ? ldr sp,=0x32fff000


;LED1 light
? ? LDR r0,=GPBCON
? ? LDR r1,=0x400
? ? STR r1,[r0]

? ? ldr r0,=GPBUP
? ? ldr r1,=0x0
? ? str r1,[r0]


? ? ldr r0,=GPBDAT
? ? ldr r1,=0x3df ?;ob11 1101 1111


;light LED1 continuous


? ? ldr r0,=0x2ffff ;2FFFF ;Set LED light time
delay?
? ? sub r0,#1 ? ? ? ? ? ? ? ?;r0=r0-1 ? ? ? ? ? ??
? ?? cmp r0,#0x0 ? ? ? ? ? ? ? ? ;将r0的值与0相比较?
? ? bne delay ? ? ? ? ? ? ? ? ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句?


;copy program to SDRAM
;RO
? ? adr r0,ENTRY
? ? ldr r2,BaSEOfROM
? ? ldr r3,TopOfROM
0
? ? ldmia r0!,{r4-r7}
? ? stmia r2!,{r4-r7}
? ? cmp r2,r3
? ? bcc %b0


;RW
? ? sub r2,r2,r3 ??
? ? sub r0,r2


? ? ldr r2,BaSEOfBSS
? ? ldr r3,BaSEOfZI
1
? ? cmp r2,r3
? ? ldrcc r1,[r0],#4
? ? strcc r1,[r2],#4
? ? bcc %b1


;ZI
? ? mov r0,#0x0 ?
? ? ldr r3,EndOfBSS
2
? ? cmp r2,r3
? ? strcc r0,#4
? ? bcc %b2


;to main
? ? ldr pc,=Main
;memory init value
SMRDATA
DCD 0x22011000 ? ? ? ? ? ? ? ? ? ? ? ? ?;BWCSON
DCD 0x00000700 ? ? ? ? ? ? ? ? ? ? ? ? ?;GCS0
DCD 0x00000700 ? ? ? ? ;GCS1
DCD 0x00000700 ? ? ? ? ? ? ? ? ? ?;GCS2
DCD 0x00000700 ;GCS3
DCD 0x00000700 ? ? ? ? ? ? ? ? ? ;GCS4
DCD 0x00000700 ;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)+(Tsrc<<18)+REFCNT)
DCD 0XB1
DCD 0x30
DCD 0x30


;Bank 6 parameter?
B6_MT EQU 0x3 ;SDRAM?
B6_Trcd EQU 0x1 ;3clk?
B6_SCAN EQU 0x1 ;9bit?
?
;Bank 7 parameter?
B7_MT EQU 0x3 ;SDRAM?
B7_Trcd EQU 0x1 ;4clk?
B7_SCAN EQU 0x1 ;9bit
REFCNT ? ? ?EQU 1268?
?
;REFRESH parameter?
REFEN EQU 0x1 ;Refresh enable?
TREFMD EQU 0x0 ;CBR(CAS before RAS)/Auto refresh?
Trp EQU 0x0 ;2clk?
Tsrc EQU 0x1 ;5clk?
?
BaSEOfROM DCD |Image$$ER_ROM1$$Base|
TopOfROM ?DCD |Image$$ER_ROM1$$Limit|
BaSEOfBSS DCD |Image$$RW_RAM1$$Base|
BaSEOfZI ?DCD |Image$$RW_RAM1$$ZI$$Base|
EndOfBSS ?DCD |Image$$RW_RAM1$$ZI$$Limit|

END

Keil设置如下:


地址配置文件2440addr.inc

;GPB for LED
GPBCON ? EQU ? ?0x56000010 ? ? ;GPB ? LED1~LED4 coorespond GPB5~GPB8
GPBDAT ? EQU ? ?0x56000014 ;GPB
GPBUP ? ?EQU ? ?0x56000018 ;GPB


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


;watch DOG
WTCON ? ? ? EQU 0x53000000 ? ? ;WATCH DOG


;INT
INTMSK ? ? ?EQU ?0x4A000008
INTSUBMSK ? EQU ?0x4A00001C
END ?

main函数文件

#define rGPBCON ? ? ? ? ? ? ? (*(volatile unsigned long *) 0x56000010)
#define rGPBDAT ? ? ? ? ? ? ? (*(volatile unsigned long *) 0x56000014)
#define rGPBUP ? ? ? ? ? ? ? ?(*(volatile unsigned long *) 0x56000018)


int Main()
{
rGPBCON&=~((3<<10)|(3<<12)); ? //~110000000000=002222222222
rGPBCON |=(5<<10); ? //10000000000
rGPBUP=0xff; ? ? //~100000=022222
while(1)
{
rGPBDAT =0x0; ? ?//100000
}
}

注意:1)指令前加空格

? ? ? ? ? ? 2)伪操作抵格

? ? ? ? ? ? 3)加END

? ? ? ? ? ? 4)?ldr r0,=INTMSK ? //INTMSK的值赋给r0 ? ??

? ? ? ? ? ? 5)ldr r0.=0xffff ? ?//0xffff赋值给r0

? ? ? ? ? ? 6)?ldr pc,=Main ? ?//main为地址,将main标示的地址赋给PC

? ? ? ? ? ? 7)?ldr r2,BaSEOfROM ? //将BaSEOfROM在内存中的地址的存储的值赋给r2

? ? ? ? ? ? ?8)ldr伪指令和实指令的用法区别:实指令是将操作数2(如上的BaSEOfROM

? ? ? ? ? ? ? ? ? ? 标示的地址所存储的内容作为操作对象,伪指令则将操作数2(如上的Main)

? ? ? ? ? ? ? ? ? ? 本身作为操作对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读