Hallo,
Ich habe einen MSP430F5437 und will diesen an XT2 mit einem 4 MHz Quarz
betreiben, im ersten Schritt habe ich MCLK, SMCLK und Auch ACLK alle von
XT2 versorgt.
Der Quarz schwingt exakt mit 4 MHz (direkt am Quarz gemessen)
Wenn ich jetzt jedoch am Port Pin Messe, an dem ich die CLK ausgebe, ist
dort eine Frequenz von CIRCA einem MHz. Das Teilerregister habe ich
komplett auf 0x0000 gesetzt (siehe Code).
Soviel zum ersten Teilproblem mit dem Quarz.
Das zweite, viel seltsamere Problem zeigt sich beim Debuggen: das
funktioniert gar nicht.
Habe mit ner EXP-Platine mit MSP430F4618 begonnen den Code zu
entwickeln, und habe den dann auf den MSP430F5437 portiert.
Aber den habe ich zu Debug-Zwecken dann soweit wieder zurückgestutzt wie
unter gezeigt.
Als Software habe ich IAR.
Der Debugger, ein TI USB-FET funktioniert mit dem EXP-Board problemlos,
wenn ichs mit meiner Schaltung (Lochrasterplatine) versuche, springt IAR
nie in den Code hinein, sagt die CPU ist im LPM und interrrupts sind
aus, deswegen ist kein STep/Go möglich.
Weiterhin läuft der Stack über, egal wie groß ich den wähle, was auf dem
EXP-Board nie passiert ist. Habe den Stack auf 5 KB gesetzt schon, läuft
trotzdem über.
Der Kompilierte Code kann aber mit der Software von Elprotronic in die
CPU geladen werden, und zwar Problemlos.
Dann läuft der CPU, man kann LEDs blinken lassen etc etc. Nur ist er
viel zu langsam, meiner Meinung nach noch viel langsamer wie er mit 1
MHz laufen müsste.
Hier der Code:
1 | void main(void)
|
2 | {
|
3 | volatile unsigned int i=0;
|
4 | WDTCTL = WDTPW+WDTHOLD; // Stop WDT
|
5 | _BIS_SR(OSCOFF + SCG0 + GIE); // Disable LFXT1 xtal osc & FLL loop
|
6 |
|
7 |
|
8 | P5SEL |= 0x0C; // Analog function for XT2 Pins
|
9 | UCSCTL6 &= ~(XT2OFF); // XT2 On
|
10 |
|
11 | UCSCTL6 |= XT2DRIVE_0 + XCAP_0 +XTS + XT1OFF; // set XT1 sourced
|
12 | //from external and to HF
|
13 |
|
14 |
|
15 | // Wait for xtal to stabilize
|
16 | do
|
17 | {
|
18 | UCSCTL7 &= ~XT2OFFG; // Clear OSCFault flag
|
19 | for (i = 0xFF; i > 0; i--); // Time for flag to set
|
20 | }
|
21 | while ((UCSCTL7 & XT2OFFG)); // OSCFault flag still set?
|
22 |
|
23 | UCSCTL3 |= SELREF_2; // Set DCO FLL reference =REFO
|
24 | UCSCTL4 |= SELS_5 + SELM_5 + SELA_5; // Set MCLK, SMCLK, ACLK =XT2
|
25 | UCSCTL5 = 0x0000;
|
26 | init_PortPins();
|
27 |
|
28 | while(1)
|
29 | {
|
30 |
|
31 | OUTPUT ^= TEST_PIN;
|
32 | for (i = 0xFF; i > 0; i--);
|
33 |
|
34 | }
|
35 |
|
36 | }//end of main()
|
Ich hoffe mir kann einer von euch weiterhelfen.
Viele Grüße, Jan!