Forum: Compiler & IDEs AVR32 AP7000 Interrupt an Pin


von Pascal86 (Gast)


Lesenswert?

Hallo,

Ich habe hier einen Ap7000 auf dem NGW100 Board. Ich möchte das ganze 
ohne Linux betreiben.
Um Interrupts zu testen habe nun folgende Anwendung geschrieben.
Wenn an PortE.03 ein interrupt auftritt (Port bekommt von außen high 
Signal) soll PortA.19 auf low gesetzt werden.(Led Leuchtet)

Hier der code:
1
__attribute__((__interrupt__))
2
3
static void do_it_now(void)
4
{
5
  AVR32_PIOA.codr =0x00080000; /* set PA19 to low*/
6
}
7
8
int main(void)
9
{
10
11
  AVR32_PM.PLL0.pllmul = 7; //define pll0 multi.
12
  AVR32_PM.PLL0.pllen = 1; // Enable pll0
13
  AVR32_PM.MCCTRL.pllsel = 1; // define pll0 as main clock
14
15
  AVR32_PIOA.per = 1; /* Set pio enable for PA19  */
16
  AVR32_PIOA.oer = 0x00080000; /* Make them output port */
17
  AVR32_PIOA.pudr =0x00080000; /* disable pull-ups */
18
  AVR32_PIOA.sodr =0x00080000; /* set PA19 to high */
19
20
  AVR32_PIOE.per = 0x00000008; /* Set pio enable for PE03 of PORTE */
21
  AVR32_PIOE.pudr =0x00000008; /* disable pull-ups */
22
  AVR32_PIOE.odr = 0x00000008; // Output disable
23
  AVR32_PIOE.ier = 0x00000008;  // Enable PIOE Interrupt
24
25
  // Disable all interrupts.
26
  Disable_global_interrupt();
27
28
  // Initialize interrupt vectors.
29
  INTC_init_interrupts();
30
31
  INTC_register_interrupt(&do_it_now, AVR32_PIOE_IRQ, AVR32_INTC_INT0);//Register interrupts
32
33
34
  // Enable all interrupts.
35
  Enable_global_interrupt();
36
37
  while (1);
38
  return 0;
39
}

Das Programm wird von Compiler ohne Probleme umgesetzt nur funktioniert
es einfach nicht.(Interrupt wird nicht ausgeführt).

Wer kann helfen?
Wo könnte der Fehler liegen?

Gruß
Pascal

von Pascal86 (Gast)


Lesenswert?

Hallo,

Hab ich etwas falsch gemacht weil hier keiner antwortet oder hat einfach 
noch niemand einen externen interrupt an einem AVR32 AP7000 
programmiert?

Es gibt zwar ein App Note von Atmel zu dem Thema das ist aber für die 
Tonne, weil das Stand 2006 ist und die GCC AVR32 librarys inzwischen so 
stark verändert wurden das der Code aus dem Beispiel garnicht mehr 
funktioniert.

Naja vieleicht antwortet ja noch jemand oder hat nen Beispielcode in dem 
er externe Interrupts einsetzt.

Gruß
Pascal

von Mark .. (mork)


Lesenswert?

Die AVR32-Controller sind hier noch relativ unbekannt, insbesonders 
AP7000. Vielleicht solltest Du Dein Glück bei avrfreaks.com versuchen.

von Andreas .. (hex)


Lesenswert?

Hallo,

dieser Beitrag ist zwar schon etwas älter, aber vielleicht kann er mit 
mittlerweile erlangten Erkenntnissen aufgefrischt werden.

Ich arbeite mich gerade erst ein und hoffe auf hilfreiche Erfahrung. Ich 
möchte über einen Pin(EXTINT0) einen Interrupt auslösen.

Mein derzeitiger code führt jedenfalls leider noch nicht zum Erfolg:
1
__attribute__((__interrupt__)) void INT0_int_handler(void)
2
{
3
  AVR32_PIOA.codr = LED;            /*LED an*/
4
}
5
6
int main (void)
7
{
8
  AVR32_PIOB.per = 0x02000000;      //PIO Enable Register B25 (EXTINT0)
9
  AVR32_PIOB.ier = 0x02000000;      //Interrupt Enable Register B25(EXTINT0)
10
11
  AVR32_PIOA.sodr = LED;            /*LED aus*/
12
13
  //Pointer für EIC erzeugen und darüber Register beschreiben
14
  volatile avr32_eic_t *pExtInt = &AVR32_EIC;
15
  pExtInt->ier = 1;                 //Enable IR INT0  
16
  pExtInt->mode = 0;                //Edge triggered INT0
17
  pExtInt->edge = 0;                //falling Edge INT0
18
19
  Disable_global_interrupt();       // Disable all interrupts.
20
  INTC_init_interrupts();           // Initialize interrupt vectors.
21
  INTC_register_interrupt(&INT0_int_handler, AVR32_EIC_IRQ_0, AVR32_INTC_INT0);
22
  Enable_global_interrupt();    
23
24
 return 0;
25
}

Enable_global_interrupt führt sogar dazu, dass der µC gar nichts mehr 
tut. Was mache ich falsch? Wer hat inzwischen Erfahrung?

Gruß,
 Hex

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
Noch kein Account? Hier anmelden.