diff --git a/ili9341/ili9341.go b/ili9341/ili9341.go index 6673fcf..fe53dcc 100644 --- a/ili9341/ili9341.go +++ b/ili9341/ili9341.go @@ -300,7 +300,9 @@ func (d *Device) sendCommand(cmd byte, data []byte) { d.dc.Low() d.driver.write8(cmd) d.dc.High() - d.driver.write8sl(data) + if data != nil && len(data) > 0 { + d.driver.write8sl(data) + } d.endWrite() } diff --git a/ili9341/spi_atsamd51.go b/ili9341/spi_atsamd51.go index ca31db6..76ade44 100644 --- a/ili9341/spi_atsamd51.go +++ b/ili9341/spi_atsamd51.go @@ -3,7 +3,6 @@ package ili9341 import ( - "device/sam" "machine" ) @@ -11,6 +10,8 @@ type spiDriver struct { bus machine.SPI } +var txBuf [2]uint8 + func NewSPI(bus machine.SPI, dc, cs, rst machine.Pin) *Device { return &Device{ dc: dc, @@ -27,90 +28,31 @@ func (pd *spiDriver) configure(config *Config) { } func (pd *spiDriver) write8(b byte) { - pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) - - 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) { - } + pd.bus.Transfer(b) } func (pd *spiDriver) write8n(b byte, n int) { - pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) - - 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) { - } + panic("not impl") } func (pd *spiDriver) write8sl(b []byte) { - pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) - - 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) { - } + pd.bus.Tx(b, nil) } func (pd *spiDriver) write16(data uint16) { - pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) - - 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) { - } + txBuf[0] = uint8(data >> 8) + txBuf[1] = uint8(data) + pd.bus.Tx(txBuf[:], nil) } func (pd *spiDriver) write16n(data uint16, n int) { - pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) - - 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) { + for i, c := 0, n; i < c; i++ { + pd.write16(data) } } 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 !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { - } - 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) { + pd.write16(data[i]) } }