Example #1
0
/*******************************************************************************
* Function Name: SPI_SpiStop
********************************************************************************
*
* Summary:
*  Changes the HSIOM settings for the SPI master output pins (SCLK and/or SS0-SS3) to
*  keep them inactive after the block is disabled. The output pins are
*  controlled by the GPIO data register.
*
* Parameters:
*  None
*
* Return:
*  None
*
*******************************************************************************/
void SPI_SpiStop(void)
{
#if(SPI_SCB_MODE_UNCONFIG_CONST_CFG)

    if (SPI_CHECK_SPI_MASTER)
    {
    #if (SPI_SCLK_PIN)
        /* Set output pin state after block is disabled */
        SPI_spi_sclk_Write(SPI_GET_SPI_SCLK_INACTIVE);

        /* Set GPIO to drive output pin */
        SPI_SET_HSIOM_SEL(SPI_SCLK_HSIOM_REG, SPI_SCLK_HSIOM_MASK,
                                       SPI_SCLK_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
    #endif /* (SPI_MISO_SDA_TX_PIN_PIN) */

    #if (SPI_SS0_PIN)
        /* Set output pin state after block is disabled */
        SPI_spi_ss0_Write(SPI_GET_SPI_SS0_INACTIVE);

        /* Set GPIO to drive output pin */
        SPI_SET_HSIOM_SEL(SPI_SS0_HSIOM_REG, SPI_SS0_HSIOM_MASK,
                                       SPI_SS0_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
    #endif /* (SPI_SS0_PIN) */

    #if (SPI_SS1_PIN)
        /* Set output pin state after block is disabled */
        SPI_spi_ss1_Write(SPI_GET_SPI_SS1_INACTIVE);

        /* Set GPIO to drive output pin */
        SPI_SET_HSIOM_SEL(SPI_SS1_HSIOM_REG, SPI_SS1_HSIOM_MASK,
                                       SPI_SS1_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
    #endif /* (SPI_SS1_PIN) */

    #if (SPI_SS2_PIN)
        /* Set output pin state after block is disabled */
        SPI_spi_ss2_Write(SPI_GET_SPI_SS2_INACTIVE);

        /* Set GPIO to drive output pin */
        SPI_SET_HSIOM_SEL(SPI_SS2_HSIOM_REG, SPI_SS2_HSIOM_MASK,
                                       SPI_SS2_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
    #endif /* (SPI_SS2_PIN) */

    #if (SPI_SS3_PIN)
        /* Set output pin state after block is disabled */
        SPI_spi_ss3_Write(SPI_GET_SPI_SS3_INACTIVE);

        /* Set GPIO to drive output pin */
        SPI_SET_HSIOM_SEL(SPI_SS3_HSIOM_REG, SPI_SS3_HSIOM_MASK,
                                       SPI_SS3_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
    #endif /* (SPI_SS3_PIN) */
    }

#else

#if (SPI_SPI_MASTER_SCLK_PIN)
    /* Set output pin state after block is disabled */
    SPI_sclk_m_Write(SPI_GET_SPI_SCLK_INACTIVE);

    /* Set GPIO to drive output pin */
    SPI_SET_HSIOM_SEL(SPI_SCLK_M_HSIOM_REG, SPI_SCLK_M_HSIOM_MASK,
                                   SPI_SCLK_M_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
#endif /* (SPI_MISO_SDA_TX_PIN_PIN) */

#if (SPI_SPI_MASTER_SS0_PIN)
    /* Set output pin state after block is disabled */
    SPI_ss0_m_Write(SPI_GET_SPI_SS0_INACTIVE);

    /* Set GPIO to drive output pin */
    SPI_SET_HSIOM_SEL(SPI_SS0_M_HSIOM_REG, SPI_SS0_M_HSIOM_MASK,
                                   SPI_SS0_M_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
#endif /* (SPI_SPI_MASTER_SS0_PIN) */

#if (SPI_SPI_MASTER_SS1_PIN)
    /* Set output pin state after block is disabled */
    SPI_ss1_m_Write(SPI_GET_SPI_SS1_INACTIVE);

    /* Set GPIO to drive output pin */
    SPI_SET_HSIOM_SEL(SPI_SS1_M_HSIOM_REG, SPI_SS1_M_HSIOM_MASK,
                                   SPI_SS1_M_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
#endif /* (SPI_SPI_MASTER_SS1_PIN) */

#if (SPI_SPI_MASTER_SS2_PIN)
    /* Set output pin state after block is disabled */
    SPI_ss2_m_Write(SPI_GET_SPI_SS2_INACTIVE);

    /* Set GPIO to drive output pin */
    SPI_SET_HSIOM_SEL(SPI_SS2_M_HSIOM_REG, SPI_SS2_M_HSIOM_MASK,
                                   SPI_SS2_M_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
#endif /* (SPI_SPI_MASTER_SS2_PIN) */

#if (SPI_SPI_MASTER_SS3_PIN)
    /* Set output pin state after block is disabled */
    SPI_ss3_m_Write(SPI_GET_SPI_SS3_INACTIVE);

    /* Set GPIO to drive output pin */
    SPI_SET_HSIOM_SEL(SPI_SS3_M_HSIOM_REG, SPI_SS3_M_HSIOM_MASK,
                                   SPI_SS3_M_HSIOM_POS, SPI_HSIOM_GPIO_SEL);
#endif /* (SPI_SPI_MASTER_SS3_PIN) */

#endif /* (SPI_SCB_MODE_UNCONFIG_CONST_CFG) */
}
Example #2
0
int main()
{
    uint8 loop;  
    
    /* *** Turn off leds at startup. *** */
    Led_Red_Write(1);
    Led_Green_Write(1);
    Led_Blue_Write(1);
    
    /* *** Start serial port. *** */
    UART_Start();
    UART_UartPutString("\nPSoC RFM69 Test... PSoC 4/4M...\n");
    
	/* *** Start SPI bus. *** */
    SPI_Start();    
    
    (*(reg32 *)SPI_ss0_m__0__HSIOM) = 
        ((*(reg32 *)SPI_ss0_m__0__HSIOM) & (uint32)~SPI_ss0_m__0__HSIOM_MASK) | (uint32)(SPI_HSIOM_GPIO_SEL << SPI_ss0_m__0__HSIOM_SHIFT);
    SPI_ss0_m_Write(1);       
    
    /* *** Blink Red Led two times before starting RFM69 module. * ***/
    Led_Red_Write(0); CyDelay(250); Led_Red_Write(1); CyDelay(250);
    Led_Red_Write(0); CyDelay(250); Led_Red_Write(1); CyDelay(250);
    
    /* *** Start RFM69 module. Configure it. If the module is not found, program gets locked. 
           And red led gets turned on. If can find RFM module, then turn on green led. *** */
    UART_UartPutString("Looking for RFM69 module... ");
    
	if (RFM69_Start() != 1) 
    { 
        UART_UartPutString("FAILED\n\n");
        Led_Red_Write(0);
        while (1) {}; 
        
    }
    else 
    {
        UART_UartPutString("OK\n\n");
        Led_Green_Write(0);   
    }
    
    /* If testing with interrupts. But disabled until entering RX mode. */
    #ifdef TEST_USING_INTERRUPTS
        
        RFM_isr_StartEx(RFM69_IsrHandler);
        
    #endif    
    
    /* Start SysTick.
       When compiled for "MASTER" this is used to control timeout while in reception state. */
    CySysTickStart();   // interrupt every 1ms.
    
    /* Find unused callback slot. */
    for (loop = 0; loop < CY_SYS_SYST_NUM_OF_CALLBACKS; ++loop)
    {
        if (CySysTickGetCallback(loop) == NULL)
        {
            /* Set callback */
            CySysTickSetCallback(loop, SysTickIsrHandler);
            break;
        }
    }
    
    /* ----------------------------------------- */
    /* Configuration depending on node type.     */
    #ifdef COMPILE_FOR_MASTER
        Config_ForMaster();
    #endif

    #if defined COMPILE_FOR_SLAVE_1 || defined COMPILE_FOR_SLAVE_2
        Config_ForSlave();
    #endif
    /* ----------------------------------------- */    
    
    /* Uncomment next line and adjust params if you want to change bitrate at runtime. */
    RFM69_SetBitrateCls(BITRATE_MSB_9600, BITRATE_LSB_9600);
    
    /* If testing using encryption, change encryption mode and key at runtime. */
    #ifdef TEST_WITH_ENCRYPTION
        RFM69_Encryption(1, encryptionkey);
    #endif
   
    CyGlobalIntEnable; /* Enable global interrupts. */

    for(;;)
    {
        
        /* ----------------------------------------- */ 
        /* Call main loop depending on node type.    */
        #ifdef COMPILE_FOR_MASTER
                Loop_Master();
        #endif

        #if defined COMPILE_FOR_SLAVE_1 || defined COMPILE_FOR_SLAVE_2
                Loop_Slave();
        #endif
        /* ----------------------------------------- */

    }
}