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
1 | #ifndef CKGR_PLLR_VAL
|
2 | #if OSCILLATOR_CLOCK_FREQUENCY==18432000
|
3 | /* MCK, UDPCK = 18.432MHz * 73 / 14 / 2 = 48.05486MHz */
|
4 | #define CKGR_PLLR_VAL (1 << CKGR_PLLR_USBDIV_BIT) | (72 << CKGR_PLLR_MUL_BIT) | (0 << CKGR_PLLR_OUT_BIT) | (63 << CKGR_PLLR_PLLCOUNT_BIT) | (14 << CKGR_PLLR_DIV_BIT)
|
5 | #else
|
6 | #error OSCILLATOR_CLOCK_FREQUENCY not supported
|
7 | #endif
|
8 | #endif
|
aber zum Anfang würde ich dir wirklich zu den Demos raten. mfg Stephan
auch bei crossworks auf der Seite! http://www.rowleydownload.co.uk/arm/packages/ und dort holst du die das Package "Atmel_AT91SAM7S_EK.hzq"
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?
Weil ich finde nichts über Dinge wie IO Pins ansteuern. Registernamen also z.B. SAM_GPIO->Direction_Port = 0x00FF;
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?).
Nein diese Dokumente bringen mich nicht wirklich weiter. Includen muss man ja zu verwenden der GPIOs nichts?
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
JA gut aber wenn ich jetzt z.b. PIO_PER = 0x0000; setze (Register write only) dann sagt mir Crossworks: undeclared....!
Hallo S. Rum, versuch doch mal PIOA_PER. Es ist auch erlaubt, im Header AT91SAM7.h nachzusehen, wie die Register heissen WinkMitDemZaunpfahl Gruß, Nils
Kannst du mir sagen wo der sich befindet (Pfad). Weil im Crossworks Ordner und mit der Windows Suche habe ich ihn nicht gefunden.
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.
Stimmt das? Kann ds so gehen oder fehlt noch irgend eine Colck oder sonstige Einstellungen.
1 | PMC_PCER = (1<<PMC_PCER_PIOA); // Peripheral Clock für PIOA Enable |
2 | PMC_SCER = (1<<PMC_SCER_PCK ); // Processor Clock Enable |
3 | |
4 | PIOA_PER = 0xFFFF; // PIO Enable |
5 | PIOA_OER = 0xFFFF; // Output Enable |
6 | //PIOA_CODR = 0xFFFF; // Clear Output
|
7 | PIOA_SODR = 0xFFFF; // Set Output |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.