Hallo zusammen,
ich habe folgendes Problem:
Aufgabe:
Ich möchte von einem PC (Programm funktioniert sicher, getestet per
COM-Monitor) RS232 Daten am einen PIC18F6585 schicken.
Am PIC hängt über SPI ein MAX3110.
Pre:
Ich benutze die Entwicklungsumgebung PIC-C und das CSS ICD-U40
Programmiergerät.
Problem:
Die Daten kommen am anderen Ende des RS232 Kabels an, allerdings bemomme
ich sie nicht vom MAX3110 auf den PIC.
Folgende Funktionen sollten das ermöglichen:
1 | void MAX_Init()
|
2 | {
|
3 | spi_write(0xED09); //Address of MAX, Init-Sequence
|
4 | /*
|
5 | Hiermit wird eingestellt:
|
6 | •= Baudrate = 19200bps
|
7 | •= 8 Bit Daten
|
8 | •= kein Parity
|
9 | •= 1 Stopbit
|
10 | •= alle nötigen Interrupts erzeugen
|
11 | •= Stromsparmodus aus (/SHTDN)
|
12 | •= Polarität der CTS RTS Signale
|
13 | •= FIFO enabled
|
14 | */
|
15 | }
|
16 |
|
17 | unsigned long build_data()
|
18 | {
|
19 | int i, j;
|
20 | byte A_byte;
|
21 | unsigned long temp;
|
22 |
|
23 | for(i=0; i<64; i+=8)
|
24 | { // Loop for 8 rows
|
25 | for(j=0; j<8; ++j) // Loop for 8 columns
|
26 | {
|
27 | spi_write(0x0000);
|
28 | A_byte = spi_read(0x0000); // Read byte from SPI
|
29 | spi_write(0xC609); // Reset the RX Int Bit
|
30 |
|
31 | LIN_Msg = LIN_Msg & A_byte; // Attach next Word
|
32 | LIN_Msg << 8; // 8Bits left
|
33 | }
|
34 | }
|
35 |
|
36 | temp = LIN_Msg;
|
37 |
|
38 | if ( ((temp << 6) == 0) && (LIN_Msg > 0) )
|
39 | {
|
40 | MessID = LIN_Msg >> 58;
|
41 | LIN_Msg = 0x00000000000;
|
42 | }
|
43 |
|
44 | return LIN_Msg;
|
45 | }
|
46 |
|
47 | #int_SSP
|
48 | SSP_isr()
|
49 | {
|
50 | test = build_data();
|
51 | spi_write(0x8000 | 0x11);//ACK
|
52 | }
|
53 |
|
54 | void main()
|
55 | {
|
56 |
|
57 | unsigned char msg[8];
|
58 |
|
59 | setup_adc_ports(NO_ANALOGS|VSS_VDD);
|
60 | setup_adc(ADC_OFF);
|
61 | setup_psp(PSP_DISABLED);
|
62 | setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_XMIT_L_TO_H);
|
63 | setup_wdt(WDT_OFF);
|
64 | setup_timer_0(RTCC_INTERNAL);
|
65 | setup_timer_1(T1_DISABLED);
|
66 | setup_timer_2(T2_DISABLED,0,1);
|
67 | setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
|
68 | setup_comparator(NC_NC_NC_NC);
|
69 | setup_vref(FALSE);
|
70 | enable_interrupts(INT_SSP);
|
71 | enable_interrupts(GLOBAL);
|
72 | setup_oscillator(False);
|
73 |
|
74 |
|
75 | CSWake();
|
76 |
|
77 | linWakeUp();
|
78 |
|
79 | MAX_Init();
|
80 |
|
81 | while (1)
|
82 | {
|
83 | linMessage(MessID, LIN_Msg, MessLen);
|
84 | }
|
85 | }
|
Es sollen jeweils 8x8Bit Blöcke empfangen und zu einem 64 Bit Block
zusammengefügt werden, aber wie gesagt, irgendwas passt net so wie es
soll.
Kann mir jemand sagen wo ich den/die Fehler gemacht habe, bzw. wo ich
ein Tutorial finde, wie man per SPI richtig mit dem MAX3110
kommuniziert?
Danke schonmal für eure Antworten.
LG Klaus