HI, ich hab wieder mal eine Frage zum M16C/62A. Im Moment sende ich Daten mit 500kHz an die serielle Schnittstelle S I/O 3. Allerdings benötige ich eine Bandbreite von 1Mhz. mit 500kHz klappts, mit 1Mhz kommt nur müll raus. Mal kurz zur Anwendung: Über den S I/O 3 Empfange ich wie gesagt mit 500kHz 252 Bytes, die ich mir nach dem 252ten Byte per printf() anzeigen lasse. Dies klappt auch soweit, jedoch liefern mir mit 1Mhz übertragene Daten unzulässige Ausgaben. Mich interressiert jetzt eigentlich nur, ob es eine Einschränkung in der Taktfrequenz gibt. Ich kann wie immer dazu nichts finden. mfg und danke, LC
Fehlen da nicht ein paar Angaben? z.B. Taktrate der MCU, Programmcode der Empfangsroutine etc. hast du schonmal dran gedacht das die Zeichen schneller reinkommen, als du sie abholst?
Erstmal danke für die Antwort. Die CPU läuft mit 10 Mhz, das solte schnell genug sein, um aus dem S I/O 3 Register BYytes lesen zu können, die mit 1Mhz ankommen. Die Empfangsroutine ist eine ganz gewöhnlich ISR, die jedes Byte in einem incrementierten Array speichert. Mir geht´s eigentlich nur um eine eventuelle Beschränkung der Taktrate von der ich nichts finden kann, die aber eine Erklärung darstellen würde. mfg, LC
hast du schonmal in Assembler nachgerechnet ob das wirklich klappt? Ein schneller Test wäre auch am Anfang der ISR Portpin setzen und am Ende löschen und die Zeiten am Oszi anschauen. Oder am Ende der ISR nachschauen ob schon wieder Daten in der Schnittstelle sind-> dann wirds knapp.
Schau mal genau nach, wieviele Takte ein ISR-Aufruf benötigt. Bei einem AVR zum Beispiel dauert ein Interruptaufruf 4 Takte, dazu noch reti von 3 (villeicht sogar 4). Dazu noch ein paar Takte, die du in der ISR selbst "verbrätst" und du kommst schnell über die 10 dir zur Verfügung stehenden. Versuche (vor allem bei solchen Datenraten) das Auslesen sequenziell in einer Routine ohne ISRs zu machen, weil das einfach zu viele Ressourcen ins nichts verbrät.
Wenn sich nichts geändert haben sollte (altes Datenblatt von 2000), gilt bei den asynchronen Seriellen: interner Takt /1, /8 oder /32 danach durch Baudrate und zum Schluss durch 16 (/2 synchron). Das hieße für 10MHz maximal 625kbit/s (62500 Interrupts) asynchron und 5Mbit/s (625000 Interrupts) synchron
Hey, großes Danke für die vielen Anregungen. Mach jetzt Feierabend... ;) Den Tip mit DMAC hab ich auch g´rade bekommen. Das Setzen des Portpins hatte ich auch schon getan, jedoch mit den erwarteten Wert am Oszi, aber trotzdem ideal zum debuggen. Morgen früh wird nochmal getestet. Thx, cya, mfg, LC
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.