mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-11 02:13:42 +00:00
@@ -57,9 +57,11 @@ smoke-test:
|
|||||||
@md5sum ./build/test.hex
|
@md5sum ./build/test.hex
|
||||||
tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hub75/main.go
|
tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hub75/main.go
|
||||||
@md5sum ./build/test.hex
|
@md5sum ./build/test.hex
|
||||||
tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/basic/main.go
|
tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/basic
|
||||||
@md5sum ./build/test.hex
|
@md5sum ./build/test.hex
|
||||||
tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/scroll/main.go
|
tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/pyportal_boing
|
||||||
|
@md5sum ./build/test.hex
|
||||||
|
tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/scroll
|
||||||
@md5sum ./build/test.hex
|
@md5sum ./build/test.hex
|
||||||
tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go
|
tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go
|
||||||
@md5sum ./build/test.hex
|
@md5sum ./build/test.hex
|
||||||
|
|||||||
@@ -9,15 +9,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
display = ili9341.NewParallel(
|
|
||||||
machine.LCD_DATA0,
|
|
||||||
machine.TFT_WR,
|
|
||||||
machine.TFT_DC,
|
|
||||||
machine.TFT_CS,
|
|
||||||
machine.TFT_RESET,
|
|
||||||
machine.TFT_RD,
|
|
||||||
)
|
|
||||||
|
|
||||||
black = color.RGBA{0, 0, 0, 255}
|
black = color.RGBA{0, 0, 0, 255}
|
||||||
white = color.RGBA{255, 255, 255, 255}
|
white = color.RGBA{255, 255, 255, 255}
|
||||||
red = color.RGBA{255, 0, 0, 255}
|
red = color.RGBA{255, 0, 0, 255}
|
||||||
@@ -27,13 +18,13 @@ var (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
machine.TFT_BACKLIGHT.Configure(machine.PinConfig{machine.PinOutput})
|
backlight.Configure(machine.PinConfig{machine.PinOutput})
|
||||||
|
|
||||||
display.Configure(ili9341.Config{})
|
display.Configure(ili9341.Config{})
|
||||||
width, height := display.Size()
|
width, height := display.Size()
|
||||||
|
|
||||||
display.FillScreen(black)
|
display.FillScreen(black)
|
||||||
machine.TFT_BACKLIGHT.High()
|
backlight.High()
|
||||||
|
|
||||||
display.FillRectangle(0, 0, width/2, height/2, white)
|
display.FillRectangle(0, 0, width/2, height/2, white)
|
||||||
display.FillRectangle(width/2, 0, width/2, height/2, red)
|
display.FillRectangle(width/2, 0, width/2, height/2, red)
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// +build pyportal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewParallel(
|
||||||
|
machine.LCD_DATA0,
|
||||||
|
machine.TFT_WR,
|
||||||
|
machine.TFT_DC,
|
||||||
|
machine.TFT_CS,
|
||||||
|
machine.TFT_RESET,
|
||||||
|
machine.TFT_RD,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.TFT_BACKLIGHT
|
||||||
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// +build wioterminal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewSpi(
|
||||||
|
machine.SPI3,
|
||||||
|
machine.LCD_DC,
|
||||||
|
machine.LCD_SS_PIN,
|
||||||
|
machine.LCD_RESET,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.LCD_BACKLIGHT
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
|
SCK: machine.LCD_SCK_PIN,
|
||||||
|
MOSI: machine.LCD_MOSI_PIN,
|
||||||
|
MISO: machine.LCD_MISO_PIN,
|
||||||
|
Frequency: 40000000,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -25,15 +25,6 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
display = ili9341.NewParallel(
|
|
||||||
machine.LCD_DATA0,
|
|
||||||
machine.TFT_WR,
|
|
||||||
machine.TFT_DC,
|
|
||||||
machine.TFT_CS,
|
|
||||||
machine.TFT_RESET,
|
|
||||||
machine.TFT_RD,
|
|
||||||
)
|
|
||||||
|
|
||||||
frameBuffer = [(graphics.BALLHEIGHT + 8) * (graphics.BALLWIDTH + 8)]uint16{}
|
frameBuffer = [(graphics.BALLHEIGHT + 8) * (graphics.BALLWIDTH + 8)]uint16{}
|
||||||
|
|
||||||
startTime int64
|
startTime int64
|
||||||
@@ -56,7 +47,7 @@ var (
|
|||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// configure backlight
|
// configure backlight
|
||||||
machine.TFT_BACKLIGHT.Configure(machine.PinConfig{machine.PinOutput})
|
backlight.Configure(machine.PinConfig{machine.PinOutput})
|
||||||
|
|
||||||
// configure display
|
// configure display
|
||||||
display.Configure(ili9341.Config{})
|
display.Configure(ili9341.Config{})
|
||||||
@@ -64,7 +55,7 @@ func main() {
|
|||||||
width, height := display.Size()
|
width, height := display.Size()
|
||||||
println(width, height)
|
println(width, height)
|
||||||
|
|
||||||
machine.TFT_BACKLIGHT.High()
|
backlight.High()
|
||||||
|
|
||||||
display.SetRotation(ili9341.Rotation270)
|
display.SetRotation(ili9341.Rotation270)
|
||||||
DrawBackground()
|
DrawBackground()
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// +build pyportal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewParallel(
|
||||||
|
machine.LCD_DATA0,
|
||||||
|
machine.TFT_WR,
|
||||||
|
machine.TFT_DC,
|
||||||
|
machine.TFT_CS,
|
||||||
|
machine.TFT_RESET,
|
||||||
|
machine.TFT_RD,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.TFT_BACKLIGHT
|
||||||
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// +build wioterminal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewSpi(
|
||||||
|
machine.SPI3,
|
||||||
|
machine.LCD_DC,
|
||||||
|
machine.LCD_SS_PIN,
|
||||||
|
machine.LCD_RESET,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.LCD_BACKLIGHT
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
|
SCK: machine.LCD_SCK_PIN,
|
||||||
|
MOSI: machine.LCD_MOSI_PIN,
|
||||||
|
MISO: machine.LCD_MISO_PIN,
|
||||||
|
Frequency: 40000000,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -9,15 +9,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
display = ili9341.NewParallel(
|
|
||||||
machine.LCD_DATA0,
|
|
||||||
machine.TFT_WR,
|
|
||||||
machine.TFT_DC,
|
|
||||||
machine.TFT_CS,
|
|
||||||
machine.TFT_RESET,
|
|
||||||
machine.TFT_RD,
|
|
||||||
)
|
|
||||||
|
|
||||||
red = color.RGBA{255, 0, 0, 255}
|
red = color.RGBA{255, 0, 0, 255}
|
||||||
blue = color.RGBA{0, 0, 255, 255}
|
blue = color.RGBA{0, 0, 255, 255}
|
||||||
green = color.RGBA{0, 255, 0, 255}
|
green = color.RGBA{0, 255, 0, 255}
|
||||||
@@ -27,13 +18,13 @@ var (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
machine.TFT_BACKLIGHT.Configure(machine.PinConfig{machine.PinOutput})
|
backlight.Configure(machine.PinConfig{machine.PinOutput})
|
||||||
|
|
||||||
display.Configure(ili9341.Config{})
|
display.Configure(ili9341.Config{})
|
||||||
width, height := display.Size()
|
width, height := display.Size()
|
||||||
|
|
||||||
display.FillScreen(black)
|
display.FillScreen(black)
|
||||||
machine.TFT_BACKLIGHT.High()
|
backlight.High()
|
||||||
|
|
||||||
display.FillRectangle(0, 0, width/2, height/2, white)
|
display.FillRectangle(0, 0, width/2, height/2, white)
|
||||||
display.FillRectangle(width/2, 0, width/2, height/2, red)
|
display.FillRectangle(width/2, 0, width/2, height/2, red)
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// +build pyportal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewParallel(
|
||||||
|
machine.LCD_DATA0,
|
||||||
|
machine.TFT_WR,
|
||||||
|
machine.TFT_DC,
|
||||||
|
machine.TFT_CS,
|
||||||
|
machine.TFT_RESET,
|
||||||
|
machine.TFT_RD,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.TFT_BACKLIGHT
|
||||||
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// +build wioterminal
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"machine"
|
||||||
|
|
||||||
|
"tinygo.org/x/drivers/ili9341"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
display = ili9341.NewSpi(
|
||||||
|
machine.SPI3,
|
||||||
|
machine.LCD_DC,
|
||||||
|
machine.LCD_SS_PIN,
|
||||||
|
machine.LCD_RESET,
|
||||||
|
)
|
||||||
|
|
||||||
|
backlight = machine.LCD_BACKLIGHT
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
|
SCK: machine.LCD_SCK_PIN,
|
||||||
|
MOSI: machine.LCD_MOSI_PIN,
|
||||||
|
MISO: machine.LCD_MISO_PIN,
|
||||||
|
Frequency: 40000000,
|
||||||
|
})
|
||||||
|
}
|
||||||
+3
-3
@@ -281,15 +281,15 @@ 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()
|
||||||
for _, b := range data {
|
d.driver.write8sl(data)
|
||||||
d.driver.write8(b)
|
|
||||||
}
|
|
||||||
d.endWrite()
|
d.endWrite()
|
||||||
}
|
}
|
||||||
|
|
||||||
type driver interface {
|
type driver interface {
|
||||||
configure(config *Config)
|
configure(config *Config)
|
||||||
write8(b byte)
|
write8(b byte)
|
||||||
|
write8n(b byte, n int)
|
||||||
|
write8sl(b []byte)
|
||||||
write16(data uint16)
|
write16(data uint16)
|
||||||
write16n(data uint16, n int)
|
write16n(data uint16, n int)
|
||||||
write16sl(data []uint16)
|
write16sl(data []uint16)
|
||||||
|
|||||||
@@ -72,6 +72,20 @@ func (pd *parallelDriver) wrx() {
|
|||||||
volatile.StoreUint32(pd.wrPortSet, pd.wrMaskSet)
|
volatile.StoreUint32(pd.wrPortSet, pd.wrMaskSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
|
func (pd *parallelDriver) write8n(b byte, n int) {
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
pd.write8(b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
|
func (pd *parallelDriver) write8sl(b []byte) {
|
||||||
|
for i := 0; i < len(b); i++ {
|
||||||
|
pd.write8(b[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//go:inline
|
//go:inline
|
||||||
func (pd *parallelDriver) write16(data uint16) {
|
func (pd *parallelDriver) write16(data uint16) {
|
||||||
pd.write8(byte(data >> 8))
|
pd.write8(byte(data >> 8))
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
// +build atsamd51
|
||||||
|
|
||||||
|
package ili9341
|
||||||
|
|
||||||
|
import (
|
||||||
|
"device/sam"
|
||||||
|
"machine"
|
||||||
|
)
|
||||||
|
|
||||||
|
type spiDriver struct {
|
||||||
|
bus machine.SPI
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSpi(bus machine.SPI, dc, cs, rst machine.Pin) *Device {
|
||||||
|
return &Device{
|
||||||
|
dc: dc,
|
||||||
|
cs: cs,
|
||||||
|
rst: rst,
|
||||||
|
rd: machine.NoPin,
|
||||||
|
driver: &spiDriver{
|
||||||
|
bus: bus,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user