Hallo, ich versuche wie bereits oben geschrieben ein NOKIA 3310 LCD mit dem MSP430F5438 anzusteuern und etwas auszugeben. Den Code habe ich als Anhang beigefügt. Der Code funktioniert soweit, jedoch nur solange ich in der Funktion CLK_init() im Register UCSCTL5 DIVM_x schreibe. Aber der Code funktioniert nicht mehr sobald ich beispielsweise DIVS_x schreibe. So wie es den Anschein macht, reagiert die SPI Übertragung nicht auf die SMCLK sondern nur auf MCLK, obwohl ich bereits im Register UCB2CTL1 SMCLK als Clock für die SPI-Übertragung ausgewählt habe. Ich wäre sehr dankbar für nützliche Tipps und Hilfe.
:
Verschoben durch User
Zumindest die Initialisierung von XT2DRIVE ist falsch, weil "|=" nur dann funktioniert, wenn die Bits vorher auf 0 stehen. Wenn SPI MCLK benutzen würde, dann hätte eine Änderungen von DIVS keinen Effekt. Und was genau meinst du mit "funktioniert nicht"? Hast du kein Oszilloskop/Logic Analyzer?
Mit "funktioniert nicht" meine ich, dass Nichts auf dem LCD-Display angezeigt wird, sobald man das DIVSX Bit setzt, ansonsten ist die Ausgabe ohne das DIVSX Bit korrekt. Inwiefern ist die Initialisierung von XT2DRIVE falsch? Wie müsste man es richtig machen?
Du musst die Bits, die auf "0" stehen sollen, auch löschen. Mit "|" geht das nicht. (Siehe Bitmanipulation.) Und wie versuchst du, DIVS zu ändern?
Mir ist schon klar wie Bitmanipulation funktioniert! Aber warum soll ich XT2DRIVE löschen? Damit wähle ich doch den Frequenzbereich aus, bei dem ich arbeiten möchte. Ich habe jetzt den Code, der nicht funktioniert als Anhang beigefügt. Dort kann man sehen, was ich mit DIVS_X meine und wie ich versuche es zu ändern.
In UCSCTL6 steht der Wert XT2DRIVE_3. Nach dem Befehl "UCSCTL6 |= XT2DRIVE_2" ist dort immer noch XT2DRIVE_3. Und das eigentliche Problem ist wahrscheinlich, dass du die Initialisierung von DIVM entfernt hast. (Welche Frequenz hat eigentlich der Quarz an XT2?)
Ich verstehe nicht, warum in UCSCTL6 der Wert XT2DRIVE_3 stehen soll? Woran erkennst du das? Ich benutze einen 18 MHZ Quarz. Ich habe auch schon DIVM und DIVS gleichzeitig benutzt und es funktioniert nicht. Das Problem ist, dass das ganze nur dann arbeitet wenn ich MCLK mit DIVM runterteile, obwohl MCLK für SPI gar nicht ausschlaggebend sein sollte.
Peyman M. schrieb: > Ich verstehe nicht, warum in UCSCTL6 der Wert XT2DRIVE_3 stehen soll? Hast Du Dir mal angesehen, wie die Werte nach einem POR stehen? Das steht bei der Registerbeschreibung im "Family User's Guide". http://www.ti.com/lit/ug/slau208o/slau208o.pdf, Seite 181. Bits 15 & 14 sind nach POR beide gesetzt.
Woher willst du denn wissen, dass das Problem mit SPI zu tun hat, und nicht damit, dass die CPU gar nicht mehr läuft?
Das mit XT2DRIVE_3 hatte ich übersehen und wurde jetzt korrigiert. Jedoch habe ich immer noch das selbe Problem wie vorher. Wenn die CPU nicht läuft dann würde doch der Code bei gar keiner Clock arbeiten oder nicht?
DIVM = 4 => CPU läuft DIVM = 0 => CPU läuft nicht Wie wäre es denn einmal, zu testen, ob die CPU läuft, z.B. mit einer LED an einem GPIO?
DIVM = 0 bedeutet doch nur fmclk/1 und DIVM = 4 => fmclk/16. Inwiefern sollte die CPU deswegen nicht laufen? Ich habe eben festgestellt, dass die LCD anzeige läuft, auch wenn ich DIVS und DIVM gleichzeitig initialisiere. Bsp. : DIVM_5 + DIVS_5 => läuft nicht. DIVM_5 + DIVS_1 => läuft. Das heißt das DIVM immer "kleiner" sein muss als DIVS damit das ganze läuft, aber warum?
Peyman M. schrieb: > Das heißt das DIVM immer "kleiner" sein muss als DIVS damit das ganze > läuft, aber warum? Wahrscheinlich, weil Delay() wegoptimiert wurde. Für so etwas nimmt man __delay_cycles().
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.