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
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
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
Punkt 1 hat sich erledigt. Man kann dierkt per Software auf die XXIC Register zugreiffen. Gruss, Wili
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.