在接触一个新的IC的时候,如果没有demo,需要根据数据手册逐个寄存器配置,一边比对,一边敲代码不太优雅和直观,于是弄了这个支线项目。通过可视化的方式编辑寄存器各个位的值,可以根据需要生成代码,使得配置工作更加直观高效。
💡 目前支持8bit类型的寄存器,后续会支持32bit的版本

打开工具后可以看到如上页面,需要点击「导入新芯片」导入数据手册才能使用。
寄存器配置文件说明
数据手册的格式如下,是一个JSON文件。
总体是一个数组,里面的对象是每个寄存器。
- name:寄存器名称,建议用英文;
- description:寄存器描述,详细描述这个寄存器的功能;
- address:寄存器地址,字符串格式,支持
0xFF,0b00001111等表述方式; - resetValue:默认值,同样支持上述写法。
- bits:各个位的定义,数组结构。从高位开始写(也就是说寄存器的高位对应于这里数组的低位),具体的组成结合具体的例子描述。
- isDummy:表示这一个/几个位有无定义,无定义/占位的设置成
true,否则设置成false - width:位宽,表示这个对象描述几个位,比如下面的例子中,前4个位没有定义,就设置了width为4的isDummy,注意总的width保持为8,以防止出现错乱
- name:该位的功能名称
- description:功能的描述,十分建议把该位不同的数值定义的功能也填进去。这样在设置的时候就不用翻datasheet了。可以用
\n进行换行,增强可读性。
- isDummy:表示这一个/几个位有无定义,无定义/占位的设置成
如果数据手册里的寄存器描述如下图:
那么它的配置文件如下:
[
{
"name": "REG1",
"description": "这是第一个寄存器",
"address": "0x01",
"resetValue": "0x11",
"bits": [
{
"isDummy": true,
"width": 4
},
{
"isDummy": false,
"name": "ADC",
"description": "ADC 转换模式 \n 0: 连续转换。\n 1: 单次转换。",
"width": 1
},
{
"isDummy": false,
"name": "OSR",
"description": "0:Fmodclk/4096 \n 1:Fmodclk/2048 \n 2:Fmodclk/1024 \n 3:Fmodclk/512 \n 4:Fmodclk/256 \n 5:Fmodclk/128 \n 6:Fmodclk/64 \n 7:Fmodclk/32",
"width": 3
}
]
},
{
"name": "REG2",
"description": "这是第2个寄存器",
"address": "0x02",
"resetValue": "0xAA",
"bits": [
{
"isDummy": true,
"width": 1
},
{
"isDummy": false,
"name": "CURRENT",
"description": "设置电流大小 \n 0: 5nA\n 1: 10nA\n 2: 25nA\n 3: 50nA\n 4: 100nA",
"width": 3
},
{
"isDummy": false,
"name": "THRESHOLD",
"description": "设置阈值",
"width": 4
}
]
}
]❓ 可能有人会觉得生成这个配置文件太麻烦了,不够优雅。
🙋🏻 目前来说,确实不太优雅,但是可以用chatgpt、poe、豆包等AI工具,让它生成即可。参考话术:
【上传datasheet】
【复制JSON模板】
参考上述格式,根据PDF的内容,帮我生成XXXX的。
要求:高位在bits数组的前面然后再人工核对!!!
具体使用
导入模板后会显示下列界面。

左侧分栏

- 依次为「寄存器名称」、「当前值」、「寄存器地址」。鼠标放到寄存器名称上的时候能显示具体的描述。
- 双击「当前值」、「地址」可以复制当前的值。
- 当「当前值」与「复位值」不一致时,会以绿色高亮显示。
寄存器位
- 未定义的会显示成
N/A,但同时也支持修改该位。 - 多位一起定义一个功能的时候,会使用蓝色背景。一位的会使用绿色/红色分别表示1和0。
- 单击一次会增加
1。

- 双击可以打开详情窗口,在该窗口会有详细的定义,并且可以通过输入的方式修改该值。
- 上述的修改都会保存到缓存中,即使刷新和关闭浏览器也不会丢失。

- 鼠标放到名称上也会显示详细的定义。
右侧分栏
- 显示复位值,以及复位该寄存器。双击可以复制复位值。
侧边栏

侧边栏按钮功能如上。
- 导入新IC:单击可以打开JSON模板文件,注意此操作会覆盖原有数据。
- 将当前工作区数据保存到文件:会把工作区的数据导出到文件,下载为JSON文件。该文件会包括修改后的寄存器值,并且会对数据进行HASH检验,一定程度上防止篡改。
- 加载历史数据:可以将上面下载的JSON文件导入到工作区,注意此操作会覆盖原有数据。
- 重置所有寄存器:将所有寄存器设置为reset value。
- 清除缓存:会把缓存清空,注意此操作不可逆。
代码生成功能

- 把当前工作区的寄存器值导出为代码格式。
- 文件名中的
@DATETIME[params]@是当前的时间变量,params对应于dayjs的format的参数,详情请查阅 Day.js文档 。 - 寄存器中可以使用给出的变量,在生成的时候会自动替换成对应的值。该变量在头部和脚部中不生效。
- 对于当前的导出设置,可以把它保存为JSON模板文件,下次可以直接调用。
- 此部分不会保存到缓存当中,刷新后会丢失,请注意保存。
- 需要选择对应的寄存器才会生成代码,可以手动选择,也可选择与默认值不同的寄存器。
- 支持导出到文件或直接复制到剪贴板。
项目使用了 ZeoSeven™ Fonts 和 字图 CDN CDN提供字体
此页面可能更新不及时,最新版请访问GitHub/Gitee仓库查阅