• Linux下SPI读写外部寄存器的操作


    SPI写寄存器操作:

      

    staticvoid mcp251x_write_reg(struct spi_device *spi, uint8_t reg, uint8_t val)   
    {   
    struct mcp251x *chip = dev_get_drvdata(&spi->dev);   
    int ret;   

        down(&chip->lock);   

        chip->spi_transfer_buf[0] = INSTRUCTION_WRITE;   
        chip->spi_transfer_buf[1] = reg;   
        chip->spi_transfer_buf[2] = val;   

        ret = spi_write(spi, chip->spi_transfer_buf, 3);   
    if (ret < 0)   
            dev_dbg(&spi->dev, "%s: failed: ret = %d ", __FUNCTION__, ret);   

        up(&chip->lock);   
    }  

      



    staticvoid mcp251x_write_bits(struct spi_device *spi, uint8_t reg, uint8_t mask, uint8_t val)  
    {   
    struct mcp251x *chip = dev_get_drvdata(&spi->dev);   
    int ret;   

        down(&chip->lock);   

        chip->spi_transfer_buf[0] = INSTRUCTION_BIT_MODIFY;   
        chip->spi_transfer_buf[1] = reg;   
        chip->spi_transfer_buf[2] = mask;   
        chip->spi_transfer_buf[3] = val;   

        ret = spi_write(spi, chip->spi_transfer_buf, 4);   
    if (ret < 0)   
            dev_dbg(&spi->dev, "%s: failed: ret = %d ", __FUNCTION__, ret);   

        up(&chip->lock);   
    }  

    SPI读寄存器操作:

      

    static uint8_t mcp251x_read_reg(struct spi_device *spi, uint8_t reg)   
    {   
    struct mcp251x *chip = dev_get_drvdata(&spi->dev);   
        uint8_t *tx_buf, *rx_buf;   
        uint8_t val;   
    int ret;   

        tx_buf = chip->spi_transfer_buf;   
        rx_buf = chip->spi_transfer_buf + 8;   

        down(&chip->lock);   

        tx_buf[0] = INSTRUCTION_READ;   
        tx_buf[1] = reg;   
        ret = spi_write_then_read(spi, tx_buf, 2, rx_buf, 1);   
    if (ret < 0)   
        {   
            dev_dbg(&spi->dev, "%s: failed: ret = %d ", __FUNCTION__, ret);   
            val = 0;   
        }   
    else 
            val = rx_buf[0];   

        up(&chip->lock);   

    return val;   
    }  

      



    static uint8_t mcp251x_read_state(struct spi_device *spi, uint8_t cmd)   
    {   
    struct mcp251x *chip = dev_get_drvdata(&spi->dev);   
        uint8_t *tx_buf, *rx_buf;   
        uint8_t val;   
    int ret;   

        tx_buf = chip->spi_transfer_buf;   
        rx_buf = chip->spi_transfer_buf + 8;   

        down(&chip->lock);   

        tx_buf[0] = cmd;   
        ret = spi_write_then_read(spi, tx_buf, 1, rx_buf, 1);   
    if (ret < 0)   
        {   
            dev_dbg(&spi->dev, "%s: failed: ret = %d ", __FUNCTION__, ret);   
            val = 0;   
        }   
    else 
            val = rx_buf[0];   

        up(&chip->lock);   

    return val;   
    }  

  • 相关阅读:
    nginx proxy_set_header
    nginx minio
    /etc/nginx/sitesenabled
    IDEA从mapper.java或者dao.java跳转到mapper.xml
    htmlwebpackplugin 配置项
    第29天 [js]时间戳转换
    CSS权重值计算
    nginx+keepalived实现高可用负载均衡 繁华
    kali安装 IDEA2020 破解并创建快捷方式
    下载 android source 之repo获取
  • 原文地址:https://www.cnblogs.com/lidabo/p/6406100.html
Copyright © 2020-2023  润新知