Witam.
Nie udaje mi sie uruchomic SPI miedzy dwoma mikrokontrolerami PIC.
Master:16f887
Slave:16f818
Polaczenie: SDI/rc4(master) - SDO/rb2
SDO/rc5 - sdi/rb1
sck/rc3 - sck/rb4
rd6 - rb5 (to jest slave select)
Master:8MHz, Slave 8MHz, do slave'a sa podlaczone tylko diody ktore wyswietlaja stan Mastera.
Porty sa dobrze ustawione, adc wylaczone.
Kod mastera:
Nie udaje mi sie uruchomic SPI miedzy dwoma mikrokontrolerami PIC.
Master:16f887
Slave:16f818
Polaczenie: SDI/rc4(master) - SDO/rb2
SDO/rc5 - sdi/rb1
sck/rc3 - sck/rb4
rd6 - rb5 (to jest slave select)
Master:8MHz, Slave 8MHz, do slave'a sa podlaczone tylko diody ktore wyswietlaja stan Mastera.
Porty sa dobrze ustawione, adc wylaczone.
Kod mastera:
;--------------------------------
;DATA TO LEDS THRU SPI - Leds: laser, engine, turbo, dc motor, phase 1,p2,p3, overtemp
;--------------------------------
SPI_LED MOVLW B'00110010' ;WCOL - NO COLLISION, OVERFLOW - 0, SPI ON, CKP = 1 = IDLE HIGH, CLK = F/64 AND MASTER
MOVLW SSPCON
BSF STATUS,RP0 ;GOTO BANK1
MOVLW B'01000000' ;SMP - SAMPLE DATA in middle, CLOSK EDGE 0, BUFFER FULL = 1
MOVWF SSPSTAT
MOVLW B'00000000' ;I2C - SECURITY-na wszelki wypadek
MOVWF SSPCON1
SND_LED BCF SPI_E_LED ;ENABLE CS OUTPUT - LOW - SLAVE IS 2ND PIC NOW
MOVF 22H,W ;LEDS REGISTER INTO W REGISTER
MOVWF 25H,W ;DATA FOR ERROR CHECKING FOR DURING NEXT CYCLE OF SPI - LED
MOVWF SSPBUF ;LEDS REGISTER INTO SPI BUFFER
BCF SETUP,RP1 ;GOTO BANK 1
BSF SETUP,RP0
LED_COM BTFSS SSPSTAT,BF ;IS DATA TRANSFER COMPLETE? BUFFER IS FULL?
GOTO LED_COM ;IF NOT COMPLETE - WAIT MORE FO LED COMPLETE!
BCF SETUP,RP0 ;GOTO BANK0
MOVF SSPBUF,W ;DATA FROM SPI BUFFER INTO W
MOVWF 26H ;DATA FROM SPI-LED FROM 2ND UC
BSF SPI_E_LED
GOTO SLEC ;GOTO SPI_LED_ERROR_CHECK
;--------------------------------
;CHECK RECEIVED DATA FROM SPI-LED - IF IT IS EQUAL TO PREVIOUS STATE
;--------------------------------
;25H - this location holds previous data send to 2nd uC, this data is not encrypted
;26h - this location holds data just received from 2nd uC as feedback about LEDs which are on or off, this data is encrypted
;
;what to do - data from 26h should be encrypted (all bit negative, and swapped nibbles) and compared with 25H
;effect of comparison is data the same - all ok
;effect of comparison is data is different - wrong - in this case put signal on tp1
SLEC SWAPF 26H ;SWAP NIBBLES
MOVFW 26H ;TO W REGISTER
XORLW B'11111111' ;CHANGE ALL BITS, W HOLDS NOW NOT ENCRYPTED DATA
SUBWF 25H,1 ;SUBSTRACT BOTH REGISTERS
BTFSS STATUS,Z ;CHECK IS BOTH REGISTERS ARE EQUAL
GOTO LED_ERR ;THERE IS ERROR ABOUT PIC TO PIC COMMUNICATION
GOTO LOOP ;ERROR CHECKING IS OK, LOOP COULD BE REPEATED ONCE AGAIN
END