Skip to content

Commit b3759d5

Browse files
committed
li9341 atsamd51: change to use the standard SPI
1 parent d0632fc commit b3759d5

File tree

3 files changed

+33
-74
lines changed

3 files changed

+33
-74
lines changed

examples/ili9341/pyportal_boing/main.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const (
2525
)
2626

2727
var (
28-
frameBuffer = [(graphics.BALLHEIGHT + 8) * (graphics.BALLWIDTH + 8)]uint16{}
28+
frameBuffer = [(graphics.BALLHEIGHT + 8) * (graphics.BALLWIDTH + 8) * 2]uint8{}
2929

3030
startTime int64
3131
frame int64
@@ -179,7 +179,8 @@ func main() {
179179
c = BGCOLOR
180180
}
181181
}
182-
frameBuffer[y*int(width)+x] = c
182+
frameBuffer[(y*int(width)+x)*2] = byte(c >> 8)
183+
frameBuffer[(y*int(width)+x)*2+1] = byte(c)
183184
bx1++ // Increment bitmap position counters (X axis)
184185
bgx1++
185186
}
@@ -190,7 +191,7 @@ func main() {
190191
bgy++
191192
}
192193

193-
display.DrawRGBBitmap(minx, miny, frameBuffer[:width*height], width, height)
194+
display.DrawRGBBitmap8(minx, miny, frameBuffer[:width*height*2], width, height)
194195

195196
// Show approximate frame rate
196197
frame++
@@ -215,11 +216,13 @@ func DrawBackground() {
215216
b = graphics.Background[j*byteWidth+k/8]
216217
}
217218
if b&0x80 == 0 {
218-
frameBuffer[k] = BGCOLOR
219+
frameBuffer[2*k] = byte(BGCOLOR >> 8)
220+
frameBuffer[2*k+1] = byte(BGCOLOR & 0xFF)
219221
} else {
220-
frameBuffer[k] = GRIDCOLOR
222+
frameBuffer[2*k] = byte(GRIDCOLOR >> 8)
223+
frameBuffer[2*k+1] = byte(GRIDCOLOR & 0xFF)
221224
}
222225
}
223-
display.DrawRGBBitmap(0, j, frameBuffer[0:w], w, 1)
226+
display.DrawRGBBitmap8(0, j, frameBuffer[0:w*2], w, 1)
224227
}
225228
}

ili9341/ili9341.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,20 @@ func (d *Device) DrawRGBBitmap(x, y int16, data []uint16, w, h int16) error {
160160
return nil
161161
}
162162

163+
// DrawRGBBitmap8 copies an RGB bitmap to the internal buffer at given coordinates
164+
func (d *Device) DrawRGBBitmap8(x, y int16, data []uint8, w, h int16) error {
165+
k, i := d.Size()
166+
if x < 0 || y < 0 || w <= 0 || h <= 0 ||
167+
x >= k || (x+w) > k || y >= i || (y+h) > i {
168+
return errors.New("rectangle coordinates outside display area")
169+
}
170+
d.setWindow(x, y, w, h)
171+
d.startWrite()
172+
d.driver.write8sl(data)
173+
d.endWrite()
174+
return nil
175+
}
176+
163177
// FillRectangle fills a rectangle at given coordinates with a color
164178
func (d *Device) FillRectangle(x, y, width, height int16, c color.RGBA) error {
165179
k, i := d.Size()
@@ -300,7 +314,9 @@ func (d *Device) sendCommand(cmd byte, data []byte) {
300314
d.dc.Low()
301315
d.driver.write8(cmd)
302316
d.dc.High()
303-
d.driver.write8sl(data)
317+
if data != nil {
318+
d.driver.write8sl(data)
319+
}
304320
d.endWrite()
305321
}
306322

ili9341/spi_atsamd51.go

Lines changed: 7 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
package ili9341
44

55
import (
6-
"device/sam"
76
"machine"
87
)
98

@@ -27,90 +26,31 @@ func (pd *spiDriver) configure(config *Config) {
2726
}
2827

2928
func (pd *spiDriver) write8(b byte) {
30-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
31-
32-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
33-
}
34-
pd.bus.Bus.DATA.Set(uint32(b))
35-
36-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
37-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
38-
}
29+
pd.bus.Tx([]byte{b}, nil)
3930
}
4031

4132
func (pd *spiDriver) write8n(b byte, n int) {
42-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
43-
44-
for i, c := 0, n; i < c; i++ {
45-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
46-
}
47-
pd.bus.Bus.DATA.Set(uint32(b))
48-
}
49-
50-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
51-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
33+
for i := 0; i < n; i++ {
34+
pd.bus.Tx([]byte{b}, nil)
5235
}
5336
}
5437

5538
func (pd *spiDriver) write8sl(b []byte) {
56-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
57-
58-
for i, c := 0, len(b); i < c; i++ {
59-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
60-
}
61-
pd.bus.Bus.DATA.Set(uint32(b[i]))
62-
}
63-
64-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
65-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
66-
}
39+
pd.bus.Tx(b, nil)
6740
}
6841

6942
func (pd *spiDriver) write16(data uint16) {
70-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
71-
72-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
73-
}
74-
pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8)))
75-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
76-
}
77-
pd.bus.Bus.DATA.Set(uint32(uint8(data)))
78-
79-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
80-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
81-
}
43+
pd.bus.Tx([]byte{uint8(data >> 8), uint8(data)}, nil)
8244
}
8345

8446
func (pd *spiDriver) write16n(data uint16, n int) {
85-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
86-
8747
for i := 0; i < n; i++ {
88-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
89-
}
90-
pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8)))
91-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
92-
}
93-
pd.bus.Bus.DATA.Set(uint32(uint8(data)))
94-
}
95-
96-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
97-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
48+
pd.bus.Tx([]byte{uint8(data >> 8), uint8(data)}, nil)
9849
}
9950
}
10051

10152
func (pd *spiDriver) write16sl(data []uint16) {
102-
pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN)
103-
10453
for i, c := 0, len(data); i < c; i++ {
105-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
106-
}
107-
pd.bus.Bus.DATA.Set(uint32(uint8(data[i] >> 8)))
108-
for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) {
109-
}
110-
pd.bus.Bus.DATA.Set(uint32(uint8(data[i])))
111-
}
112-
113-
pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN)
114-
for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) {
54+
pd.bus.Tx([]byte{uint8(data[i] >> 8), uint8(data[i])}, nil)
11555
}
11656
}

0 commit comments

Comments
 (0)