-
内核层使用说明
打印寄存器函数-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字节对齐的地址开始打印, 多余位置以空格补齐.
原型: 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).
原型: 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); } |
-
- sunxi_dump_reg在dailybuild中的用例
\lichee\test\ccu\dump_compare_reg.sh用例提供了应用层通过shell打印寄存器和比较寄存器的demo. 可作为使用参考.