Forum: Mikrocontroller und Digitale Elektronik MSP430F1611: DMA und SPI


von Frank K. (fchk)


Lesenswert?

Hallo!

Ich benutze bei einem MSP430F1611 UART1 als SPI. Geht soweit auch. Jetzt 
will ich den DMA-Controller einsetzen, aber der legt nicht los. Am Logic 
Analyzer sehe ich, dass nichts am SPI passiert.
1
// UART1 als SPI
2
#include <io430.h>
3
#include "spi.h"
4
5
#define PIN_MOSI 0x02
6
#define PIN_MISO 0x04
7
#define PIN_SCK  0x08
8
9
char spi_sendrecv(char c)
10
{
11
  while(!(IFG2&UTXIFG1));
12
  U1TXBUF=c;
13
  while(!(IFG2&URXIFG1));
14
  return U1RXBUF;
15
}
16
17
void spi_senddma(char* p, unsigned short n)
18
{
19
  DMACTL0=DMA0TSEL_10; // UTXIFG1 bit
20
  DMA0SA=(unsigned short)p;
21
  DMA0DA=(unsigned short)&U1TXBUF;
22
  DMA0SZ=n;
23
  DMA0CTL=DMADT_1+DMASRCINCR_3+DMADSTINCR_0+DMASBDB+DMAEN;
24
  // Block Transfer+Src incr+Dst const+Src/Dst Bytes+DMA Enable
25
}
26
27
void spi_init(void)
28
{
29
  P5DIR|=PIN_MOSI|PIN_SCK;              // Direction
30
  P5DIR&=~PIN_MISO;
31
  P5OUT&=~(PIN_MOSI|PIN_MISO|PIN_SCK);  // Output Register
32
  P5SEL|=PIN_MOSI|PIN_MISO|PIN_SCK;     // Special Func Select
33
  ME2|=USPIE1;                          // Module Enable
34
  U1CTL=SWRST|MM|SYNC|CHAR;
35
  U1TCTL=SSEL1|SSEL0|STC|CKPL;
36
  U1BR0=2;                              // Bitrate
37
  U1BR1=0;
38
  U1MCTL=0;                             // Modulation
39
  U1CTL&=~SWRST;                        // Reset zurücknehmen
40
}

Wie gesagt, spi_init() und spi_sendrecv() funktionieren soweit.

Wo ist mein Problem?

fchk

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.