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;   
}

Linux下SPI读写外部寄存器的操作的更多相关文章

  1. Linux 下的 netfilter 认识与常规操作

    Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...

  2. Linux下直接读写物理地址内存

    虚拟 转 物理地址  virt_to_phys( *addr );物理 转 虚拟地址  phys_to_virt( *addr ); 如: unsigned long pProtectVA; phys ...

  3. linux下文件压缩与解压操作

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...

  4. Linux下MySql的登陆和管理操作

    一.mysql数据库启停1.linux下启动mysql的命令:    mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径)2.linux下重启 ...

  5. Linux下部署Samba服务环境的操作记录

    关于Linux和Windows系统之间的文件传输,很多人选择使用FTP,相对较安全,但是有时还是会出现一些问题,比如上传文件时,文件名莫名出现乱码,文件大小改变等问题.相比较来说,使用Samba作为文 ...

  6. linux下各种形式的shell加法操作总结

    linux 下shell加法操作总结: #!/bin/bash   n=1;echo -n "$n "   let "n = $n + 1" echo -n & ...

  7. linux驱动基础系列--Linux下Spi接口Wifi驱动分析

    前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把 ...

  8. [转] Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

    点击阅读原文 一.概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户 ...

  9. Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)

    通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...

随机推荐

  1. Java基础学习总结(23)——GUI编程

    一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Containe ...

  2. [Python] Statistical analysis of time series

    Global Statistics: Common seen methods as such 1. Mean 2. Median 3. Standard deviation:  the larger ...

  3. dropify,不错的图片上传预览插件

    引言 传统的图片上传,很丑.点击选择之后,还无法预览. 有一种方案是传到服务器,然后返回地址,然后显示,比较麻烦. 用这个dropify,就可以解决之歌问题. 看效果 用法 1.引入文件,需要jque ...

  4. Nginx 代理以及HTTPS (二)

    一.HTTPS解析 https 加密 私钥 公钥 http 的握手 是确认网络是连通的. https 的握手 是一个加密的过程 加密图 二. 使用Nginx 部署HTTPS 服务 1.证书生成命令(h ...

  5. 好吧,左小波出山了——ie8兼容indexOf问题

    我,还是一个不懂世事的毛头小子,第一次写博.万事开头难,没事咱慢慢来.咳,练文笔吗.我觉得写东西最锻炼逻辑思维,我是一个不善于表达的人,可能是程序员的通病,但你看看人家王小波,八九十年代的作家兼职程序 ...

  6. Django_高级扩展

  7. 紫书 例题 9-12 UVa 12186 (树形dp)

    这道题还是比较简单的,对于当前节点,算出每个儿子需要的人数 然后再算出当前节点需要多少个人数,然后排个序加上去就好了. #include<cstdio> #include<vecto ...

  8. 紫书 例题 9-1 UVa 1025 ( DAG的动态规划)

    影响到状态的只有时间和在哪个车站(空间),所以可以设f[i][j]是时刻i的时候在第j个车站的最少等待时间 因为题目中的等待时间显然是在0时刻1车站,所以答案为f[0][1],那么就提醒我们从大推到小 ...

  9. C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符

    1.递增递减运算符 C++语言并不要求递增递减运算符必须是类的成员.可是由于他们改变的正好是所操作对象的状态.所以建议设定为成员函数. 对于递增与递减运算符来说,有前置与后置两个版本号,因此.我们应该 ...

  10. Dynamics CRM2016 升级老版本号报“JavaScript Web 资源包括对 Microsoft Dynamics CRM 4.0 (2007) Web 服务终结点的引用”问题的解决的方法

    今天在新的server上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了例如以下错误.向导检測到了我的JavaScript Web ...