From 61af20bdb9d5ca85cd328ddb42720e34fa421aeb Mon Sep 17 00:00:00 2001 From: deadprogram Date: Tue, 7 May 2024 17:18:18 +0200 Subject: [PATCH] renesas: WIP Signed-off-by: deadprogram --- src/runtime/runtime_renesas.go | 89 ++++++++++++++++++++++++++++++++++ targets/ra4m1.json | 10 ++++ targets/ra4m1.ld | 10 ++++ 3 files changed, 109 insertions(+) create mode 100644 src/runtime/runtime_renesas.go create mode 100644 targets/ra4m1.json create mode 100644 targets/ra4m1.ld diff --git a/src/runtime/runtime_renesas.go b/src/runtime/runtime_renesas.go new file mode 100644 index 000000000..895874227 --- /dev/null +++ b/src/runtime/runtime_renesas.go @@ -0,0 +1,89 @@ +//go:build renasas + +package runtime + +import ( + "device/arm" + "machine" +) + +// machineTicks is provided by package machine. +func machineTicks() uint64 { + return 0 +} + +// machineLightSleep is provided by package machine. +func machineLightSleep(uint64) { + return +} + +type timeUnit int64 + +// ticks returns the number of ticks (microseconds) elapsed since power up. +func ticks() timeUnit { + t := machineTicks() + return timeUnit(t) +} + +func ticksToNanoseconds(ticks timeUnit) int64 { + return int64(ticks) * 1000 +} + +func nanosecondsToTicks(ns int64) timeUnit { + return timeUnit(ns / 1000) +} + +func sleepTicks(d timeUnit) { + if d <= 0 { + return + } + + if hasScheduler { + // With scheduler, sleepTicks may return early if an interrupt or + // event fires - so scheduler can schedule any go routines now + // eligible to run + machineLightSleep(uint64(d)) + return + } + + // Busy loop + sleepUntil := ticks() + d + for ticks() < sleepUntil { + } +} + +func waitForEvents() { + arm.Asm("wfe") +} + +func putchar(c byte) { + machine.Serial.WriteByte(c) +} + +func getchar() byte { + for machine.Serial.Buffered() == 0 { + Gosched() + } + v, _ := machine.Serial.ReadByte() + return v +} + +func buffered() int { + return machine.Serial.Buffered() +} + +// machineInit is provided by package machine. +func machineInit() { + return +} + +func init() { + machineInit() +} + +//export Reset_Handler +func main() { + preinit() + run() + exit(0) +} diff --git a/targets/ra4m1.json b/targets/ra4m1.json new file mode 100644 index 000000000..82d90f6c2 --- /dev/null +++ b/targets/ra4m1.json @@ -0,0 +1,10 @@ +{ + "inherits": ["cortex-m4"], + "build-tags": ["ra4m1", "renesas"], + "linkerscript": "targets/ra4m1.ld", + "extra-files": [ + "src/device/renesas/r7fa4m2ad.s" + ], + "openocd-transport": "swd", + "openocd-target": "atsame5x" +} diff --git a/targets/ra4m1.ld b/targets/ra4m1.ld new file mode 100644 index 000000000..908ce6a84 --- /dev/null +++ b/targets/ra4m1.ld @@ -0,0 +1,10 @@ + +MEMORY +{ + FLASH_TEXT (rw) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +_stack_size = 4K; + +INCLUDE "targets/arm.ld"