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.