Dave IDE Infineon - Grundlegende Frage

OP (Firma: Keine Angabe) #7745940
Lesenswert?
• ▲
▼

Hallo,

mich interessiert es µC zu Programmieren und lese mich zurzeit ein wenig ein. Ich habe mir hierfür den ARM Cortex M0 XMC1100 zugelegt. Die Programmiersprache C beherrsche ich bereits ein wenig.

Ich verwende hierfür die IDE Dave von Infineon. Ich finde im Netz nur sehr wenig Informationen zu dieser Software.

Ich habe auf YouTube folgendes Video gefunden: https://www.youtube.com/watch?v=s9qgiaxKZrM&t=3202s

Dort werden einige Sachen ein wenig erklärt. Ich habe allerdings noch etwas Grundlegendes nicht verstanden:

Um die LED vom Board blinken zu lassen wird folgender Code im Video verwendet, ab min 51:00 :

1
int main(void)
2
{
3
  DAVE_STATUS_t status;
4

5
  status = DAVE_Init();
6

7
  if(status==DAVE_STATUS_FAILURE)
8
  {
9
    XMC_DEBUG("DAVE APPs initialisation failed\n");
10
  
11

12
  while(1u)
13
  {
14
  }
15

16
  }
17

18
  while(1u)
19
  {
20
  }
21

22
}
23

24
void PWM_Compare_ISR (void)
25
{
26
  DIGITAL_IO_SetOutputLow(&LED_P1_3);
27
  DIGITAL_IO_SetOutputLow(&LED_P1_4);
28
}
29

30
void PWM_Period_ISR (void)
31
{
32
  DIGITAL_IO_SetOutputHigh(&LED_P1_3);
33
      DIGITAL_IO_SetOutputHigh(&LED_P1_4)
34
}

Ich verstehe nicht warum die Funktionen PWM_Compare_ISR() und PWM_Period_ISR() nicht in der main Funktion aufgerufen werden müssen.

Kann mir jemand dies kurz erklären also warum diese Funktionen nicht in der main aufgerufen werden müssen, denn laut Video blinkt die LED vom Board. Nach meinem Verständnis der Programmiersprache in C müssten die Funktionen ja in der main aufgerufen werden. Ansonsten werden diese ja nie ausgeführt. Danke

Moderator (Firma: Titel) Persönliche Seite #7745956
Lesenswert?
• ▲
▼

Jasmin N. schrieb:

Ich verstehe nicht warum die Funktionen PWM_Compare_ISR() und PWM_Period_ISR() nicht in der main Funktion aufgerufen werden müssen.

Diese Funktionen werden von Hardwareereignissen "aufgerufen". Dazu wird z.B. bei einem Timerüberlauf oder einem Compare-Event das Hautprogramm "unterbrochen" (interrupted) und die zugehörige Service Routine aufgerufen. Deshalb "Interrupt Service Routine".

Sieh dir also einfach mal in der Doku zum µC das Kapitel "Interrupts" an.

(Firma: Starfleet) #7745957
Lesenswert?
• ▲
▼

mich interessiert es µC zu Programmieren und lese mich zurzeit ein wenig ein. Ich habe mir hierfür den ARM Cortex M0 XMC1100 zugelegt. Die Programmiersprache C beherrsche ich bereits ein wenig.

Ich verstehe nicht warum die Funktionen PWM_Compare_ISR() und PWM_Period_ISR() nicht in der main Funktion aufgerufen werden müssen.

Lerne (Embedded) Hardware zusätzlich zu einer Programmiersprache.

Und wenn du verstanden hast, was Interrupt-betrieb ist, dann lernst du wie man mit der Programmierumgebung eine Interrupt Service Routine aufsetzt.

Ich finde im Netz nur sehr wenig Informationen zu dieser Software.

Dann biste zu blöde für eine erfolgreiche Internetsuche, SCNR.

Auch im Forum hat es einiges zu diesem controller, bspw.

#7746008
Lesenswert?
• ▲
▼

Jasmin N. schrieb:

Ich habe mir hierfür den ARM Cortex M0 XMC1100 zugelegt.

...

Ich verwende hierfür die IDE Dave von Infineon. Ich finde im Netz nur sehr wenig Informationen zu dieser Software.

Kein Wunder. In Hobbyistenkreisen sind das Exoten. Da wirst du dich wohl anhand der beiliegenden Dokumentation durchbeißen müssen.

Ich habe auf YouTube folgendes Video gefunden: https://www.youtube.com/watch?v=s9qgiaxKZrM&t=3202s

...

Um die LED vom Board blinken zu lassen wird folgender Code im Video verwendet

[snip]

Ich verstehe nicht warum die Funktionen PWM_Compare_ISR() und PWM_Period_ISR() nicht in der main Funktion aufgerufen werden müssen.

Kein Wunder. Das ist nicht der vollständige Programmcode. Es fehlt komplett die Timerkonfiguration und besonders fehlt das Initialisieren der Interrupt-Vektortabellen. Die *_ISR() Funktionen sind auch keine normalen Funktionen, sondern Interrupt-Service-Routinen (deswegen ISR). Die werden bei bestimmten Hardware-Ereignissen, hier beim Erreichen eines bestimmten Zählerstands und beim Überlauf eines Hardware-Zählers, mehr oder weniger automatisch aufgerufen.

Da auch Infineon ein HAL verwendet, gehe ich davon aus, daß die eigentlichen ISR da drin definiert sind und die Funktionen aus main.c von den HAL-Funktionen aufgerufen werden.

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.