Forum: Mikrocontroller und Digitale Elektronik XE164 Infineon


von wili (Gast)


Lesenswert?

Hallo,

Ich habe soeben ein neues Projekt mit dem XE164 Microcontroller von 
Infineon begonnen. Jetzt haben sich bei meinen ersten Versuchen ein paar 
Fragen gestellt:

1. Einen ext. Interrupt deaktiviere ich folgendermassen: 
INT_vDisableInterrupt(CC2_CH16_INT);
Anschliessend aktiviere ich Ihn wieder mit:
INT_vEnableInterrupt(CC2_CH16_INT);
Sobald ich Ihn aktiviere, wird dir ISR gleich ausgelöst. Das heisst ich 
muss das entsprechende IR-Flag noch löschen. Leider habe ich noch nicht 
ganz den Durchblick und das entsprechende Flag nicht gefunden. Kann mir 
hier jemand helfen?

2. Hat jemand bereits eine EEPROM-Emulation für die XE16X-Familie 
programmiert? Die Datenblätter sind zimelich kurz gehalten und ich denke 
ich bin sicher nicht der einzige, der dies benötigt. Hat jemand ein 
Beispiel dazu?

3. Den CCU62 Timer13 habe ich auf eine bestimmte Periodendauer 
eingestellt, sagen wir mal 3us. Der entsprechende IR wird alle 3us 
aufgerufen, ausser beim ersten Mal. Das heisst zweischen dem Zeitpunkt, 
wo ich den timer starte (CCU62_vStartTmr(CCU62_TIMER_13);) und der erste 
IR aufgerufen wird, dauert es länger als die 3us. Wie kann ich dies 
umgehen?

Ich bin dankbar über jeden Tipp!

Gruess,
Marco

von TManiac (Gast)


Lesenswert?

Hi wili,

>Ich habe soeben ein neues Projekt mit dem XE164 Microcontroller von
>Infineon begonnen. Jetzt haben sich bei meinen ersten Versuchen ein paar
>Fragen gestellt:

Wie hast du das begonnen? Hast du ein Eva-Kit? Dann hast du auch alle 
nötigen Dokumente auf der CD. Daher als erstes die Antwort auf deine 
Frage zwei:
Also wenn ein Datenblatt mit 144 Seiten "kurz gehalten" ist, dann weiß 
ich nicht mit was du sonst zu tun hast. So groß ist fast das komplette 
Manual eines AVRs (nicht ganz ernst gemeint). Und genau ins User Manuel 
solltest du auch reinschauen. Da steht auf Seite 3-47 (Seite 108 im PDF) 
das Kapitel "EEPROM Emulation". Oder meinst du das mit "kurz gehalten"?
Warum benötigst du unbedingt eine EEPROM Emulation? Die Anbindung eines 
EEPROMS per I2C ist schnell erledigt und auf dem EVA Kit schon 
vorgemacht.

Zu deinem 1.:
Der XE springt beim aktivieren in die Interruptroutine, wenn der 
Interrupt während des blockierens auftrat. Auch hierfür rate ich dir, 
schau ins Manual. Da gibt es auf Seite 5-1 (201 im pdf) ein ganzes 
Kapitel das sich "Interrupt and Trap Functions" nennt.
Unteranderem ist da auch der Aufbau der xxIC-Register erklärt:

|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
|--|--|--|--|--|--|--|GX|IR|IE|   ILVL    |GLVL

Wobei IR für Interrupt Request und IE für Interrupt Enable stehen.
Das IR wird übrigens beim Sprung in die ISR automatisch gelöscht. Warum 
Aktivierst und Deaktivierst du die Interrupts. Man schafft mindestens 4 
Befehle bevor der nächste aktiv werden kann. Und wenn das immernoch 
nicht reicht nimmt man die PECs.

Zu deinem 3.:
Wenn du deinen Timer einstellst, stellst du bestimmt mit dem 
Reload-Register und dem Teiler deine Laufzeit ein. Bevor du ihn 
aktivierst musst du das erste "Reload" von Hand durch führen. Sprich du 
musst deinen Timer selber mit dem Wert füllen den du in das 
Reload-Register geschrieben hast. Alternativ könnte man den Timer auf 
0xFFFF setzen (wenn er aufwärtszählt) so macht er unmittelbar nach dem 
starten, den Reload selber.
Auch hier: schau ins Manual. ZB Seite 18-7 (Seite 258 im Teil 2).

PS das Manual umfasst
"Volume 1 (of 2): System Units" mit 602 Seiten und
"Volume 2 (of 2): Peripheral Units" mit 721 Seiten
Plus Keyword und Register Index
Hinzu kommen noch zahlreiche Applicationnotes und andere Dokumente die 
man so bei Infineon findet.


Gruß TManiac

von wili (Gast)


Angehängte Dateien:

Lesenswert?

Hallo TManiac,

Vielen Dank für deine Antwort. Ich habe das EasyKit XE164. Die App. 
Notes auf der Infineon-Homepage habe ich auch schon durchgestöbert.
Das Datanblatt ist überhaupt nicht kurz gefasst, bin ich mit Dir absolut 
gleicher Meinung.
Aber das Kapitel über EEPROM EMulation Seite 3-47,  scheint mir nicht 
wirklich hilfreich. Auf der Produkut Broschüre der Familie XE16x steht 
bereits auf Seite 4 etwas von EEPROM Emulation:
http://www.infineon.com/dgdl/XE166-Broschüre.pdf?folderId=db3a3043156fd5730115b3a665650d23&fileId=db3a3043156fd5730116109a95ca1bce

