0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten29 Seiten

Timer Interrupt

Hochgeladen von

nikolaus.spring1
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten29 Seiten

Timer Interrupt

Hochgeladen von

nikolaus.spring1
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

[Link].

at
Mikrocomputer

STM32 NUCLEO-F334R8
- Timer und Interrupt

WS2021

Dipl.-Ing. Thomas Leopold, Dipl.-Ing. Daniel Hauer


TU Wien
Institute of
1
Computer Technology
[Link]
Institute of
[Link]@[Link] 2
Computer Technology
[Link]
1. Welche GPIO-Port Konfigurationsmöglichkeiten gibt es?

2. Was bedeutet „Alternate function“?

3. Welche Schritte sind nötig, um eine LED zum Leuchten zu bringen?

Institute of
[Link]@[Link] 3
Computer Technology
[Link]
GPIO

▪ 5 Ports mit insgesamt 51 General-Purpose I/O Pins


▪ Konfiguration via: MODER, OTYPER, OSPEEDR, PUPDR
▪ Datentransfer via: IDR, ODR (und BSRR)
▪ Alternate function zur direkten Verbindung mit Peripherie-Einheiten
Institute of
[Link]@[Link] 4
Computer Technology
[Link]
GPIO Pin Konfigurationsmöglichkeiten (1)
▪ Mode (Register MODER)
• Input
• Output
• Alternate Function
• Analog

▪ Output Type (Register OTYPER)


• Open Drain (nur N-MOS)
• Push Pull (P- und N-MOS)

Institute of
[Link]@[Link] 5
Computer Technology
[Link]
GPIO Pin Konfigurationsmöglichkeiten (2)
▪ Output Speed (Register OSPEEDR)
• Low speed
• Medium speed
• High speed

▪ Pull-up/Pull-down (Register PUPDR)


• Pull-up Widerstand
• Pull-down Widerstand
• Kein Pull-up oder Pull-down

