Arm7 TMS470r1 Probleme bei Portierung von IAR auf uVision3

OP #468572
Lesenswert?

Guten Tag!
Habe folgendes Problem.
Versuche ein CAN demo projekt von IAR auf die Keil Umgebung uVision3 zu 
portieren.
Soweit so gut.

probleme gibt es mit den Interrupts und zwar:

__enable_interrupt() //ist glaub ich eine IAR spezifische Anweisung und 
funktioniert unter uVision3 nicht.

hat da jemand Erfahrung im Umgang mit dieser Umgebung?

als error code wird
ERROR: L6218E:Undefined symbol __enable_interrupt (...).
ausgegeben.

wär über jede hilfe dankbar.
mfg Mike
Gast #468878
Lesenswert?

Keine direkte Loesung, aber da noch keiner geantwortet hat: die Funktion 
duerfe das IRQ-Bit im CPSR des aktiven Modes löschen und damit 
INT-execptions auf der ARM-"Core-Ebene" aktivieren. Falls in der 
Keil/ARM-Library keine Funktion dazu vorhanden ist, kann man sich diese 
mit ein wenig inline-Assembler auch nachbauen. Fuer gcc z.B. so (Code 
aus einem Beispiel von R O Software):
1
#define IRQ_MASK 0x00000080
2

3
inline unsigned asm_get_cpsr(void)
4
{
5
  unsigned long retval;
6
  asm volatile ("mrs  %0, cpsr" : "=r" (retval) : /* no inputs */  );
7
  return retval;
8
}
9

10
inline void asm_set_cpsr(unsigned val)
11
{
12
  asm volatile ("msr  cpsr, %0" : /* no outputs */ : "r" (val)  );
13
}
14

15
void enableIRQ(void)
16
{
17
  unsigned my_cpsr;
18

19
  my_cpsr = asm_get_cpsr();
20
  asm_set_cpsr(my_cpsr & ~IRQ_MASK);
21
  return my_cpsr;
22
}

Mit der uVision-Dokumentation zu inline-Assembler sollte das leicht 
portierbar sein. Ansonsten waere vielleicht auch hilfreicht anzugeben, 
welcher Compiler fuer das Project genutzt wird (GNU, CARM oder RealView 
- uVision unterstützt alle drei).

Nur als Hinweis, falls der Startup-Code nicht aus dem Urspungscode 
portiert wurde: CPSR kann im User-Mode nicht veraendern werden, also im 
Startup-Code nachschauen, in welchen Mode "main()" gerufen wird. Falls 
"enable_interrupt" nicht ueber Software-Interrupts (SWI) implementiert 
ist (also so wie im Code oben), ist System-Mode die richtige Wahl.

Man kann auch INT-exceptions direkt im Startup-Code aktivieren, das wird 
dann ueblicherweise zusammen mit der Stack-Pointer-Initialisierung 
gemacht. Dann sind INT-Exceptions von Anfang an aktiviert und man 
benötigt die Funktion eventuell nicht mehr. Bei Nutzung eines 
Interrupt-Controllers (die TI ARM7 haben wenn recht erinnert eine 
VIC-"Zelle") normalerweise keine Problem.

OP #469360
Lesenswert?

Super Danke für den Tipp.
Hab zwar schon gestern geantwortet, das hat aber nicht so ganz 
funktioniert.
Bin zwar nicht so fit in Assembeler, werd aber sofort deine Ideen 
ausprobieren.
Benütze den RealView Compiler by the way.

Werd mich jetzt wieder der Aufgabe widmen.. danke noch mal and have a 
nice day
lg mike

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