mikrocontroller.net

Forum: Compiler & IDEs LPC2468 interrupts


Autor: NXP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite grad mit dem LPC2468 von nxp und rowley 1.7 mit dem cross 
connector, und habe probleme mit den interrupts!
die IR routinen werden mehrmals nacheinander wiederholt
obwohl kein neuer IR ansteht und das flag gelöscht wurde.
Auch der sprung in die main funktion funktioniert nicht so
wie er sein sollte!nach dem debuggen habe ich festgestellt,
dass nach der ISR in die init() funktion zurück gespringt.
kann mir vielleicht jemand helfen oder ein grund dafür sagen?

hier der code:

> #include <targets/LPC2468.h>
> #include <libarm.h>
>
> void T1_IR(void) __attribute__ ((interrupt (\"IRQ\")));
>
> void init(void)
> {
>   //peripheral clcok selection
>   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=0x3fff;//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)
>      IO0SET = 1<<10;
>   else 
>      IO0CLR = 1<<10; 
>
>   VICAddress=0;
> }
>
> int main(void)
> {
>   int m=0;
>   init();
>
>   while(1)
>   {
>     m++;
>
>   }
>   return 0;
> }
>


Autor: quaak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
G

Der VIC hat level triggered IRQs, d.h. solange du der Hardware,
indem Fall der  Timer, nicht bescheid sagst, deaktiviere mal dein IRQ,
bekommst du immer wieder neue IRQs. Ein alleiniges Bestätigen des IRQs
am VIC reicht nicht.

Also zum mitmeisseln.
Am ende der IRQ Routine, den IRQ beim TIMER und beim VIC bestätigen.

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.