 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Sob Apr 23, 2011 5:20 pm Naslov sporočila: |
|
|
Bootloader? S tem mislite na startup kodo?
Tukaj je en primer startup kode, katero sem uporabil sam. Kodo samo prevedeš in zlinkaš poleg ostalih objektov in knjižnic. Poleg tega je reset handler lepo razložen. Aja no tole je za ARM 9 procesor in mogoče boš moral kodo kaj predelati.
Koda: |
.global __start
.global arm926ejs_reset
.global dcache_flush
.global ea3131_init
.global __gnu_bssstart
.global __gnu_bssend
.global __image_size
/*; This is the user application that is called by the startup code
; once board initialization is complete*/
.global c_entry
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Private defines and data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
.EQU MODE_USR, 0x010
.EQU MODE_FIQ, 0x011
.EQU MODE_IRQ, 0x012
.EQU MODE_SVC, 0x013
.EQU MODE_SVC_NI, 0x0D3
.EQU MODE_ABORT, 0x017
.EQU MODE_UNDEF, 0x01b
.EQU MODE_SYSTEM, 0x01f
.EQU MODE_BITS, 0x01f
.EQU I_MASK, 0x080
.EQU F_MASK, 0x040
.EQU IF_MASK, 0x0C0
/* MMU table address present in bootROM */
.EQU BROM_MMU_BASE_ADDR, 0x1201C000
/*; Masks used to disable and enable the MMU and caches*/
.EQU MMU_DISABLE_MASK, 0xFFFFEFFA
.EQU MMU_ENABLE_MASK, 0x00001005
/*; Default stack sizes*/
.EQU FIQ_STACK_SIZE, 128
.EQU IRQ_STACK_SIZE, 256
.EQU ABORT_STACK_SIZE, 32
.EQU UNDEF_STACK_SIZE, 32
.EQU SYSTEM_STACK_SIZE, 64
.text
.code 32 /*; Startup code*/
.align 2
/*; This initial handler is only for reset, a real application will
; replace this exception handler in memory with a more capable one*/
__start:
arm926ejs_reset:
B arm926ejs_reset_handler /*; Reset*/
.word 0x41676d69 /* image magic number */
.word 0,0,0,0,0
image_type:
.word 0x0000000A /*Plain text no CRC check*/
sizeOfPermanentCode:
.word (__image_size) /* image length */
.word 0,0
bootparameter:
.word 0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Function: arm926ejs_reset_handler
;
; Purpose: Reset vector entry point
;
; Description:
; Place ARM core in supervisor mode and disable interrupts. Disable
; the MMU and caches. Setup a basic stack pointer and call the
; system init function to set up the memory interfaces, MMU
; table, initialize code and data regions, and any other board
; specific initialization. Setup the base address for the MMU
; translation table and enable the MMU and caches. Setup stacks for
; all ARM core modes and jump to the c_entry() function.
;
; Parameters: NA
;
; Outputs; NA
;
; Returns: NA
;
; Notes: NA
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
arm926ejs_reset_handler:
/*; Put the processor is in system mode with interrupts disabled*/
MOV r0, #MODE_SVC_NI
MSR cpsr_cxsf, r0
/*; Ensure the MMU is disabled*/
MRC p15, 0, r1, c1, c0, 0
LDR r2,=MMU_DISABLE_MASK
AND r1, r1, r2
MCR p15, 0, r1, c1, c0, 0
/*; Invalidate TLBs*/
MOV r1,#0
MCR p15, 0, r1, c8, c7, 0
/*; Invalidate both caches*/
MCR p15, 0, r1, c7, c7, 0
/*; Enable instruction cache (for now)*/
MRC p15, 0, r1, c1, c0, 0
LDR r2,=0x1000
ORR r1, r1, r2
MCR p15, 0, r1, c1, c0, 0
/*; Setup the Domain Access Control as all Manager
; Make all domains open, user can impose restrictions*/
MVN r1, #0
MCR p15, 0, r1, c3, c0, 0
/*; Setup Translation Table Base*/
LDR r3, =BROM_MMU_BASE_ADDR
MCR p15, 0, r3, c2, c0, 0
/*; Setup jump to run out of virtual memory at location inVirtMem*/
LDR r5, =inVirtMem
/*; Enable the MMU with instruction and data caches enabled*/
MRC p15, 0, r1, c1, c0, 0
LDR r2,=MMU_ENABLE_MASK
ORR r1, r1, r2
MCR p15, 0, r1, c1, c0, 0
/*; Jump to the virtual address*/
MOV pc, r5
/*; The following NOPs are to clear the pipeline after the MMU virtual
; address jump*/
NOP
NOP
NOP
inVirtMem:
/*; Get end of internal memory and set aside 16K for the page table*/
ADR r3, arm926ejs_reset
/*; Initialize stacks for all modes
; All interrupts disabled at core for all modes*/
MOV r1, #IF_MASK /*; No Interrupts*/
/*; Adjust stack top*/
SUB r3, r3, #4
/*; Enter FIQ mode and setup the FIQ stack pointer*/
ORR r0, r1, #MODE_FIQ
MSR cpsr_cxsf, r0
MOV sp, r3
SUB r3, r3, #FIQ_STACK_SIZE
/*; Enter IRQ mode and setup the IRQ stack pointer*/
ORR r0, r1, #MODE_IRQ
MSR cpsr_cxsf, r0
MOV sp, r3
SUB r3, r3, #IRQ_STACK_SIZE
/*; Enter Abort mode and setup the Abort stack pointer*/
ORR r0, r1, #MODE_ABORT
MSR cpsr_cxsf, r0
MOV sp, r3
SUB r3, r3, #ABORT_STACK_SIZE
/*; Enter Undefined mode and setup the Undefined stack pointer*/
ORR r0, r1, #MODE_UNDEF
MSR cpsr_cxsf, r0
MOV sp, r3
SUB r3, r3, #UNDEF_STACK_SIZE
/*; Enter System mode and setup the User/System stack pointer*/
ORR r0, r1, #MODE_SYSTEM
MSR cpsr_cxsf, r0
MOV sp, r3
SUB r3, r3, #SYSTEM_STACK_SIZE
/*; Enter SVC mode and setup the SVC stack pointer.
; This is the mode for runtime initialization.*/
ORR r0, r1, #MODE_SVC
MSR cpsr_cxsf, r0
MOV sp, r3
/*; Clear ZI segment*/
LDR r0, =__gnu_bssstart /*Replace ZIBEGIN*/
LDR r1, =__gnu_bssend /*Replace ZIEND*/
MOV r2, #0
clearzi:
CMP r0, r1
BEQ clearzi_exit
STR r2, [r0]
ADD r0, r0, #4
B clearzi
clearzi_exit:
/*; Initial ea3131 board*/
[slovenščina je zame španska vas] ea3131_init
load_entry:
/*; Get address of application to execute*/
LDR pc, =c_entry
NOP
dcache_flush:
CMP r0, #0
BNE inval
flushonly:
MRC p15, 0, r15, c7, c10, 3
BNE flushonly
MOV pc, lr
inval:
MRC p15, 0, r15, c7, c14, 3
BNE inval
MOV pc, lr
/*;END */
.END
|
LP Žiga |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.34 Kraj: Lovrenc na P.
|
Objavljeno: Sob Apr 23, 2011 9:04 pm Naslov sporočila: |
|
|
O čem ti to? Spraševal je o programatorju. Programator preko uarta rabi bootloader in bootloader je že tovarniško zapečen v enem delu flasha in ga mislim, da niti ne moreš prepisati (nisem čisto prepričan). Bootloader poskrbi iz katerega mesta se bo izvajal program in nima veze s startup kodo. |
|
Nazaj na vrh |
|
 |
