aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/device
diff options
context:
space:
mode:
authorRon Evans <[email protected]>2024-12-14 14:26:03 +0100
committerGitHub <[email protected]>2024-12-14 14:26:03 +0100
commit17302ca762d7f8948dcb21cc675070eea445271f (patch)
treef357f9e1d3181beb4234d12f8f51c8d8f8c89d1e /src/device
parentf2465992533adcf9f98dfea359aba9171a80902f (diff)
downloadtinygo-17302ca762d7f8948dcb21cc675070eea445271f.tar.gz
tinygo-17302ca762d7f8948dcb21cc675070eea445271f.zip
targets: add implementation for Tillitis TKey device (#4631)
* initial implementation for Tillitis TKey device * add UART implementation for TKey * add Pin interface implementation for TKey touch sensor * add RNG interface implementation for TKey * add helpful machine package functions to return identifiers such as name and version for TKey * use built-in timer for sleep timing on TKey * modify UART implementation for TKey to implement Serialer interface * implement BLAKE2s ROM function call for TKey device * handle abort by triggering TKey device fault using illegal instruction to halt CPU * simplify TKey implementation by inheriting from existing riscv32 target * return error for trying to configure invalid baudrates on UART * add tkey to builder test * be very specific for features passed to LLVM for specific config in use for TKey * handle feedback items from TKey device code review Signed-off-by: deadprogram <[email protected]>
Diffstat (limited to 'src/device')
-rw-r--r--src/device/tkey/tkey.go139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/device/tkey/tkey.go b/src/device/tkey/tkey.go
new file mode 100644
index 000000000..89a370414
--- /dev/null
+++ b/src/device/tkey/tkey.go
@@ -0,0 +1,139 @@
+//go:build tkey
+
+// Hand written file based on https://github.com/tillitis/tkey-libs/blob/main/include/tkey/tk1_mem.h
+
+package tkey
+
+import (
+ "runtime/volatile"
+ "unsafe"
+)
+
+// Peripherals
+var (
+ TRNG = (*TRNG_Type)(unsafe.Pointer(TK1_MMIO_TRNG_BASE))
+
+ TIMER = (*TIMER_Type)(unsafe.Pointer(TK1_MMIO_TIMER_BASE))
+
+ UDS = (*UDS_Type)(unsafe.Pointer(TK1_MMIO_UDS_BASE))
+
+ UART = (*UART_Type)(unsafe.Pointer(TK1_MMIO_UART_BASE))
+
+ TOUCH = (*TOUCH_Type)(unsafe.Pointer(TK1_MMIO_TOUCH_BASE))
+
+ TK1 = (*TK1_Type)(unsafe.Pointer(TK1_MMIO_TK1_BASE))
+)
+
+// Memory sections
+const (
+ TK1_ROM_BASE uintptr = 0x00000000
+
+ TK1_RAM_BASE uintptr = 0x40000000
+
+ TK1_MMIO_BASE uintptr = 0xc0000000
+
+ TK1_MMIO_TRNG_BASE uintptr = 0xc0000000
+
+ TK1_MMIO_TIMER_BASE uintptr = 0xc1000000
+
+ TK1_MMIO_UDS_BASE uintptr = 0xc2000000
+
+ TK1_MMIO_UART_BASE uintptr = 0xc3000000
+
+ TK1_MMIO_TOUCH_BASE uintptr = 0xc4000000
+
+ TK1_MMIO_FW_RAM_BASE uintptr = 0xd0000000
+
+ TK1_MMIO_TK1_BASE uintptr = 0xff000000
+)
+
+// Memory section sizes
+const (
+ TK1_RAM_SIZE uintptr = 0x20000
+
+ TK1_MMIO_SIZE uintptr = 0x3fffffff
+)
+
+type TRNG_Type struct {
+ _ [36]byte
+ STATUS volatile.Register32
+ _ [88]byte
+ ENTROPY volatile.Register32
+}
+
+type TIMER_Type struct {
+ _ [32]byte
+ CTRL volatile.Register32
+ STATUS volatile.Register32
+ PRESCALER volatile.Register32
+ TIMER volatile.Register32
+}
+
+type UDS_Type struct {
+ _ [64]byte
+ DATA [8]volatile.Register32
+}
+
+type UART_Type struct {
+ _ [128]byte
+ RX_STATUS volatile.Register32
+ RX_DATA volatile.Register32
+ RX_BYTES volatile.Register32
+ _ [116]byte
+ TX_STATUS volatile.Register32
+ TX_DATA volatile.Register32
+}
+
+type TOUCH_Type struct {
+ _ [36]byte
+ STATUS volatile.Register32
+}
+
+type TK1_Type struct {
+ NAME0 volatile.Register32
+ NAME1 volatile.Register32
+ VERSION volatile.Register32
+ _ [16]byte
+ SWITCH_APP volatile.Register32
+ _ [4]byte
+ LED volatile.Register32
+ GPIO volatile.Register16
+ APP_ADDR volatile.Register32
+ APP_SIZE volatile.Register32
+ BLAKE2S volatile.Register32
+ _ [72]byte
+ CDI_FIRST [8]volatile.Register32
+ _ [32]byte
+ UDI_FIRST [2]volatile.Register32
+ _ [62]byte
+ RAM_ADDR_RAND volatile.Register16
+ _ [2]byte
+ RAM_DATA_RAND volatile.Register16
+ _ [126]byte
+ CPU_MON_CTRL volatile.Register16
+ _ [2]byte
+ CPU_MON_FIRST volatile.Register32
+ CPU_MON_LAST volatile.Register32
+ _ [60]byte
+ SYSTEM_RESET volatile.Register16
+ _ [66]byte
+ SPI_EN volatile.Register32
+ SPI_XFER volatile.Register32
+ SPI_DATA volatile.Register32
+}
+
+const (
+ TK1_MMIO_TIMER_CTRL_START_BIT = 0
+ TK1_MMIO_TIMER_CTRL_STOP_BIT = 1
+ TK1_MMIO_TIMER_CTRL_START = 1 << TK1_MMIO_TIMER_CTRL_START_BIT
+ TK1_MMIO_TIMER_CTRL_STOP = 1 << TK1_MMIO_TIMER_CTRL_STOP_BIT
+
+ TK1_MMIO_TK1_LED_R_BIT = 2
+ TK1_MMIO_TK1_LED_G_BIT = 1
+ TK1_MMIO_TK1_LED_B_BIT = 0
+
+ TK1_MMIO_TK1_GPIO1_BIT = 0
+ TK1_MMIO_TK1_GPIO2_BIT = 1
+ TK1_MMIO_TK1_GPIO3_BIT = 2
+ TK1_MMIO_TK1_GPIO4_BIT = 3
+)