Institute of
[Link]@[Link] 6
Computer Technology
[Link]
LED Variante 1A: Registeradressen beschreiben
int main () {

// 1. Schritt: Aktivierung des GPIO Port über den AHB


*((unsigned long *) 0x40021014) |= 1<<17;

// 2. Schritt: Pin A.5 muss als Push-Pull Ausgang konfiguriert werden


*((unsigned long *) 0x48000000) |= 1<<10;

// 3. Schritt: Pin auf '1' setzen, um die LED zum Leuchten zu bringen
*((unsigned long *) 0x48000014) |= 1<<5;

// endlose while-Schleife
while(1);

Institute of
[Link]@[Link] 7
Computer Technology
[Link]
LED Variante 1B: „Registernamen“ beschreiben
#include "stm32f3xx.h“

int main () {

// 1. Schritt: Aktivierung des GPIO Port über den AHB


RCC->AHBENR |= RCC_AHBENR_GPIOAEN;

// 2. Schritt: Pin A.5 muss als Push-Pull Ausgang konfiguriert werden


GPIOA->MODER |= GPIO_MODER_MODER5_0;

// 3. Schritt: Pin auf '1' setzen, um die LED zum Leuchten zu bringen
GPIOA->ODR |= GPIO_ODR_5;

while(1);
}

▪ Kein Unterschied im Maschinencode zu Variante 1A


Institute of
[Link]@[Link] 8
Computer Technology
[Link]
Vergleich Variante 1A und 1B
Variante 1A Variante 1B
▪ Assembler-Code:

▪ Code-Size:

→exakt der gleiche Assemblercode

Institute of
[Link]@[Link] 9
Computer Technology
[Link]
Firmware Library
▪ Ansammlung an Variablen, Funktionen und Dateien, die das direkte
Beschreiben der Register übernehmen
▪ Vereinfacht das Lesen, Erzeugen und Warten von Code
▪ Der erzeugte Maschinencode ist nicht mehr unmittelbar ersichtlich
▪ Ein gutes Verständnis des Grundkonzepts der Mikrocontroller-
Programmierung ist essentielle Voraussetzung für die Verwendung
von Code-Generatoren oder Firmware Libraries
▪ → Die semantische Lücke wird größer!

Institute of
[Link]@[Link] 10
Computer Technology
[Link]
LED Variante 1C: Firmware Library
...
// 1. Schritt: Aktivierung des GPIO Port über den AHB
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// 2. Schritt: Pin A.5 muss als Push-Pull Ausgang konfiguriert werden


GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// 3. Schritt: Pin auf '1' setzen, um die LED zum Leuchten zu bringen
GPIO_SetBits(GPIOA, GPIO_Pin_5);

while(1);
...

Institute of
[Link]@[Link] 11
Computer Technology
[Link]
... und heute …
▪ Timer
▪ NVIC
▪ Beispiel: Die LED blinkt (mit Interrupt)

Institute of
[Link]@[Link] 12
Computer Technology
[Link]
Timer

Institute of
13
Computer Technology
[Link]
Timer – Grundfunktionen
▪ Counting
• Timer zählt mit einem definierten Takt in einem Counter-Register
• Zähltakt lässt sich über einen Prescaler einstellen (Quelle: Bustakt)
• Verschiedene Zählrichtungen: Up, Down, Up-Down
• Timer löst ein Event aus, wenn Overflow bzw. ein Zielwert erreicht ist
• Zielwert wird über das Auto-Reload-Register (ARR) eingestellt
• Beispiel:
− Periodischer Aufruf eines Algorithmus (mittels Interrupt)

Institute of
[Link]@[Link] 14
Computer Technology
[Link]
Timer – Grundfunktionen
▪ Capture/Compare Channels
• Interagieren direkt mit Eingangs- bzw. Ausgangspins
• Input Capture:
− Bei einem Eingangsevent wird der aktuelle Zählstand gespeichert
− Beispiel: Messen der Signalfrequenz an einem Pin durch Abspeichern des
Zählstandes bei steigenden Flanken ( = Eingangsevent) am Pin
• Output Compare:
− Zählstand wird mit einem Compare-Wert verglichen (unabhängig von ARR)
− Ausgangspin kann dadurch gesteuert werden
− Beispiel: PWM Ausgabe
– Periodendauer via Auto-Reload-Wert, Duty-Cylce via Compare-Wert
Institute of
[Link]@[Link] 15
Computer Technology
[Link]
Timer
▪ Der STM32F334R8 besitzt verschiedene Timer:
• Advanced control Timer – TIM 1
• General purpose Timer – TIM 2/3/15/16/17
• High resolution Timer – HRTIM
• Basic Timer – TIM 6/7
• Nicht jeder Timer unterstützt alle Funktionen, jeder ist für bestimmte
Aufgaben optimiert (z.B. Basic Timer für einfaches Zählen)
▪ Die Timer erhalten ihren Takt von den APB-Bussen
• Wenn APB Prescaler = 1, dann ist der Timertakt (fCK_PSC) gleich dem APB Takt
• Wenn APB Prescaler ≠ 1, dann ist der Timertakt (fCK_PSC) der APB Takt x 2
• Ihr Zähltakt wird intern durch einen Prescaler reduziert
Institute of
[Link]@[Link] 16
Computer Technology
[Link]
Timer 2 – General Purpose Timer
▪ Up-counting, Down-counting, Up/Down-counting
▪ Input Capture, Output Compare (PWM)

▪ Basisregister:
• Counter Register (TIMx_CNT)
• Prescaler Register (TIMx_PSC)
• Auto-Reload Register (TIMx_ARR)

▪ Prescaler dividiert die Taktfrequenz vom Bus durch einen 16 Bit Wert
• Division durch 1-65536

Institute of
[Link]@[Link] 17
Computer Technology
[Link]
Timer 2 – Counting Update Event bei
Gleichheit

Mit diesem Register


Auto-reload
wird verglichen

Timer-Enable

Prescaler Counter In diesem Register


wird gezählt
fCK_PSC Timer-Takt

▪ Prescaler (PSC): 16 Bit


▪ Timer-Takt = fCK_PSC / (PSC[15:0] + 1)
▪ Institute of 18
[Link]@[Link]
Computer Technology
[Link]
Timer 2 – Prescaler und Auto-reload Register
▪ Beide Register wirken sich nicht direkt/sofort auf die Funktion des
Timer aus
▪ Ein neuer Prescaler Wert wird erst nach einem Update-Event
übernommen
▪ Das Auto-reload Register besitzt ein „Shadow Register“, welches vom
Timer verwendet wird, aber nicht direkt beschrieben werden kann
▪ Abhängig von dem ARPE Bit im TIM_xCR1 Register wird
• Der neue Auto-reload Wert erst nach dem nächsten Update-Event in das
„Shadow Register“ übernommen (ARPE = 1)
• Der neue Auto-reload Wert sofort in das „Shadow Register“ übernommen
(ARPE = 0)

Institute of
[Link]@[Link] 19
Computer Technology
[Link]
Timer 2 – Auto-reload Update: ARPE=0

Institute of
[Link]@[Link] 20
Computer Technology
[Link]
Timer 2 – Auto-reload Update: ARPE=1

Institute of
[Link]@[Link] 21
Computer Technology
[Link]
Timer 2 – Prescaler Update

Institute of
[Link]@[Link] 22
Computer Technology
[Link]
Timer 2 – Upcounting
▪ Timer zählt von 0 bis zum Auto-reload Wert
▪ Beim Erreichen wird ein Update Event ausgelöst und das Update
Interrupt Flag UIF im Status Register TIMx_SR gesetzt

Institute of
[Link]@[Link] 23
Computer Technology
[Link]
Timer 2 – Downcounting
▪ Timer zählt vom Autoreload Wert bis 0 hinunter
▪ Beim Erreichen von 0 wird ein Update Event ausgelöst und das
Update Interrupt Flag UIF im Status Register TIMx_SR gesetzt

Institute of
[Link]@[Link] 24
Computer Technology
[Link]
Timer 2 – Up/Downcounting
▪ Timer zählt vom 0 bis zum Autoreload Register und löst einen
Counter Overflow aus
▪ Dann zählt er bis 0 herunter und löst einen Counter Underflow aus

Institute of
[Link]@[Link] 25
Computer Technology
[Link]
Nested Vectored Interrupt Controler
(NVIC)

Institute of
26
Computer Technology
[Link]
NVIC
▪ Der NVIC des STM32F334R8 besitzt 73 Interrupt Channels
▪ Jeder Channel hat eine Priorität (4 Bit) die unterteilt ist in
• Gruppen Priorität (Group Priority)
• Sub-Gruppen Priorität (Subgroup Priority)
• Interrupts mit höherer Gruppenpriorität können niedrigere unterbrechen
• Sub-Gruppen dienen der Reihung der nächsten auszuführenden Interrupts
• Reset-Wert: 16 Gruppen, 0 Sub-Gruppen
▪ Jedem Channel ist ein Interrupt Handler (eine Interrupt Funktion)
zugeordnet, der aufgerufen wird, wenn der Interrupt ausgelöst wird
▪ Name der Interrupt Funktion ist vorgegeben (case-sensitiv)
Institute of
[Link]@[Link] 27
Computer Technology
[Link]
Interrupt
CHx Interrupt Handler
NVIC

Interrupt Channels CH1 CH2 CHx

Clear Pending Bit

Update Cap./Comp.
Peripherie Interrupt
(Pending Bit wird gesetzt)

TIM2 Peripherie X

Institute of
[Link]@[Link] 28
Computer Technology
[Link]
Interrupts verwenden
▪ Interruptquelle in der jeweiligen Peripherie aktivieren
• Im „… interrupt enable register“ (z.B. Update Interrupt von TIM2)
• Nur dann wird aus einem Event auch ein Interrupt Request
▪ Zugehörigen Interrupt Channel in dem NVIC konfigurieren
• Aktivieren und Priorität vergeben
▪ Interrupt Handler programmieren
• Name des Channels ist in den Startup-Files definiert (z.B. „TIM2_IRQHandler“)
• Aktuelle Interrupt Quelle kann aus Interrupt Flags ausgelesen werden
(mehrere Quellen können sich ja einen Channel teilen)
• Das Pending Bit (Interrupt Flag) der Peripherie muss „händisch“ rücksetzen
werden, sonst wird der Interrupt immer wieder ausgelöst
Institute of
[Link]@[Link] 29
Computer Technology

Das könnte Ihnen auch gefallen