按位操作外部设备的寄存器:方法二
来源:互联网 发布:win7桌面时钟软件 编辑:程序博客网 时间:2024/06/05 07:31
方法介绍:
Kernel驱动程序主要通过I2C / SPI / SPMI等总线操作外部设备的寄存器,
Kernel Regmap提供了非常方便的总线操作接口集,其中,regmap_update_bits() / regmap_write_bits()
就是用于简化按位操作外部设备的寄存器的通用接口。
regmap_update_bits() / regmap_write_bits()调用的_regmap_update_bits()实现原型如下:
如上图四个步骤实现解析 :
1、参数mask用于指定需要操作的寄存器bit/bits
Kernel标准宏集:
、
定义单个Bit mask
定义l Bit To h Bit mask
将寄存器指定位置为1:
REG |= (1<<n)
将寄存器指定位置为0:
REG &= ~(1<<n)
将寄存器指定l , m , n 位置为1:
REG |= (1<<l) |(1<<m) |(1<<n)
2、从设备中读取寄存器的旧值,保存到orig
3、将orig旧值mask对应bits清0 ;同时orig旧值mask对应bits赋值val 。更新寄存器暂存到tmp。
4、 将暂存值tmp写入到外部设备寄存器中。
方法特点:
封装性强,使用简单。
应用举例:
1、为每个寄存器定义寄存器addr宏、和Bit/Bits mask宏:
2、外部设备驱动程序封装一个位操作函数接口
方法总结:
如果外部设备驱动不想使用、或无法使用Kernel Regmap架构,
参考 _regmap_update_bits接口的实现,根据不同总线封装出具体设备的位操作函数。如下:
阅读全文
0 0
- 按位操作外部设备的寄存器:方法二
- 按位操作外部设备的寄存器:方法一
- 访问外部设备寄存器的方法
- 使用位运算对寄存器操作的通用方法
- 寄存器操作的方法
- 误操作寄存器位引发的hardfault
- 16位汇编 寄存器的操作
- 寄存器位写操作
- Linux连接常用外部设备的方法
- 嵌入式寄存器操作-----C语言位操作的学习
- 嵌入式寄存器操作-----C语言位操作的学习
- 关于寄存器操作的一些常用方法
- 对寄存器操作的通用方法总结
- 内核中操作寄存器的方法
- 对寄存器操作的通用方法总结
- 对寄存器操作的通用方法总结
- 嵌入式编程基础----对寄存器的位操作
- 嵌入式开发中用于操作寄存器的位运算
- Qt 多语言
- ActiveMQ消息传送机制深入
- spring源码学习之路---IOC初探(二)
- 融资?不要!上市?不急!这个公司有点酷……
- switch中 break , continue 作用
- 按位操作外部设备的寄存器:方法二
- 机器人语言聊天,你猜它都说什么了?
- 笨方法学Python 习题 33: While 循环
- HDU6071Lazy Running(同余最短路)
- 简单使用Axure 模拟Android中的fragment切换
- Computer and Computer Science
- JavaScript闭包
- Android TV蓝牙模块
- LintCode80