硬件设计,见参考手册。 软件设计:
配置寄存器0的设置: 0x00C53855 0x00
0x25
0x38
0x55 随便写一个数字
配置寄存器1的设置 0x21c13f55 0x21
0xc1
0x3F 我们可以测一下DIS引脚和FIN脚 是不是有4K和32K信号来证明设置是否正确 0x07 则我们设置EN_START功能。 0x55 随便写一个数字
配置寄存器2的设置 0xE0002055 0xE0 改成E0试一下看中断到底产不产生 延时改成2us
0x00
0x20 改成2us后才计算这个STOP1 5位小数部分不管它了
0x55 随便写一个数字
配置寄存器3的设置 0x90000055 B80000055 这个就是4096us 0xb8
0x00
0x00
0x55 随便写一个数字
配置寄存器4的设置 0x20000055 0x20
00
00
0x55 配置寄存器5的设置 0x18000055 0x18
00
00
0x55
配置寄存器6的设置 0x40cf0055 0x40
0xc5
00
0x55 编写一个程序,写配置寄存器,再读配置寄存器 写配置寄存器,先发一个0x80 后面跟着一个32位的先高字节后低字节写入。 读56位ID呢 我们先发一个0xb7 然后就是连续写7个0进去,然后将读到的缓冲区读子网来看一下。注意到写b7之后,我们一个一个的写00,然后读到SPI的值。 先发一个0x50 复位芯片,延时1ms后,发一个Init命令,即0x70。然后发一个0x01命令等这个START信号过来。然后就是在等中断程序了,在中断程序中,我们要读取这个测量的距离时间差值 通过发一个0xB0给这个读命令。读32位的值。
由于这个芯片的频率可以达到20M,故我们用10M的速度是没什么问题的。 此时读32位只需要3.2us 加上前导。故总的时间在4us左右,中断程序允许这个。 或者我们用DMA来读当然也是可以的。但是DMA的话就要一个缓冲区buffer5个字节。取后面的4个字节为结果值。这样可以省去5个时钟。那这个SPI该用那个脚呢? 用SPI0还是空着的,可以用。经测试SPI通讯正常,已经可以将EN_START和FNT上测到4K和32768Hz的信号,证明设置成功。后面正式开始测量了。
|