A40i/T3的sunxi_dump_reg使用说明(三)

    1.  内核层使用说明
      1.  打印寄存器函数 - sunxi_dump_reg

  • 内核层使用说明

打印寄存器函数-sunxi_dump_reg

原型: void sunxi_dump_reg(u32 start_reg, u32 end_reg)

功能: 打印start_reg ~ end_reg寄存器值.

参数: start_reg: 起始寄存器虚拟地址.

      end_reg:   末尾寄存器虚拟地址.

start_reg等于end_reg, 表示只打印一个寄存器值.

调用sunxi_dump_reg(0xf1c20004, 0xf1c20058)的打印效果如下:

0xf1c20000:            0x00000000 0x00035514 0x00000000

0xf1c20010: 0x03006207 0x00000000 0x03006207 0x00000000

0xf1c20020: 0x80001000 0x00000000 0x82000000 0x00000000

0xf1c20030: 0x03006207 0x00000000 0x03006207 0x00000000

0xf1c20040: 0x00000502 0x03006207 0x03006207 0x00000000

0xf1c20050: 0x00010000 0x00001010 0x01000000          

和前述一样, 每行从16字节对齐的地址开始打印, 多余位置以空格补齐.

      1.  比较寄存器值函数 - sunxi_compare_regs

原型: void sunxi_compare_regs(struct compare_group *pgroup)

功能: 比较一组寄存器值与期望值是否相符.

参数: pgroup: 待比较的寄存器信息, 用户提供.

compare_group结构体:

struct compare_item {

   u32 reg_addr;    寄存器地址

   u32 val_expect;  期望值

   u32 val_mask;    掩码

};

struct compare_group {

   u32 num;                       pitem包含的compare_item元素个数

   struct compare_item *pitem; 待比较的寄存器数组,由调用者维护

};

sunxi_compare_regs使用实例:

void compare_demo(void)

{

   struct compare_item  item[3];

   struct compare_group item_group;

   item[0].reg_addr   = 0xf1c20010;

   item[0].val_expect = 0x03006207;

   item[0].val_mask   = 0x03006207;

   item[1].reg_addr   = 0xf1c20020;

   item[1].val_expect = 0x00001000;

   item[1].val_mask   = 0x00001000;

   item[2].reg_addr   = 0xf1c20028;

   item[2].val_expect = 0x80000000;

   item[2].val_mask   = 0x80000000;

  

   item_group.num = 3;

   item_group.pitem = (struct compare_item *)item;

   sunxi_compare_regs(&item_group);

}

运行打印如下:

reg         expect      actual      mask        result

0xf1c20010  0x03006007  0x03006207  0x03006000  OK   

0xf1c20020  0x80003000  0x80001000  0x80001000  OK   

0xf1c20028  0x02300000  0x82000000  0x82000000  ERR  

最后一项result为ERR, 因为(0x82000000&0x82000000)!=(0x02300000&0x82000000).

      1.  写寄存器值函数 - sunxi_write_regs

原型: void sunxi_write_regs(struct write_group *pgroup)

功能: 写一组寄存器.

参数: pgroup: 待写的寄存器信息, 用户提供.

write_group结构体:

struct write_item {

   u32    reg_addr;    寄存器地址

   u32 val;              待写值

};

struct write_group {

   u32 num;                       pitem包含的write_item元素个数

   struct write_item *pitem;  待写的寄存器信息,由调用者维护

};

sunxi_write_regs使用实例:

void write_demo(void)

{

   struct write_item  item[2];

   struct write_group item_group;

   item[0].reg_addr   = 0xf1c20800;

   item[0].val        = 0x00000031;

   item[1].reg_addr   = 0xf1c20818;

   item[1].val        = 0x55555555;

  

   item_group.num = 2;

   item_group.pitem = (struct write_item *)item;

   sunxi_write_regs(&item_group);

}

    1.  sunxi_dump_reg在dailybuild中的用例

\lichee\test\ccu\dump_compare_reg.sh用例提供了应用层通过shell打印寄存器和比较寄存器的demo. 可作为使用参考.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值