Forum: Mikrocontroller und Digitale Elektronik Pin Umschalten beim XMC1100


von Mark S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Ich habe mit dem XMC2Go-Kit und der Dave-Umgebung von Infineon ein 
kleines Beispiel programmiert, um zu sehen, wie schnell die Pins 
umgeschaltet werden, wenn ich die App-Methoden Digital_IO_SetOuput…() 
verwende.

Der code ist einfach:

  while(1U){
    DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1);
    DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1);
  }

Die Peripherie-Clock ist auf 32MHz, gleich wie die CPU-Clock.
Nun sehe ich, dass ein Durchlauf der obigen Schleife erstens nicht 
konstant ist und zweitens bis zu 7.5 us braucht. Ihr seht es auf dem 
Bild.

Ich hätte ein wesentlich schnelleres Umschalten erwartet. Und ich kann 
mir auch den Jitter nicht erklären (jedenfalls nicht in der 
Grössenordnung von 1us).

Was sagen die Spezialisten dazu?

von Larry (Gast)


Lesenswert?

Da wird noch ein Systick vermutlich mit einem "Hundertjaehrigem
Kalender" aka Systemuhr im Hintergrund laufen.

Jeder kleine Winz-PICklig kann das besser (ohne Jitter).
Aber halt ohne "Hundertjaehrigem Kalender".


P.S.: Fuer Bilder haelt auch dein Oszi eine USB-Buxe bereit,
in der ein gesteckter USB-Stick begierig auf Bilder wartet wuerde.

von Mark S. (Gast)


Lesenswert?

Hallo Larry,

Merci für den Hinweis. Nein, ein RTC läuft nicht. Jedenfalls verwende 
ich die RTC-App nicht.

von W.S. (Gast)


Lesenswert?

Mark S. schrieb:
> Ich habe mit dem XMC2Go-Kit und der Dave-Umgebung von Infineon ein
> kleines Beispiel programmiert

Ich hatte auch mal selbiges Kit und auch so ein ähnliches Kit von der 
Embedded (ein XMC 1100 BOOT Kit).

Den Seggerschen JLink-OB davon konnte man ja ganz gut verwenden, aber 
das Problem bei diesen Chips ist die innere Architektur.

Bei diesen Dingern ist ab Adresse 0 reiner ROM und der ist m.W. (bzw. 
war damals) überhaupt nicht offengelegt. Und auslesen läßt der sich auch 
nur zu einem kleinen Teil, nicht jedoch vollständig.

Dazu kommt, daß die kleineren Typen das Umverlegen der Interrupt-Tafel 
nicht können. Also gibt es da ein Verlegen der Interrupt-Adressen in den 
RAM über irgendwas im besagten ROM, was ebenfalls nur recht spartanisch 
dokumentiert war.

Schlußendlich ist es wohl so, daß man es bei diesen Chips schwer hat, 
ohne DAVE und Konsorten auszukommen - und all diese Hilfsmittel führen 
ein Eigenleben, über das du hier gestolpert bist.

Ich vermute mal, daß du lediglich annimmst, daß dein µC tatsächlich mit 
32 MHz läuft. Alternativ läuft da irgendwas im Hintergrund (im ROM), von 
dem du nichts weißt, oder deine zwei Funktionen führen ein Eigenleben, 
das dir evtl. auch bloß nicht offengelegt ist.

Probiere doch mal aus, wie das Ganze aussieht, wenn du großzügig auf das 
Verwenden dieser ominösen Funktionen verzichtest und deine Pins direkt 
setzt.


Nun, ein Cortex M erwartet ab Adresse 0 eigentlich einen Flashrom, der 
den Code enthält, den man selber verzapft hat, aber bei Infineon sieht 
man das völlig anders.

Aus diesem Grunde habe ich diese Produkte von Infineon auf meine private 
schwarze Liste gesetzt und bin eigentlich geneigt, auch anderen davon 
abzuraten. Bei den Dingern ist zuviel Geheimniskrämerei seitens des 
Herstellers dabei.

W.S.

von Mark S. (Gast)


Lesenswert?

W.S. schrieb:
> Ich hatte auch mal selbiges Kit und auch so ein ähnliches Kit von der
> Embedded (ein XMC 1100 BOOT Kit).

Hallo W.S,

besten Dank. Ich vermute, dass du (leider) recht hast und irgend etwas 
im Hintergrunt mit läuft. Ich komme einfach nicht dahinter, was es sein 
könnte. Das Assembler-File ist allerdings (selbst für mein triviales 
Progrämmchen) ziemlich umfangreich: 4400 Zeilen im Texteditor. Das kann 
ich nciht alles durchackern.
Folgendes habe ich auch nocht versucht (jeweils eine Version in den 
Kommentarklammern):

  while(1U){
    /*
    DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1);
    DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1);
    */

    /*
    PORT0->OMR =  PORT0_OMR_PS6_Msk;
    PORT0->OMR = PORT0_OMR_PR6_Msk;
    */

    /*
     PORT0->OMR = PORT0_OMR_PS6_Msk | PORT0_OMR_PR6_Msk;
     */
  }

Es ergibt sich jedesmal das genau gleiche Bild: Langsame 
Umschaltfrequenz und erheblicher Jitter.

Ich werde weiter suchen müssen!

Gruss
Mark

von Danilo (Gast)


Lesenswert?

Moin,

ich hatte mal versucht ein Grafikdisplay ILI9341 320x240 mit dem xmc1100 
anzusteuern (ich glaube ich hatte damals Soft-SPI verwendet). Da konnte 
man zusehen wie die Pixel gezeichnet werden. Hab irgendwann aufgegeben. 
Es gibt einen schönen Testbericht über verschiedene uC und deren 
Umschaltzyklen. Wenn ich den finde stell ich ihn hier rein.

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

Mark S. schrieb:
> Ich werde weiter suchen müssen!

Und wonach? nach der tatsächlichen Urache?

Nach meinem Gefühl dürfte es für dich besser sein und weniger graue 
Haare bewirken, den ganzen Infineon-Kram in die Tonne zu werfen und 
einen ganz anderen Chip dir auszuwählen.

Ich kann aber auch verstehen, daß man sowas wie diese kleinen niedlichen 
Boards nicht freiwillig wegschmeißen möchte. Ich hatte es damals so 
gemacht wie im Bild: lediglich den JLink-OB in ein Stückchen Rest-Plexi 
gesetzt und alles andere in die Tonne. Hatte damals - soweit ich mich 
erinnere - ganz passabel und universell funktioniert. Wenn ich mich 
recht erinnere, war dort sogar die JFlash-Lizenz eingebaut - ist aber 
nun schon viele Jahre her.

Ob sowas ähnliches auch bei deinem winzigen Board funktionieren würde, 
weiß ich natürlich nicht.

W.S.

von Jim M. (turboj)


Lesenswert?

Mark S. schrieb:
> while(1U){
>     DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1);
>     DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1);
>   }

Einfach mal Interrupts deaktivieren:
1
 __disable_irq();
2
 while(1U){
3
     DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1);
4
     DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1);
5
 }

Schnelles PWM macht man besser mit Timer o.ä. Peripherial in Hardware.

von Danilo (Gast)


Lesenswert?


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.