Hallo zusammen, habe ein LPC_P1227 Board von Olimex und will damit die 2 LED´s auf dem Board zum Blinken bringen. Habe mir schon einige Beispiele angeschaut, aber aus vermutlich trivialem Grunde läufts bei mir einfach nicht... #include <nxp/iolpc1224.h> #define LED1_DIR GPIO1DIR |= ( 1<<5 ) #define LED1_CLR GPIO1CLR = ( 1<<5 ) #define LED1_SET GPIO1SET = ( 1<<5 ) #define LED2_DIR GPIO1DIR |= ( 1<<4 ) #define LED2_CLR GPIO1CLR = ( 1<<4 ) #define LED2_SET GPIO1SET = ( 1<<4 ) void init(void){ LED1_DIR; LED2_DIR; } void Delay(void){ for(int i=0;i<1000;i++){ for(int j=0;j<1000;j++){ }; }; } int main(void){ init(); while(1){ LED1_SET; LED2_CLR; Delay(); LED1_CLR; LED2_SET; Delay(); } }
Andreas schrieb: Wenn das alles ist läuft es auch nicht. Da fehlt der Startup Code, Takt Inittialisierung usw. Und die Delay Schleife dürfte komplett vom Kompiler weg optimiert werden weil da kein volatile steht. Der sieht nur, dass sich nichts ändert und löscht es und du siehst nichts, bzw. alles an oder aus. NIEMALS Delays mit solchen Konstrukten, die wurden und werden immer über Timer gemacht. (Hat selbst Arduino verstanden....) > } > > void Delay(void){ > for(int i=0;i<1000;i++){ > for(int j=0;j<1000;j++){ > }; > }; > }
Zum beschnuppern reicht es erstmal...Er schrieb doch das er Anfänger ist. Schaumal..Du mußt unbedingt volatile setzen #define LED1PIN 15 #define LED2PIN 16 #define LED3PIN 17 #define LED4PIN 18 static void delay(void ) { volatile int i,j; for (i=0;i<100;i++) for (j=0;j<2000;j++); } int main(void) { int i; MAMCR = 2; IODIR0 |= (1<<LED1PIN)|(1<<LED2PIN)|(1<<LED3PIN)|(1<<LED4PIN); IOSET0 = (1<<LED1PIN)|(1<<LED2PIN)|(1<<LED3PIN)|(1<<LED4PIN); while (1) { IOSET0 = (1<<LED1PIN); IOCLR0 = (1<<LED2PIN); IOCLR0 = (1<<LED3PIN); IOCLR0 = (1<<LED4PIN); delay(); IOCLR0 = (1<<LED1PIN); IOSET0 = (1<<LED2PIN); IOCLR0 = (1<<LED3PIN); IOCLR0 = (1<<LED4PIN); delay(); IOCLR0 = (1<<LED1PIN); IOCLR0 = (1<<LED2PIN); IOSET0 = (1<<LED3PIN); IOCLR0 = (1<<LED4PIN); delay(); IOCLR0 = (1<<LED1PIN); IOCLR0 = (1<<LED2PIN); IOCLR0 = (1<<LED3PIN); IOSET0 = (1<<LED4PIN); delay(); IOCLR0 = (1<<LED1PIN); IOCLR0 = (1<<LED2PIN); IOSET0 = (1<<LED3PIN); IOCLR0 = (1<<LED4PIN); delay(); IOCLR0 = (1<<LED1PIN); IOSET0 = (1<<LED2PIN); IOCLR0 = (1<<LED3PIN); IOCLR0 = (1<<LED4PIN); delay(); } return 0; // die arme sau wird hier nieeeee ankommen :-) }
Christian J. schrieb: > Wenn das alles ist läuft es auch nicht. Da fehlt der Startup Code, Takt > Inittialisierung usw. Braucht es alles nicht, der LPC1227 startet mit einer Default-Konfiguration (interner Oszillator 12 MHz, alle Pins Input). Die Ursache ist vermutlich nur das Delay an der falschen Stelle: LED1_SET; Delay(); LED1_CLR; Delay(); Christian J. schrieb: > Und die Delay Schleife dürfte komplett vom > Kompiler weg optimiert werden weil da kein volatile steht. Die meisten Compiler erkennen die "Absicht" auch ohne volatile, es ist aber besser, es zu verwenden.
Ich papp dir mal meine Inits eines Olimex LPC 2138 hier dran, da ist einiges drin was du brauchen wirst, wir zb timer Ints und ADC Wandler Kapselung.... dürfte bei dem LPC 1.. anders sein aber irgendwo auch ähnlich.... da ist auch LED Blinki mit Interrupts drin und fester Zeitbasis. Der ARM7v6 ist ne geile Maschine, meine Lieblings CPU. Schnell, ordentlich Hubraum (RAM, ROM), gut verständlich, einfach klasse :-) Meine LEDS wurden so geinitted: // LEDs als Output deklarieren (=0) IO0DIR |= (1<<LED_ROT_BIT) | (1<<LED_GRN_BIT); // LEDS abschalten (=1) IO0SET |= (1<<LED_ROT_BIT) | (1<<LED_GRN_BIT); PS: Mit MAMTIM werden die Waitstates beim Flashspeicherzugriff eingestellt, das Datenblatt empfiehlt: 1 - bei unter 20 Mhz, 2 - bei 20-40 Mhz , 3 - bei über 40 Mhz */ MAMTIM = 3; // 3 Wait States für > 40 Mhz MAMCR = 2; // Memory Manager voll aktivieren
Andreas schrieb: > Sie blinken :) danke für die Hilfe! Glaubichnicht! Zeigen ! Und jetzt das Ganze im Interrupt! Zackzack!
Christian J. schrieb: > Ich papp dir mal meine Inits eines Olimex LPC 2138 hier dran Hat nur mit LPC_P1227 Board von Olimex rein gar nichts zu tun, komplett andere PLL, andere Register, etc. Andreas schrieb: > Sie blinken :) danke für die Hilfe! Wohl doch nur das Delay an der falschen Stelle :-)
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.