XMC4500 Toolchain

Gast #3866343
Lesenswert?

Ich hab mir DAVE nun ein wenig angesehen.
Mir ist aufgefallen, dass man sich ein Projekt scheinbar über "Apps" 
generieren lässt, und zwar über Wizzards, die einem (überspitzt 
formliert) alles abnehmen, was mit Lesen des Reference Manuals zu tun 
hat.

Obwohl das ganz nett ist, würde mich vielmehr interessieren, wie man auf 
Low-Level Niveau arbeitet, d.h. "altmodisch" auf Register-Ebene.
Interessanterweise habe ich im Web dazu keine Beispiele gefunden, außer 
wieder solche, die auf DAVE Apps basieren.

Es wäre nützlich, z.b. einmal zu sehen, wie man einen ganz simplen Timer 
mit CC4 zum Laufen bringt, und zwar ohne Bunti-Bunti Clicki-Clicki...
Nicht dass man Beispiele unbedingt braucht, aber bei anderen Controllern 
findet man zu jedem Thema irgendwo gute Beispiele - bei dem XMC scheinen 
die Uhren anders zu ticken...
#3866359
Lesenswert?

Hallo,

ja richtig, die XMC Serie ist relativ schlecht dokumentiert. Klar gibt 
es unzählige reference manuals, aus denen man aber meiner Meinung nach 
auch nicht immer 100% schlau draus wird.

Das Gute ist aber, dass es mit CMSIS eine Art Abstraktionsebene für die 
Perepherie gibt. Ist zwar auch ziemlich komplex, aber dafür auf viele 
ARM M Controller anwendbar.

Ich nutze Keil µVision für ARM Controller. Da gibt es die nötigen Header 
Files als Abstraktionsebene für die einzelnen Register.


Grüße
#3866365
Lesenswert?

Schau Dir mal die "xmc4500.h" an, da sind die ganzen 
Registerdefinitionen drin. Wenn Du DAVE nicht nutzen möchtest ist das 
Deine erste Anlaufstelle. Ansonsten nutze wenigstens CMSIS, einen ARM 
"zu Fuss" zu programmieren grenzt an Machoschismus. Wir haben das mal im 
Rahmen einer Abschlussarbeit für einen damals noch nicht auf dem Markt 
befindlichen gemacht.
Gast #3866371
Lesenswert?

Unter STM32 verwende ich eine umfangreiche Peripheral Library, um auf 
Peripherals bequem zuzugreifen. Unter DAVE habe ich ein Headerfile 
gefunden, mit allen Registerdefinitionen: xmc4500.h
Damit kann man arbeiten. Ich finde nur keine Beispiele...

Eine CMSIS library ist mir aber entgangen. Ich finde in den 
Beispielprojekten nur automatisch generierten Code, der mich aber nicht 
"interessiert", da zu allgemein und zu abstrakt. Ich hätte gerne etwas 
zwischen diesen Extremen...

Wo hast du die Peripheral Library denn her?
Gast #3866382
Lesenswert?

Vielleicht hab ich eine falsche Vorstellung, was CMSIS bietet.

Daher anders herum:

Gibt es z.B. eine Library, mit der ich den UART oder eine CC4 
konfigurieren kann? Unter STM32 gibt es hier viele nützliche 
Funktionen...

Ich finde bei DAVE unter CMSIS einige Files wie core_cm3.h.
Da ist aber nicht drin, was ich suche.
#3866393
Lesenswert?

Ich kenne den STM32 zwar nicht, aber es ist meiner Erfahrung nach alles 
bei CMSIS dabei. Schau mal 
http://www.keil.com/pack/doc/CMSIS/General/html/index.html
an.

Normalerweise läuft ARM-Entwicklung so

- Funktionen der einzelnen Pins raussuchen (meistens 4-6)
- Passende Register zu den Funktionen raussuchen mit Funktion (das sind 
nicht wenige)
- Register einstellen (das ist schon Teil von CMSIS)
- per Funktion von CMSIS drauf zugreifen.

