Forum: Mikrocontroller und Digitale Elektronik 1-es Programm auf AT91SAM7S-EK


von Mirko (Gast)


Lesenswert?

Hallo.

Ich werde verrückt, ich kriege es nicht mal hin eine LED auf dem 
AT91SAM7S-EK-Board leuchten zu lassen.
Mein Programm basiert auf dem Basic-Beispiel und sollte eigentlich 
richtig sein, oder?

// Include Standard files
#include "Board.h"

#define LED_1 (1<<0)


int main()
{//* Begin

  // First, enable the clock of the PIO
       AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA 
) ;

    // then, we configure the PIO Lines corresponding to LED1
    // to be output. No need to set these pins to be driven by the PIO 
because it is GPIO pins only.
       AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_1 ) ;

    // Clear the LED's. On the EB55 we must apply a "1" to turn off LEDs
       AT91F_PIO_SetOutput( AT91C_BASE_PIOA, 0 ) ; // LED einschalten


   while(1);

}//* End

Wie gesagt, das Programm soll nur eine LED leuchten lassen.

von Mirko (Gast)


Lesenswert?

so eine bescheuerte Schreibweise habe ich ja noch nie gesehen:

 AT91F_PIO_SetOutput( AT91C_BASE_PIOA, 0 ) ; // LED an
 AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, 1) ; // LED aus

von Mirko (Gast)


Lesenswert?

sorry, ich meine:

AT91F_PIO_SetOutput( AT91C_BASE_PIOA, 0 ) ; // LED AUS
 AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, 1) ; // LED AN

von Dirk D. (dirkd)


Lesenswert?

Da hast Du etwas falsch verstanden.

Es gibt 2 Funktionen für Set und Clear weil beide etwas anderes machen 
;-)

Und beide haben als zweiten Parameter die Pin-Nummer! Nicht ein Zustand.

Also wenn Du PA1 auf High setzen willst schreibst Du

AT91F_PIO_SetOutput( AT91C_BASE_PIOA, PA1 );

Wenn Du ihn auf Low ziehen willst

AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, PA1) ;

wobei PA1 == 1 ist.

Also beides mal '1' als Parameter. Entsprechend bei den anderen Pins.






von Mirko (Gast)


Lesenswert?

hmmm.
PA1 ist bei mir nicht definiert , kriege eine fehlermeldung.
um PA1 auf high zu setzen muß ich im PIO_SODR-Register das zweite bit 1 
setzen oder  #define PA1 (1<<1)   und der funktion PA1 übergeben. habe 
ich dich richtig verstanden. funktioniert ja jetzt alles auch.
wie ist denn das mit der pin-nummer gemeint PA1 ist ja z.B. pin47?
und was beschreibt parameter AT91C_BASE_PIOA in der funktion (habe bis 
jetzt auch nicht so wirklich verstanden)?

von Dirk D. (dirkd)


Lesenswert?

Also wenn Du mal ins Datenblatt vom AT91SAM7Sxxx ansiehst sind die 
General I/Os mit PAx bezeichnet. Wobei x im Bereich von 0 - 31 liegt.

Daher kannst Du die Werte 0 bis 31 als Parameter von Clear/Set/Configure 
Output verwenden.

Pin-Nummer war also etwas unglücklich ausgedrückt.

Ich wollte nur darauf hinaus, daß Du beim setzen und löschen den 
gleichen Parameter übergibst.

Es ist nicht wie beim AVR, bei dem Du das PORT-Register entweder mit 0 
oder 1 beschreibst (genauer gesagt ein Bit im PORT-Register änderst).





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.