Ok, hat sich erledigt...
nach langem probieren hab ich den Fehler gefunden:
Ich habe den non maskable Interrupt 2 mal in die Tabelle geschrieben und habe damit alle Weiteren Interrupts um eine Stelle nach hinten gerückt.
dabei war das so offensichtlich:
char *exception_messages[] =
{
"Division By Zero",
"Debug",
"Non Maskable Interrupt",
"Non Maskable Interrupt",
"Breakpoint",
...
sry wegen dem Eintrag.
Aber ich habe noch immer ein problem mit dem pit:
Ich hatte mir ein wenig code geschrieben um den pit zu bedienen:
unsigned long long ticks = 0;
char second = 0;
char seconds = 0;
char minutes = 0;
char hours = 0;
void timer_handler(struct regs *r)
{
printk("tick");
second++
ticks++;
if(second == 100);
{
seconds++;
second = 0;
}
if(seconds == 60)
{
seconds = 0;
minutes++;
}
if(minutes == 60)
{
minutes = 0;
hours++;
}
if(hours == 24)
{
hours = 0;
days++;
}
}
Diese Funktion wird durch einen Interrupt auf Irq 0 ausgelöst.
Dann habe ich eine Funktion die nur wartet:
void timer_wait(long long int wait_ticks)
{
long long eticks;
eticks = ticks + wait_ticks;
while(ticks < eticks);
}
Mein Problem ist jetzt, das zwar der Handler ständig ausgeführt wird, aber meine warten-Methode still steht.
also immer wenn ich timer_wait(...) ausführe macht der Recher nur munter meinen Bildschirm voll, aber er tut sonst nix mehr.
Kann mir bitte jemand helfen?
Danke im voraus.