Es erweckt für mich den Eindruck es sei fast schon etwas "alltägliches". 
Es gibt andere uC hersteller die dazu eine app.Note herausgegeben haben 
oder das ganze etwas ausführlicher beschrieben haben, mit Regsitern, 
etc.
Ich sehe nicht ein, weshalb ich zusätliche Komponeneten (ext. EEPROM) 
brauche, wenn ich ja genügend Speicher habe. Ist nur mit Mehrkosten 
verbunden.

Zu 1.
Ich möchte während einer zeitkritischen phase die ext. IR deaktivieren. 
Wenn ich sie wieder aktiviere, möchte ich aber nicht das gleich die ISR 
aufgerufen wird. Das Bit 7 (IR) ist rwh, das heisst doch, dass ich es 
per Software nicht verändern kann?!

|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
|--|--|--|--|--|--|--|GX|IR|IE|   ILVL    |GLVL

Zu 3.
Ich habe ein neues Projekt erstellt wo ich den Timer13 der CCU62 
benütze. Beim starten und bei jedem Timer13IR setze und lösche ich 
denselben PIN(IO_P0_0). Die Periodendauer habe ich auf 2.5us festgelegt. 
Die erste Zeitspanne, das heisst zwischen starten des timers und dem 
ersten TimerIR beträgt 3.32us (bild1). Das ändert auch nichts, wenn ich 
vorgängig das Timerregister mit 0xFFFF lade. Wenn ich jedoch das 
Timerregister mit dem entsprechenden Timerwert für die 2.5us lade, so 
entsteht Bild2. Das scheint mir nicht logisch?! Ich erwarte doch nach 
dem starten des Timers den ersten IR nach genau 2.5us. Oder habe ich 
hier etwas falsch verstanden?

Gruess,
Wili

von wili (Gast)


Lesenswert?

Hier noch Bild2

von wili (Gast)


Angehängte Dateien:

Lesenswert?

Diesmal sollte es klappen.

von wili (Gast)


Lesenswert?

Punkt 1 hat sich erledigt.
Man kann dierkt per Software auf die XXIC Register zugreiffen.

Gruss,
Wili

von TManiac (Gast)


Lesenswert?

Sorry, aber selber habe ich die EEPROM Emulation auch noch nicht 
gemacht. Aber man sollte immer im Kopf behalten, dass man in einen Flash 
nur Blockweiße schreiben kann. Und genau auf diesen Weg muss man auch 
eine EEPROM-Emulation aufbauen. Da man dazu aber auf alle Fälle in den 
Flash schreiben muss. Infos über die Vorgehensweise findet man im Manual 
Seite 3-25 ff und im App-Note AP16128. Zum prinzipiellen Vorgehen kann 
man nur sagen, da kommt es auf die Bedingungen an. Musst du nur sehr 
selten schreiben, dann lohnt es sich die Speicher-Word zu lesen. Die 
Änderung/Ergänzung im RAM vorzunehmen un dann die komplette Page 
zurückschreiben. Wenn es häufiger zu Änderungen kommt, dann liest man 
einmal und buffert so zusagen die Page im RAM und schreibt zyklisch die 
Page in den RAM.
Aber wie gesagt, probier auf dem ersten Schritt das grundsätzliche 
Speichern/Schreiben in den Flash.

Bei den anderen Dingen kann ich schon viel besser helfen. Habe mich 
schon ziemlich ausgiebig mi der Peripherie der gesamten Familie 
beschäftigt.

Das "rwh" wird dir auch so und ähnlich bei den anderen Registern übern 
Weg laufen. Die drei Buchstaben geben immer die mögliche Zugriffsart auf 
das jeweilige Register an. r = read, w = write, h = hardware Fehlt einer 
der Buchstaben dann fehlt auch die Zugriffsart (logisch).

Zu deinem Timer/Pin Toggle:
ich blicke bei deinen Oszi-Bildern nicht durch. Du schreibst, dass du 
den Pin setzt, bzw löschst bei einem Interrupt. Warum sind dann die 
"Duty-Cycle" (wie war der deutsche Bgriff nochmal?) nicht 50%. Ich habe 
dummerweise kein DAvE hier auf dem Rechner, um mal zu schauen wie sich 
die 3,4us ergeben. Zählt dein Timer auf wärst oder abwärts? Wenn er 
abwärts zählt dann müsste statt dem 0xFFFF ein 0x0001 (eigentlich ein 
0x0000 auch) den timer zum nachladen bringen. Der Programmiertechnisch 
korrekte Weg ist aber das Reload-Register und den Timer mit dem gleichen 
Wert füllen bevor man den Timer loslässt. Obwohl man darüber auch 
philosophieren kann. Grundsätzlich sollte das TxR = 1 der letzte Schritt 
beim Init sein.

PS das Togglen kannst du auch durch den Timerinterrupt machen lassen, 
nochbevor der erste Befehl der ISR ausgeführt wird, dafür sind ja die 
CapCom einheiten da.

von TManiac (Gast)


Lesenswert?

Achso, zum EEPROM auf dem EVA-kit ist doch ein EEPROM drauf:
die Zeile
- AT25128N SPI EEPROM
steht da: 
http://www.infineon.com/cms/en/product/channel.html?channel=db3a30431f848401011f8eb434271178

wie auf jedem EasyKit von Infineon/Hitex.
Das EEPROM in Betreb zu nehmen ist auch eines meiner nächsten 
Projekt-Ziele. :-)

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.