Einsteigerproblem LPC1227

Gast #3957222
Lesenswert?
• ▲
▼
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();
  }
}
Gast #3957280
Lesenswert?
• ▲
▼
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++){
>        };
>     };
> }
Gast #3957295
Lesenswert?
• ▲
▼
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 :-)
}
Gast #3957298
Lesenswert?
• ▲
▼
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.
Gast #3957302
Lesenswert?
• ▲
▼
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
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.