6,40 → 6,32 |
|
void SPI2_Init(unsigned char speed) { |
// Set up SPI2 with specified pins |
RPINR22 = 7; // SPI2 CLK Input (Pin RB4) |
RPOR7 = 11; // SPI2 CLK Output (Pin RB4) |
RPINR22 = PPS_SPI2_CLK_IN; // SPI2 CLK Input (Pin RB4) |
PPS_SPI2_CLK_OUT = 11; // SPI2 CLK Output (Pin RB4) |
#ifndef SPI2_WRITE_ONLY |
RPINR21 = 6; // SPI2 Data Input (Pin RB3) |
RPINR21 = PPS_SPI2_MISO; // SPI2 Data Input (Pin RB3) |
#endif |
RPOR5 = 10; // SPI2 Data Output (MOSI) (Pin RB2) |
PPS_SPI2_MOSI = 10; // SPI2 Data Output (MOSI) (Pin RB2) |
|
TRISBbits.TRISB4 = 0; // SPI2 clock pin (Pin RB4) |
SPI_CLK_TRIS = 0; // SPI2 clock pin (Pin RB4) |
#ifndef SPI2_WRITE_ONLY |
TRISBbits.TRISB3 = 1; // SPI2 data in pin (Pin RB3)(MISO) |
SPI_MISO_TRIS = 1; // SPI2 data in pin (Pin RB3)(MISO) |
#endif |
TRISBbits.TRISB2 = 0; // SPI2 data out pin (Pin RB2)(MOSI) |
SPI_MOSI_TRIS = 0; // SPI2 data out pin (Pin RB2)(MOSI) |
|
TRISBbits.TRISB7 = 0; // SPI2 slave select (Pin RB7) |
LATBbits.LATB7 = 1; // SPI2 SS high (Idle) |
SPI_SLAVE_SELECT_TRIS = 0; // SPI2 slave select (Pin RB7) |
SPI_SLAVE_SELECT_LAT = 1; // SPI2 SS high (Idle) |
|
TRISBbits.TRISB6 = 0; // SPI2 reset (Pin RB6) |
LATBbits.LATB6 = 1; // SPI2 reset active low |
SPI_RESET_TRIS = 0; // SPI2 reset (Pin RB6) |
SPI_RESET_LAT = 1; // SPI2 reset active low |
|
TRISBbits.TRISB5 = 0; // SPI2 D/C select (Pin RB5) |
LATBbits.LATB5 = 0; |
SPI_DC_SELECT_TRIS = 0; // SPI2 D/C select (Pin RB5) |
SPI_DC_SELECT_LAT = 0; |
|
SSP2STATbits.SMP = 0; // Input is sampled in the middle of data output time |
SSP2STATbits.CKE = 0; // Transmit occurs on transition from Idle to active clock state |
|
SSP2CON1bits.SSPM = speed; |
// if (speed == SPI2_FOSC_4) |
// SSP2CON1bits.SSPM = 0b0000; // Clock = FOSC/4 |
// else if (speed == SPI2_FOSC_8) |
// SSP2CON1bits.SSPM = 0b1010; // Clock = FOSC/8 |
// else if (speed == SPI2_FOSC_16) |
// SSP2CON1bits.SSPM = 0b0001; // Clock = FOSC/16 |
// else |
// SSP2CON1bits.SSPM = 0b0010; // Clock = FOSC/64 |
|
SSP2CON1bits.CKP = 1; // Idle state for clock is a high level |
SSP2CON1bits.SSPEN = 1; // Enable MSSP module |
79,7 → 71,7 |
SSP2BUF = spi_data_p->buffer_out[spi_data_p->buffer_out_ind]; |
spi_data_p->buffer_out_ind++; |
} else { |
LATBbits.LATB2 = 1; // Bring SS line high |
SPI_SLAVE_SELECT_LAT = 1; // Bring SS line high |
spi_data_p->buffer_out_ind = 0; |
spi_data_p->buffer_out_len = 0; |
} |
95,12 → 87,12 |
for (i = 0; i < length; i++) { |
spi_data_p->buffer_out[i] = msg[i]; |
} |
LATBbits.LATB7 = 0; // Bring SS line low |
SPI_SLAVE_SELECT_LAT = 0; // Bring SS line low |
SSP2BUF = spi_data_p->buffer_out[0]; // Transmit first byte |
#else |
unsigned int i = 0; |
unsigned char tmp = 0; |
LATBbits.LATB7 = 0; |
SPI_SLAVE_SELECT_LAT = 0; |
while (i != length) { |
SSP2BUF = msg[i]; |
i++; |
119,7 → 111,7 |
tmp = SSP2BUF; |
#endif |
} |
LATBbits.LATB7 = 1; |
SPI_SLAVE_SELECT_LAT = 1; |
#endif |
} |
|
129,7 → 121,7 |
#else |
unsigned int i = 0; |
unsigned char tmp = 0; |
LATBbits.LATB7 = 0; |
SPI_SLAVE_SELECT_LAT = 0; |
while (i != length) { |
SSP2BUF = c; |
i++; |
148,7 → 140,7 |
tmp = SSP2BUF; |
#endif |
} |
LATBbits.LATB7 = 1; |
SPI_SLAVE_SELECT_LAT = 1; |
#endif |
} |
|
160,11 → 152,11 |
for (i = 0; i < length; i++) { |
spi_data_p->buffer_out[i] = 0x0; |
} |
LATBbits.LATB7 = 0; // Bring SS line low |
SPI_SLAVE_SELECT_LAT = 0; // Bring SS line low |
SSP2BUF = spi_data_p->buffer_out[0]; // Transmit first byte |
#else |
unsigned char i = 0; |
LATBbits.LATB7 = 0; |
SPI_SLAVE_SELECT_LAT = 0; |
|
for (i = 0; i < length; i++) { |
SSP2BUF = 0x0; |
178,7 → 170,7 |
} |
spi_data_p->buffer_in_len++; |
} |
LATBbits.LATB7 = 1; |
SPI_SLAVE_SELECT_LAT = 1; |
#endif |
} |
|