Dazu gibt es etliche Seiten im Netz, das gute an CMSIS ist das Du (fast) 
immer das gleiche programmierst egal welcher ARM darunter steckt.

Ist nur etwas mehr Arbeit als bei ATMEL oder Dave.
Gast #3866397
Lesenswert?

Ein Beispiel kann das vielleicht besser demonstrieren. Unter STM32 bin 
ich gewohnt, einen UART z.B. so zu konfigurieren:
1
  USART_InitTypeDef USART_InitStructure;
2
  USART_ClockInitTypeDef USART_ClockInitStructure;
3

4

5
  /* USART Clock Init */
6
  USART_ClockStructInit(&USART_ClockInitStructure);
7
  USART_ClockInit(USART3, &USART_ClockInitStructure);
8

9
  /* configure USART  */
10
  USART_InitStructure.USART_BaudRate = 9600;
11
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
12
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
13
  USART_InitStructure.USART_Parity = USART_Parity_No;
14
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
15
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
16

17
  USART_Init(USART3, &USART_InitStructure);
18

19
  /* configure interrupt sources */
20

21
  USART_ITConfig(USART3, USART_IT_TXE, DISABLE);         /* Transmit Data Register empty interrupt */
22
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);        /* Receive Data register not empty interrupt */
23

24
  /* enable the USART */
25
  USART_Cmd(USART3, ENABLE);

Dazu gibt es c-Sourcen von STM, in die man auch reinschauen kann, was im 
Detail passiert. Alles transparent und einfach. Gibt es sowas auch für 
XMC?
Gast #3866399
Lesenswert?

Nico S. schrieb:
> Ich kenne den STM32 zwar nicht, aber es ist meiner Erfahrung nach alles
> bei CMSIS dabei. Schau mal
> http://www.keil.com/pack/doc/CMSIS/General/html/index.html
> an.
>
> Normalerweise läuft ARM-Entwicklung so
>
> - Funktionen der einzelnen Pins raussuchen (meistens 4-6)
> - Passende Register zu den Funktionen raussuchen mit Funktion (das sind
> nicht wenige)

bis hierher klar.
Aber wo steckt bei DAVE eine CMSIS Library für den XMC, die das kann:

> - Register einstellen (das ist schon Teil von CMSIS)
> - per Funktion von CMSIS drauf zugreifen.
>
Gast #3866415
Lesenswert?

Nico S. schrieb:
> Michael W. schrieb:
>
>>
>> bis hierher klar.
>> Aber wo steckt bei DAVE eine CMSIS Library für den XMC, die das kann:
>
> Moment ich wühle mal, dauert aber etwas. Ich nutze sonst immer µVision,
> bei DAVE3 bin ich erst am einarbeiten.

Danke, würde mich über einen Tipp freuen.

Ich habe aber bis jetzt das Gefühl, Infineon will, dass man mit DAVE 
arbeitet, und stellt keine solche Library zur Verfügung, da es nicht in 
das Konzept mit den APPs passt.

Mehr als eine DSP Library finde ich nicht im DAVE Ordner (siehe 
Attachment).
Angehängte Dateien:
#3866455
Lesenswert?

Das habe ich auch gesehen. Ich hab jetzt mal zur Probe ein UART-Projekt 
und DAVE3 mit den DAVE-Apps angelegt und mir die generierten Dateien 
angesehen. Die Funktionen darin kommen mir sehr bekannt vor. Nur das 
DAVE3 diese Source-Dateien mit der Endung .cdt und .hdt speichert. Alles 
sehr seltsam, anscheinend scheint Infinion die eigentlichen 
CMSIS-Bibliotheken in irgendwelchen Archiven zu verstecken.

Ich werde mal die Tage die Entwickler anschreiben sowie mir die aktuelle 
µVision-Version herunter laden. Da soll der XMC4500 schon voll 
unterstützt werden. Ich arbeite so und so lieber mit µVision, Eclipse 
ist nicht so mein Ding.
#3866503
Lesenswert?

