Forum: Mikrocontroller und Digitale Elektronik Atmel AT91SAM7A3 (ARM) - Aufruf eines Software-Interrupts braucht extrem lang


von Johannes B. (jojob)


Lesenswert?

Hallo,

ich nutze ein etwas älteres AT91SAM7A3-DK Board von Atmel für die 
Portierung einer Firmware auf ARM. Hierfür würde ich gerne 
Software-Interrupts verwenden um vom User-Mode in den Supervisor-Mode zu 
springen. Eigentlich sollte dieser Aufruf mit den nachfolgenden Code nur 
ein paar Zyklen dauern, in Realität benötigt er allerdings etwa 500-700 
ms. Die LED, die hier angesteuert wird, blinkt extrem langsam.

Hat jemand eine Idee woran dies liegen könnte?

LG,
jojob
1
reset_vector:
2
   ldr      pc, =reset_handler      // Reset
3
[...]
4
swi_vector:
5
   ldr      pc, =swi_handler         // Software Interrupt
6
[...]
7
reset_handler:
8
   // Enable Main Oscillator, Set PLL to 96 MHz, Set MCK to 48 MHz, Set up default interrupt handler
9
   // Memory remap
10
   // Stack init
11
   // Copy data section
12
   // Clear bss section
13
   // branch to main
14
[...]
15
swi_handler:
16
   movs   pc, r14

1
int main(void) {
2
   while (1) {
3
      asm("swi #1");
4
      PIOA->PIO_CODR = LED_A;
5
      asm("swi #1");
6
      PIOA->PIO_SODR = LED_A;
7
   }
8
   return 0;
9
}

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.