mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 19:17:47 +00:00
8cd2a462b9
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.
67 lines
1.1 KiB
Go
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")
|
|
}
|
|
}
|