machine/hrf: Set SPI TX/RX lengths even data is empty. Fixes #3868
Этот коммит содержится в:
родитель
e3bc6da9e4
коммит
806498f099
1 изменённых файлов: 17 добавлений и 14 удалений
|
@ -288,24 +288,27 @@ func (spi SPI) Tx(w, r []byte) error {
|
||||||
// supported.
|
// supported.
|
||||||
for len(r) != 0 || len(w) != 0 {
|
for len(r) != 0 || len(w) != 0 {
|
||||||
// Prepare the SPI transfer: set the DMA pointers and lengths.
|
// Prepare the SPI transfer: set the DMA pointers and lengths.
|
||||||
if len(r) != 0 {
|
// read buffer
|
||||||
|
nr := uint32(len(r))
|
||||||
|
if nr > 0 {
|
||||||
|
if nr > 255 {
|
||||||
|
nr = 255
|
||||||
|
}
|
||||||
spi.Bus.RXD.PTR.Set(uint32(uintptr(unsafe.Pointer(&r[0]))))
|
spi.Bus.RXD.PTR.Set(uint32(uintptr(unsafe.Pointer(&r[0]))))
|
||||||
n := uint32(len(r))
|
r = r[nr:]
|
||||||
if n > 255 {
|
|
||||||
n = 255
|
|
||||||
}
|
|
||||||
spi.Bus.RXD.MAXCNT.Set(n)
|
|
||||||
r = r[n:]
|
|
||||||
}
|
}
|
||||||
if len(w) != 0 {
|
spi.Bus.RXD.MAXCNT.Set(nr)
|
||||||
|
|
||||||
|
// write buffer
|
||||||
|
nw := uint32(len(w))
|
||||||
|
if nw > 0 {
|
||||||
|
if nw > 255 {
|
||||||
|
nw = 255
|
||||||
|
}
|
||||||
spi.Bus.TXD.PTR.Set(uint32(uintptr(unsafe.Pointer(&w[0]))))
|
spi.Bus.TXD.PTR.Set(uint32(uintptr(unsafe.Pointer(&w[0]))))
|
||||||
n := uint32(len(w))
|
w = w[nw:]
|
||||||
if n > 255 {
|
|
||||||
n = 255
|
|
||||||
}
|
|
||||||
spi.Bus.TXD.MAXCNT.Set(n)
|
|
||||||
w = w[n:]
|
|
||||||
}
|
}
|
||||||
|
spi.Bus.TXD.MAXCNT.Set(nw)
|
||||||
|
|
||||||
// Do the transfer.
|
// Do the transfer.
|
||||||
// Note: this can be improved by not waiting until the transfer is
|
// Note: this can be improved by not waiting until the transfer is
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче