Hallo,
ich konnte mit einem ähnlichen Programm problemslos ein Slave steuern.
Nun will ich das Nokia Display ansteuern. Das Programm hängt aber in
einer Endloschleife ung sendet nichts. Ich weiß nicht warum.
Hoffentlich kann mir jemand helfen.
1 | #include <msp430x20x3.h>
|
2 |
|
3 | void send_spi(unsigned int, unsigned int);
|
4 |
|
5 | void init_display();
|
6 |
|
7 | void wait(unsigned int);
|
8 |
|
9 | void main(void)
|
10 | {
|
11 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
|
12 | P1DIR = 25;
|
13 | P1OUT &= 0x08;
|
14 | USICTL0 |= USISWRST; // Config SPI
|
15 | USICTL0 |= USIMST + USIPE6 + USIPE5 + USIOE; // Master mode
|
16 | USICTL1 |= USICKPH;
|
17 | USICKCTL = USIDIV_1 + USISSEL_2; // 1/2 MCLK
|
18 | USICTL0 &= ~USISWRST; // USI released for operation
|
19 |
|
20 | init_display();
|
21 |
|
22 | P1OUT |= 0x01;
|
23 | }
|
24 |
|
25 | void wait(unsigned int time)
|
26 | {
|
27 | volatile unsigned int i;
|
28 | for(i=0;i<time;i++);
|
29 | }
|
30 |
|
31 |
|
32 | void send_spi(unsigned int high, unsigned int low)
|
33 | {
|
34 |
|
35 | USISRL=low;
|
36 | USISRH=high;
|
37 |
|
38 | P1OUT &= ~0x10; // CS low
|
39 |
|
40 | USICNT=73; //16-Bit Mode, Counter=9
|
41 |
|
42 | while(!(USIIFG & USICTL1)); //HIER BLEIBT ES HÄNGEN
|
43 |
|
44 | P1OUT |= 0x10; // CS high
|
45 | }
|
46 |
|
47 | void init_display()
|
48 | {
|
49 | while(1)
|
50 | {
|
51 | P1OUT &= ~0x08; // Reset = low
|
52 | wait(0xFFFF);
|
53 | P1OUT |= 0x08; // Reset = high
|
54 |
|
55 | wait(0xF0);
|
56 | send_spi(0x08,0x10); // Leave Sleep Mode, turn on Booster 0x11
|
57 | }
|
58 | }
|
Wieso sendet er nichts ?
Ich habe das Programm nahezu 1:1 von einem anderen funktionierenden
Programm übernommen ? Es bleibt in der while - Schleife hängen und macht
nichts mehr. Das USIIFG - Bit wird nie gelöscht !
Danke !