Re: SPI con PIC24F

R

RichardH

Guest
Salve

Sto cercando di orologio un continuo flusso di dati mediante la porta SPI (non ho mai letto nulla in cambio), idealmente, vorrei una parola a 16 bit con una interruzione per ricaricare la SPI1BUF ogni volta che è vuota.

Ho creato la SPI

TRISF = 0x0140;
CLKDIV = 0x0040;
SPI1CON1 = 0x013B;
SPI1CON2 = 0x0000;

SPI1STATbits.SISEL0 = 1; / / SISEL fissato a 101 per consentire interrupt uscita
SPI1STATbits.SISEL1 = 0;
SPI1STATbits.SISEL2 = 1;
SPI1CON1bits.MODE16 = 1; / /
mettete in modalità a 16 bit
SPI1STATbits.SPIEN = 1; / / Abilita la SPI

IFS0bits.SPI1IF = 1; / /
eliminiamo interrompere bandiera
IEC0bits.SPI1IE = 1; / / consentire interrompereinterrompere la mia routine

void __attribute__ ((__interrupt__, no_auto_psv)) _SPI1Interrupt (void)
(
SPI1BUF = dati [count ];
IFS0bits.SPI1IF = 0;
)

l'interrupt viene chiamato 2 o 3 volte, poi mai più .......... ma io sono la bandiera di compensazione, per cui non so il motivo per cui si ferma.

Ho cercato di aggiungere

IFS0bits.SPF1IF = 0;

per interrompere il servizio di routine, solo nel caso in cui mi è stato un errore (come lo sono io che non ha ricevuto nulla), ma questo non aiuta.

Tutte le idee che ho perso?

Grazie

RichardAggiunto dopo 5 ore 36 minuti:Dopo aver cercato varie cose, ho trovato che, se ho

SPI1STATbits.SPIROV = 0;

nel interrompere, quindi, sembra continuare poi con l'interrupt, tuttavia, non sono sicuro che questo è corretto come ho cui sembra di vedere ogni impulsi di clock e dati in uscita.

Qualsiasi idee?

 

Welcome to EDABoard.com

Sponsor

Back
Top