Hallo,
ich habe gerade das Problem, dass ich in einer Ausarbeitung etwas über
das verschachtelte Interrupt-System in HAL erzählen muss. Im konkreten
Fall geht es um ein Timer-Interrupt eines STM32F407-Discovery-Boards,
dessen ISR ja in folgender Form erfolgt:
void_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypDef *htim)
{if (htim->Instance == TIM2)
{ISR.....}
}
liege ich mit der Annahme richtig, dass der aktuelle Timer-Wert laufend
an diese Funktion übergeben wird und mit dem ARR verglichen wird?
Du must klären, was TIM_HandleTypDef ist.
tja, so wird nach meinen Recherchen eine ISR in HAL geschrieben (hier für einen initialisierten und gestarteten Timer 2) und das funktioniert auch ;)
Du bekommst einen Pointer auf das HAL-Handle des Timers übergeben.
Aber wo genau zeigt der drauf? der Tim2.Instance-Wert ist ja nicht der Wert des ARR, aber genau damit wird das Argument in der Funktion verglichen
neongr schrieb: > Aber wo genau zeigt der drauf? der Tim2.Instance-Wert ist ja nicht der > Wert des ARR, aber genau damit wird das Argument in der Funktion > verglichen Nein, wird er nicht. Das ist ein Zeiger auf eine Struktur, und dein ARR-Register findest du dann unter htim->Instance->ARR.
also ist die aufgenommene Struktur eine nach jedem Zählschritt Aktualisierte, die mit der Initialstruktur verglichen wird?
Die Struktur die du übergeben bekommst ist verschachtelt. Das interessante (in diesem Fall) Element ist die Instance. Bei HAL ist das AFAIK ein Zeiger auf die Basis-Adresse des peripherals (hier der Timer). Indem du die Instance (aka Adresse) mit der bekannten Instance TIM2 vergleichst überprüfst du ob Timer2 übergeben wurde.
Es reicht bereits, das Timer-Handle zu vergleichen der ist auch eindeutig - also so:
1 | if (htim == &htimx) |
2 | {
|
3 | // hier der Code für *meinen* Timer
|
4 | }
|
5 | else
|
6 | {
|
7 | // hier ggf. Code für weitere Timer
|
8 | }
|
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.