www.mikrocontroller.net

Forum: Compiler & IDEs interrupts bei NXP LPC2468


Autor: kon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche mit dem LPC2468 von NXP eine Timer interrupt routine zu 
programmieren komm jedoch in diese nie rein,
obwohl alle nötigen Bits in den Registern gesetzt sind!

#include <targets/LPC2468.h>
#include <libarm.h>

void T0_IR(void) __attribute__ ((interrupt ("IRQ")));

void init(void)
{
  /*
  //CLock source selection
  CLKSRCSEL=0x1;//Selects the main oscillator as the PLL clock source

  //PLL config
  PLLCON=0x3;//PLL enable and connect
  PLLCFG=0x13;//select N=1 and M=20
  PLLFEED=0xAA;//PLL feed
  PLLFEED=0x55;//PLL feed*/

  PCLKSEL0=0x4004;//PCLK for I2C0 and T0  -> CCLK 
  PCLKSEL1=0x4;//PCLK for GPIO selection -> CCLK
  
  //I2C config
  I2C0CONSET=0x20;// I2C0 enable
  I2C0SCLH=0xc8;//set to 200
  I2C0SCLL=0xc8;//set to 200

  //GPIO config
  IO0DIR &=~(1<<9);//P0.9 is an input
  IO0DIR |=1<<10;//P0.10 is an output
  IO0CLR |=1<<10;//P0.10 is clear

  //Power control
  PCONP=0x2;//timer T0 enable

  //T0 config  
  T0CTCR=0x0;//increment on rising PCLK edge
  T0PR=0xf;//set prescaler
  T0IR=0xff;//clears all IR of T0
  T0MR0=0xff;//MR0 is set to 0xff
  T0MCR=0x3;//enables the MR0R of T0
  T0TCR=0x1;//timer T0 and PC enable

  //VIC config
  VICIntSelect=0x0;//IR is an IRQ
  VICVectPriority4=0xf;//Priority is set to f of f
  VICVectAddr4=(unsigned)T0_IR;
  VICIntEnable=0x10;//enables the T0 IR
}

void T0_IR(void)
{ 
    if((IO0PIN & 0x400) == 0x400 )
      IO0CLR |=1<<10;    
    else 
      IO0SET |=1<<10;
}

int main(void)
{
  init();

  while(1)
  {
    //Tasterfunktion
    /*if((IO0PIN & 0x200) == 0x200 )
    IO0SET |=1<<10;    
    else 
    IO0CLR |=1<<10;*/

    //Timerfunktion
    /*if(T0PC <= 0x7f)    
      IO0SET |=1<<10;    
    else 
      IO0CLR |=1<<10;*/  
         
    int n=0;
    n++;
  }
  return 0;
}

Autor: NxP-Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass es lieber sein, du hast doch keinen Plan!!!!

Autor: NxP-Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach halt doch deine fresse!!!

Autor: kon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du mehr plan hast dann hättest du auch helfen können!

Autor: NxP-Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
willst du mir etwa dumm kommen oder was

Autor: kon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
halts maul du blöder wixxer
und bring deine dummen beiträge wo anders ins spiel!

Autor: NxP-Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt hast du mir es aber gegeben, kosta

Autor: NxP-Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung....
ich hoffe jemand anderes kann dir da weiterhelfen
bussi

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal abgesehen davon dass ich nicht weiss wo das problem liegt (oder 
evtl. ist es das problem ?!).

IO0CLR |=1<<10;   ist (ebenso wie IO0SET |=1<<10;) falsch. IO0CLR ist 
ein Read-Only register.

Es gibt für jeden port x ein IOxSET und ein IOxCLR register.

Ein gesetztes bit im CLR register löscht das bit im port und das gleiche 
bit im SET register setzt es.

Read-Modify-Write ist
A) Unnötig.
B) Falsch.

Richtiger
IO0CLR =  1<<10;  // Bit 10 des Port 0 löschen

und

IO0SET = 1<<10;  // Bit 10 des Port 0 setzten.


Viel Erfolg noch

Werner

Autor: kon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank erst mal für die Tips!
doch leider funktioniert es auch so nicht!

der interrupt wird ausgelöst und es wird auch die interrupt service 
routine aufgerufen.
aber aus irgend einen grund wiederholt er mehrmals die interrupt 
routine,
obwohl der T1IR wieder gelöscht wurde.
bis er dann irgendwann wieder zu main zurückspringt.
#include <targets/LPC2468.h>
#include <libarm.h>

void T1_IR(void) __attribute__ ((interrupt ("IRQ")));

void init(void)
{
  /*
  //CLock source selection
  CLKSRCSEL=0x1;//Selects the main oscillator as the PLL clock source

  //PLL config
  PLLCON=0x3;//PLL enable and connect
  PLLCFG=0x13;//select N=1 and M=20
  PLLFEED=0xAA;//PLL feed
  PLLFEED=0x55;//PLL feed*/

  PCLKSEL0=0x4010;//PCLK for I2C0 and T1  -> CCLK 
  PCLKSEL1=0x4;//PCLK for GPIO selection -> CCLK
  
  //Power control
  PCONP=0x4;//timer T1 enable
 
  //GPIO config
  IO0DIR &=~(1<<9);//P0.9 is an input
  IO0DIR |=1<<10;//P0.10 is an output
  IO0CLR |=1<<10;//P0.10 is clear

  //I2C config
  I2C0CONSET=0x20;// I2C0 enable
  I2C0SCLH=0xc8;//set to 200
  I2C0SCLL=0xc8;//set to 200

  //T1 config  
  T1CTCR=0x0;//increment on rising PCLK edge
  T1PR=0xfff;//set prescaler
  T1IR=0xff;//clears all IR of T1
  T1MR0=0xffff;//MR0 is set to 0xffff
  T1MCR=0x3;//enables the MR0R of T1
  T1TCR=0x1;//timer T1 and PC enable

  //VIC config
  VICIntSelect=0x0;//IR is an IRQ
  VICVectPriority5=0x7;//Priority is set to 7 of f
  VICVectAddr5=(unsigned)T1_IR;
  VICIntEnable=0x20;//enables the T1 IR

  libarm_set_irq(1);
  
}

void T1_IR(void)
{ 
  T1IR=0x1;

   if((IO0PIN & 0x400) == 0x400 )
      IO0CLR = 1<<10;    
   else 
      IO0SET = 1<<10;
  
  VICAddress=0;
}

int m=0;

int main(void)
{

  init();

  while(1)
  {
    //Tasterfunktion
    /*if((IO0PIN & 0x200) == 0x200 )
    IO0SET = 1<<10;    
    else 
    IO0CLR = 1<<10;*/

    //Timerfunktion
    /*if(T0PC <= 0x7f)    
      IO0SET = 1<<10;    
    else 
      IO0CLR = 1<<10;*/ 
     

    m++;
  
  }
  return 0;
}



Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.