Forum: Mikrocontroller und Digitale Elektronik AT91SAM7 - Erste Erfahrungen.


von Peter Pippinger (Gast)


Lesenswert?

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

von Marko (Gast)


Lesenswert?

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.

von romanua (Gast)


Lesenswert?

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

von Peter Pippinger (Gast)


Lesenswert?

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

von Thomas P. (pototschnig)


Lesenswert?

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

von romanua (Gast)


Lesenswert?

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

von romanua (Gast)


Lesenswert?

@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.

von Thomas P. (pototschnig)


Lesenswert?

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

von gerhard (Gast)


Lesenswert?

@ 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

von Peter Pippinger (Gast)


Lesenswert?

>>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.

von gerhard (Gast)


Lesenswert?

>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

von Stefan K. (_sk_)


Lesenswert?

@gerhard:

poste doch das nächste mal Deine unfreundlichen Antworten direkt in den 
Papierkorb statt hier ins Forum.

Stefan

von gerhard (Gast)


Lesenswert?

>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

von Thomas P. (pototschnig)


Lesenswert?

> 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

von Daniel (Gast)


Lesenswert?

@Gerhard

...vielleicht solltest du mal einen Kurs besuchen : SOZIALKOMPETENZ

von Peter Pippinger (Gast)


Lesenswert?

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 :-)

von Peter Pippinger (Gast)


Lesenswert?

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

von gerhard (Gast)


Lesenswert?

@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

von Peter Pippinger (Gast)


Lesenswert?

>>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

von gerhard (Gast)


Lesenswert?

@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

von Thomas P. (pototschnig)


Lesenswert?

>> 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

von gerhard (Gast)


Lesenswert?

>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

von Thomas P. (pototschnig)


Lesenswert?

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

von gerhard (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.