Hallo,
mein Problem ist, dass ich es einfach nicht fertig bringe dieses EEPROM
(http://www.mikrocontroller.net/attachment/97306/EEPROM.pdf) mit diesem
Mikrocontroller
(http://www.mikrocontroller.net/attachment/97308/MC9S12XF512.pdf) zu
programmieren.
Ich wäre wirklich SEHR dankbar, wenn sich jemand den Code anschauen
könnte, der etwas davon versteht. Ich hab mich jetzt 2 Tage damit
beschäftigt und ich fände es fast ein bisschen Schade, wenns ganz
umsonst war.
Im angehängten Code versuche ich einfach mal den Wert einer beliebigen
Adresse (0x0333) des EEPROMS auszulesen. Wenn ich den ausgewählten
Taster drücke, sehe ich beim Debuggen dass die im Code markierte
while-Schleife nicht verlassen wird. Das liegt daran, dass hier SPI1SR =
0b10100000 beträgt. D.h. Bit7 also SPIF wurde an dieser Stelle auch
schon gesetzt, was aber eigentlich gar nicht sein dürfte, weil SPIF
gesetzt wird, sobald ein neuer Datensatz über SPI eingetroffen ist (µC
DB S.930). Die Daten sollten aber laut EEPROM-DB S.16 erst nach der
vollständigen Übertragung der gewünschten Adresse reinkommen.
Ersetze ich die == durch &, so erhalte ich den Wert 0 zurück, was auch
falsch ist, da laut EEPROM-DB S.18 angegeben ist, dass alle Werte mit FF
initialisiert sind.
Ich habe leider mittlerweile keine Idee mehr, was ich machen könnte...
Nach dem senden des zweiten Adressbytes musst du
noch ein DummyByte senden. Das EEPROM sendet schliesslich
nicht von alleine. Der Master muss den Takt erzeugen.
Und frag dann nicht das Receive sondern das Transmit Ready Flag ab.
Danke Holger,
habs jetzt mal so gemacht, wie du gesagt hast. Leider Bekomme ich immer
noch Wert = 0.
Im Prinzip verstehe ich schon was du meinst, aber wie oben beschrieben
finde ich es schon sehr seltsam, dass ich nach dem senden des ersten
Adressbytes das Flag bekomme, dass ein Byte empfangen wurde. Dieses
dürfte ja erst später auftreten.
Maaaan, das Ding macht mich noch kirre...
Noch ne Idee?
Mücke schrieb:> Im Prinzip verstehe ich schon was du meinst, aber wie oben beschrieben> finde ich es schon sehr seltsam, dass ich nach dem senden des ersten> Adressbytes das Flag bekomme, dass ein Byte empfangen wurde. Dieses> dürfte ja erst später auftreten.
Ich habe mir zwar nicht die Registerbeschreibung angeschaut, aber eine
der Grundeigenschaften von SPI besteht darin, dass immer gleichzeitig
gesendet und gelesen wird.
Andreas Schweigstill schrieb:> Ich habe mir zwar nicht die Registerbeschreibung angeschaut, aber eine> der Grundeigenschaften von SPI besteht darin, dass immer gleichzeitig> gesendet und gelesen wird.
ja schon, aber zuerst einmal muss ich doch die Adresse ganz senden, von
der ich den Wert gesendet haben will und dann kann erst der Wert
gesendet werden. Und bei mir läuft da irgendetwas schief, denn sobald
ich irgendetwas zum Senden ins Datenregister schreibe wird das Flag
gesetzt, welches angibt, dass etwas empfangen wurde.
Es ist eh sehr verwirrend, dass es für schreiben und lesen nur ein
gemeinsames Datenregister gibt.
Ich geb eh langsam auf. Keine Ahnung, was ich noch ändern könnt.
Mücke schrieb:> ja schon, aber zuerst einmal muss ich doch die Adresse ganz senden, von> der ich den Wert gesendet haben will und dann kann erst der Wert> gesendet werden. Und bei mir läuft da irgendetwas schief, denn sobald> ich irgendetwas zum Senden ins Datenregister schreibe wird das Flag> gesetzt, welches angibt, dass etwas empfangen wurde.
ja, genau, das soll auch so sein. Die SPI lauscht immer am MISO mit,
sobald ein Takt über SCK raus geht. Meist ist dann im Empfangsregister
einfach eine 0, weil der Slave halt tatsächlich nichts zurück gibt.
Ich hatt auch schon, dass im Eingangsregister der gesendete Wert
angekommen ist, zum Gegenprüfen halt.
Bei den EEPROM die ich bisher verwendete war es so, dass nach der
Adresse
einfach noch mal eine 0 gesendet werden musste um dann das gewünschte
Byte ins Empfangsregister zu schieben.
Weinbauer schrieb:> ja, genau, das soll auch so sein. Die SPI lauscht immer am MISO mit,> sobald ein Takt über SCK raus geht. Meist ist dann im Empfangsregister> einfach eine 0, weil der Slave halt tatsächlich nichts zurück gibt.> Ich hatt auch schon, dass im Eingangsregister der gesendete Wert> angekommen ist, zum Gegenprüfen halt.> Bei den EEPROM die ich bisher verwendete war es so, dass nach der> Adresse> einfach noch mal eine 0 gesendet werden musste um dann das gewünschte> Byte ins Empfangsregister zu schieben.
hilft mir leider nur alles nicht weiter...
Toni B. schrieb:> Wie wärs mit einer Websuche: "68hc12 application note SPI"
hm also auf mein spezielles Problem konnte ich da leider nichts
übertragen. Vielleicht bin ich da zu engstirnig...