Forum: Mikrocontroller und Digitale Elektronik Ich bin total verwirrt (ARM)


von Tim (Gast)


Lesenswert?

Hallo @all,

ich wollte eigentlich auf ARM umsteigen/einsteigen (vorher 8051 und AVR 
in C, bisschen HC12/MPC ASM).

Im groben hab ich mich schon durch ein paar IDEs gekämpft (Demo 
Versionen) und bin jetzt bei IAR, Crossworks und Keil hängen geblieben. 
Wahrscheinlich werde ich den Keil nutzten und dazu das U-Link als JTAG 
Adapter (geht hier auch der Wiggler?). Als alternative evtl. Crossworks 
mit Wiggler, die ja gut zusammenarbeiten sollen. Der IAR sieht zwar ganz 
gut aus, aber wie der mit dem Wiggler arbeitet weis ich nicht so recht.

Jedenfalls ist mir schon einiges klarer geworden (8051 war immer schön 
einfach ... neues Projekt anlegen, Header einbinden, ne Main-Routine 
schreiben, bissel Quelltext dazu, Compilen, Linken, Flashen und läuft 
..) Bei einem ARM scheint das ja komplett anders zu laufen.

Jetzt sehe ich wahrscheinlich den Wald vor Bäumen nicht mehr. Brauche 
ich unbedingt ein Startup File (wobei Keil/Crossworks ja welche 
mitliefern, also nicht so das ding) ? Bislang habe ich nie Startup Files 
eingebunden..

Und wie deklariere ich einen Interrupt? Also im Grunde ist das ja klar, 
ein bisschen SFR setzen, sprich welcher Interrupt welche Prio und welche 
Source. Aber wie setzte ich den Vektor?

Hier im Tutorial habe ich gelesen quasi einfach mittels
1
VICVectAddr0 = (unsigned long)ISR;
für Interrupt Vektor 0 die Adresse festlege. Restliche Register sind 
klar. Und im Haupt-Quelltext (z.b. main.c) dann eine funktion definieren 
mittels
1
__irq void ISR()
2
{
3
 .. bla bla .. flag löschen etc.
4
}

War es das dann schon? Muss ich den Interrupt Vektor in eine Startup 
Datei deklarieren (die würde ich ja am liebsten weg lassen) oder kann 
ich das auch in einer Config-Funktion (in C) ?

Also kurzfassung von meinem Roman ..

1. Startup benötigt ?
2. Wo Interrupt Vektoren/Adressen definieren ?
3. Wiggler mit Keil Debugger möglich ? (um den U-Link zu sparen)

Vielen vielen Dank!

von Rooney B. (rooney)


Lesenswert?

Also Wiggler geht definitiv mit IAR. Ich verwende den Olimex Clone und 
arbeite seit einer Woche erfolgreich damit.

Keil wollte ich mir auch ansehen, aber da habe ich leider keine 
Lizenz... Keil würd ich aber von der Debugger IDE jedoch etwas 
sympathischer finden.

Laut Auskunft eines Forumianers ist es in Kombination mit H-JTAG und dem 
Wiggler bzw. kompatiblen Clone möglich auch über Keil zu debuggen. Beim 
IAR wird der Wiggler ohnehin standardmäßig unterstützt.


Ohne Startup-File wird nicht viel funktionieren. Sieh dir mal die 
Beispielprogramme von IAR an, da sind auch Startup-Files dabei. Am 
besten ist du nimmst das ganze Projekt, samt allen Einstellungen, und 
änderst einfach den Source Code für deine Applikation. Dann sollte auf 
jeden Fall alles richtig konfiguriert sein.
Wie das mit den Interrupts funktioniert weiß ich selbst noch nicht, 
versuch es auch grad mit Hilfe der Beispiele herauszufinden.

von Tim (Gast)


Lesenswert?

Ok, wie gesagt die Starup-Dateien sind ja bei allen IDEs schon da.

Dann werde ich einfach mal einen Wiggler nachbauen und mit Keil testen. 
evtl. geht es ja mit diesem H-JTAG und dann kann ich mir die 300 euros 
noch sparen. Man muss ja nicht immer alles rausschmeißen ;) Zumindest am 
Anfang..

Ich weis halt nur noch nicht wie ich die Interrupts definieren. Wenn du 
was rausgefunden hast würde es mich brennend interessieren g

von Peter (Gast)


Lesenswert?

Oder einfach das ARM Software Seminar besuchen. Da gibt es für 199,- € 
einen Tag Schulung (gleich die wichtigsten Fragen klären) und man darf 
ein ULINK2 und eine MCB2130 Eva Board mit nach Hause nehmen. Findet 
mitte April in München, Stuttgart, Düsseldorf oder Braunschweig statt.

Das mit den Interrupts ist (bei Keil) fast so einfach wie oben 
beschrieben.
Die Konfiguration des InterruptControllers braucht allerdings ein paar 
Zeilen mehr. Da du mit Keil testen möchtest, schau dir doch mal die 
entsprechenden Beispiele an, da gibt es jede Menge auch mit Interrupt 
(selbst Blinky).

von Tim (Gast)


Lesenswert?

Also ich denke ich weis wie es funktioniert.

Laut Keil-Doku legt das Startup-File einen Vektor fest (beispiel 
IRQ_Handler in Keil Startup). Wenn mein ARM keinen Interrupt-Vektoren 
hat (gibt es sowas überhaupt?) dann springt er bei einem Interrupt immer 
zu der funktion
1
void IRQ_Handler() __irq

in der ich dann schauen muss was es für ein Interrupt war und demnach 
arbeite. Bei einem Vektorfähigem ARM kann ich die Interrupt-Vektoren in 
C festlegen bei der Hauptkonfiguration des µC nach dem Startup-File.

[..]
1
VICVectAddr0 = (unsigned long) tc0;
 [..]

und dann wird
1
void tc0() __irq

aufgerufen wenn ein Interrupt anliegt. Natürlich müssen noch mehr 
Register gesetzt werden (Welche Peripherie überhaupt, Aktivieren des 
IRQ).

Also doch mehr oder weniger wie bei meinem guten alten einfachen 8051 
g

Danke!

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.