MSP430F2013 SPI

#4219957
Lesenswert?

Ich würde gerne ein nRF24L01 mir MSP430F2013 über SPI ansteuern, aber 
leider Funktioniert es nicht :-(
Ich habe den Code, bis auf den SPI Teil von meinem funktionierenden 
Programm für PIC24 übernommen. Leider habe ich noch kaum Erfahrung mit 
MSP430 und deshalb vllt. beim SPI Modul was falsch Initialisiert. Würde 
bitte jemand mal über meine SPI-Routinen drüber sehen:
1
#include "SPI.h"
2
#include <stdlib.h>
3

4
//------------------------------------------------------------------------------
5
void spiInit(void)
6
{
7
  // Configure SPI Pins
8
  P1DIR |= BIT6 | BIT5;   // MOSI (P1.6) and SCK (P1.5) output
9
  P1DIR &= ~BIT7;         // MISO (P1.7) input
10

11
  P1SEL |= BIT5 + BIT6 + BIT7;
12

13
  // USI SPI setup
14
  USICTL0 |= USISWRST;
15
  USICTL1 = USICKPH;                // USICKPH=1 means sampling is done on the
16
                                    // leading edge of the clock
17

18
  USICKCTL = USISSEL_2 | USIDIV_0;  // Clock source = SMCLK/1
19
  USICTL0 = USIPE7 |  // SDI/SDA port enable. Input in SPI mode
20
            USIPE6 |  // SDO/SCL port enable. Output in SPI mode
21
            USIPE5 |  // SCLK port enable. Output in SPI master mode.
22
            USIMST |  // Master mode
23
            USIOE;    // Data output enable
24

25
  USICTL0 &= ~USISWRST;
26

27
  USISR = 0x0000;
28

29
}
30

31

32
//------------------------------------------------------------------------------
33
uint8_t spiByte(uint8_t data)
34
{
35
  USISRL = data;
36
  USICNT = 8;            // Start SPI transfer
37
  while (!(USICTL1 & USIIFG));
38
  return USISRL;
39
}
40

41

42
//------------------------------------------------------------------------------
43
void *spiData(void *data, uint16_t size)
44
{
45
  if(data == NULL)   // Check for NULL pointer
46
    return NULL;
47

48
  uint8_t *data_ptr = data;
49
  while(size--)
50
  {
51
    *data_ptr = spiByte(*data_ptr) & 0xFF;
52
    data_ptr++;
53
  }
54

55
  return data;
56
}
57

58

59
//------------------------------------------------------------------------------
60
void spiWriteData(const void *data, uint16_t size)
61
{
62
  if(data == NULL)   // Check for NULL pointer
63
    return;
64

65
  const uint8_t *data_ptr = data;
66
  while(size--)
67
    spiByte(*data_ptr++);
68
}

Danke.
#4219994
Lesenswert?

Max H. schrieb:
> leider Funktioniert es nicht

Vielen Dank für die ausführliche Fehlerbeschreibung.

Daraus kann ich messerscharf schließen, dass du irgendwas falsch 
gemacht hast.

Du könntest uns wenigstens verraten, was du an den Pins gemessen hast.

> vllt. beim SPI Modul was falsch Initialisiert

Schau mal genau hin, wo USISWRST nicht mehr gesetzt ist. Das sollte aber 
keine großen Auswirkungen haben.

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