/****************************************************************************/
/* Copyright 2010 MBARI.                                                    */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
#include <p24fxxxx.h>

#include "sys_defs.h"

unsigned int spiReadWrite(unsigned int data);

void spiInit()
{
    /* setup AN4 and AN5 as digital pins */
    AD1PCFGbits.PCFG4 = 1; 
    AD1PCFGbits.PCFG5 = 1;
    
    /* setup AN8 as digital pin */
    AD1PCFGbits.PCFG8 = 1;
        
    /* make bit RB3 the CS */
    LATCbits.LATC2 = 1;
    Nop();
    TRISCbits.TRISC2 = 0;
    Nop();

    /* setup RTC CS */    
    LATAbits.LATA4 = 1;
    Nop();
    TRISAbits.TRISA4 = 0;
    Nop();

    /* setup SPI1 registers */
    SPI1CON1bits.CKP = 1;
    SPI1CON1bits.CKE = 0;
    SPI1CON1bits.SMP = 0;
    
    
    
    SPI1CON1bits.MSTEN = 1;

    /* set primary and secondary prescalar */
    SPI1CON1bits.PPRE = 0x03;   /* pimary prescale 1:1      */
    SPI1CON1bits.SPRE = 0x06;   /* secondary prescale 2:1   */

    /* enable SPI module */
    SPI1STATbits.SPIEN = 1;

}

unsigned int spiReadWrite(unsigned int data)
{
    /* put data in SPI TX buffer */
    SPI1BUF = data;

    /* wait for xmit to finish */
    while ( !SPI1STATbits.SPIRBF )
        ; /* wait here */

    return SPI1BUF;
}

void spiCS(int state)
{
    if ( state )
        LATCbits.LATC2 = 0;
    else
        LATCbits.LATC2 = 1;

    Nop();
}

void spiCS2(int state)
{
    if ( state )
        LATAbits.LATA4 = 0;
    else
        LATAbits.LATA4 = 1;

    Nop();
}

