mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 22:43:40 +00:00
17302ca762
* 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>
140 lines
3.1 KiB
Go
140 lines
3.1 KiB
Go
//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
|
|
)
|