MSP430G2553 USCI interrupt

OP #6300649
Lesenswert?
• ▲
▼
Hallo,

ich dreh bald komplett durch...

Hatte versucht ein 74HC595 per SPI zu nutzen um eine RGB led zu 
betreiben...

Hab das ganze erstmal aufgegeben da ich komplett RANDOM USCIAB0RX und TX 
interrupts bekommen habe.

Nun habe ich alle USCI Spuren aus meinem Code entfernt.
Jetzt ist mein IC stuck im USCIAB0RX_VECTOR interrupt.

was is da los?!?!??!?!?!??!?!??!?!?!??!?!
#6300719
Lesenswert?
• ▲
▼
Chris D. schrieb:
> c-hater (Gast) Du bist schon ein ganz toller Typ...
>
> Im Internet große Fresse...

Fragt der jenige, der mit gaaanz vielen Satzzeichen ein Problem mit 
seiner Software sucht, aber nicht mal eine einzige Zeile seines Codes 
veröffentlicht.

Ohne diese Infos kann ich c-hater mit seinem Kommentar durchaus 
verstehen. - Er ist halt eher der direkte Typ. Und Salami-Taktik ist 
hier im Konsens halt unerwünscht...
OP #6300734
Lesenswert?
• ▲
▼
"Hast Du es anfangs mal ohne Interupt getestet?"

Ganeu das ist mein Problem...

Wie werd ich den Interrupt los.


Habe den code gelöscht...


    /* Disable USCI */
    UCB0CTL1 |= UCSWRST;
    UCB0CTL0 = UCCKPH | UCMST | UCMODE_0 | UCSYNC;
    UCB0CTL1 = UCSSEL_1 | UCSWRST;
    UCB0BR0 = 1;
    /* Enable USCI */
    UCB0CTL1 &= ~UCSWRST;

__attribute__((interrupt(TIMER1_A0_VECTOR)))
void TIMER1_A0_ISR_HOOK(void) {
    IE2 |= UCA0TXIE;
}



__attribute__((interrupt(USCIAB0TX_VECTOR)))
void USCI0TX_ISR_HOOK(void) {
    buffer füllen und IE2 &= ~UCA0TXIE;
}


das stand da ungefähr...

Nur verstehe ich nicht wiso der RX interrupt kommt da der pin nicht auf 
MISO konfiguriert ist...

Er kommt selbst wenn ich im Code nix vom USCI benutze.
Gast #6301428
Lesenswert?
• ▲
▼
Hallo Chris,

das UCA0TXIE-Bit im Register IE2 muß nach einem Reset auf 0 sein, also 
gehe im Single-step durch den Code, und schau nach, welche Zeile Deines 
Codes dieses Bit auf 1 setzt und bearbeite diese Zeile entsprechend.

Die Flags im Register IFG2 sind dann egal, wenn keine Interrups 
eingeschaltet sind.

Gruß wv
OP #6303409
Lesenswert?
• ▲
▼
Sodele...

nach langem gebastel hab das 74HC595 zumindest per bitbang spi zum 
laufen bekommen...

Der Random Interrupt is weg.

Nur leider will HW-SPI immer noch nicht:
1
void WriteData(unsigned char data) {
2
    UCB0TXBUF = data;
3
    while (!(IFG2 & UCA0TXIFG))
4
        ;
5
    P3OUT |= STCP;
6
    P3OUT &= ~STCP;
7
}
8

9
void initSR(void) {
10

11
    UCB0CTL1 |= UCSWRST;
12
    // setup UCB0
13
    P1SEL |= SHCP + DS; // pins 5 + 7
14
    P1SEL2 |= SHCP + DS; // UCB0CLK + UCB0SIMO
15
    UCB0CTL0 = UCCKPH + UCCKPL + UCMST + UCSYNC; // data captured on 1st UCLK edge/changed on follwing edge, MSB first, master, 3-pin SPI,synchronous
16
//    UCB0CTL0 &= ~(UCCKPH);
17

18
    UCB0CTL1 |= UCSSEL_1; // SMCLK
19
    UCB0BR0 |= 0x01; // 1:1
20
    UCB0BR1 = 0;
21
    UCB0CTL1 &= ~UCSWRST; // clear SW
22

23
    P3OUT &= ~STCP;
24

25
    WriteData(0b00111100);
26
}

Und ja der Code ist zum teil aus irgenwelche Threads raus kopiert da 
mein eigenes Zeug ja auch nur rumgesponnen hat.

ich glaube ich bin einfach blind und übersehe irgendewas dummes.
Gast #6303759
Lesenswert?
• ▲
▼
Hallo Chris,

in der Zeile
while (!(IFG2 & UCA0TXIFG))
beobachtest Du das falsche Flag, Du benutzt UCB0.

Außerdem gibt es dafür das Busy-Flag im Register UCB0STAT also besser
while(UCB0STAT & UCBUSY);
und dahinter besser noch ein
_nop();
damit zwischen dem letzten Sendebit und dem Strobe eine minimale Pause 
entsteht.

Dann nimm mal bei der Initialisiierung den UCCKPL raus. Das Bit würde 
den Clock invertieren.

Welche Bitrate willst Du eigentlich einstellen?
UCSSEL_1 --> ACLK
UCSSEL_2 --> SMCLK
wenn Du also SMCLK willst, muß die Zeile
UCB0CTL1 = UCSSEL_2 | UCSWRST; (damit der Reset noch erhalten bleibt)
0x01 im UCB0BR0 ist unzulässig, setz das mal auf 0x02 oder 0x04

Die Zeile
P3OUT &= ~STCP;
ist wirkungslos, da der Pin nicht als GPIO konfiguriert ist, kannst Du 
streichen.

Gruß wv
OP #6304487
Lesenswert?
• ▲
▼
Moin,

das mit der falschen Flag is vom rein kopieren ins Forum,
hatte den USCI krams zu dem Zeitpunkt nich mehr im code:D

Das mit dem P3OUT war aus Verzweiflung da mal mit drinn.

Wusste nicht mehr weiter^^

Der Tip mit dem nop is super!
1
    /* Disable USCI */
2
    UCB0CTL1 |= UCSWRST;
3

4
    P1SEL |= SHCP + DS; // UCB0CLK + UCB0SIMO
5
    P1SEL2 |= SHCP + DS; // UCB0CLK + UCB0SIMO
6

7
    UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC;
8
    UCB0CTL1 = UCSSEL_2 | UCSWRST;
9

10
    /* Bit Rate Control Register 0 */
11
    UCB0BR0 = 8;
12

13
    /* Enable USCI */
14
    UCB0CTL1 &= ~UCSWRST;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.