Forum: Mikrocontroller und Digitale Elektronik Dave IDE Infineon - Grundlegende Frage


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jasmin N. (Firma: Keine Angabe) (jasmin_89)


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

von J. S. (jojos)


Lesenswert?

Der Name ISR sagt doch schon alles.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Bradward B. (Firma: Starfleet) (ltjg_boimler)


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.

* 
https://sisy.name/mymcu_download/software/pjb_leseprobe-myxmc-lehrbuch_de.pdf 
Kap. 2.4
* http://www.myxmc.de/tutorial/doku.php?id=xmc_interrupts_in_c
* 
https://community.infineon.com/t5/XMC/XMC1100-Timer-triggering-of-ADC/td-p/295346#.

Auch im Forum hat es einiges zu diesem controller, bspw.
* Beitrag "XMC Eingang mit Interrupt konfigurieren"

von Axel S. (a-za-z0-9)


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.

: Bearbeitet durch User
von Jasmin N. (Firma: Keine Angabe) (jasmin_89)


Lesenswert?

Ich bedanke mich für die Antworten und ich werde mich mal einlesen :-)

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Früher lehrte man diese Grundlagen Architekturunabhängig unter dem Titel 
"Polling versus interrupt"

http://www4.cs.fau.de/Lehre/SS11/V_GSPIC/Vorlesung/Folien/V_GSPIC-Teil6-2x2.pdf


Da noch mehr von Alexander Huwaldt zum Thema XMC-Tutorial:


http://www.myxmc.de/tutorial/doku.php

Mt 7,7: "Suchet, so werdet ihr finden"

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.