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.
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
sorry, ich meine: AT91F_PIO_SetOutput( AT91C_BASE_PIOA, 0 ) ; // LED AUS AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, 1) ; // LED AN
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.
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)?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.