#include #include "spimaster.h" //CKE=1 CKP=0 SMP=0 #define SPImasterXInit(X) do {\ SSP##X##STATbits.SMP = 0; \ SSP##X##STATbits.CKE = 1; \ SSP##X##CON1.CKP = 0; \ SSP##X##CON1.SSP##X##EN = 1; \ SSP##X##CON1.SSP##X##M = 0b0001; /* SPI Master mode, clock = FOSC/16 */ \ } while(0); void SPImaster1Init() { #ifdef _PORTC_SDO1 TRISC &= ~_PORTC_SDO1; #endif #ifdef _PORTC_SCK1 TRISC &= ~_PORTC_SCK1; #endif #ifdef _PORTC_SDI1 TRISC |= _PORTC_SDI1; #endif SPImasterXInit(1); } void SPImaster2Init() { #ifdef _PORTB_SDO2 TRISB &= ~_PORTB_SDO2; #else #ifdef _PORTD_SDO2 TRISD &= ~_PORTD_SDO2; #endif #ifdef _PORTB_SCK2 TRISB &= ~_PORTB_SCK2; #else #ifdef _PORTD_SCK2 TRISD &= ~_PORTD_SCK2; #endif #ifdef _PORTB_SDI2 TRISB |= _PORTB_SDI2; #else #ifdef _PORTD_SDI2 TRISD |= _PORTD_SDI2; #endif SPImasterXInit(2); } byte SPImaster1Transfer(byte b) { SSP1BUF = b; while(!SSP1STATbits.BF); return SSP1BUF; } byte SPImaster2Transfer(byte b); { SSP2BUF = b; while(!SSP2STATbits.BF); return SSP2BUF; }