Hallo, ich habe ein Problem mit den SPI Signalen von meinem MSP430F2013. Im Anhang ist ein Bild von den Signalen. Gelb: SCLK Blau: SDO Rosa: /CS Das Problem ist, dass mein CS Signal nicht sofort nach dem Abschluss des Sendevorgangs auf high geht, sondern erst später. Wie kann ich das besser machen ?
1 | #include <msp430x20x3.h> |
2 | |
3 | void spi_init(void); |
4 | |
5 | void spi_write(unsigned int, unsigned int); |
6 | |
7 | void wait(unsigned int); |
8 | |
9 | |
10 | void main(void) |
11 | {
|
12 | |
13 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer |
14 | P1DIR = 0x10; // P1.4 output-FSYNC |
15 | spi_init(); |
16 | |
17 | while(1) |
18 | |
19 | {
|
20 | wait(0x01); |
21 | |
22 | spi_dds_write(0x21,0x00); //Send 16 Bit 0x2100 |
23 | }
|
24 | |
25 | }
|
26 | |
27 | |
28 | void spi_init(void) |
29 | {
|
30 | |
31 | USICTL0 |= USISWRST; // Set USI Reset-Bit for Config |
32 | USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; // Ports, SPI master |
33 | USICKCTL = USIDIV_1 + USISSEL_2 + USICKPL; // 400kHz SCLK, CLK idle high |
34 | USICTL0 &= ~USISWRST; // USI released for operation |
35 | |
36 | }
|
37 | |
38 | void spi_write(unsigned int high, unsigned int low) |
39 | {
|
40 | |
41 | USISRL = low; |
42 | USISRH = high; |
43 | P1OUT &=~ 0x10; //CS low |
44 | USICNT = 80; // Counter=16, 16 Bit Operation //Start des Sendevorgangs |
45 | while(!(USIIFG & USICTL1)); //Warten bis Sendevorgang beendet ist |
46 | P1OUT |= 0x10; //CS high |
47 | |
48 | }
|
49 | |
50 | void wait(unsigned int cycles) |
51 | {
|
52 | volatile unsigned int i; |
53 | for(i=0;i<cycles;i++); |
54 | }
|
Danke.