dspic SPI write fråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

dspic SPI write fråga

Inlägg av dangraf »

Hallå!
Jag håller på med en liten kodsnutt till en dspic 30F6012A och har en fråga angående SPI hanteringen.

Det är nämligen så att jag kopplat flera enheter till SPI interfacet (clk, sdo, sdi) och använder vanliga IO pinnar som "enable" signaler. Jag vill alltså välja enhet med enable signalen och därefter skriva så att enbart den valda enheten läser in data. När jag slutat skicka data skall enable signalen bli disabled igen.

Problemet är att jag inte lyckas få det att fungera. Jag använder mig av SPI2STAT registret (använder mig av spi2 enheten) och kollar på "SPITBF" biten och väntar på att den ändrar värde från 1 till 0 innan jag disablar signalen..

Men det verkar som att denna bit enbart hanterar bufferten, alltså om det finns platts att skriva mer data i bufferten och verkar inte ha något att göra med när all data skickats färdigt. Det betyder att jag får en väldigt kort enable-puls så att första klockcykeln läses in.

Har jag förstått det hela rätt? finns det isf något sätt att kolla när all data är färdigklockad så att jag själv kan hantera mina enable signaler på ett korrekt sätt?

jag hittar nämligen inga fler bitar att titta på i status och controll registrena för SPI enheten.


// Daniel
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Utan att ha tittat närmare på ditt specifika problem, så kan jag säga att jag känner igen eländet hos PIC30F med flaggor som inte beter sig som man tycker att databladen beskriver dem. Jag börjar ju undra om det är konsekvent för alla moduler?
larsson
Inlägg: 188
Blev medlem: 9 juni 2007, 16:49:21
Ort: Göteborg

Inlägg av larsson »

Såvitt jag kan se är det som du säger, SPITBF indikerar att det finns plats för nya fräscha data i bufferten, om så önskas. Kika på flaggan SPI2IF (i SFR IFS1) om inte den kan hjälpa dig:

4. When the transfer is complete, the following events will occur:
• The interrupt flag bit, SPIxIF, is set. SPI interrupts can be enabled by setting the interrupt enable bit SPIxIE. The SPIxIF flag is not cleared automatically by the hardware.

Det var värst vad de krånglat till det, det går ju fortare att knacka ihop en egen bitbang än att läsa alla 20+ manualsidor om SPI...
Skriv svar