mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Crossworks ARM Anfänge


Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
#ifndef CKGR_PLLR_VAL
  #if OSCILLATOR_CLOCK_FREQUENCY==18432000
     /* MCK, UDPCK = 18.432MHz * 73 / 14 / 2 = 48.05486MHz */  
     #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)
  #else
    #error OSCILLATOR_CLOCK_FREQUENCY not supported 
  #endif
#endif


aber zum Anfang würde ich dir wirklich zu den Demos raten.

mfg
Stephan

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher bekomme ich die Demos?

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: S. Rum (Gast)
Datum:

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

Autor: S. Rum (Gast)
Datum:

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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?).

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht das ich wüsste hzq ist glaube ich Rowley spezifisch.

Autor: S. Rum (Gast)
Datum:

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

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: S. Rum (Gast)
Datum:

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

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vieleicht eine Liste von Icludes (links,etc).

Autor: S. Rum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiele einfach mal nur Pin auf Ausgang setzten und AN, AUS schalten.

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: S. Rum (Gast)
Datum:

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

Autor: S. Rum (Gast)
Datum:

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

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harald Glimmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harald Glimmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt das? Kann ds so gehen oder fehlt noch irgend eine Colck oder 
sonstige Einstellungen.

  PMC_PCER = (1<<PMC_PCER_PIOA); // Peripheral Clock für PIOA Enable
  PMC_SCER = (1<<PMC_SCER_PCK ); // Processor Clock Enable

  PIOA_PER = 0xFFFF; // PIO Enable
  PIOA_OER = 0xFFFF; // Output Enable
  //PIOA_CODR = 0xFFFF; // Clear Output
  PIOA_SODR = 0xFFFF; // Set Output


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.