ARM7 i przerwania

Loading thread data ...

CodiJack napisał(a):

"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.

Reply to
Adam Dybkowski

CodiJack napisał(a):

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.

Reply to
Adam Dybkowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.