www.mikrocontroller.net

Forum: Compiler & IDEs AVR32 AP7000 Interrupt an Pin


Autor: Pascal86 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
__attribute__((__interrupt__))

static void do_it_now(void)
{
  AVR32_PIOA.codr =0x00080000; /* set PA19 to low*/
}

int main(void)
{

  AVR32_PM.PLL0.pllmul = 7; //define pll0 multi.
  AVR32_PM.PLL0.pllen = 1; // Enable pll0
  AVR32_PM.MCCTRL.pllsel = 1; // define pll0 as main clock

  AVR32_PIOA.per = 1; /* Set pio enable for PA19  */
  AVR32_PIOA.oer = 0x00080000; /* Make them output port */
  AVR32_PIOA.pudr =0x00080000; /* disable pull-ups */
  AVR32_PIOA.sodr =0x00080000; /* set PA19 to high */

  AVR32_PIOE.per = 0x00000008; /* Set pio enable for PE03 of PORTE */
  AVR32_PIOE.pudr =0x00000008; /* disable pull-ups */
  AVR32_PIOE.odr = 0x00000008; // Output disable
  AVR32_PIOE.ier = 0x00000008;  // Enable PIOE Interrupt

  // Disable all interrupts.
  Disable_global_interrupt();

  // Initialize interrupt vectors.
  INTC_init_interrupts();

  INTC_register_interrupt(&do_it_now, AVR32_PIOE_IRQ, AVR32_INTC_INT0);//Register interrupts


  // Enable all interrupts.
  Enable_global_interrupt();

  while (1);
  return 0;
}

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

Autor: Pascal86 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mark .. (mork)
Datum:

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

Autor: Andreas .. (hex)
Datum:

Bewertung
0 lesenswert
nicht 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:
__attribute__((__interrupt__)) void INT0_int_handler(void)
{
  AVR32_PIOA.codr = LED;            /*LED an*/
}

int main (void)
{
  AVR32_PIOB.per = 0x02000000;      //PIO Enable Register B25 (EXTINT0)
  AVR32_PIOB.ier = 0x02000000;      //Interrupt Enable Register B25(EXTINT0)

  AVR32_PIOA.sodr = LED;            /*LED aus*/

  //Pointer für EIC erzeugen und darüber Register beschreiben
  volatile avr32_eic_t *pExtInt = &AVR32_EIC;
  pExtInt->ier = 1;                 //Enable IR INT0  
  pExtInt->mode = 0;                //Edge triggered INT0
  pExtInt->edge = 0;                //falling Edge INT0

  Disable_global_interrupt();       // Disable all interrupts.
  INTC_init_interrupts();           // Initialize interrupt vectors.
  INTC_register_interrupt(&INT0_int_handler, AVR32_EIC_IRQ_0, AVR32_INTC_INT0);
  Enable_global_interrupt();    

 return 0;
}


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

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.