Exemple #1
0
// Set up the SPI for the MicroSD card
void sdSetup(void)
{
    // Configure Port Direction
    TRISDbits.TRISD5 = 0;   //  Turn RD5 into output for SCLK
    TRISDbits.TRISD4 = 1;   //  Turn RD4 into input for MISO
    TRISDbits.TRISD3 = 0;   //  Turn RD3 into output for MOSI
    TRISDbits.TRISD2 = 0;   //  Turn RD2 into output for SS
    TRISDbits.TRISD1 = 1;   //  Turn RD1 into input for CD (card detect)

    // Configure PPS pins for MicroSD
    iPPSInput(IN_FN_PPS_SDI1,IN_PIN_PPS_RP25);          // Assign SDI1 to pin RP25
    iPPSOutput(OUT_PIN_PPS_RP20,OUT_FN_PPS_SCK1OUT);    // Assign SCK1OUT to pin RP20
    iPPSOutput(OUT_PIN_PPS_RP22,OUT_FN_PPS_SDO1);       // Assign SDO1 to pin RP22
    iPPSOutput(OUT_PIN_PPS_RP23,OUT_FN_PPS_SS1OUT);     // Assign SS1OUT to pin RP23

    // Close SPI in case it's already open
    CloseSPI1();
    
    // Enable SPI interface

    // Clear and disable SPI interupts for now
    SPI1_Clear_Intr_Status_Bit;
    DisableIntSPI1;

    ConfigIntSPI1(SPI_INT_DIS);
    // Interrupts disabled
    
    OpenSPI1(0x0000, MASTER_ENABLE_ON, SPI_ENABLE);
    // Master Mode
    // SPI enabled
}
Exemple #2
0
static void initSPI_OSD(uint16_t priPre, uint16_t secPre)
{
	uint16_t SPICON1Value = 0, SPICON2Value = 0;
	uint16_t SPISTATValue = 0;

#if defined(__dsPIC33E__)
	SPICON1Value =
	    ENABLE_SDO_PIN & SPI_MODE16_OFF & ENABLE_SCK_PIN &
	    SPI_SMP_OFF & SPI_CKE_ON &
	    SLAVE_ENABLE_OFF &
	    CLK_POL_ACTIVE_HIGH &
	    MASTER_ENABLE_ON &
	    secPre & priPre;
//	SPICON2Value = FRAME_ENABLE_OFF & FRAME_SYNC_OUTPUT; // & FIFO_BUFFER_DISABLE;
//	SPISTATValue = SPI_ENABLE & SPI_IDLE_CON & SPI_RX_OVFLOW_CLR; // & BUF_INT_SEL_5;
	SPISTATValue = SPI_ENABLE;
#else
	SPICON1Value =
	    ENABLE_SDO_PIN & SPI_MODE16_OFF & ENABLE_SCK_PIN &
	    SPI_SMP_ON & SPI_CKE_OFF &
	    SLAVE_ENABLE_OFF &
	    CLK_POL_ACTIVE_LOW &
	    MASTER_ENABLE_ON &
	    secPre & priPre;
	SPICON2Value = FRAME_ENABLE_OFF & FRAME_SYNC_OUTPUT;
	SPISTATValue = SPI_ENABLE & SPI_IDLE_CON & SPI_RX_OVFLOW_CLR;
#endif

#if (BOARD_TYPE == UDB4_BOARD || BOARD_TYPE == UDB5_BOARD)
	CloseSPI1();
//	ConfigIntSPI1(SPI_INT_DIS & SPI_INT_PRI_6);
	OpenSPI1(SPICON1Value, SPICON2Value, SPISTATValue);
	SPI1STATbits.SPIROV = 0;    // clear SPI receive overflow
	_SPI1IF = 0;                // clear any pending interrupts
//	_SPI1IP = INT_PRI_SPI1;     // set interrupt priority
//	_SPI1IE = 1;                // turn on SPI interrupts
#elif (BOARD_TYPE == AUAV3_BOARD)
	CloseSPI3();
//	ConfigIntSPI3(SPI_INT_DIS & SPI_INT_PRI_6);
	OpenSPI3(SPICON1Value, SPICON2Value, SPISTATValue);
	SPI3STATbits.SPIROV = 0;    // clear SPI receive overflow
	_SPI3IF = 0;                // clear any pending interrupts
//	_SPI3IP = INT_PRI_SPI3;     // set interrupt priority
//	_SPI3IE = 1;                // turn on SPI interrupts

// SPIxSTAT 801C, SPIxCON1 0079, SPIxCON2 0000
#endif
}