www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32 Anwendung mit uboot von SDRAM starten


Autor: Pascal86 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich will eine einfache Anwendung auf meinem Ap7000 laufen lassen.
Diese soll mit uboot in den SDRAM geladen werden und dann gestarted 
werden.

Mein code:
led.c
#include <avr32/io.h>

int main( void )
{



  AVR32_PIOE.per = 0x00000010; /* Set pio enable for PE04  */
  AVR32_PIOE.oer = 0x00000010; /* Define as output port */
  AVR32_PIOE.pudr =0x00000010; /* disable pull-up */
  AVR32_PIOE.idr = 0x00000010; /* Disable interrupts on this pin */

   while(1)
   {

      AVR32_PIOE.sodr =0x00000010; /* set  to high */


      AVR32_PIOE.codr =0x00000010; /* set  to low */



   }

   return 0;
}
Port ein/aus schalten

Mit AVR32 Studio compiliert:
Output from the build process:
**** Internal Builder is used for build               ****
avr32-gcc -O0 -Wall -c -fmessage-length=0 -mpart=ap7000 -oled.o ..\led.c
avr32-gcc -T mylds.x -e _start -mpart=ap7000 -oLed.elf led.o
Build complete for project Led
Time consumed: 234  ms. 

Die mylds.x basiert auf dem avr32elf_ap7000.x linker script in dem ich 
folgendes noch geändert habe:

FLASH (rxai) : ORIGIN = 0x10000000, LENGTH = 64M
Die Startaddresse "FLASH" hab ich einfach auf 0x10000000 (SDRAM) 
geändert.
So liegen jetzt alle Sachen die vorher bei 0x000 im Flash lagen im SDRAM

und
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = 0x10000000); . = 0x10000000;
Und die executable start Addresse von 0x0000000 auf 0x10000000 geändert.

avr32-objdump -f Led.elf sagt:
Led.elf:     file format elf32-avr32
architecture: avr32, flags 0x00000113:
HAS_RELOC, EXEC_P, HAS_SYMS, D_PAGED
start address 0x10000000

avr32-objdump -D Led.elf sagt:
Led.elf:     file format elf32-avr32

Disassembly of section .reset:

10000000 <_start>:
10000000:  48 1f         lddpc  pc,10000004 <_start+0x4>
10000002:  00 00         add  r0,r0
10000004:  10 00         add  r0,r8
10000006:  00 24         rsub  r4,r0
Disassembly of section .got:

24000014 <_GLOBAL_OFFSET_TABLE_>:
24000014:  10 00         add  r0,r8
24000016:  0f 30         ld.ub  r0,r7++
24000018:  10 00         add  r0,r8
2400001a:  00 e0         st.h  --r0,r0
2400001c:  10 00         add  r0,r8
2400001e:  00 a8         st.w  r0++,r8
Disassembly of section .init:

10000008 <_init>:
10000008:  eb cd 40 40   pushm  r6,lr
1000000c:  48 26         lddpc  r6,10000014 <_init+0xc>
1000000e:  1e 26         rsub  r6,pc
10000010:  c0 48         rjmp  10000018 <_init+0x10>
10000012:  00 00         add  r0,r0
10000014:  eb ff ff fa   st.bal  r5[0x1fa],pc
10000018:  f0 16 00 01   mcall  r6[4]
1000001c:  f0 16 00 00   mcall  r6[0]
10000020:  e3 cd 80 40   ldm  sp++,r6,pc

---entfernt----


100000fc <main>:
100000fc:  eb cd 40 80   pushm  r7,lr
10000100:  1a 97         mov  r7,sp
10000102:  49 99         lddpc  r9,10000164 <main+0x68>
10000104:  31 08         mov  r8,16
10000106:  93 08         st.w  r9[0x0],r8
10000108:  49 79         lddpc  r9,10000164 <main+0x68>
1000010a:  31 08         mov  r8,16
1000010c:  93 48         st.w  r9[0x10],r8
1000010e:  49 69         lddpc  r9,10000164 <main+0x68>
10000110:  31 08         mov  r8,16
10000112:  f3 48 00 60   st.w  r9[96],r8
10000116:  49 49         lddpc  r9,10000164 <main+0x68>
10000118:  31 08         mov  r8,16
1000011a:  f3 48 00 44   st.w  r9[68],r8
1000011e:  49 29         lddpc  r9,10000164 <main+0x68>
10000120:  32 08         mov  r8,32
10000122:  93 08         st.w  r9[0x0],r8
10000124:  49 09         lddpc  r9,10000164 <main+0x68>
10000126:  32 08         mov  r8,32
10000128:  93 48         st.w  r9[0x10],r8
1000012a:  48 f9         lddpc  r9,10000164 <main+0x68>
1000012c:  32 08         mov  r8,32
1000012e:  f3 48 00 60   st.w  r9[96],r8
10000132:  48 d9         lddpc  r9,10000164 <main+0x68>
10000134:  32 08         mov  r8,32
10000136:  f3 48 00 44   st.w  r9[68],r8
1000013a:  48 b9         lddpc  r9,10000164 <main+0x68>
1000013c:  34 08         mov  r8,64
1000013e:  93 08         st.w  r9[0x0],r8
10000140:  48 99         lddpc  r9,10000164 <main+0x68>
10000142:  34 08         mov  r8,64
10000144:  93 48         st.w  r9[0x10],r8
10000146:  48 89         lddpc  r9,10000164 <main+0x68>
10000148:  34 08         mov  r8,64
1000014a:  f3 48 00 60   st.w  r9[96],r8
1000014e:  48 69         lddpc  r9,10000164 <main+0x68>
10000150:  34 08         mov  r8,64
10000152:  f3 48 00 44   st.w  r9[68],r8
10000156:  48 49         lddpc  r9,10000164 <main+0x68>
10000158:  31 08         mov  r8,16
1000015a:  93 c8         st.w  r9[0x30],r8
1000015c:  48 29         lddpc  r9,10000164 <main+0x68>
1000015e:  31 08         mov  r8,16
10000160:  93 d8         st.w  r9[0x34],r8
10000162:  cf ab         rjmp  10000156 <main+0x5a>
10000164:  ff e0         *unknown*
10000166:  38 00         mov  r0,-128

