硬件設計,見參考手冊。 軟件設計:
配置寄存器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的信號,證明設置成功。后面正式開始測量了。
|