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.