................gekürzt....

Nun habe ich versucht die Anwendung von uboot aus zu starten:
U-Boot 1.3.4-atmel.buildroot.1 (Dec 18 2008 - 14:56:40)

U-Boot code: 00000000 -> 00011108  data: 000179e0 -> 0004e2f8
CPU: 140 Mhz HSB: 70 MHz PBA: 35 MHz PBB: 70 MHz
malloc: Using memory from 0x11f71000 to 0x11fb1000
DMA: Using memory from 0x11f6d000 to 0x11f71000
Flash:  8 MB at address 0x00000000
DRAM Configuration:
Bank #0: 10000000 32 MB
In:    serial
Out:   serial
Err:   serial
Net:   macb0, macb1
Press SPACE to abort autoboot in 1 seconds
U-Boot> loadb 0x10000000
## Ready for binary (kermit) download to 0x10000000 at 115200 bps...
## Total Size      = 0x00010e7c = 69244 Bytes
## Start Addr      = 0x10000000
U-Boot> go 0x10000000
## Starting application at 0x10000000 ...

Das Port PE0.4 sollte nun ein/aus geschaltet werden. Aber ich kann 
nichts auf dem Osszi sehen.
Das Port bleibt einfach auf High.

Was mache ich falsch?


Grüße
Pascal

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atmel Datenblatt:
"The PIO clock is generated by the Power Manager. Before accessing the 
PIO, the programmer must ensure that the PIO clock is enabled in the 
Power Manager."

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und:
"In the PIO description, Master Clock (MCK) is the clock of the 
peripheral bus to which the PIO is connected."

Autor: DerAlbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist völlig egal, lieber Gast, die clock ist nach dem Reset an, wenn 
man nicht nur Datenblatt zitiert, sondern ließt, weiß man dass ;-)

Was mich interessiert: Du hast das Linkerskript angepasst, OK..
1) Wo ist der Heap und wo ist dein Stack? ( Das sollte man vllt auch 
anpassen - muss man aber eigentlich auch nicht)
2) Wie kommt die Applikation denn in den Ram raus? Per JTAG sicher nicht 
- zumindest nicht nach einem PowerOn oder so... Du musst die Applikation 
schon in den Flash brennen und dann per Uboot in den Ram laden um das 
von dort auszuführen - leider kenne ich mich aber nicht so direkt mit 
dem Uboot aus, deswegen kann es auch sein, dass du alles richtig 
machst..
MFG

Autor: Pascal86 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zu 1)

Disassembly of section .stack:

24007000 <_stack>:

Der Stack liegt also im SRAM


Disassembly of section .bss:

24000840 <completed.2671>:
24000840:  00 00         add  r0,r0
  ...

24000844 <cur_heap_pos.2090>:
24000844:  00 00         add  r0,r0
  ...

24000848 <__malloc_top_pad>:
24000848:  00 00         add  r0,r0
  ...

Der Heap ebenfalls.


zu 2)

Ich hatte oben den log an der seriellen Schnittstelle (U-Boot) gepostet.
Hier kann man sehn das ich den Code mit "loadb" über die serielle 
Schnittstelle an 0x10000000(SDRAM) schreibe.

Mfg

Autor: Shibbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibts was neues ?

Autor: gen4ik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr32/io.h>
int main (void)
{

  volatile avr32_pio_t *pioa = &AVR32_PIOA;
  pioa->per = 0x00800000;
  pioa->oer = 0x00800000;
  pioa->idr = 0x00800000;
  pioa->pudr = 0x00800000;

  pioa->sodr = 0x00800000; //set PA24 high
  return 0;
}

path setzen
PATH=C:\Programme\Atmel\AVR Tools\AVR32 Toolchain\bin


avr32-gcc -O2 -Wall -c -fmessage-length=0 -mpart=ap7000 
-ffunction-sections -o main.o main.c
avr32-ld main.o -e 0x10400000 -o main.out
avr32-objcopy -O binary main.out main.bin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.