Hallo Leute,
ich arbeite mit 2 MSP430f1611 Mikrocontrollern. Diese sind über SPI
verbunden. Programmierumgebung ist Eclipse mit mspgcc.
MOSI<->MOSI
MISO<->MISO
CLK<->CLK
Beide Controller werden mit 4Mhz betrieben.
Master wird folgend Initialisiert:
1 | void InitSPI(void)
|
2 | {
|
3 | ME2 |= ~USPIE1;
|
4 | P5SEL |= 0x0E;
|
5 |
|
6 | UCTL1 = CHAR + SYNC + MM + SWRST;
|
7 | UTCTL1 = SSEL_2 + STC;
|
8 | UBR01 = 0x00;
|
9 | UBR11 = 0x10;
|
10 | UMCTL1 = 0x00;
|
11 |
|
12 | ME2 |= USPIE1;
|
13 | UCTL1 &= ~SWRST;
|
14 | IE2 |= URXIE1 + UTXIE1;
|
15 | }
|
Slave:
1 | void InitSPIslave(void)
|
2 | {
|
3 | ME1 |= ~USPIE0;
|
4 | P3SEL |= 0x0E;
|
5 |
|
6 | UCTL0 = CHAR + SYNC + SWRST;
|
7 | UTCTL0 = SSEL_0 + STC;
|
8 | UBR00 = 0x00;
|
9 | UBR10 = 0x00;
|
10 | UMCTL0 = 0x00;
|
11 |
|
12 | ME1 |= USPIE0;
|
13 | UCTL0 &= ~SWRST;
|
14 | IE1 |= URXIE0 + UTXIE0;
|
15 | }
|
Interrupts werden mit _BIS_SR(GIE); freigeschaltet.
Interrupts sehen beim Master folgend aus:
//Der sende Vorgang beginnt mit TXBUF1 = 'x';
//Es werden dann 4 Bytes gesendet z.b. 'x', '1', '5', '0'
1 | interrupt (UART1TX_VECTOR) spi_tx(void)
|
2 | {
|
3 | if ((spit < 4)&&(spit>0))
|
4 | {
|
5 | TXBUF1 = SpiTx[spit++];
|
6 | if (spit==4)
|
7 | {
|
8 | spit=0;
|
9 | }
|
10 | }
|
11 | }
|
12 |
|
13 | interrupt (UART1RX_VECTOR) spi_rx(void)
|
14 | {
|
15 | if (((RXBUF1=='x')||(spir > 0))&&(spir < 4))
|
16 | {
|
17 | SpiRx[spir++]=RXBUF1;
|
18 | if (spir==4)
|
19 | {
|
20 | spir=0;
|
21 | tre=1;
|
22 | }
|
23 | }
|
24 | }
|
Slave Interrupts sehen genauso aus, nur das diese auf UART0 liegen.
folgendes Problem ist zu beobachten:
Nachdem ich in den TXBUF1 ein 'x' lege, wird dieses auf die Leitung
gelegt.
Komischerweise empfange ich im RXBUF1 tatsächlich irgenwelchen Müll der
dem gesendeten Chars stark ähnelt, wie kann das sein? Es besteht kein
physikalischer Kontakt!
Ein weiteres Problem ist, dass der Slave dem ich die Daten sende die
Chars mehrfach empfängt.
Ich weiß nicht was falsch daran ist, sitze schon echt lang dran und
erkenne einfach keinen Fehler...
Für Tipps wäre ich echt dankbar.
mfg Steffen