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
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
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.
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
FYI -> so funktionierts beim Real View Compiler
__inline void enable_IRQ(void)
{
int tmp;
__asm
{
MRS tmp, CPSR
BIC tmp, tmp, #0x80
MSR CPSR_c, tmp
}
}
__inline void disable_IRQ(void)
{
int tmp;
__asm
{
MRS tmp, CPSR
ORR tmp, tmp, #0x80
MSR CPSR_c, tmp
}
}
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.