Jetzt habe ich mir das nochmal angesehen. Wenn Du mit DAVE3 ein 
Dave-Projekt anlegst und das Projekt generieren lässt entstehen genau 
die Dateien und Funktionen die Du haben möchtest. Diese kannst Du dann 
auch bequem bearbeiten und nutzen. Weiterhin geht der Export nach 
µVision und zurück. Diese liegen nach der Generation auch als .c und .h 
Dateien vor.

Das einzige Problem ist eben das Du zig Dateien hast.
Gast #3866757
Lesenswert?

Da ich mich hier offenbar im Kreis drehe, möchte ich es mal anders herum 
versuchen: Angenommen ich möchte mit einer CCU4 einen periodischen 
Interrupt generieren - Zählen bis 1000 und dann Interrupt auslösen - 
also eine ganz banale und einfache Aufgabe.

Die Fragen an die Experten:

-> welche "APP" nehme ich da? Und wie konfiguriere ich diese auf meine 
Bedürfnisse?
Gast #3866783
Lesenswert?

Ich finde es nur seltsam, dass es für eine so einfache Aufgabe scheinbar 
keine Lösung gibt, die nicht tonnenweise unnötigen Code erzeugt.
Ich beobachte das ganze mal, aber ich denke ich werde mich vom Gedanken 
irgend etwas mit dieser Controller Familie zu machen in nächster Zeit 
verabschieden.
Ich denke hier hat Infineon einen Weg eingeschlagen, der nicht 
praxistauglich ist.

Danke für die Infos und liebe Grüße
Michael
#3866790
Lesenswert?

Ja die haben es für einen "normalen" Programmierer etwas schwierig und 
gewöhnungsbedürftig gemacht. Für ARM-Einsteiger finde ich das  ideal. Er 
brauch sich nicht um Register etc. zu kümmern, in der Hilfe zu DAVE3 
steht alles was man zu den Apps brauch und es existieren zu vielen 
Themen Beispiele auf der Infineon Seite.

VG Nico
Gast #3866850
Lesenswert?

also definitiv kein Controller für den Hobby-Bereich...
Ich bleibe da lieber bei meinem STM. Da gibt es auch eine 
Abstraktionslayer, aber man kann noch im Detail nachvollziehen, was 
dahinter passiert. Warum soll ich mir jedesmal Code für einen Ferrari 
erzeugen lassen, wenn ich bloß einen VW Golf benötige?
Gast #3900842
Lesenswert?

Hallo zusammen,
ich kann aus meiner bescheidenen Erfahrung sagen, dass ich mir 
IO-Funktionen des XMC4500 immer in drei Schritten erarbeitet habe. 
Víelleicht hilft es ja anderen:

1. Mit Hilfe von Apps bzw. fertigen Beispielprogrammen kann man zuerst 
festellen, welche Register überhaupt und in welcher Reihenfolge zu 
nutzen sind. Entsprechende Beispiele gibt es auch für die CCU4 (z.B. 
PWMSP001_Example1_RelaxKit).

2.Durch Ändern von App-Parametern kann man in einem zweiten Schritt 
feststellen, welche Registerinhalte sich verändern (mit dem Debugger 
durchsteppen) und welche Code-Abschnitte überhaupt durchfahren werden.

3. In einem dritten Schritt habe ich das Manual des XMC4500 und die 
Application Note zur CCU neben den Code gehalten, um nachzuvollziehen, 
was hier nun genau passiert (auch hier wieder mit Manual) und prüfe, ob 
der Code immer noch geht, wenn ich Code-Segmente in "meiner" Lösung 
weglasse.

Denn die Apps decken alle Eventualitäten ab. Eigener Code kann sehr viel 
einfacher aussehen, wenn man sich auf das Notwendige konzentriert.
Schwierig ist IMHO besonders das Verstehen von Bit-Feldern in Registern 
weil die "Verknüpfungsorgien" rechts des Gleichheitszeichens im 
generierten Code kaum zu verstehen sind.

Und ja: ich bin Hobby-Entwickler.


Grüße
schnack

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