單片機驅動-軟件模擬SPI


一、軟件模擬SPI程序

#define GD25Q256DF_CS_DIR            MKL25Z4_GPIO_DDR_OUTPUT(MKL_PORTA, 19)
#define GD25Q256DF_CS_LOW            MKL25Z4_GPIO_CLR(MKL_PORTA, 19)
#define GD25Q256DF_CS_HIGH            MKL25Z4_GPIO_SET(MKL_PORTA, 19)

#define SPI_SCLK_DIR                MKL25Z4_GPIO_DDR_OUTPUT(MKL_PORTA, 18)
#define SPI_SCLK_CLR                MKL25Z4_GPIO_CLR(MKL_PORTA, 18)
#define SPI_SCLK_SET                MKL25Z4_GPIO_SET(MKL_PORTA, 18)


#define SPI_DOUT_DIR                MKL25Z4_GPIO_DDR_OUTPUT(MKL_PORTD, 7)
#define SPI_DOUT_CLR                MKL25Z4_GPIO_CLR(MKL_PORTD, 7)
#define SPI_DOUT_SET                MKL25Z4_GPIO_SET(MKL_PORTD, 7)


#define SPI_DIN_DIR                    MKL25Z4_GPIO_DDR_INPUT(MKL_PORTA, 4)
#define SPI_DIN_PIN                    MKL25Z4_GPIO_GET_VALUE(MKL_PORTA, 4)

 

 

/* 
 *@brief spi軟件延時
 *@param 延時時長
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void spi_delay(volatile uint32_t us)
{
    volatile uint32_t i, j;
    
    for(i = 0; i < us; i++)
    {
        for(j = 0; j < 16; j++);
    }
}

/* 
 *@brief spi引腳初始化
 *@param 延時時長
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void spi_init()
{
    GD25Q256DF_CS_DIR;
    SPI_SCLK_DIR;
    SPI_DOUT_DIR;
    SPI_DIN_DIR;
}

/* 
 *@brief spi寫一個字節
 *@param 要寫的數據
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void spi_send_byte(uint8_t data)
{
    uint8_t i;
    
    for(i = 0; i < 8; i++)
    {
        SPI_SCLK_CLR;
        spi_delay(10);
        if(data & 0x80)
            SPI_DOUT_SET;
        else
            SPI_DOUT_CLR;
        SPI_SCLK_SET;
        spi_delay(10);
        data <<= 1;
    }
}

/* 
 *@brief spi讀一個字節
 *@retval 讀到的數據
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t spi_receive_byte(void)
{
    uint8_t i;
    uint8_t data = 0;
    
    for(i = 0; i < 8; i++)
    {
        SPI_SCLK_CLR;
        spi_delay(10);
        data <<= 1;
        if(SPI_DIN_PIN)
        {
            data |= 0x01;
        }
        SPI_SCLK_SET;
        spi_delay(10);
    }
    return data;
}

 

#end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM