AVR32 AP7000 Interrupt an Pin

Gast #1191853
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
Gast #1193676
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
#1285058
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren