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.
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?
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.
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 = 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().