Forum: Mikrocontroller und Digitale Elektronik STM32: Interrupt DMA


von steff p. (steffpriko)


Angehängte Dateien:

Lesenswert?

Liebes Forum,

auf dem STM32F303 habe ich zusätzlich zur UART-Kommunikation die DMA 
programmiert. Der Kanal für die DMA für UART2 ist der Channel 7.
Nachdem alle Daten gesendet wurden, wird ein Interrupt ausgelöst (durch 
UART_TX).
Aus irgendeinem Grund passiert es, dass in die Interrupt-Routine hinein 
gesprungen wird, ohne dass der Interrupt durch die UART2 ausgelöst wird.
Nach langem Suchen im Internet habe ich gefunden, dass vermutlich eines 
der folgenden Interrupts ausgelöst wird (wodurch ich in die ISR komme):
I2C1-RX, TIM2_CH2, TIM2_CH4, TIM4_UP, TIM17_CH1, TIM17_UP
Ich habe im Datenblatt nachgesehen und habe festgestellt, dass diese 
alle auf Kanal 7 liegen (siehe Anhang).
Ich habe mir gedacht, dass ich das Problem umgehen, indem ich dann in 
der ISR jedes der einzelnen Flags abfrage und dann einfach lösche.
Nur dazu müsste ich wissen, was zB TIM2_CH2 bedeutet. Offensichtlich 
handelt es sich hierbei um den Timer 2?! Was bedeutet aber CH2 und was 
könnte hier einen Interrupt auslösen?
Bzw. was bedeutet TIM4_UP?

Ich bin für jeden Hinweis dankbar!!

von aSma>> (Gast)


Lesenswert?

Poste dein Code, sonst guck dir Errata sheets mal an.

von Jim M. (turboj)


Lesenswert?

steff p. schrieb:
> Nachdem alle Daten gesendet wurden, wird ein Interrupt ausgelöst (durch
> UART_TX).

Nö. Der TX wird bei jedem Byte[1] ausgelöst, aber noch während Exception 
Entry in den IRQ Handler transferiert der DMA das nächste Byte und die 
Quelle/Auslöser wird abgeschaltet. Trotzdem bleibt der Interrupt im NVIC 
dann entweder pending oder active, und die Handler Funktion wird 
ausgeführt.

Ich würde den TX Interrupt nur anmachen, wenn im DMA IRQ Handler keine 
Bytes mehr übrig sind.

[1]: Bei Fifos im UART/USART muss es nicht jedes Byte sein, sondern nur 
das jeweils letzte.

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
Noch kein Account? Hier anmelden.