Slave verliert Daten wenn in Interrupt springt

OP #3383258
Lesenswert?

Hallo Leute,

ich habe einen Master (PIC16F886) und einen Slave (PIC18F44K22). Das 
Senden sowie das Empfangen von Master funktioniert. Empfangen wird aber 
nur etwas wenn ich die Variable direkt im Slave MSSP Interrupt setze 
bevor sie in den Buffer gelesen wird. Wenn ich die Variable in der 
main-loop setzt geht der Wert verloren. Das Problem hatte ich mit 
anderen Prozessoren bisher noch nicht. Weis jemand woran das liegt?

MfG Lukas
1
void interrupt ISR(void)
2
{
3
    if(SSP1IF)
4
    {
5
        SSP1IF = 0;
6
        if(SSP1STATbits.S == 1 && RW1 == 0 && DA1 == 0 && BF1 == 1)                //STATE 1: Master write, last byte was an adress
7
        {
8
            dLED1 = 1;
9
            vCLEAR = SSP1BUF;
10
            CKP1 = 1;
11
        }
12

13
        if(SSP1STATbits.S == 1 && RW1 == 0 && DA1 == 1 && BF1 == 1)              //STATE 2: Master write, last byte was data
14
        {
15
            dLED2 = 1;
16
            vWRITEDATA = SSP1BUF;
17
            CKP1 = 1;
18
            vCLEAR = SSP1BUF;
19
        }
20

21
        if(SSP1STATbits.S == 1 && RW1 == 1 && DA1 == 0)                          //STATE 3: Master read, last byte was an adress
22
        {            
23
            dLED3 = 1;
24
            CKP1 = 0;
25
//            vREADDATA[0] = 0x41;  <- setzen der Variable, dann läuft!
26
            SSP1BUF = vREADDATA[0];                                                   //Rücksetzen wenn Daten in Buffer eingelesen
27
            CKP1 = 1;
28
        }
29

30
        if(SSP1STATbits.S == 1 && DA1 == 1 && BF1 == 0 && CKP1 == 1)                //STATE 5: Master NACK
31
        {
32
            dLED5 = 1;
33
            CKP1 = 1;
34
            vCLEAR = SSP1BUF;
35
        }        
36
    }
37
}
38

39
void main(void)
40
{
41
    Init();
42

43
    fSTARTUP();
44
    fSELBSTTEST();
45

46
    while(1)
47
    {
48

49
        if(vWRITEDATA == 0x66)
50
        {
51
            dLED8 = 1;
52
        }
53
        
54
        vREADDATA[0] == 0x41;
55
    }
56
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren