Hallo an alle,

Ich habe ein Problem mit der SPI, und zwar wird nach dem Senden der Daten das Interrupt Flag nicht gesetzt. Es geht um ein dsPic33E.

Hier die SPI und Interrupt Einstellungen:
Code:
INTCON2bits.GIE=0;    
IFS2bits.SPI2IF=0;//clear Interrupt flag
    IEC2bits.SPI2IE=0;//disable interrupt
    
    SPI2STATbits.SPIEN=0;
    SPI2CON1bits.DISSCK=0; 
    SPI2CON1bits.DISSDO=0; 
    SPI2CON1bits.MODE16=0; 
    SPI2CON1bits.MSTEN=1; 
    SPI2CON1bits.SMP=0;
    SPI2CON1bits.CKE=0; 
    SPI2CON1bits.CKP=0; 


    SPI2STATbits.SISEL=0b101; //interrupt when transmit is complete
    IPC8bits.SPI2IP=0b001; //priorioty 1
           
    SPI2STATbits.SPIEN=1; // ENABLE spi
    
    SPI2BUF=0x00;//clear buf
    SPI2STATbits.SPITBF=0; //clear BF
    
    IFS2bits.SPI2IF=0;//clear int flag


    INTCON2bits.GIE=1;
    IEC2bits.SPI2IE=1; //enable interrupt
Hier der Sendevorgang :
Code:
       CS=0; 
       SPI2BUF=0xAD;
        CS=0; //no operation 
        while(IFS2bits.SPI2IF==0); // wait
        IFS2bits.SPI2IF=0;//clear Int flag.
        dummy=SPI2BUF;
        CS=1;
Die SPI funktioniert, die Daten samt Takt kommen am Oszi an. JEDOCH wird das IFS2bits.SPI2IF Flag nie gesetzt.. Die Einstellungen sind genau so wie aus dem Microchip Datenblatt empfohlen.
Das Problem mit while(SPI2STATbits.SPITBF==1); ist, dass der gesetzt wird wenn der Buffer leer ist, jedoch arbeitet das Schieberegister dann noch, auch gut im Zeitdiagramm zu sehen.

Wer weiß was hier nicht stimmt ?

Vielen dank
Liebe Grüße,
steckplatte