硬件設(shè)計(jì),見(jiàn)參考手冊(cè)。 軟件設(shè)計(jì):
配置寄存器0的設(shè)置: 0x00C53855 0x00
0x25
0x38
0x55 隨便寫一個(gè)數(shù)字
配置寄存器1的設(shè)置 0x21c13f55 0x21
0xc1
0x3F 我們可以測(cè)一下DIS引腳和FIN腳 是不是有4K和32K信號(hào)來(lái)證明設(shè)置是否正確 0x07 則我們?cè)O(shè)置EN_START功能。 0x55 隨便寫一個(gè)數(shù)字
配置寄存器2的設(shè)置 0xE0002055 0xE0 改成E0試一下看中斷到底產(chǎn)不產(chǎn)生 延時(shí)改成2us
0x00
0x20 改成2us后才計(jì)算這個(gè)STOP1 5位小數(shù)部分不管它了
0x55 隨便寫一個(gè)數(shù)字
配置寄存器3的設(shè)置 0x90000055 B80000055 這個(gè)就是4096us 0xb8
0x00
D15 | | | | | | | | | | | | | | | |
|
|
| STOP1第2個(gè)波整數(shù)部分14位 小數(shù)部分5位 |
0x00
0x55 隨便寫一個(gè)數(shù)字
配置寄存器4的設(shè)置 0x20000055 0x20
00
00
0x55 配置寄存器5的設(shè)置 0x18000055 0x18
00
00
0x55
配置寄存器6的設(shè)置 0x40cf0055 0x40
0xc5
00
0x55 編寫一個(gè)程序,寫配置寄存器,再讀配置寄存器 寫配置寄存器,先發(fā)一個(gè)0x80 后面跟著一個(gè)32位的先高字節(jié)后低字節(jié)寫入。 讀56位ID呢 我們先發(fā)一個(gè)0xb7 然后就是連續(xù)寫7個(gè)0進(jìn)去,然后將讀到的緩沖區(qū)讀子網(wǎng)來(lái)看一下。注意到寫b7之后,我們一個(gè)一個(gè)的寫00,然后讀到SPI的值。 先發(fā)一個(gè)0x50 復(fù)位芯片,延時(shí)1ms后,發(fā)一個(gè)Init命令,即0x70。然后發(fā)一個(gè)0x01命令等這個(gè)START信號(hào)過(guò)來(lái)。然后就是在等中斷程序了,在中斷程序中,我們要讀取這個(gè)測(cè)量的距離時(shí)間差值 通過(guò)發(fā)一個(gè)0xB0給這個(gè)讀命令。讀32位的值。
由于這個(gè)芯片的頻率可以達(dá)到20M,故我們用10M的速度是沒(méi)什么問(wèn)題的。 此時(shí)讀32位只需要3.2us 加上前導(dǎo)。故總的時(shí)間在4us左右,中斷程序允許這個(gè)。 或者我們用DMA來(lái)讀當(dāng)然也是可以的。但是DMA的話就要一個(gè)緩沖區(qū)buffer5個(gè)字節(jié)。取后面的4個(gè)字節(jié)為結(jié)果值。這樣可以省去5個(gè)時(shí)鐘。那這個(gè)SPI該用那個(gè)腳呢? 用SPI0還是空著的,可以用。經(jīng)測(cè)試SPI通訊正常,已經(jīng)可以將EN_START和FNT上測(cè)到4K和32768Hz的信號(hào),證明設(shè)置成功。后面正式開始測(cè)量了。
|