teey Član

Pridružen-a: Pon 15 Sep 2008 20:51 Prispevkov: 21 Aktiv.: 0.10 Kraj: Maribor
|
Objavljeno: Ned Apr 24, 2011 2:28 pm Naslov sporočila: |
|
|
zoki19 je napisal/a: |
//*** 2011 ***//
Živjo,
Jaz sem še čist zelen na tem področju, tako da upam da me ne boste čisto povozili.
Nekaj časa že prebiram forum o programiranju ARM-jev. Učil sem se na Š-ARM-u ki smo ga uporabljaj na faxu.
Od tistega nisem odnesel skoraj nič, sedaj pa ker služba to zahteva se pospešeno učim programiranja. Zdaj pa dovolj opisovanja in da preidem na konkretno zadevo.
Rad bi da mi svetujete oz. pomagate pri izgradnji programatorja za LPC21XX. nikjer na tem kur..vem netu ne najdem sheme po kateri bi si naredil programator za prej omenjeno serijo.
Rad bi namreč program zagnal čisto svobodno za konkretno vezje.
Prosim za pomoč in se že vnaprej zelo lepo zahvaljujem.
Hvala
lep pozdrav |
V primeru da ti preprost bootloader ni dovolj in bi rad bolj konkretno stopil zraven, ti absolutno priporočam da si nabaviš ali narediš en OpenOCD adapter. Vsi so večinoma izpeljanke, ki za uslugo uporabljajo FT2232 - klikni sem!
Jaz sem si ga zrisal in polotal kar sam, iz vseh vetrov najboljše, tako imam zdaj adapter z FT2232H, ki podpira RTCK, z bufferji ki gredo do 1.8V, je kompatibilen z jtagkey2 orodji in še en prost serijski port mi nudi, vse pa dela na USB kablu  |
|
Nazaj na vrh |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Pon Apr 25, 2011 5:41 pm Naslov sporočila: |
|
|
MarkoM je napisal/a: |
O čem ti to? Spraševal je o programatorju. Programator preko uarta rabi bootloader in bootloader je že tovarniško zapečen v enem delu flasha in ga mislim, da niti ne moreš prepisati (nisem čisto prepričan). Bootloader poskrbi iz katerega mesta se bo izvajal program in nima veze s startup kodo. |
Očitno sem se malo zmedel ampak hvala za info. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|