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\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;
}
最新文章
- ResponsibleChain(责任链模式)
- [物理学与PDEs]第3章习题参考解答
- ip地址转化代码实例
- Shell指令
- Java 的集合框架
- linux内核数据结构--进程相关
- C# 10 总复习
- QTP使用技巧
- 201521123092《java程序设计》第十三周学习总结
- Spring Security入门(3-9)Spring Security登录成功以后
- SQL LAST() 函数
- java多线程中的三种特性
- Django详细流程
- SQL Server 2008 无法安装U890
- 最短路(bellman)-hdu2066
- SQL join的介绍
- 极客互联网电视不是噱头,用户体验成创维G7200核心竞争力
- KafkaOffsetMonitor 安装
- xml中的<;![CDATA[]]>; 简介
- 2018-2019-2 20165330《网络对抗技术》Exp3 免杀原理与实践
热门文章
- 【转】C# HttpWebRequest提交数据方式
- 云服务器 ECS Linux 系统下使用 dig 命令查询域名解析
- jquery快速清除复选框、单选框的选中
- IIS 无法读取配置节&;quot;system.web.extensions&;quot;,由于它缺少节声明
- .Net 断点调试
- 《Linux企业应用案例精解》一书已由清华大学出版社出版
- Java读取txt文件和覆盖写入txt文件和追加写入txt
- VirtualBox中Linux虚拟机与主机共享文件夹
- file---探测给定文件的类型
- 紫书 例题 9-2 UVa 437 ( DAG的动态规划)