www.mikrocontroller.net

Forum: Compiler & IDEs Interrupts AT91SAM7 / CrossStudio


Autor: Ruuud (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ein Neuling bei den ARM-Controllern und komm jetzt bei den 
Interrupts nicht weiter, konnte auch im internet nichts finden :-(
Kann mir jemand Schritt für Schritt erklären wie ich da vorgehen muss.

Danke!

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Controller? Welche "Toolchain" (Realview/Keil, IAR, GNU,...)? 
Verfügbare Beispiel schon nachvollzogen? Bei konkreteren Fragen kann man 
besser helfen.

Martin Thomas

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Toolchain steht in der Überschrift - das ist "Rowley Crossworks for 
ARM", mit der IDE "CrossStudio". Das ist gcc für ARM, allerdings wohl 
mit Rowley-spezifischen Libraries.

Autor: Ruuud (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dem Controller handelt es sich um einen AT91SAM7S256 von ATMEL bei 
der IDE um CrossStudio von Rowley (steht in der Überschrift ;-))

Mein bisheriges Programm siet wie folgt aus:
#include <targets/AT91SAM7S256.h>
#include <libarm.h>

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

int main(void)
{
    PMC_PCER = 0xFFFF;    //Peripheral Clock enable
    PIOA_OER = 0xF;       //PA0,1,2,3 als Ausgang
    TC0_CMR = 0x4;        //Prescaller /1024
    TC0_IER = 0x1;        //Timer Interrupt enable
    TC0_CCR = 0x5;        //Timer Clock enable
    
    libarm_set_irq (1);   //Interrupts enable
  
    while(1)
    {
      if(~PIOA_PDSR & (1<<PIOA_PDSR_P14_BIT))
      PIOA_SODR = 0xF;      //PA0,1,2,3 auf high
    }
    return 0;
}

void isr_TIMER0 ( void )
{
  PIOA_CODR = 0xF;          //PA0,1,2,3 auf low
}

In der main() muss ich ja noch dem Timer0-Interrupt die ISR zuweißen, 
nur weiß ich nicht wie!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Crossworks wird mit einigen Beispielprogrammen ausgeliefert, die sind im 
Verzeichnis samples\Shared zu finden.

Bei CWARM1.6 ist beispielsweise eine Datei namens timer_interrupt.c 
dabei, die Rowley-Tasking-Library-Funktionen (CTL) nutzt, um einen 
Timerinterrupt zu implementieren.

Ansonsten könnte Dir das hier weiterhelfen:

http://rowley.co.uk/documentation/arm_1_6/ctl_inte...

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hoppla, überschrift glatt überlesen. Sorry.

>In der main() muss ich ja noch dem Timer0-Interrupt die ISR zuweißen,
>nur weiß ich nicht wie!

Vgl. Manual Abschnitt AIC. In Kurzform: Mode setzen AIC_SMR[], Vektor 
auf ISR AIC_SVR[], aktivieren AIC_IECR.

Mit der von Atmel verfügbaren Sammlung von inline-Funktionen 
(lib_AT91SAM7*.h) kann man sich ein wenig Arbeit sparen. Keine Ahnung, 
ob diese Dateien bei Crossworks dabei sind. Kann man aber bei atmel.com 
runterladen (z.B. im USB-Framework enthalten). Bei Verwendung der 
GNU-Toolchain (also auch Rowley) sollte man vor dem #inlude der library 
ein #define __inline static inline einfügen.

Martin Thomas

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.