Forum: Mikrocontroller und Digitale Elektronik Crossworks ARM Anfänge


von S. Rum (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

>> 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.

von S. Rum (Gast)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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

von S. Rum (Gast)


Lesenswert?

Woher bekomme ich die Demos?

von Stephan (Gast)


Lesenswert?

auch bei crossworks auf der Seite!

http://www.rowleydownload.co.uk/arm/packages/

und dort holst du die das Package "Atmel_AT91SAM7S_EK.hzq"

von S. Rum (Gast)


Lesenswert?

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?

von S. Rum (Gast)


Lesenswert?

Hat jemand Beispiele, Projekte für SAM7S die ich mir mal ansehen kann.

von S. Rum (Gast)


Lesenswert?

Weil ich finde nichts über Dinge wie IO Pins ansteuern.
Registernamen also  z.B. SAM_GPIO->Direction_Port = 0x00FF;

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

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?).

von S. Rum (Gast)


Lesenswert?

Nicht das ich wüsste hzq ist glaube ich Rowley spezifisch.

von S. Rum (Gast)


Lesenswert?

Nein diese Dokumente bringen mich nicht wirklich weiter. Includen muss 
man ja zu verwenden der GPIOs nichts?

von Marius S. (lupin) Benutzerseite


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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

von S. Rum (Gast)


Lesenswert?

JA gut aber wenn ich jetzt z.b. PIO_PER = 0x0000; setze (Register write 
only) dann sagt mir Crossworks: undeclared....!

von S. Rum (Gast)


Lesenswert?

Hast du vieleicht eine Liste von Icludes (links,etc).

von S. Rum (Gast)


Lesenswert?

Beispiele einfach mal nur Pin auf Ausgang setzten und AN, AUS schalten.

von Nils (Gast)


Lesenswert?

Hallo S. Rum,

versuch doch mal PIOA_PER.

Es ist auch erlaubt, im Header AT91SAM7.h nachzusehen, wie die Register 
heissen WinkMitDemZaunpfahl

Gruß, Nils

von S. Rum (Gast)


Lesenswert?

Ich habe den Header nicht gefunden sonst hätte ich das getan.

von S. Rum (Gast)


Lesenswert?

Kannst du mir sagen wo der sich befindet (Pfad). Weil im Crossworks 
Ordner und mit der Windows Suche habe ich ihn nicht gefunden.

von Nils (Gast)


Lesenswert?

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

von Nils (Gast)


Lesenswert?

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.

von Nils (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Harald Glimmer (Gast)


Lesenswert?

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.

von Harald Glimmer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.