Hi Leute,
ich verzweifel solangsam dabei ein EXT_Interrupt für eine Tastatur
einzurichten.
Hier meine Init dafür.
1 | void atkeyb_init(void)
|
2 | {
|
3 | inpt = kb_buffer;// Initialize buffer
|
4 | outpt = kb_buffer;
|
5 | DWORD regVal;
|
6 | static DWORD test, mu,du,er;
|
7 | atkeyb_buffcnt = 0;
|
8 | GPIO2_DR&=~(1<<KEYB_DATA_PIN); //input
|
9 | GPIO2_DR &=~(1<<KEYB_CLOCK_PIN); //Input
|
10 | //KEYB_DATA_PORT&=~(1<<KEYB_DATA_PIN);
|
11 | //TO-DO: Setting up event....
|
12 | ER_APR &= ~(1<<3); // active LOW -> falling edge
|
13 | ER_ATR |=(1<<3); // event is latched-
|
14 |
|
15 | SFSP2_7 = (1<<1)|(1<<2)|(1<<3); //Function 2: EXT3 ;Used Pull up
|
16 | SFSP2_6 = (1<<2)|(1<<3); //use intern pullup
|
17 |
|
18 | ER_INT_CLR = 0x3FFFFFF; // Clear all Interrupt-Flags
|
19 | ER_MASK_CLR = 0x3FFFFFF; //Clear all masks
|
20 |
|
21 | install_irq( EVT_INT, (void *)EXT_INT_3_Handler, 0x0A );
|
22 | EnableIntReq_IRQ( EVT_INT, ACTIVE_LOW, 0x0A );
|
23 | ER_MASK_SET |= (1<<3); //activate EXT_Int 3
|
24 |
|
25 |
|
26 | regVal = ER_PEND;
|
27 | mu=ER_APR;
|
28 | du=ER_MASK_SET;
|
29 | er=ER_MASK_CLR;
|
30 |
|
31 | flag.ascii=1;
|
32 | return;
|
33 | }
|
Folgendes passiert: Programm springt dauerhaft in EventHandler Routine.
Les ich das RSR Register aus, sagt er mir, der Grund für den Interrupt
ist der VIC_Vector... logisch aber eigenltich sollte nur EXT_Int 3
aktiviert sein.
Les ich die Variablen regVal,mu,du,er (also die Register) direkt nach
der Beschreibung aus, zeigt mir "du,er" dauerhaft die 0.. Als würde ich
Sie nicht beschreiben, dass wiederum erklärt, warum durch mein EXT_int3
kein Int ausgelöst wird, aber WIESO kann ich Sie nicht beschreiben?
Adressen stimmen...
Falls ich die flankensteuerung des EVT-Routers auf active High stelle,
passiert garnichts.. -> sprich springt nie in Interrupt...
Bin solangsam am Ende, finde nichts im User Manual, dass mir verrät,
warum ich die Register nicht beschreiben kann...
Irgendeiner eine Idee?
Dank euch vielmals ;)