Forum: Mikrocontroller und Digitale Elektronik Verzögerung der Input-Latches beim AVR


von Joerg W. (joergwolfram)


Lesenswert?

Ich bin dabei, ein möglichst schnelles externes RAM Interface für
AVRs aber auch andere Mikrocontroller zu entwickeln.
Dazu benutze ich 7 Portpins von einem Port, da mir SPI zu langsam
ist. Schreiben in den RAM ist vom Timing her schon klar aber beim
Lesen habe ich das Problem des Input-Latches im AVR.
Da ich mir aber nur zu 90% sicher bin frage ich hier mal an:
1
out   PORTC,r16
2
in  r17,PINC

Kann ich mir zu 100% sicher sein, dass ich in r17 die Pegel einlese,
die VOR dem out-Befehl am Port angelegen haben? Dabei interessieren
mich nur die Bits, die als Eingang definiert sind.

Gruß Jörg

von Peter D. (peda)


Lesenswert?

Joerg Wolfram wrote:
> Ich bin dabei, ein möglichst schnelles externes RAM Interface für
> AVRs aber auch andere Mikrocontroller zu entwickeln.

Du weißt aber schon, daß man auch AVRs mit RAM-Interface nehmen kann?


> Kann ich mir zu 100% sicher sein, dass ich in r17 die Pegel einlese,
> die VOR dem out-Befehl am Port angelegen haben?

Natürlich nicht, jeder Interrupt kann Dir dazwischen hauen.


Peter

von Falk B. (falk)


Lesenswert?

@ Joerg Wolfram (joergwolfram)

>out   PORTC,r16
>in  r17,PINC

Da muss ein Takt Pause dazwischen.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Stolperfalle_bei_Matrixtastaturen_etc.

MfG
Falk

von Falk B. (falk)


Lesenswert?

>Kann ich mir zu 100% sicher sein, dass ich in r17 die Pegel einlese,
>die VOR dem out-Befehl am Port angelegen haben? Dabei interessieren

Uuups, zu schnell.
JA. Hier klappt der Trick.

MfG
Falk

von Joerg W. (joergwolfram)


Lesenswert?

Danke für die schnellen Antworten!

Das mit dem Interrupt ist ne Sache, die ich fast vergessen hätte.
Zumindest für universelle Verwendung. Im konkreten Anwendungsfall
will ich über eine Erweiterung (CPLD und SRAM), die an den Parallelport 
meines BASIC-Computers angeschlossen werden soll, die Grafikauflösung
"aufbohren". Da die Videoausgabe bereits im Interrupt läuft und
auch nicht unterbrochen werden kann, besteht die Problematik nicht.

Mit 3 Takten je Nibble und 20MHz sollten dann 320x200 in 8 (16 
theoretisch)
Farben möglich sein, ohne die eigentliche Hardware umzubauen.
1
out    PORTA,r16  ;cmd for increment address and read low nibble
2
in     r17,PINA   ;read high nibble from last byte
3
out    PORTC,r17  ;out to video port
4
out    PORTA,r18  ;cmd for read high nibble
5
in     r17,PINA   ;read low nibble
6
out    PORTC,r17  ;out to video port
7
...

Gruß Jörg

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.