Hallo, ich möchte im laufenden Programm einen Pin deaktivieren/akitivieren um mir für bestimmte Zustände keine Interrupts einzufangen. Die Deaktivierung des Interrupts ist so nicht möglich, da ich nur im Hauptprogramm das IT-Flag abfrage und das ja immer gesetzt wird. Gibt es also eine Möglichkeit dein Eingang tot zu schalten oder muss man den als Ausgang mit PU oder PD schalten? Das Locken scheint ja nur zu nützen wenn man ihn als Ausgang nutzt.
Mit den Befehlen:
1 | asm volatile ("cpsid i"); // oder __disable_irq() |
2 | : : : |
3 | asm volatile ("cpsie i"); // oder __enable_irq() |
Wird jeder Interrupt deaktiviert und wieder aktiviert.
Wie würde das für Timer4_CC3 aussehen? __disable_irq(Tim4, TIM_IT_CC3) ??? Und sind damit auch die Flags deaktiviert? Oder nur der Sprung in die jeweilige ISR?
Alle Interrupts können auch so einzeln deaktiviert werden:
1 | NVIC->ICER[0] = 0xFFFFFFFF; |
2 | NVIC->ICER[1] = 0xFFFFFFFF; |
3 | NVIC->ICER[2] = 0xFFFFFFFF; |
4 | NVIC->ICER[3] = 0xFFFFFFFF; |
5 | NVIC->ICER[4] = 0xFFFFFFFF; |
6 | NVIC->ICER[5] = 0xFFFFFFFF; |
7 | NVIC->ICER[6] = 0xFFFFFFFF; |
8 | NVIC->ICER[7] = 0xFFFFFFFF; |
Jedes einzelne Bit ist ein Interrupt, der Cortex-M3 hat bis zu 256 Interrupts, daher sind es 8*32 Bit. Wie Du den vorigen Zustand sicherst und den Interrupt wieder aktivierst bekommst Du sicher raus. Auch welches Bit welcher Interrupt ist. Steht irgendwo in der Doku. PS: Diese 8 Zeile deaktivieren natürlich alle Interrupts.
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.