MSP430F2013 SPI

OP #4219957
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.
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.