Home

cubie.cc CubieBoard中文论坛

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

S500 读写寄存器

[复制链接]

37

主题

4

好友

1万

积分

超级版主

Rank: 8Rank: 8

贡献
2561
金钱
5850
威望
2561
买家信用
卖家信用
积分
14066
发表于 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
复制代码


  • data/attachment/forum/201704/21/145701k9zu95e6ruyg0yyg.png
  • data/attachment/forum/201704/21/151950gcgj55m75mtg3gjm.png
  • data/attachment/forum/201704/21/153555e8q66oeyjjeuqx7o.png

回复

使用道具 举报

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

Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2017-6-24 09:50 , Processed in 0.028973 second(s), 10 queries , Apc On.

Powered by Discuz! X2.5 Licensed

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部