Interrupt beim STM34F4

Gast #3519724
Lesenswert?
• ▲
▼
es müsste so funktionieren:
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;

allerdings musst du dazu deine initstruktur wieder aufrufen.

Mein Tipp wäre du suchst das passende Bit im Register und löschst es 
selbst ohne die Struktur.
Gast #3519727
Lesenswert?
• ▲
▼
Fragender schrieb:
> Howdie,
>
> ich programmiere mit einem STM32F407 Mikrocontroller und möchte gerne
> wissen ob mir jemand sagen kann wie ich für kurze Zeit einen Interupt
> disablen und anschließen wieder enablen kann?
> Kann mir jemand einen Befehl dazu nennen?
> Vielen dank schonmal!!

Was genau möchtest du denn machen? Oft ist es nicht erforderlich 
und/oder empfehlenswert in das laufende Interruptsystem einzugreifen.
Gast #3519735
Lesenswert?
• ▲
▼
ich messe Frequenzen mit dem Input Capture Mode
dazu wird ein Interrupt aufgerufen, mein Problem:

Die Frequenzen werden gemessen, alles Supi:
ABER für eine kurze zeit bricht ab und zu die gemessene Frequenz ein und 
ich dachte dass liegt vllt daran, dass ein andere Interrupt die 
frequenzmessung stört?!
Gast #3519772
Lesenswert?
• ▲
▼
Fragender schrieb:
> ich messe Frequenzen mit dem Input Capture Mode
> dazu wird ein Interrupt aufgerufen, mein Problem:
>
> Die Frequenzen werden gemessen, alles Supi:
> ABER für eine kurze zeit bricht ab und zu die gemessene Frequenz ein und
> ich dachte dass liegt vllt daran, dass ein andere Interrupt die
> frequenzmessung stört?!

Wie ich mir dachte. Grundsätzlich ist der Interrupt-Controller des 
Cortex-M sehr clever und bestens fuer diesen Fall gerüstet. 
Ideallerweise hat dein Capture-Interrupt die höchste Priorität im NVIC.
http://www.keil.com/pack/doc/cmsis/core/html/group___n_v_i_c__gr.html#ga5bb7f43ad92937c039dee3d36c3c2798
Damit ist sichergestellt dass er nach der höchsten Latenz (16 cycles) 
bedient wird und alle möglichen aktiven Interrupts verdrängt.
Je nach Frequenz ist es wichtig dass dieser Interrupt zwischen 2 
Interrupt-triggerenden Flanken fertig wird. Im Zweifel musst du dafür 
unwichtige Dinge aus der ISR auslagern.
Andere Interrupts zu deaktivieren führt hingegen bestenfalls zu 
verpassten Interrupts auf die du im Zweifel gerne reagiert hättest (nur 
eben später).
Gast #3519786
Lesenswert?
• ▲
▼
@ Matthias, danke schonmal,

also genau ich messe 2 Frequenzen und während dessen empfange und sende 
ich Daten via USART, wenn ich USART ausschalte klappt das mit der 
Frequenzmessung wunderbar, sobald ich USART aber einschalte kommt diese 
Schwankung. Jetzt muss ich ja irgendwie für die IRQ des Input-Capture 
versuchen die USART-Kommunikation auszuschalten, oder wie versteh ich 
das????
Gast #3519800
Lesenswert?
• ▲
▼
Du musst/solltest im NVIC deinem Timer eine höhere Priorität geben, als 
deinem USART. Du brauchst den Interrupt nicht zu deaktivieren.

Ist dein Programm dann in der USART_ISR, kann diese unterbrochen werden 
um deine TIMER_ISR auszuführen.
Ist die TIMER_ISR fertig, wird wieder in der USART_ISR weiter 
gearbeitet.
Gast #3519806
Lesenswert?
• ▲
▼
0 ist die höchste Priorität!

also in entwa so?

InputCapture:

NVIC_InitTypeDef NVIC_InitStructure;

// NVIC init
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

USART:

NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStruct;

// NVIC init
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.