Interrupts AT91SAM7 / CrossStudio

Gast #654226
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:
1
#include <targets/AT91SAM7S256.h>
2
#include <libarm.h>
3

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

6
int main(void)
7
{
8
    PMC_PCER = 0xFFFF;    //Peripheral Clock enable
9
    PIOA_OER = 0xF;       //PA0,1,2,3 als Ausgang
10
    TC0_CMR = 0x4;        //Prescaller /1024
11
    TC0_IER = 0x1;        //Timer Interrupt enable
12
    TC0_CCR = 0x5;        //Timer Clock enable
13
    
14
    libarm_set_irq (1);   //Interrupts enable
15
  
16
    while(1)
17
    {
18
      if(~PIOA_PDSR & (1<<PIOA_PDSR_P14_BIT))
19
      PIOA_SODR = 0xF;      //PA0,1,2,3 auf high
20
    }
21
    return 0;
22
}
23

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

In der main() muss ich ja noch dem Timer0-Interrupt die ISR zuweißen, 
nur weiß ich nicht wie!
Persönliche Seite #654241
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_interrupts_ll.htm
Gast #654430
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

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