zoukankan      html  css  js  c++  java
  • 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;   
    }  

  • 相关阅读:
    HTTP协议
    idea新建工程项目结构
    idea使用的JDK版本1.9换成1.8后相关的更改设置
    Servlet
    Tomcat三种项目部署方式
    Tomcat环境变量配置命令行报错:The JRE_HOME environment variable is not defined correctl This environment variable is needed to run this program
    JDBC面试题
    XML基础入门
    数据库连接池——Druid
    $.ajax 分页
  • 原文地址:https://www.cnblogs.com/lidabo/p/6406100.html
Copyright © 2011-2022 走看看