;; ;; spreadspace pic utils ;; ;; ;; Copyright (C) 2011-2013 Christian Pointner ;; ;; This file is part of spreadspace pic utils. ;; ;; spreadspace pic utils is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; any later version. ;; ;; spreadspace pic utils is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with spreadspace pic utils. If not, see . ;; ;; --- transmit byte and add it to csum com_tx_byte movwf SSPBUF bcf INTPIN xorwf csum,f bsf STATUS,RP0 com_tx_byte_wait1 btfss SSPSTAT,BF goto com_tx_byte_wait1 bcf STATUS,RP0 movf SSPBUF,w bsf INTPIN com_tx_byte_wait2 ; also wait for SS to go up again btfss PORTA,5 ; this lowers the risk for raise conditions goto com_tx_byte_wait2 ; with next byte (INT pin) return ;; ---- wait for byte to be received com_rx_byte bsf STATUS,RP0 btfsc SSPSTAT,BF goto com_rx_got_byte bcf STATUS,RP0 btfss SSPCON,SSPOV goto com_rx_byte movf SSPBUF,w bcf SSPCON,SSPOV goto com_rx_byte com_rx_got_byte bcf STATUS,RP0 movf SSPBUF,w return ;; ----- initialize com (this is called by bootmacro, it's not a subroutine - no return at the end) com_init ;; bank 3 - we are already there, see bootmacro ;; bank 1 bcf STATUS,RP1 movlw b'01110000' ; set internal OSC to 8MHz movwf OSCCON movlw b'01000000' ; SMP=0,CKE=1 movwf SSPSTAT bcf TRISC,5 ; RC5(SDO) = out bcf INTPIN ; interrupt line to master ;; bank 0 bcf STATUS,RP0 btfsc BOOTPIN goto USERVECT movlw b'00100100' ; SSPEN=1,CKP=0,SSPM=0100(SPI Slave with SS) movwf SSPCON bsf INTPIN