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?
was ist eigentlich mit der Baudrate? Kann ich die mehr oder minder beliebig wählen, oder nach was richtet sich die?
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...
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.