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
@gerhard: poste doch das nächste mal Deine unfreundlichen Antworten direkt in den Papierkorb statt hier ins Forum. Stefan
>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
@Gerhard ...vielleicht solltest du mal einen Kurs besuchen : SOZIALKOMPETENZ
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.