CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 6170|回复: 0

S500 读写寄存器

[复制链接]
发表于 2017-4-21 15:30:37 | 显示全部楼层 |阅读模式
本帖最后由 @allen 于 2017-4-21 16:08 编辑

调试驱动过程中,经常需要知道或设置某位寄存器的值.S500 的内核已经有方便读写的接口,非常简单直接

1. 读操作
  1. cd /sys/kernel/debug/owl
  2. echo 0xb01b0060 > reg
复制代码
  1. [0xb01b0060]: 0x00004be2
复制代码
所以0xb01b0060 =0x00004be2

0xb01b0060是什么寄存器? 根据芯片datasheet.看得 0xb01b0060=0xb01b0000 +0x0060 ,是PAD_PULLCTL寄存器,是部分PIN的上拉寄存器.


选区_072.png

那0x00004be2 有是什么作用? 将其转成二进制,省略前面都为零的用31~16 位,15~0位 = 0x0100 1011 1110 0010 ,对到每位寄存器如图所示:

选区_075.png

选区_076.png

比如说 SIR0这个PIN脚,由上图可知是内部100K上拉状态.
此时如果没接其他电路,用电压表量SIR0,电压值为3.3v.


2.读多个寄存器
  1. echo 0xb01b0060,0x8 > regs
复制代码
会读出以b01b0060为起始的2个寄存器即b01b0060和b01b0064 寄存器的值.因为0x8长度是  0x4的2倍

逗号后面的值必须为0x4(4 bytes)长度 的倍数,所以如下的命令的话,效果跟读 reg 一样.
  1. echo 0xb01b0060,0x4 > regs
复制代码
echo 0xb01b0060,0x10 > regs  则是会读出4个寄存器的值


3. 写操作

承接 第1小节的内容,

只将SIR0 下拉,不改变其他位.则 只需改变15~14位为10
  1. echo 0xb01b0060=0x00008be2 > reg
复制代码
写入0x00008be2 后,再读出来查看是否改变
  1. echo 0xb01b0060 > reg
  2. dmesg -c
  3. [0xb01b0060]: 0x00008be2
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-11 03:43 , Processed in 0.024644 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部