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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren