|
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.
Bohužel však chyběla jakákoliv dokumentace
těchto úprav.
Na základě tohoto kódu pak byla vytvářená funkce pro vypnutí přerušení. případě, přerušení nevypne, dojde vteřině rozsvícení
teměř všech diod. Není tedy jasné kdo kdy provedl.21
bufferu obdobně jako varianta cvičení. 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. Jelikož
všechny tyto informace začátku nebyly, bylo třeba ním postupně dostat.
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. Jak se
ukázalo, jde velice jednoduchý úkon, avšak jeho realizace poměrně složitá.
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));
.
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