ARM Beispiel

M

Martin Kaul

Guest
Hallole,

Hab gerade eine Platine mit nem XScale Prozessor (ARM9) Daheim zum
rumspielen...

Gnu-Tools fuer den XScale ist installiert und ein LED-Wackel Programm
geht auch (Funktion main() direkt ab Adresse 0)

Aktuell bin ich gerade dabei, die syscalls für's printf zu
implementieren. Dazu muss ich eine Interrupttabelle ab Adresse 0 anlegen
(Für den SWI Interrupt). Irgendwie funktioniert das überhaupt nicht.
Nicht einmal die main() Funktion wird jetzt aufgerufen.

Genuegt es, in die Interrupttabelle nur die Sprungadressen
einzutragen (Vektor), oder muss für jeden Interrupt eine Sprunganweisung
programmiert werden (Hab beide Möglichkeiten schon versucht).

Hat jemand hier schon mal was mit nem ARM gemacht und vielleicht ein
kleines Beispiel?

Vielen Dank im Voraus...

tschaule
Martin
 
Martin Kaul <mkaul@leuze.de> wrote:
Halloele,

Hab gerade eine Platine mit nem XScale Prozessor (ARM9) Daheim zum
rumspielen...

Gnu-Tools fuer den XScale ist installiert und ein LED-Wackel Programm
geht auch (Funktion main() direkt ab Adresse 0)
Man beachte: ab Adresse 0

Aktuell bin ich gerade dabei, die syscalls für's printf zu
implementieren. Dazu muss ich eine Interrupttabelle ab Adresse 0 anlegen
(Für den SWI Interrupt). Irgendwie funktioniert das überhaupt nicht.
Nicht einmal die main() Funktion wird jetzt aufgerufen.
Man beachte auch hier: ab Adresse 0

Schreib das Programm irgendwo anders hin und leg die Tabelle auf 0.
Wenn alles unbedingt ab 0 laufen muss, schreib da einen Sprungbefehl
zum Programm hin und anschliessend lass das Programm den Sprungbefehl
ueberschreiben.
Beispiel:

0000h: jmp 7000h
....
7000h: mov [0000h],dword 1234h
....

(ok, ich hab keine Ahnung von dem Prozessor und erst recht nicht von
dem Assembler, du musst es also anpassen)

Markus Fenske
 
In article <407bddd6$0$277$4d4ebb8e@read.news.de.uu.net>,
Martin Kaul <mkaul@leuze.de> wrote:
Genuegt es, in die Interrupttabelle nur die Sprungadressen
einzutragen (Vektor), oder muss für jeden Interrupt
eine Sprunganweisung programmiert werden
Da müssen Sprünge hin. Der Trick war zumindest beim ARM2, daß FIQ der letzte
in der Tabelle war und bei 1C dann nicht der Sprung in den FIQ-Handler,
sondern der FIQ-Handler selbst stand (RISC OS hat eine Funktion,
den FIQ zu reservieren und den Handler zu installieren).
 
Markus Fenske wrote:
Aktuell bin ich gerade dabei, die syscalls für's printf zu
implementieren. Dazu muss ich eine Interrupttabelle ab Adresse 0 anlegen
(Für den SWI Interrupt). Irgendwie funktioniert das überhaupt nicht.
Nicht einmal die main() Funktion wird jetzt aufgerufen.

Man beachte auch hier: ab Adresse 0
ne, ne - in der 2. Version hab ich main() natürlich auf ne andere
Adresse gesetzt, d.h. nur der Interruptvektor ist an 0.

Schreib das Programm irgendwo anders hin und leg die Tabelle auf 0.
Wenn alles unbedingt ab 0 laufen muss, schreib da einen Sprungbefehl
zum Programm hin und anschliessend lass das Programm den Sprungbefehl
ueberschreiben.
Beispiel:

0000h: jmp 7000h
genau das hab ich versucht, geht aber nicht (d.h. Prozessor springt in
Wald) - hmm, muss ich mal weiter-wurschteln...

...
7000h: mov [0000h],dword 1234h
...

(ok, ich hab keine Ahnung von dem Prozessor und erst recht nicht von
dem Assembler, du musst es also anpassen)

Markus Fenske
Danke + tschaule
Martin
 
Edgar Fuß wrote:

In article <407bddd6$0$277$4d4ebb8e@read.news.de.uu.net>,
Martin Kaul <mkaul@leuze.de> wrote:

Genuegt es, in die Interrupttabelle nur die Sprungadressen
einzutragen (Vektor), oder muss für jeden Interrupt
eine Sprunganweisung programmiert werden

Da müssen Sprünge hin. Der Trick war zumindest beim ARM2, daß FIQ der letzte
in der Tabelle war und bei 1C dann nicht der Sprung in den FIQ-Handler,
sondern der FIQ-Handler selbst stand (RISC OS hat eine Funktion,
den FIQ zu reservieren und den Handler zu installieren).
Danke fuer den Hinweis - ich hab jetzt mal das Referenzmanual zu
ARM bestellt - mal schaun, was dort zu Interupts drin steht...

tschaule
Martin
 
In article <407cf29c$0$274$4d4ebb8e@read.news.de.uu.net>,
Martin Kaul <mkaul@leuze.de> wrote:

Danke fuer den Hinweis - ich hab jetzt mal das Referenzmanual zu
ARM bestellt - mal schaun, was dort zu Interupts drin steht...
Das "ARM ARM" gibt es auch elektronisch - auf arm.com finde ich aktuell nur
eine quick reference - ah, da ist es:

ARM Architecture Reference Manual

Second Edition, edited by David Seal : Addison-Wesley : ISBN 0-201-73719-1
(Known as the "ARM ARM". ARM Doc No.: DDI-0100)
Also available in PDF form on the ARM Technical Publications CD.
Die gibt es unter
http://www.arm.com/documentation/cd_request.html

cu
Michael
 

Welcome to EDABoard.com

Sponsor

Back
Top