www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ARM programator
Pojdi na stran Prejšnja  1, 2, 3
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Sob Apr 23, 2011 5:20 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.34
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sob Apr 23, 2011 9:04 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
teey
Član
Član



Pridružen-a: Pon 15 Sep 2008 20:51
Prispevkov: 21
Aktiv.: 0.10
Kraj: Maribor

PrispevekObjavljeno: Ned Apr 24, 2011 2:28 pm    Naslov sporočila:   Odgovori s citatom

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 Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Pon Apr 25, 2011 5:41 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3
Stran 3 od 3

 
Pojdi na:  
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