ARM7 i przerwania



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "CodiJack" <jurek_k__at_nospam_poczta.onet.pl>
Subject: ARM7 i przerwania
Date: Wed, 28 Jun 2006 11:19:01 +0200


Witam.
Piszę procedurki na ARM7 (PLCXXXX), ktore normalnie chodzą w trybie THUMB.
I teraz obsługa przerwania musi być w trybie ARM.
Jak zadeklarować funkcję by GCC skompilowało ją (przełączyło) do ARM, gdy
cały program
będzie kompilowany w trybie THUMB i nie wywalało mi błędów:
"interrupt Service Routines cannot be coded in Thumb mode"?
"Okulary twoim przyjacielem", ale mimo jeszcze swoich, nie mogę znaleźć a
coś mnie kłuje, że
trza chyba jakiś atrybut dołożyć i nie mogę się doszukać niczego
konkretnego.
Gierkowskim: pomożecie?
Pozdrawiam,
CodiJack.



Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: ARM7 i przerwania
Date: Wed, 28 Jun 2006 22:18:28 +0200


CodiJack napisał(a):

Piszę procedurki na ARM7 (PLCXXXX), ktore normalnie chodzą w trybie THUMB.
I teraz obsługa przerwania musi być w trybie ARM.
Jak zadeklarować funkcję by GCC skompilowało ją (przełączyło) do ARM, gdy
cały program będzie kompilowany w trybie THUMB

"Opakowanie" funkcji obsługi przerwania napisz w asemblerze ARM, skąd
wywołuj funkcję THUMB (instrukcją bx).

Możesz też skompilować oddzielny plik .c w trybie ARM jeżeli nie dasz
flagi kompilacji -mthumb. Aby taki kod mógł współpracować z funkcjami
THUMB, dodaj flagę -mthumb-interworking dla kompilatora i linkera.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: "CodiJack" <jurek_k__at_nospam_poczta.onet.pl>
Subject: Re: ARM7 i przerwania
Date: Thu, 29 Jun 2006 12:11:16 +0200


Użytkownik "Adam Dybkowski" <adybkows123_at_nospam_amwaw.edu.pl> napisał w wiadomości
news:e7uoaq$1op$1_at_nospam_nemesis.news.tpi.pl...
"Opakowanie" funkcji obsługi przerwania napisz w asemblerze ARM, skąd
wywołuj funkcję THUMB (instrukcją bx).

Jest to mój pierwszy "prawdziwy" projekt. Jakbyś mógł mi objaśnić to
"opakowanie"
będę wdzięczy.

Deklaracja przykładowego przerwania:
void RTC_interrupt(void) _attribute_ ((interrupt ("IRQ")));

Dalej jego ciało:
void RTC_interrupt(void)
{
....
VICVectAddr = 0x00; // koniec obslugi dla VIC
}

Nie za bardzo wiem jak "opakować" :(

Pozdrawaim,
CodiJack.



Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: ARM7 i przerwania
Date: Fri, 30 Jun 2006 00:55:03 +0200


CodiJack napisał(a):

"Opakowanie" funkcji obsługi przerwania napisz w asemblerze ARM, skąd
wywołuj funkcję THUMB (instrukcją bx).

Jest to mój pierwszy "prawdziwy" projekt. Jakbyś mógł mi objaśnić to
"opakowanie" będę wdzięczy.

Jeżeli tak to chyba będzie zbyt trudne jak na początek. Chodziło mi o
napisanie oddzielnego pliku w asemblerze (.s), gdzie będą zrzucone na
stos niezbędne rejestry (te, które są wspólne dla trybu IRQ i tego, w
którym normalnie działasz, np. USER) i skok do właściwej funkcji obsługi
przerwania napisanej w Thumbie.

Gdyby napisać to w samym C, wystarczy funkcję obsługi przerwania (tą
twoją RTC_interrupt) skompilować w trybie ARM. Stamtąd możesz wywołać
funkcję właściwą z innego pliku, już w Thumbie. Musisz mieć to napisane
oddzielnie w makefile, aby dla pliku z funkcją RTC_interrupt kompilator
nie dostał flagi -mthumb. Wszystkie pliki i linker muszą mieć flagę
-mthumb-interworking aby były możliwe wywołania między trybami ARM i
Thumb. Linker może mieć flagę -mthumb i wtedy doczepi biblioteki
standardowe (libc) w trybie Thumb. Jeżeli tej flagi nie będzie, zostaną
użyte biblioteki ARMowe - co ma znaczenie wydajnościowe gdy chodzisz z
zewn. pamięci albo wewnętrznego wolnego Flasha w procesorach AT91SAM7Sxx.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: "CodiJack" <jurek_k__at_nospam_poczta.onet.pl>
Subject: Re: ARM7 i przerwania
Date: Fri, 30 Jun 2006 08:26:50 +0200



Użytkownik "Adam Dybkowski" <adybkows123_at_nospam_amwaw.edu.pl> napisał w wiadomości
news:e81lsd$d8g$1_at_nospam_nemesis.news.tpi.pl...
Gdyby napisać to w samym C, wystarczy funkcję obsługi przerwania (tą
twoją RTC_interrupt) skompilować w trybie ARM. Stamtąd możesz wywołać
funkcję właściwą z innego pliku, już w Thumbie ....

O..., to chyba tędy droga.
Dzięki,
CodiJack.