/******************************************************************************* * 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) */ }
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 /* ----------------------------------------- */ } }