MSP430F2013 SPI

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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.