mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-17 21:23:58 +00:00
samd5x spi: use standard spi driver
This commit is contained in:
+3
-1
@@ -300,7 +300,9 @@ func (d *Device) sendCommand(cmd byte, data []byte) {
|
|||||||
d.dc.Low()
|
d.dc.Low()
|
||||||
d.driver.write8(cmd)
|
d.driver.write8(cmd)
|
||||||
d.dc.High()
|
d.dc.High()
|
||||||
d.driver.write8sl(data)
|
if data != nil && len(data) > 0 {
|
||||||
|
d.driver.write8sl(data)
|
||||||
|
}
|
||||||
d.endWrite()
|
d.endWrite()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-69
@@ -3,7 +3,6 @@
|
|||||||
package ili9341
|
package ili9341
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
|
||||||
"machine"
|
"machine"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -11,6 +10,8 @@ type spiDriver struct {
|
|||||||
bus machine.SPI
|
bus machine.SPI
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var txBuf [2]uint8
|
||||||
|
|
||||||
func NewSPI(bus machine.SPI, dc, cs, rst machine.Pin) *Device {
|
func NewSPI(bus machine.SPI, dc, cs, rst machine.Pin) *Device {
|
||||||
return &Device{
|
return &Device{
|
||||||
dc: dc,
|
dc: dc,
|
||||||
@@ -27,90 +28,31 @@ func (pd *spiDriver) configure(config *Config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write8(b byte) {
|
func (pd *spiDriver) write8(b byte) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
pd.bus.Transfer(b)
|
||||||
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(b))
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write8n(b byte, n int) {
|
func (pd *spiDriver) write8n(b byte, n int) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
panic("not impl")
|
||||||
|
|
||||||
for i, c := 0, n; i < c; i++ {
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(b))
|
|
||||||
}
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write8sl(b []byte) {
|
func (pd *spiDriver) write8sl(b []byte) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
pd.bus.Tx(b, nil)
|
||||||
|
|
||||||
for i, c := 0, len(b); i < c; i++ {
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(b[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write16(data uint16) {
|
func (pd *spiDriver) write16(data uint16) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
txBuf[0] = uint8(data >> 8)
|
||||||
|
txBuf[1] = uint8(data)
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
pd.bus.Tx(txBuf[:], nil)
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8)))
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data)))
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write16n(data uint16, n int) {
|
func (pd *spiDriver) write16n(data uint16, n int) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
for i, c := 0, n; i < c; i++ {
|
||||||
|
pd.write16(data)
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8)))
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data)))
|
|
||||||
}
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pd *spiDriver) write16sl(data []uint16) {
|
func (pd *spiDriver) write16sl(data []uint16) {
|
||||||
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
|
|
||||||
for i, c := 0, len(data); i < c; i++ {
|
for i, c := 0, len(data); i < c; i++ {
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
pd.write16(data[i])
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data[i] >> 8)))
|
|
||||||
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
|
|
||||||
}
|
|
||||||
pd.bus.Bus.DATA.Set(uint32(uint8(data[i])))
|
|
||||||
}
|
|
||||||
|
|
||||||
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
|
|
||||||
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user