ICh habe mir die Demo von Crossworks ARM heruntergeladen und wll nun
anfangen auf AT91SAM7s256 zu Programmieren.
Ich habe ein Projekt (executable) erstellt den nötigen startup Code
ausgewählt und das Projekt erstellt. Hierzu habe ich dann unter Files
eine neue C-Datei erstellt die ich main.c genannt habe doch jetzt komme
ich nicht weiter.
Was muss ich an .h einbinden (bei AVRs ist es ja so das man z.b.
avr/io.h einbindet)?
Wenn ich nun eine int main(void) erstelle und das Programm Build+Debug
bleibt er im Debugger dann immer in einer Routine (in ctl.s oder so) die
memory_set heißt. Hierzu wäre meine Frage nun wie fange ich nun an mit
meiner main das diese auch sozusagen ausgeführt wird den im startup code
wird ja schon alles gesetzt (IRQ Vectoren und Clock), oder?
mfg
>> Was muss ich an .h einbinden (bei AVRs ist es ja so das man z.b.>> avr/io.h einbindet)?
Nix
>> Wenn ich nun eine int main(void) erstelle und das Programm Build+Debug>> bleibt er im Debugger dann immer in einer Routine (in ctl.s oder so) die>> memory_set heißt
Ich vermute ctl.s ist der Startup Code von Rowley. Memory_set wird die
Funktion zum Nullen nichtinitialisierter Variablen sein, was da aber
schief geht kann ich so nicht sagen.
>> Im startup code wird ja schon alles gesetzt (IRQ Vectoren und Clock),>> oder?
IRQ Vectoren, jain, schau mal im Memory Fenster was dann auf 0x18 steht.
Clock?? Denke eher nicht. Zu dem Startup Code muss es auch Source geben,
schau dir den mal an.
Aber eigentlich muss es gehen, das du dir mit dem Project Wizard ein
Project erstellen lässt, das im Simulator läuft und wo du im main()
ankommst.
Ja, also jetzt habe ich mal ein Packages reinstall gemacht mein altes
Projekt herausgeworfen, alles so neu gemacht wie bei letzten mal und nun
komm ich komischerweise (zum Glück) in main an wo ich dann in eine
while(1) eintrete.
Nur mit der Clock bin ich dennoch etwas verwirrt in den Project Options
ist ein 18MHz Quarz eingestellt nur wie ist da jetzt mit der PLL muss
ich da den startup code modifizieren oder besser nicht und ich schreibe
mir dafür selbst eine Routine
Hi,
hast du die schon mal die Demos installiert? "Atmel_AT91SAM7S_EK.hzq"
da kannst du dir ein paar Sachen an sehen.
zum Clock:
Solltest du immer die 18,432 MHz verwenden, dann brauchst du nicht
verändern!
Das Startup File stellt die PLL so ein das die max. Frequenz mit USB
Nutzung raus kommt.
siehe File AT91Sam7_startup.s, Zeile ab 92
Sind das nicht die Packages die man mit der IDE herunterlädt (Dashboard
also Startseite oben links zeigt mir Rowley das alle Packages up-to-date
sind). Oder irre ich mich da?
Im Software Package für AT91SAM7S-EK von atmel.com sind diverse
Beispiele. Auch für GNU tools, also das was im Hintergrund von
Crossworks f. ARM die "Arbeit" macht. Der C-Code kann wahrscheinlich
direkt verwendet werden, es ist nur zu beachten, dass es einen
IRQ-Wrapper gibt, denn Atmel nutzt einen solchen in ihren Beispielen, um
compilerspezifische Besonderheiten im C-Code zu vermeiden. Kenne die
Beispiele/Startups von Rowley nicht, daher keine direkten Hinweise zur
evtl. erforderlichen Anpassung. (Kann man hzq-Packete auch ohne
Crossworks einsehen?).
Mit den Crossworks Headern kann man die Register so benutzen wie sie im
Datenblatt stehen, ohne Pointer quatsch und unnötige prefixe (AT91C_...)
und sie sind schon mit * zur Dereferenzierung im Header definiert. Das
sieht dann z.B. so aus:
SSC_TCMR = (15<<SSC_TCMR_PERIOD_BIT) | (0x4<<SSC_TCMR_START_BIT) |
(1<<SSC_TCMR_CKO_BIT) | (0<<SSC_TCMR_STTDLY_BIT);
Eingebunden wird dafür folgendes:
#include <targets/AT91SAM7.h>
Doof ist nur, dass man den meisten Code den man findet konvertieren
muss.
S. Rum schrieb:
>Sind das nicht die Packages die man mit der IDE herunterlädt (Dashboard>also Startseite oben links zeigt mir Rowley das alle Packages up-to-date>sind). Oder irre ich mich da?
Nein ist richtig.
Also hast du 2 Packages installiert?
Es gibt 2 Arten von Packages, einmal für den Prozessor(AT91SAM7S) und
Beispiele für die Evolution Kits (AT91SAM7S-EK)
unter samples findest du dann eine Solution mit 6 Beispielen.
wie Marius S. schon schrieb:
>#include <targets/AT91SAM7.h>
Dort findest du die passenden Register.
Um jetzt schneller an ein lauffähiges Projekt zu kommen, hole dir das
"at91lib_softpack_1.5" oder so.
Dort gib es schon fertige Treiber und libs.
Die kannst du schon fast komplet verwenden, pass mit den doppelten namen
auf. (math, stdio usw)
Wenn du mir sagst was du als Beispiel brauchst, schau ich mal was ich
machen kann.
mfg
Stephan
Hallo S. Rum,
versuch doch mal PIOA_PER.
Es ist auch erlaubt, im Header AT91SAM7.h nachzusehen, wie die Register
heissen WinkMitDemZaunpfahl
Gruß, Nils
Hallo S. Rum,
ich habe gerade mal Crossworks für ARM 2.0 heruntergeladen und die oben
genannten Packages installiert. Ich kann den Header AT91SAM7.h auch
nicht finden...
Auf meinem Desktop, mit dem ich normalerweise programmiere, nutze ich
noch Crossworks für ARM 1.7, da liegt das Header-File unter /targets im
Crossworks-Ordner.
Wie das bei Version 2.0 funtionieren soll, ist mir im Moment noch nicht
klar. Hast Du Deine Version schon aktiviert?
Gruß, Nils
Such' mal nach der Datei AT91SAM7S256_MemoryMap.xml
Sollte irgendwo unter C:\Dokumente und Einstellungen\_User_\Lokale
Einstellungen\Anwendungsdaten\Rowley Associates Limited\ liegen.
Darin steckt die Information, die normalerweise im Header liegt. Wie das
jetzt bei Crossworks 2.0 mit dem XML genau funktioniert, muss ich
erstmal ergründen. Wenn ich das so sehe, bleibe noch bei 1.7.
Du solltest aber Beispieldateien finden, wenn Du _Dein_Board_Samples.hzp
mit Crossworks öffnest. Das .hzp-File zu Deinem Board hast Du ja
wahrscheinlich schon von der Rowley Download-Seite heruntergeladen. Die
Beispiele sollten sich dann auch problemlos kompilieren lassen.
Viel Erfolg, Nils.
Viel Lärm um nichts...
Habe die Header gefunden, war wohl blind. Warum die in einem versteckten
Ordner abgelegt werden müssen, ist mir ein Rätsel...
Schau hier nach und Du findest Deinen Header:
C:\Dokumente und Einstellungen\_User_\Lokale
Einstellungen\Anwendungsdaten\Rowley Associates Limited\CrossWorks for
ARM\packages\include\targets
Gut für heute, Nils.
Ist wirklich an seltsamer Stelle versteckt. Erklärt sich möglicherweise
als benutzerabhängige Eigenschaft, wenn verschiedene Anwender
verschiedene Pakete verwenden. Kann man aber auch anderswohin
verfrachten. Der Pfad ist konfigurierbar.
Ich habe den Quarz mit 18,432MHz eingestellt der AT91SAM7S256 arbeitet
laut Datenblatt mit max. ca. 60MHz (Olimex.com -> SAM7-P256) nun wüsste
ich gerne wo ich in Crossworks dann die Arbeitsfrequenz steht die
Crossworks errechnet hat um den USB Port noch verwenden zu können wie es
ja Standard ist. bzw wie ich selbst die max. Freqenz einstellen kann.