|
Kategorie: Diplomové, bakalářské práce |
Tento dokument chci!
Předmětem této práce je studium stávajícího vývojového řetězce pro mikroprocesor LPC23xx v předmětu MPOA. Hlavním cílem je zkoumání možností realizace nového vývojového řetězce, postaveného na GCC. Výstupy této práce jsou ukázkové aplikace s mikroprocesorem LPC2378 a GCC. Součástí vysledků jsou i návody pro studenty, jak tyto ukázkové aplikace implementovat. Ukázky zahrnují základní aplikace, RTOS aEthernet.
Není tedy jasné kdo kdy provedl.
Jelikož byla již načata problematika přerušení systém přerušení byl studován i
dříve, bylo rozhodnuto dodělat nové funkce pro možnost zakázání povolení přerušení,
pro případ opět řešila podobná problematika. Jak se
ukázalo, jde velice jednoduchý úkon, avšak jeho realizace poměrně složitá. Pro
správné napsání funkce třeba znát následující:
− Globální IRQ flagy jsou CPSR (Current Program Status Registr)
− Přístup tomuto registru pouze přes speciální instrukce MSR, MRS
− Flag IRQ mistě bitu, flag FIQ bitu
− Vynulování(vypnutí) provede zápisem logické 1!!!
− Pro maximální efektivitu třeba, aby funkce byla In-Line
Na základě těchto znalostí výsledný kód vytváří mnohem jednodušeji.21
bufferu obdobně jako varianta cvičení.
Výsledný kód potom vypadá takto:
Samotná funkce:
inline void disable_irq()
{
long b;
__asm__ __volatile__ "MRS %0, CPSR \n\t"
"ORR %0, %0, #0xC0 \n\t"
"MSR CPSR_c,%0 "=r" (b));
}
Prototyp této funkce potom vypadá takto:
extern inline void disable_irq (void) __attribute__ ((always_inline));
. Bohužel však chyběla jakákoliv dokumentace
těchto úprav.
Pro ověření správnosti těchto funkcí byl vytvořen nový program, jeho hlavní část
vypadala takto:
timer_init(TIME_INTERVAL_ms(1000));
disable_irq();
FIO2PIN 0xf0;
while(1);
Ve funkci pro obsluhu přerušení časovače byl doplněn následující kód:
FIO2PIN 0xef;
V případě, tedy funkce disable_irq() skutečně vypne přerušení, rozsvítí pouze
horní polovina LED. případě, přerušení nevypne, dojde vteřině rozsvícení
teměř všech diod. Jelikož
všechny tyto informace začátku nebyly, bylo třeba ním postupně dostat.
Na základě tohoto kódu pak byla vytvářená funkce pro vypnutí přerušení