@allen 发表于 2017-4-21 15:30:37

S500 读写寄存器

本帖最后由 @allen 于 2017-4-21 16:08 编辑

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

1. 读操作cd /sys/kernel/debug/owl
echo 0xb01b0060 > reg
: 0x00004be2所以0xb01b0060 =0x00004be2

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




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





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


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

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


3. 写操作

承接 第1小节的内容,

只将SIR0 下拉,不改变其他位.则 只需改变15~14位为10echo 0xb01b0060=0x00008be2 > reg写入0x00008be2 后,再读出来查看是否改变echo 0xb01b0060 > reg
dmesg -c
: 0x00008be2
页: [1]
查看完整版本: S500 读写寄存器