MSP430F1611: DMA und SPI

OP #1724620
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren