Hallo liebe Gemeinde,
mein Anliegen ist folgendes:
Seit letzter Woche bin ich in die Programmierung des ATMEL SAM D20J µC
und ATMEL Studio 6.1, XPLAINED PRO and OLED1 XPLAINED PRO boards
eingestiegen.
Um mehr über die Programmierung mehrerer externer interrupts zu
erfahren, wollte ich eine Stoppuhr realisieren die über 2 Buttons auf
dem OLED board gesteuert werden soll.
Button 2 (PIN PA_02) startet Timer 0.
Button 3 (PIN PA_03) stoppt Timer 0.
Main Funktion:
int main(void)
{
system_init();
init_display();
init_buttons();
extinit_enable();
configure_EI();
configure_timer0();
.
.
.
.
}
Ich dachte mir, Timer0 soll über zwei Callbacks (Interrupt Service
Routinen) gesteuert werden.
Mit "configure_EI()" wird der EIC (Externer Interrupt Controller)
eingestellt:
void configure_EI(void)
{
struct extint_chan_conf EI_B2;
struct extint_chan_conf EI_B3;
EI_B2.gpio_pin = Button2;
EI_B2.gpio_mux = Button2;
EI_B2.gpio_pin_pull = EXTINT_PULL_UP;
EI_B2.detection_criteria = EXTINT_DETECT_FALLING;
extint_chan_set_config(Button2, &EI_B2);
extint_register_callback(Button2_callback,EXTINT_CALL
BACK_TYPE_DETECT);
extint_enable_callback(Button2,EXTINT_CALL BACK_TYPE_DETECT);
EI_B3.gpio_pin = Button3;
EI_B3.gpio_mux = Button3;
EI_B3.gpio_pin_pull = EXTINT_PULL_UP;
EI_B3.detection_criteria = EXTINT_DETECT_FALLING;
extint_chan_set_config(Button3, &EI_B3);
extint_register_callback(Button3_callback,EXTINT_CALL
BACK_TYPE_DETECT);
extint_enable_callback(Button3,EXTINT_CALL BACK_TYPE_DETECT);
}
Wenn ich nun einen der beiden Buttons betätige, werden beide Callbacks
ausgeführt.
Meine Vermutung:
extint_register_callback(Param_1 , Param_2);
Diese Funktion führt dazu, dass die Callback-Addressen in ein Array
hinterlegt werden. Egal welchen Wert ich für Param_1 übergebe, wird
diese Callbackadresse immer in ein und das selbe Array gespeichert.
(In meinem Fall Array[0]=Callback1, Array[1]=Callback2).
Und zu Param_2 ist zu sagen, das mir das Atmel Studio 6.1 nur diese eine
Möglichkeit bietet.
Es findet meiner Meinung nach keine wirkliche Zuweisung von Button zu
Callback statt so das der EIC_Handler immer dieses ein Array sturr
durchläuft und in die Adressen darin springt.
Wie kann ich nun eine eindeutige Zuweisung realisieren? Ich habe leider
nur diese Funktionen aus "configure_EI()" zur Steuerung externer
Interrupts gefunden.
PS: Den Code aus "configure_EI()"
habe ich aus einem Atmel Studio Beispiel entnommen und um eine
Komponente also Button 3 erweitert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.