Hallo NG,
also so habe ich mir das nicht vorgestellt mit dem ARM. Habe mal das
verfügbare LED-Blink-PRG mit der IAR Workbench compiliert und dann
hochgeladen.
1. Mich erstaunt es echt, wieviel Zeug der Controller braucht, um 2 LEDs
abwechselnd blinken zu lassen. Das hat mich echt frustriert.
2. Wenn ich mit openocd versuche den Speicher disassembliert anzuzeigen,
finde ich das gesuchte Programm nicht. Das müsste doch eigentlich - wenn
keine Interrupts dazwischenfunken da liegen, wo der PC (programmcounter)
steht, oder sehe ich da was falsch?
Der Chip hat doch bestimmt irgendeinen festgelegten Zustand nach dem
Anschalten. Da kann es doch nicht so schwer sein, einen PORT auf Ausgang
zu schalten und auf HI zu setzen, oder?
Ich bin echt schon am Überlegen, ob ich das Hobby an den Nagel hänge.
Wollte eigentlich immer schon ein bischen mit Elektronik machen.
Naja, vielleicht kann mir ja doch noch irgendjemand einen Tip geben, wie
ich in ASM (egal ob sauber oder nicht gecoded) eine LED an und
ausschalten kann, ohne zig Header und Käse.
ich stelle mit das so vor ():
start:
setze PORT1 auf Ausgang
schleife:
setze PORT1 auf HI
warte
setze PORT1 auf LO
warte
springe zu schleife
Wenn mir jemand sowas in der Art auf einfachste Weise zeigen könnte,
wäre ich echt total dankbar!
MfG
Peter
Das kenn ich, die ARMs sind nicht gerade einsteigerfreundlich
und was am dümmsten ist, die Samplecodes sind oft nicht
für eben gerade diesen Baustein auf diesem Board geschrieben
sondern gerade bei den AT91SAM oftmals für zig Bausteine in
diversen Applikationen. Das macht den Durchblick am Anfang
ziemlich schwierig ... über ätzend ... zu frustrierend.
Ich für meinen Teil hab dann das Heil in der Flucht vor dem
SAM7 gesucht und bin auf LPC 21xx umgeschwenkt.
Gerade für die IAR gibts da recht ordentliche Dokus und
Demos. Mir hats den Einstieg deutlich vereinfacht.
Ach so, ebenfalls sehr erleichtert hat mir dann die
Anschaffung vom J-Link.
Hallo Peter,
Ich arbeite mit sam7s64 im Assembler. Ich kann Dir nur sagen dass, Du
fuer den Einstieg Crossstudio Eval Version einsetzen sollst. Nach
einiger Zeit kannst Du mit Open Source weiter machen.
Nach etwas Uebung gefaellt mir ARM Assembler besser als AVR Assembler.
Nachdem Du Dich durch Startup Routinen gearbeitet hast, wirst du das
Programmieren von ARM nicht viel anders als das von AVR finden, mir ging
es allenfalls so.
Ich habe mir inzwischen ziemlich viel frei zugängliche Literatur
runtergeladen. Das hilft auch sehr.
So, der Code unten soll deine Led zum Blinken bringen.
//##########################################
//It is assumed that a led is connected to PIOA17.
//Adjust the code if your hardware is set up differently.
//##########################################
#include <sam7s64.h>
// Startup code begin
// Disable Watchdog ------------------------------------------------
ldr r0, =WDT_MR @; load Watchdog address
ldr r1, =WDT_MR_WDDIS @; mask Disable bit
str r1, [r0] @; Watchdog disabled
//---------------------------------------------------------
//Startup code end
@;Enable PIT------------------------------------------------------------
ldr r0, =PIT_MR @; PIT mode address
ldr r1, =1<<PIT_MR_PITEN_BIT|0xFFFFF<<PIT_MR_PIV_BIT
str r1, [r0]
@;----------------------------------------------------------------------
#define r0PIOA_BASE r0
ldr r0PIOA_BASE, =PIOA_BASE
//PIO control for pin
17------------------------------------------------
ldr r1, =PIOA_PER_P17 @; mask Pin 17-20,24
str r1, [r0PIOA_BASE,#PIOA_PER_OFFSET] @; pin 17 PIO
controlled
//----------------------------------------------------------------------
--
//output for pin
17------------------------------------------------------
ldr r1, =PIOA_PER_P17 @; mask Pin 17
str r1, [r0PIOA_BASE,#PIOA_OER_OFFSET] @; pin 17 output
//----------------------------------------------------------------------
-
//led
off----------------------------------------------------------------
ldr r1, =PIOA_PER_P17 @; mask Pin 17
str r1, [r0PIOA_BASE,#PIOA_SODR_OFFSET] @; pins 17 off
//----------------------------------------------------------------------
-
loop:
//wait------------------------------------------------------------------
wait:
ldr r3, =PIT_SR @; read PIT status
ldr r3,[r3]
tst r3, #1 @; test for overflow
beq wait // if not overflowed, wait
ldr r1, =PIT_PIVR @; reset the counter by reading
ldr r1,[r1]
//led
toggle-------------------------------------------------------------
ldr r2, =PIOA_PDSR @; read PIOA
ldr r2,[r2]
ldr r1,=PIOA_PER_P17 // mask pin 17
tst r2,r1 //test
strne r1, [r0PIOA_BASE,#PIOA_CODR_OFFSET] //clear if set
streq r1, [r0PIOA_BASE,#PIOA_SODR_OFFSET] //set if cleared
//----------------------------------------------------------------------
-
b loop
Hallo,
zunächst mal vielen Dank für Deine Mühe! Könntest Du mir vielleicht noch
die include-Datei "sam7s64.h" zukommen lassen (peter.pippinger@gmx.de),
oder hier als Antwort hinterlassen. Das wäre echt super nett!
Vielen Dank!
Peter
Habt ihr irgendeinen bestimmten Grund, warum ihr noch Assembler
verwenden wollt?
Bei mir hat sich mittlerweile eine gewisse Faulheit eingestellt. Ich
kann PIC, 8051, AVR, x86 (bis SSE2) Assembler und hab mittlerweile keine
große Lust noch mehr Assembler-Sprachen dazuzulernen.
Ich finde den Assembler-Code, der vom GCC produziert wird, auch sehr
gut. Ich bin natürlich schon so neugierig, dass ich mir den
Assembler-Output vom GCC anschaue und schau was der aus meinem Code
macht. Da gibts auch einen netten Thread
(Beitrag "[WinARM] Data-Alignment lässt grüßen") da wo ich mal einen
witzigen GCC-Output gepostet hatte.
Aber aktiv möchte ich auf solchen Platformen eigentlich nicht mehr
Assembler programmieren.
Bei noch größeren Platformen (ARM9), will ich nicht mal mehr was mit der
Peripherie zu tun haben (außer es geht nicht anders) und vertrau voll
und ganz Linux ...
Mfg
Thomas Pototschnig
Hallo Peter,
die Header Datei ist ein Teil von Crossstudio und ich mag nicht die
Lizenz lesen, um zu erfahren, ob ich sie weitergeben darf. Daher sind
unten nur die nötigen Definitionen.
Lade Dir doch das Crossstudio runter, da ist die komplette Datei dabei.
#define WDT_MR 0xFFFFFD44
#define WDT_MR_WDDIS 0x8000
#define PIT_MR 0xFFFFFD30
#define PIT_MR_PITEN_BIT 24
#define PIT_MR_PIV_BIT 0
#define PIOA_BASE 0xFFFFF400
#define PIOA_PER_P17 0x20000
#define PIOA_PER_OFFSET 0x0
#define PIOA_OER_OFFSET 0x10
#define PIOA_SODR_OFFSET 0x30
#define PIOA_PDSR 0xFFFFF43C
#define PIOA_CODR_OFFSET 0x34
#define PIT_SR 0xFFFFFD34
#define PIT_PIVR 0xFFFFFD38
@Thomas Pototschnig
Grund 1. Ich kann kein C.
Grund 2. Die Programme, die ich mache, sind meistens DSP Routinen. Die
brauchen keine komplexe Struktur aber die Geschwindigkeit.
romanua wrote:
> @Thomas Pototschnig>> Grund 1. Ich kann kein C.> Grund 2. Die Programme, die ich mache, sind meistens DSP Routinen. Die> brauchen keine komplexe Struktur aber die Geschwindigkeit.
Sind beides gute Gründe :-)
Mfg
Thomas Pototschnig
@ Peter Pippinger:
>1. Mich erstaunt es echt, wieviel Zeug der Controller braucht, um 2 LEDs>abwechselnd blinken zu lassen. Das hat mich echt frustriert.
kannst du diese aussage auch näher begründen?
>Der Chip hat doch bestimmt irgendeinen festgelegten Zustand nach dem>Anschalten. Da kann es doch nicht so schwer sein, einen PORT auf Ausgang>zu schalten und auf HI zu setzen, oder?
wer lesen kann ist im vorteil!
schon mal einen blick ins datenblatt geworfen?
dort findest du für jeden peripherei block den zustand nach dem reset.
>Naja, vielleicht kann mir ja doch noch irgendjemand einen Tip geben, wie>ich in ASM (egal ob sauber oder nicht gecoded) eine LED an und>ausschalten kann, ohne zig Header und Käse.
kannst du mir einen vernünftigen grund für assembler programmieren
nennen?
ich habe nicht den eindruck dass dein wissen dafür ausreicht.
gruss
gerhard
>>1. Mich erstaunt es echt, wieviel Zeug der Controller braucht, um 2 LEDs>>abwechselnd blinken zu lassen. Das hat mich echt frustriert.>kannst du diese aussage auch näher begründen?
naja, ich habe ja mal ungefär aufgezeigt, wie ich mir das mit einer
Blinkenden LED vorstelle. Dass dann ein ASM-Code von 400 Byte rauskommt
verwundert mich als 6510 / ix86 User.
>>Der Chip hat doch bestimmt irgendeinen festgelegten Zustand nach dem>>Anschalten. Da kann es doch nicht so schwer sein, einen PORT auf Ausgang>>zu schalten und auf HI zu setzen, oder?>wer lesen kann ist im vorteil!>schon mal einen blick ins datenblatt geworfen?>dort findest du für jeden peripherei block den zustand nach dem reset.
Da gebe ich Dir recht. Meine Erfahrung bisher ist eigentlich die, dass
wenn man in einem Forum nach ner simplen "Hallo Welt" Appliktion fragt
meistens Hilfe bekommt. Ich denke, eine LED anzuschalten entspricht in
etwa einem Hallo Welt auf dem ARM7. Mehr wollte ich auch nicht.
>>Naja, vielleicht kann mir ja doch noch irgendjemand einen Tip geben, wie>>ich in ASM (egal ob sauber oder nicht gecoded) eine LED an und>>ausschalten kann, ohne zig Header und Käse.>kannst du mir einen vernünftigen grund für assembler programmieren>nennen?>ich habe nicht den eindruck dass dein wissen dafür ausreicht.
Naja, es gibt Sachen, von denen ich halt gerne genau wissen möchte, wie
lange sie dauern. Und da ist es mit irgendwie zu umständlich zuerst in C
zu schreiben, dann gucken, was rauskommt und eventuelle NOPS einzubauen,
dass das Timing stimmt.
Wie gesagt. Ich habe noch keine allzugroße Ahnung von der Materie, aber
ich möchte mich damit beschäftigen. Und mit C anfangen kommt für mich
nicht in Frage, weil ich das für meine Zwecke nicht möchte.
>Da gebe ich Dir recht. Meine Erfahrung bisher ist eigentlich die, dass>wenn man in einem Forum nach ner simplen "Hallo Welt" Appliktion fragt>meistens Hilfe bekommt. Ich denke, eine LED anzuschalten entspricht in>etwa einem Hallo Welt auf dem ARM7. Mehr wollte ich auch nicht.
genau das macht eines der beispiele der iar workbench.
schon mal angesehen?
>Wie gesagt. Ich habe noch keine allzugroße Ahnung von der Materie, aber>ich möchte mich damit beschäftigen. Und mit C anfangen kommt für mich>nicht in Frage, weil ich das für meine Zwecke nicht möchte.
keine ahnung haben aber die einfachste lösung nicht zu nehmen ist eine
interessante vorgangsweise! bin mal gespannt wie du mit der einstellung
weiterkommst.
gruss
gerhard
>poste doch das nächste mal Deine unfreundlichen Antworten direkt in den>Papierkorb statt hier ins Forum.
es zwingt dich niemand meine postings zu lesen!
p.s.: vielleicht solltest du mal einen kurs besuchen "wie erkenne ich
zynismus"
gerhard
> p.s.: vielleicht solltest du mal einen kurs besuchen "wie erkenne ich> zynismus"
Zynismus gehört nicht in ein Forum. Es zwingt dich auch niemand auf
Fragen, die dir zu trivial vorkommen, zu antworten.
Mfg
Thomas Pototschnig
Naja, wer wird denn gleich...
meine LED blinkt jetzt schon mal ganz kurz nach nem Reset. Das freut
mich schon mal. Und das alles ohne C. Ganz so wie ichs mag!
Naja, wenn ich irgendwann mal fertig bin, und die LED so richtig blinkt
wie ich das mag, denn werde ich auf jeden Fall ne kleine Howto
veröffentlichen.
Tschuess und bitte nicht streiten :-)
achso, wollte nur noch kurz was zu Gerd sagen:
>>Wie gesagt. Ich habe noch keine allzugroße Ahnung von der Materie, aber>>ich möchte mich damit beschäftigen. Und mit C anfangen kommt für mich>>nicht in Frage, weil ich das für meine Zwecke nicht möchte.>keine ahnung haben aber die einfachste lösung nicht zu nehmen ist eine>interessante vorgangsweise! bin mal gespannt wie du mit der einstellung>weiterkommst.
Naja, einfachste Lösung ist halt nicht das was ich mag. Wenn ich
Flugzeug fliegen will, bringt mir der KFZ-Führerschein nicht viel...
Normalerweise habe ich gelernt, sich in Foren lieber nicht auf hitzige
Gespräche einzulassen. Deshalb belasse ich es auch dabei...
MfG
Peter
@Daniel
>Zynismus gehört nicht in ein Forum. Es zwingt dich auch niemand auf>Fragen, die dir zu trivial vorkommen, zu antworten.
wer keinen zynismus verträgt sollte einen anderen beruf wählen.
und ich bin gerne bereit auch triviale fragen zu beantworten (habe ich
in der vergangenheit schon mehrmals bestätigt). zynisch werde ich nur
wenn jemand sich ein urteil über etwas anmaßt von dem er offensichtlich
relativ wenig ahnung hat.
@daniel:
>...vielleicht solltest du mal einen Kurs besuchen : SOZIALKOMPETENZ
danke für den tollen tipp!
@peter
>Naja, einfachste Lösung ist halt nicht das was ich mag. Wenn ich>Flugzeug fliegen will, bringt mir der KFZ-Führerschein nicht viel...
wenn du ein flugzeug fliegen willst dann mußt du eine menge lesen und es
wird dir keiner diese arbeit abnehmen. dein posting hat bei mir den
eindruck erwckt, dass du fich allzuviel mit der materie bisher
beschäftigt hast.
ich wünsch dir auf jeden fall viel spaß beim fliegen!
gruss
gerhard
>>Naja, einfachste Lösung ist halt nicht das was ich mag. Wenn ich>>Flugzeug fliegen will, bringt mir der KFZ-Führerschein nicht viel...>wenn du ein flugzeug fliegen willst dann mußt du eine menge lesen und es>wird dir keiner diese arbeit abnehmen. dein posting hat bei mir den>eindruck erwckt, dass du fich allzuviel mit der materie bisher>beschäftigt hast.
Ich habe ja bereits geschrieben, dass ich noch nicht allzuviel Ahnung
von der Materie habe. Für mich ists übrigens ein Hobby und kein Beruf.
Und im Hobbybereich nehme ich mir einfach mal die Freiheit, auch mal was
nicht ganz so professionell zu tun. Da bleibts halt dann in meinem Fall
beim Modellfliegen :-) Das ist aber auch OK.
Ich habe bisher kein für mich vernünftiges "Hallo Welt" gefunden, mit
dem ich bisher immer angefangen habe. Sei es nun ASM 6510 / ix86, PHP,
C#, SQL oder was auch immer.
Die Assemblerbefehle des ARM7 kann ich mir eigentlich ganz gut
vorstellen. Nur ist mir halt die Speicheraufteilung nicht so klar. Und
die I/O-Ports würde ich auch noch gerne verstehen. Das ist dann
eigentlich schon alles was ich brauche.
Wie gesagt. Gestern hat sich die LED schon mal kurz gemeldet. Und wenn
sie es dann mal länger tut, bin ich zufrieden.
MFG
Peter
@peter
>Ich habe bisher kein für mich vernünftiges "Hallo Welt" gefunden, mit>dem ich bisher immer angefangen habe.
wie schon erwähnt findest du in der iar workbench genau so ein beispiel
wie du es suchst (verzeichnis
..\arm\examples\Atmel\SAM7S64\AT91SAM7S-BasicTools\).
weiterführende beispiele findest du unter www.at91.com.
>Die Assemblerbefehle des ARM7 kann ich mir eigentlich ganz gut>vorstellen.
um sie dir besser vorstellen zu können solltest du mal das sog. "arm
arm" dir ansehen
(http://www.cs.helsinki.fi/u/jikorhon/gp32/dl/DDI0100E_ARM_ARM.pdf.zip)
> Nur ist mir halt die Speicheraufteilung nicht so klar. Und>die I/O-Ports würde ich auch noch gerne verstehen. Das ist dann>eigentlich schon alles was ich brauche.
da hilft ein blick in das datasheet (www.atmel.com)
gruss
gerhard
>> Nur ist mir halt die Speicheraufteilung nicht so klar. Und>> die I/O-Ports würde ich auch noch gerne verstehen. Das ist dann>> eigentlich schon alles was ich brauche.> da hilft ein blick in das datasheet (www.atmel.com)
Ich wollte mir demnächst mal einen "I/O-Port-Konfigurator" basteln, mit
dem man die I/O-Ports konfigurieren kann, weil es lästig viele Register
sind, bis man alles so eingestellt hat, wie man es braucht. Also auch
die Port-Multiplexer usw ...
Oder gibt es sowas sogar schon?
Mfg
Thomas
>Ich wollte mir demnächst mal einen "I/O-Port-Konfigurator" basteln, mit>dem man die I/O-Ports konfigurieren kann, weil es lästig viele Register>sind, bis man alles so eingestellt hat, wie man es braucht. Also auch>die Port-Multiplexer usw ...>Oder gibt es sowas sogar schon?
einen "konfigurator" gibt es nicht aber eine library die funktionen zur
initialisierung und betreuung der peripherals enthält:
...\arm\examples\Atmel\SAM7S64\Include\lib_AT91SAM7S64.h
eine beschreibung findest du hier:
...\arm\examples\Atmel\SAM7S64\Include\AT91SAM7S64.html
allerdings setzt das alles c voraus!
gruss
gerhard
gerhard wrote:
>>Ich wollte mir demnächst mal einen "I/O-Port-Konfigurator" basteln, mit>>dem man die I/O-Ports konfigurieren kann, weil es lästig viele Register>>sind, bis man alles so eingestellt hat, wie man es braucht. Also auch>>die Port-Multiplexer usw ...>>>Oder gibt es sowas sogar schon?> einen "konfigurator" gibt es nicht aber eine library die funktionen zur> initialisierung und betreuung der peripherals enthält:> ...\arm\examples\Atmel\SAM7S64\Include\lib_AT91SAM7S64.h>> eine beschreibung findest du hier:> ...\arm\examples\Atmel\SAM7S64\Include\AT91SAM7S64.html
Kenn ich schon und hab ich auch schon verwendet. Es bleibt trotzdem
lästig. Irgendein Programm, das gleich einen C-Code erzeugt wär ganz
nett. Muss ich mir doch mal die Arbeit machen ...
> allerdings setzt das alles c voraus!
Kein Problem - kann ich alles.
Mfg
Thomas Pototschnig
>Kenn ich schon und hab ich auch schon verwendet. Es bleibt trotzdem>lästig. Irgendein Programm, das gleich einen C-Code erzeugt wär ganz>nett. Muss ich mir doch mal die Arbeit machen ...
von iar gibt es ein tool namens makeapp welches genau das erledigt.
allerdings wird von den arm's nur die lpc familie unterstützt.
gruss
gerhard