Forum: Mikrocontroller und Digitale Elektronik AT91SAM7A3 - Wie bekomme ich ein Programm da drauf?


von Sebastian (Gast)


Lesenswert?

Hi,

ich versuche schon seit Ewigkeiten auf ein AT91SAM7A3-EK irgendwie Code 
zu bekommen.
Ich bekomme nicht mal die Beispiele von atmel drauf, von eigenen ganz zu 
schweigen.
Die Suche hier im Forum bringt mich auch nicht weiter.

Wenn ich Beispielsweise das PWM-Beispiel von Atmel in IAR lade und dann 
per Debugger ausführe passiert rein gar nichts. Laut der Beschreibung 
sollten LEDs auf dem Board pulsieren. Da das aber nicht passiert kann 
ich nicht mal nachvollziehen ob das Programm überhaupt auf dem mC läuft.

Ich habe versucht die Dateien sowohl per USB als auch per SAM-ICE mit 
SAM-BA auf das Teil zu laden.
Dabei habe ich dann wieder das Problem dass die *.bin Dateien die mir 
der IAR Compiler baut alle genau 1MB groß sind und SAM-BA mir das ganze 
mit einer "Memory Overflow"-Meldung quittiert.

WIE lade ich denn die Beispielprogramm WO hin? Flash? SRAM?

Kann mir jemand ne Starthilfe geben, wie ich eines der Bespiele auf den 
Controller bekomme?
Bin hier am Verzweifeln. Bisher hat mich kein einziges Dokument weiter 
gebracht.

von Bri (Gast)


Lesenswert?

Du solltest die Programme in den Flash laden, und zwar den externen 
Flash. Dazu musst du im allgemeinen wissen, an welcher Adresse der Flash 
eingeblendet wird. Das siehst du im Linker File oder startup Code deines 
Projektes.

von Bri (Gast)


Lesenswert?

Da dein bin File 1MB groß ist, bin ich jetzt mal davon ausgegangen, dass 
du externes Flash hast. Hast du externes oder willst du nur den internen 
Flash benutzen?

von Sebastian (Gast)


Lesenswert?

So ... also ich hab nochmal nachgeschaut.
Wenn ich die Beispiele runterlade von ATMEL, dann sind die kompilierten 
bin Dateien da schon dabei.
Wenn ich eine dieser Dateien nehme und in den Flash schreibe klappt 
alles Wunderbar.
Nur wenn ich das Projekt in IAR nochmal neu bauen lasse ist die Datei 
dann viel zu groß.
Liegt das irgenwie an den Einstellungen von IAR?
Hab nichts gefunden.

Kann jemand damit was anfangen?

von Bri (Gast)


Lesenswert?

Ja es liegt an den Einstellungen, nämlich der Flash Größe und der Flash 
Adresse. Überprüf die mal.

von Sebastian (Gast)


Lesenswert?

naja, das sollte ja alles in der icf datei stehen oder?
1
/*###ICF### Section handled by ICF editor, don't touch! ****/
2
/*-Editor annotation file-*/
3
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
4
/*-Memory Regions-*/
5
define symbol __ICFEDIT_region_ROM_start__   = 0x100000;
6
define symbol __ICFEDIT_region_ROM_end__     = 0x13FFFF;
7
define symbol __ICFEDIT_region_RAM_start__   = 0x200000;
8
define symbol __ICFEDIT_region_RAM_end__     = 0x207FFF;
9
/*-Sizes-*/
10
define symbol __ICFEDIT_size_startup__  = 0x100;
11
define symbol __ICFEDIT_size_vectors__  = 0x100;
12
define symbol __ICFEDIT_size_cstack__   = 0x1000;
13
define symbol __ICFEDIT_size_svcstack__ = 0x60;
14
define symbol __ICFEDIT_size_irqstack__ = 0x60;
15
define symbol __ICFEDIT_size_heap__     = 0x0;
16
/*-Exports-*/
17
export symbol __ICFEDIT_region_ROM_start__;
18
export symbol __ICFEDIT_region_ROM_end__;
19
export symbol __ICFEDIT_region_RAM_start__;
20
export symbol __ICFEDIT_region_RAM_end__;
21
export symbol __ICFEDIT_size_startup__;
22
export symbol __ICFEDIT_size_vectors__;
23
export symbol __ICFEDIT_size_cstack__;
24
export symbol __ICFEDIT_size_svcstack__;
25
export symbol __ICFEDIT_size_irqstack__;
26
export symbol __ICFEDIT_size_heap__;
27
/**** End of ICF editor section. ###ICF###*/
28
29
define memory mem with size = 4G;
30
define region STA_region = mem:[from __ICFEDIT_region_ROM_start__ size __ICFEDIT_size_startup__];
31
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_ROM_end__];
32
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
33
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
34
35
define block CSTACK    with alignment = 4, size = __ICFEDIT_size_cstack__   { };
36
define block SVC_STACK with alignment = 4, size = __ICFEDIT_size_svcstack__ { };
37
define block IRQ_STACK with alignment = 4, size = __ICFEDIT_size_irqstack__ { };
38
define block HEAP      with alignment = 4, size = __ICFEDIT_size_heap__     { };
39
40
initialize by copy { readwrite };
41
initialize by copy { section .vectors };
42
do not initialize  { section .noinit };
43
44
place in STA_region { section .cstartup };
45
place in ROM_region { readonly };
46
place in VEC_region { section .vectors };
47
place in RAM_region { readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP };

von Sebastian (Gast)


Lesenswert?

define symbol _ICFEDIT_region_ROM_start_   = 0x100000;
define symbol _ICFEDIT_region_ROM_end_     = 0x13FFFF;

wenn man das mal voneinander abzieht und umrechnet kommt man doch bei 
256kB raus oder?

Das stimmt mit dem datenblatt überein.

von Manne (Gast)


Lesenswert?

Also das Problem hatte ich auch schon, mit der neuen Embedded Workbench 
5.0 Kickstart Edition von IAR ist es allerdings bei den Beispiel nicht 
mehr aufgetreten.

von gerhard (Gast)


Lesenswert?

hallo,
in den beispielen der software packages v1.4 war ein fehler.
das modul board_cstartup_iar.s muss geändert werden:
die folgende anweisung ist hinzuzufügen:

__iar_init$$done:   // neue anweisung

resetVector:

wie schon erwähnt sind die iar beispiele korrekt.


gruss
gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.