/** MSSP1_SPI Generated Driver API Header File @Company Microchip Technology Inc. @File Name mssp1_spi.c @Summary This is the generated source file for the MSSP1_SPI driver using PIC24 / dsPIC33 / PIC32MM MCUs @Description This source file provides APIs for driver for MSSP1_SPI. Generation Information : Product Revision : PIC24 / dsPIC33 / PIC32MM MCUs - 1.171.4 Device : PIC24FV16KM202 The generated drivers are tested against the following: Compiler : XC16 v2.10 MPLAB : MPLAB X v6.05 */ /* (c) 2020 Microchip Technology Inc. and its subsidiaries. You may use this software and any derivatives exclusively with Microchip products. THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION. IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS. */ /** Section: Included Files */ #include "mssp1_spi.h" /** Section: Driver Interface */ void MSSP1_SPI_Initialize (void) { // SMP End; CKE Idle to Active; SSP1STAT = 0x80; // SSPEN enabled; WCOL no_collision; CKP Idle:Low, Active:High; SSPM FOSC/(2 * (BRG_Value_SPI + 1)); SSPOV no_overflow; SSP1CON1 = 0x2A; // ACKEN disabled; GCEN disabled; PEN disabled; ACKDT acknowledge; RSEN disabled; RCEN disabled; SEN disabled; SSP1CON2 = 0x00; // SBCDE disabled; BOEN disabled; SCIE disabled; PCIE disabled; DHEN disabled; SDAHT 100ns; AHEN disabled; SSP1CON3 = 0x00; // AMSK 0; SSP1MSK = 0x00; // SSPADD 1; SSP1ADD = 0x01; } uint8_t MSSP1_SPI_Exchange8bit( uint8_t data ) { SSP1BUF = data; while (SSP1STATbits.BF == false) { } return SSP1BUF; } uint8_t MSSP1_SPI_Exchange8bitBuffer(uint8_t *dataTransmitted, uint8_t bufLen, uint8_t *dataReceived) { uint16_t bytesWritten = 0; if(dataTransmitted != NULL) { if(dataReceived != NULL) { while(bytesWritten < bufLen ) { dataReceived[bytesWritten] = MSSP1_SPI_Exchange8bit(dataTransmitted[bytesWritten]); bytesWritten++; } }else { while(bytesWritten < bufLen ) { MSSP1_SPI_Exchange8bit(dataTransmitted[bytesWritten]); bytesWritten++; } } } else { if(dataReceived != NULL) { while(bytesWritten < bufLen ) { dataReceived[bytesWritten] = MSSP1_SPI_Exchange8bit(MSSP1_SPI_DUMMY_DATA); bytesWritten++; } } } return bytesWritten; } bool MSSP1_SPI_IsBufferFull( void ) { return (!SSP1STATbits.BF); } bool MSSP1_SPI_HasWriteCollisionOccured( void ) { return (!SSP1CON1bits.WCOL); } bool MSSP1_SPI_HasReceiveOverflowOccured( void ) { return (!SSP1CON1bits.SSPOV); } void SPI_slaveSelect(void) { _LATB15 = 0; } void SPI_slaveDeselect(void) { _LATB15 = 1; } /** End of File */