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\n", __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\n", __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\n", __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\n", __FUNCTION__, ret);   
        val = 0;   
    }   
else 
        val = rx_buf[0];

up(&chip->lock);

return val;   
}

最新文章

  1. ResponsibleChain(责任链模式)
  2. [物理学与PDEs]第3章习题参考解答
  3. ip地址转化代码实例
  4. Shell指令
  5. Java 的集合框架
  6. linux内核数据结构--进程相关
  7. C# 10 总复习
  8. QTP使用技巧
  9. 201521123092《java程序设计》第十三周学习总结
  10. Spring Security入门(3-9)Spring Security登录成功以后
  11. SQL LAST() 函数
  12. java多线程中的三种特性
  13. Django详细流程
  14. SQL Server 2008 无法安装U890
  15. 最短路(bellman)-hdu2066
  16. SQL join的介绍
  17. 极客互联网电视不是噱头,用户体验成创维G7200核心竞争力
  18. KafkaOffsetMonitor 安装
  19. xml中的&lt;![CDATA[]]&gt; 简介
  20. 2018-2019-2 20165330《网络对抗技术》Exp3 免杀原理与实践

热门文章

  1. 【转】C# HttpWebRequest提交数据方式
  2. 云服务器 ECS Linux 系统下使用 dig 命令查询域名解析
  3. jquery快速清除复选框、单选框的选中
  4. IIS 无法读取配置节&amp;quot;system.web.extensions&amp;quot;,由于它缺少节声明
  5. .Net 断点调试
  6. 《Linux企业应用案例精解》一书已由清华大学出版社出版
  7. Java读取txt文件和覆盖写入txt文件和追加写入txt
  8. VirtualBox中Linux虚拟机与主机共享文件夹
  9. file---探测给定文件的类型
  10. 紫书 例题 9-2 UVa 437 ( DAG的动态规划)