Files
tinygo/src/runtime/runtime_cortexm_qemu.go
T
Ayke van Laethem 8cd2a462b9 runtime: remove the asyncScheduler constant
There is no reason to specialize this per chip as it is only ever used
for JavaScript. Not only that, it is causing confusion and is yet
another quirk to learn when porting the runtime to a new
microcontroller.
2021-05-08 23:08:12 +02:00

67 lines
1.1 KiB
Go

// +build cortexm,qemu
package runtime
// This file implements the Stellaris LM3S6965 Cortex-M3 chip as implemented by
// QEMU.
import (
"device/arm"
"runtime/volatile"
"unsafe"
)
type timeUnit int64
var timestamp timeUnit
func postinit() {}
//export Reset_Handler
func main() {
preinit()
run()
// Signal successful exit.
arm.SemihostingCall(arm.SemihostingReportException, arm.SemihostingApplicationExit)
abort()
}
func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks)
}
func nanosecondsToTicks(ns int64) timeUnit {
return timeUnit(ns)
}
func sleepTicks(d timeUnit) {
// TODO: actually sleep here for the given time.
timestamp += d
}
func ticks() timeUnit {
return timestamp
}
// UART0 output register.
var stdoutWrite = (*volatile.Register8)(unsafe.Pointer(uintptr(0x4000c000)))
func putchar(c byte) {
stdoutWrite.Set(uint8(c))
}
func waitForEvents() {
arm.Asm("wfe")
}
func abort() {
// Signal an abnormal exit.
arm.SemihostingCall(arm.SemihostingReportException, arm.SemihostingRunTimeErrorUnknown)
// Lock up forever (should be unreachable).
for {
arm.Asm("wfi")
}
}