mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 11:37:46 +00:00
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 <ron@hybridgroup.com>
This commit is contained in:
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user