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