Forum: Mikrocontroller und Digitale Elektronik Lin Slave / Master mit MSP430F5438


von Hannes H. (mui)


Lesenswert?

Hallo,

hat schonmal jemand einen Lin-Slave mit dem MSP430F5348 gemacht? Das 
Teil kann ja angeblich LIN mit den UCSI_A, aber so richtig was dazu 
gefunden an Application Note oder Codebeispielen habe ich nicht.
Unter anderem hänge ich an der Initialisierung der UCSI, insbesondere 
wie das mit der breakdetection funktioniert. Da soll ja eigentlich ein 
Interrupt ausgelöst werden, aber wie heisst die ISR dazu?

Hat vielleicht jemand ein Beispiel?

Vielen Dank und viele Grüße,
mui

PS: Irgendwann soll auch ein Master implementiert werden, aber das kommt 
dann später...

von Stefan (Gast)


Lesenswert?

Hannes H. schrieb:
> Hallo,
>
> hat schonmal jemand einen Lin-Slave mit dem MSP430F5348 gemacht?
Nö, bloß mal angedacht...

> das Teil kann ja angeblich LIN mit den UCSI_A, aber so richtig was dazu
> gefunden an Application Note oder Codebeispielen habe ich nicht.
Naja... die USCI hat das "automatic baud rate" feature, mit break 
detection und Synchronisierung. Das ist aber alles in Hardware gegossen 
und man kümmert sich eigentlich nur noch um die "normale" UART dahinter.

> Unter anderem hänge ich an der Initialisierung der UCSI, insbesondere
> wie das mit der breakdetection funktioniert. Da soll ja eigentlich ein
> Interrupt ausgelöst werden, aber wie heisst die ISR dazu?
Wüsste jetzt nicht, wozu man diesen IRQ bräuchte?
>

> PS: Irgendwann soll auch ein Master implementiert werden, aber das kommt
> dann später...
Sollte mit der Einstellung "automatic baud rate" ebenfalls automatisch 
funktionieren...

von Hannes H. (mui)


Lesenswert?

Stefan schrieb:
>> das Teil kann ja angeblich LIN mit den UCSI_A, aber so richtig was dazu
>> gefunden an Application Note oder Codebeispielen habe ich nicht.
> Naja... die USCI hat das "automatic baud rate" feature, mit break
> detection und Synchronisierung. Das ist aber alles in Hardware gegossen
> und man kümmert sich eigentlich nur noch um die "normale" UART dahinter.
>
Genau, das mit der automatik baudrate detection habe ich auch schon 
gefunden und eingestellt. Bedeutet das dann, dass das ID-Feld vom Master 
das Erste ist, was im RX-Buffer landet? Und muss ich dann nur noch einen 
TX mit der Uart machen mit den Datenfeldern um dem Master die Daten 
zukommen zu lassen? Muss ich Checksumme und Parity dann manuell 
berechnen und verschicken, oder passiert das auch automatisch?

>> Unter anderem hänge ich an der Initialisierung der UCSI, insbesondere
>> wie das mit der breakdetection funktioniert. Da soll ja eigentlich ein
>> Interrupt ausgelöst werden, aber wie heisst die ISR dazu?
> Wüsste jetzt nicht, wozu man diesen IRQ bräuchte?
Naja, ich dachte halt, dass der break erfasst werden muss um dann das 
autobaud feature zu nutzen, bzw. um dann Daten zu senden?! aber wenn das 
alles automatisch gemacht wird, bräuchte ich da gar nicht drauf 
achten...

Hier ist nochmal der Code, mit dem ich die UCSI initialisiere - 
viellecht kann da ma jemand ein Auge drauf werfen, ob das halbwegs 
passt:

Viele Grüße,
mui
1
void main(void)
2
{
3
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
4
  InitLinSlave();
5
  while(1);
6
}
7
8
void InitLinSlave(void)
9
{
10
  P3SEL = 0x30;                           // P3.4,5 = USCI_A0 TXD/RXD
11
  UCA0CTL1 |= UCSWRST;                     // **Put state machine in reset**
12
  UCA0CTL1 |= UCSSEL_2;                   // SMCLK
13
    UCA0ABCTL |= UCABDEN;                   // LIN-Control -> autobaud
14
    UCA0CTL0 |= UCMODE0|UCMODE1;      // LIN-Mode
15
    UCA0CTL1 |= UCBRKIE;          //enable break interrupt
16
    UCA0CTL1 &= ~UCSWRST;                   // **Initialize USCI state machine**
17
    UCA0IE |= UCRXIE;                       // Enable USCI_A0 RX interrupt
18
}

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
Noch kein Account? Hier anmelden.