Hallo NG, nach langem hin und her und Hilfe hier aus dem Forum blinkt meine LED jetzt endlich! Ich habe allerdings das gefühl, dass sie das viel zu langsam tut (ca. 1x an und aus pro Sek.). Weis jemand, was der auskommentierte Bereich "ENABLE PIT" bedeutet? der Quelltext sieht so aus (IAR workbench): NAME main PUBLIC main COMMON INTVEC:CODE CODE32 B main RSEG ICODE:CODE CODE32 main: NOP // ####################################################################### // It is assumed that a led is connected to PIOA17. // Adjust the code if your hardware is set up differently. // ####################################################################### #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 // 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 // ----------------------------------------------------------------------- loop: // led on // ----------------------------------------------------------------------- ldr r1, =PIOA_PER_P17 // mask Pin 17 str r1, [r0PIOA_BASE,#PIOA_CODR_OFFSET] // pins 17 on // ----------------------------------------------------------------------- ldr r8, =0x1000 wait1: subs r8,r8,#1 bne wait1 // led off // ----------------------------------------------------------------------- ldr r1, =PIOA_PER_P17 // mask Pin 17 str r1, [r0PIOA_BASE,#PIOA_SODR_OFFSET] // pins 17 off // ----------------------------------------------------------------------- ldr r8, =0x1000 wait2: subs r8,r8,#1 bne wait2 B loop
Achso, ich habe noch vergessen zu sagen, dass der ARM mit 18MHz getaktet ist. Also sollten die Warteschleifen doch bei Weitem schneller abgearbeitet sein. MfG Peter
Äh, Ich kenn den at91sam7 jetzt nicht wirklich, aber das ist ein sehr großes Programm, nur um eine LED blinken zu lassen? PS: Ich kann da was von wait-Schleife sehen. Möglicherweise hast du das Programm von irgendwoher kopiert? Welche Taktfrequenz hatte derjenige für die Schleifen gerechnet?
@peter, dein at91sam7 läuft mit dem sog. slow clock (~32khz). dieser ist nach den reset aktiv. sieh dir mal die iar beispielprogramme an. dort findest du eine funktion namens AT91F_LowLevelInit. dieser kannst du die notw. schritte zur init. des clock-systems entnehmen. gruss gerhard
Peter, PIT = periodic interval timer Deine Schaltung laeuft nicht mit 18Mhz sondern mit rund 33kHz (slow clock). Fuer schneller solltest du Clock Generator einstellen.
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.