diff options
22 files changed, 620 insertions, 0 deletions
diff --git a/include/arch/infineon-tc1796-starter-kit/driver/counter.h b/include/arch/infineon-tc1796-starter-kit/driver/counter.h new file mode 100644 index 0000000..b7330db --- /dev/null +++ b/include/arch/infineon-tc1796-starter-kit/driver/counter.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef COUNTER_H +#define COUNTER_H + +typedef unsigned int counter_value_t; +typedef unsigned int counter_overflow_t; + +class Counter { + private: + Counter(const Counter ©); + + public: + counter_value_t value; + volatile counter_overflow_t overflow; + + Counter() : overflow(0) {} + + inline void start() { + } + + inline void stop() { + } +}; + +extern Counter counter; + +#endif diff --git a/include/arch/infineon-tc1796-starter-kit/driver/gpio.h b/include/arch/infineon-tc1796-starter-kit/driver/gpio.h new file mode 100644 index 0000000..83689b6 --- /dev/null +++ b/include/arch/infineon-tc1796-starter-kit/driver/gpio.h @@ -0,0 +1,47 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef GPIO_H +#define GPIO_H + +class GPIO { + private: + GPIO(const GPIO ©); + + public: + GPIO () {} + + enum Pin : unsigned char { + PIN_INVALID + }; + + inline void setup() { + } + inline void led_on(unsigned char id = 0) { + } + inline void led_off(unsigned char id = 0) { + } + inline void led_toggle(unsigned char id = 0) { + } + inline void input(unsigned char const pin) { + } + inline void input(unsigned char const pin, unsigned char const pull) { + } + inline void output(unsigned char const pin) { + } + inline void output(unsigned char const pin, unsigned char const value) { + } + inline unsigned char read(unsigned char const pin) { + return 0; + } + inline void write(unsigned char const pin, unsigned char value) { + } + inline void write_mask(unsigned char const pin_base, unsigned char set_mask, unsigned char clear_mask) { + } +}; + +extern GPIO gpio; + +#endif diff --git a/include/arch/infineon-tc1796-starter-kit/driver/stdout.h b/include/arch/infineon-tc1796-starter-kit/driver/stdout.h new file mode 100644 index 0000000..b701dc1 --- /dev/null +++ b/include/arch/infineon-tc1796-starter-kit/driver/stdout.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef STANDARDOUTPUT_H +#define STANDARDOUTPUT_H + +#include "object/outputstream.h" + +class StandardOutput : public OutputStream { + private: + StandardOutput(const StandardOutput ©); + + public: + StandardOutput () {} + void setup(); + + virtual void put(char c) override; +}; + +extern StandardOutput kout; + +#endif diff --git a/include/arch/infineon-tc1796-starter-kit/driver/uptime.h b/include/arch/infineon-tc1796-starter-kit/driver/uptime.h new file mode 100644 index 0000000..6f52f8f --- /dev/null +++ b/include/arch/infineon-tc1796-starter-kit/driver/uptime.h @@ -0,0 +1,32 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef UPTIME_H +#define UPTIME_H + +class Uptime { + private: + Uptime(const Uptime ©); +#ifdef TIMER_S + uint16_t seconds; +#endif + + public: +#ifdef TIMER_S + Uptime () : seconds(0) {} +#else + Uptime () {} +#endif + inline uint16_t get_us() { return 0; } + inline uint16_t get_cycles() { return 0; } +#ifdef TIMER_S + inline uint16_t get_s() { return seconds; } + inline void tick_s() { seconds++; } +#endif +}; + +extern Uptime uptime; + +#endif diff --git a/include/arch/infineon-tc397-tft-kit/driver/counter.h b/include/arch/infineon-tc397-tft-kit/driver/counter.h new file mode 100644 index 0000000..b7330db --- /dev/null +++ b/include/arch/infineon-tc397-tft-kit/driver/counter.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef COUNTER_H +#define COUNTER_H + +typedef unsigned int counter_value_t; +typedef unsigned int counter_overflow_t; + +class Counter { + private: + Counter(const Counter ©); + + public: + counter_value_t value; + volatile counter_overflow_t overflow; + + Counter() : overflow(0) {} + + inline void start() { + } + + inline void stop() { + } +}; + +extern Counter counter; + +#endif diff --git a/include/arch/infineon-tc397-tft-kit/driver/gpio.h b/include/arch/infineon-tc397-tft-kit/driver/gpio.h new file mode 100644 index 0000000..83689b6 --- /dev/null +++ b/include/arch/infineon-tc397-tft-kit/driver/gpio.h @@ -0,0 +1,47 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef GPIO_H +#define GPIO_H + +class GPIO { + private: + GPIO(const GPIO ©); + + public: + GPIO () {} + + enum Pin : unsigned char { + PIN_INVALID + }; + + inline void setup() { + } + inline void led_on(unsigned char id = 0) { + } + inline void led_off(unsigned char id = 0) { + } + inline void led_toggle(unsigned char id = 0) { + } + inline void input(unsigned char const pin) { + } + inline void input(unsigned char const pin, unsigned char const pull) { + } + inline void output(unsigned char const pin) { + } + inline void output(unsigned char const pin, unsigned char const value) { + } + inline unsigned char read(unsigned char const pin) { + return 0; + } + inline void write(unsigned char const pin, unsigned char value) { + } + inline void write_mask(unsigned char const pin_base, unsigned char set_mask, unsigned char clear_mask) { + } +}; + +extern GPIO gpio; + +#endif diff --git a/include/arch/infineon-tc397-tft-kit/driver/stdout.h b/include/arch/infineon-tc397-tft-kit/driver/stdout.h new file mode 100644 index 0000000..b701dc1 --- /dev/null +++ b/include/arch/infineon-tc397-tft-kit/driver/stdout.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef STANDARDOUTPUT_H +#define STANDARDOUTPUT_H + +#include "object/outputstream.h" + +class StandardOutput : public OutputStream { + private: + StandardOutput(const StandardOutput ©); + + public: + StandardOutput () {} + void setup(); + + virtual void put(char c) override; +}; + +extern StandardOutput kout; + +#endif diff --git a/include/arch/infineon-tc397-tft-kit/driver/uptime.h b/include/arch/infineon-tc397-tft-kit/driver/uptime.h new file mode 100644 index 0000000..6f52f8f --- /dev/null +++ b/include/arch/infineon-tc397-tft-kit/driver/uptime.h @@ -0,0 +1,32 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#ifndef UPTIME_H +#define UPTIME_H + +class Uptime { + private: + Uptime(const Uptime ©); +#ifdef TIMER_S + uint16_t seconds; +#endif + + public: +#ifdef TIMER_S + Uptime () : seconds(0) {} +#else + Uptime () {} +#endif + inline uint16_t get_us() { return 0; } + inline uint16_t get_cycles() { return 0; } +#ifdef TIMER_S + inline uint16_t get_s() { return seconds; } + inline void tick_s() { seconds++; } +#endif +}; + +extern Uptime uptime; + +#endif diff --git a/src/arch/infineon-tc1796-starter-kit/Kconfig b/src/arch/infineon-tc1796-starter-kit/Kconfig new file mode 100644 index 0000000..550681f --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/Kconfig @@ -0,0 +1,3 @@ +# Copyright 2022 Daniel Friesel +# +# SPDX-License-Identifier: CC0-1.0 diff --git a/src/arch/infineon-tc1796-starter-kit/Makefile.inc b/src/arch/infineon-tc1796-starter-kit/Makefile.inc new file mode 100644 index 0000000..27b9322 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/Makefile.inc @@ -0,0 +1,78 @@ +# vim:ft=make +# +# Copyright 2022 Daniel Friesel +# +# SPDX-License-Identifier: BSD-2-Clause + +CPU = tc1796 + +COMMON_FLAGS += -mcpu=${CPU} -DMULTIPASS_ARCH_tc1796 + +ARCH_SHORTNAME = tc1796 + +LICENSE = -mlicense-dir=${HOME}/var/source/aurix-infineon-hightec-tricore +CC = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-gcc.exe ${LICENSE} +CXX = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-g++.exe ${LICENSE} +OBJCOPY = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-objcopy.exe ${LICENSE} +OBJDUMP = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-objdump.exe ${LICENSE} +SIZE = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-size.exe + +CXX_TARGETS += src/arch/infineon-tc1796-starter-kit/arch.cc +CXX_TARGETS += src/arch/infineon-tc1796-starter-kit/driver/gpio.cc +CXX_TARGETS += src/arch/infineon-tc1796-starter-kit/driver/stdout.cc + +ifneq (${cpu_freq}, ) + COMMON_FLAGS += -DF_CPU=${cpu_freq}UL +else + COMMON_FLAGS += -DF_CPU=300000000UL +endif + +ifneq ($(findstring counter,${arch_drivers}), ) + CONFIG_arch_infineon_tc1796_starter_kit_driver_counter = y +endif + +ifdef CONFIG_arch_infineon_tc1796_starter_kit_driver_counter + CXX_TARGETS += src/arch/infineon-tc1796-starter-kit/driver/counter.cc +endif + +OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o} ${ASM_TARGETS:.S=.o} + +%.o : %.cc | include/config.h + ${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc} + +%.o : %.c | include/config.h + ${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c} + +%.o : %.S | include/config.h + ${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} -Wa,-gstabs,-ggdb -x assembler-with-cpp -c -o $@ ${@:.o=.S} + +build/system.elf: ${OBJECTS} + ${QUIET}mkdir -p build + ${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} \ + -Wl,--gc-sections \ + -o $@ ${OBJECTS} + +program: build/system.elf + @echo "Not Implemented" + ${QUIET}false + +arch_clean: + ${QUIET}rm -f ${OBJECTS} build/system.elf + +monitor: + @echo "Not Implemented" + ${QUIET}false + +arch_help: + @true + +arch_info: + @echo "CPU Freq: ${cpu_freq} Hz" + +attributes: build/system.elf + ${QUIET}script/size.py "${SIZE}" text,rodata bss + +nfpvalues: build/system.elf + ${QUIET}script/nfpvalues.py "${SIZE}" text,rodata bss + +.PHONY: arch_clean arch_help arch_info attributes monitor program diff --git a/src/arch/infineon-tc1796-starter-kit/arch.cc b/src/arch/infineon-tc1796-starter-kit/arch.cc new file mode 100644 index 0000000..e219da5 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/arch.cc @@ -0,0 +1,60 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "arch.h" + +#ifdef __acweaving +#define __delay_cycles(x) +#endif + +void Arch::setup(void) +{ +} + +#ifdef CONFIG_wakeup +extern void wakeup(); +#endif + +#if defined(CONFIG_loop) +extern void loop(); +volatile char run_loop = 0; +#endif + +volatile bool sleep_done = false; + +void Arch::sleep_ms(unsigned int const ms) +{ +} + +void Arch::delay_us(unsigned int const us) +{ +} +void Arch::delay_ms(unsigned int const ms) +{ +} + +void Arch::idle_loop(void) +{ + while (1) { +#if defined(CONFIG_loop) + if (run_loop) { + loop(); + run_loop = 0; + } +#endif +#ifdef CONFIG_wakeup + wakeup(); +#endif + } +} + +void Arch::idle(void) +{ +#ifdef CONFIG_wakeup + wakeup(); +#endif +} + +Arch arch; diff --git a/src/arch/infineon-tc1796-starter-kit/driver/counter.cc b/src/arch/infineon-tc1796-starter-kit/driver/counter.cc new file mode 100644 index 0000000..7279806 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/driver/counter.cc @@ -0,0 +1,10 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "arch.h" +#include "driver/counter.h" +#include "driver/gpio.h" + +Counter counter; diff --git a/src/arch/infineon-tc1796-starter-kit/driver/gpio.cc b/src/arch/infineon-tc1796-starter-kit/driver/gpio.cc new file mode 100644 index 0000000..b66add2 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/driver/gpio.cc @@ -0,0 +1,8 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "driver/gpio.h" + +GPIO gpio; diff --git a/src/arch/infineon-tc1796-starter-kit/driver/stdout.cc b/src/arch/infineon-tc1796-starter-kit/driver/stdout.cc new file mode 100644 index 0000000..ccdb7d5 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/driver/stdout.cc @@ -0,0 +1,16 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "driver/stdout.h" + +void StandardOutput::setup() +{ +} + +void StandardOutput::put(char c) +{ +} + +StandardOutput kout; diff --git a/src/arch/infineon-tc1796-starter-kit/prompt b/src/arch/infineon-tc1796-starter-kit/prompt new file mode 100644 index 0000000..f253a28 --- /dev/null +++ b/src/arch/infineon-tc1796-starter-kit/prompt @@ -0,0 +1 @@ +Infineon TC1796 Starter Kit diff --git a/src/arch/infineon-tc397-tft-kit/Kconfig b/src/arch/infineon-tc397-tft-kit/Kconfig new file mode 100644 index 0000000..550681f --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/Kconfig @@ -0,0 +1,3 @@ +# Copyright 2022 Daniel Friesel +# +# SPDX-License-Identifier: CC0-1.0 diff --git a/src/arch/infineon-tc397-tft-kit/Makefile.inc b/src/arch/infineon-tc397-tft-kit/Makefile.inc new file mode 100644 index 0000000..4917ef6 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/Makefile.inc @@ -0,0 +1,78 @@ +# vim:ft=make +# +# Copyright 2022 Daniel Friesel +# +# SPDX-License-Identifier: BSD-2-Clause + +CPU = tc39xx + +COMMON_FLAGS += -mcpu=${CPU} -DMULTIPASS_ARCH_tc397 + +ARCH_SHORTNAME = tc397 + +LICENSE = -mlicense-dir=${HOME}/var/source/aurix-infineon-hightec-tricore +CC = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-gcc.exe ${LICENSE} +CXX = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-g++.exe ${LICENSE} +OBJCOPY = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-objcopy.exe ${LICENSE} +OBJDUMP = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-objdump.exe ${LICENSE} +SIZE = wine ${HOME}/.wine/drive_c/HighTec/toolchains/tricore/v4.9.3.0-infineon-1.0/bin/tricore-size.exe + +CXX_TARGETS += src/arch/infineon-tc397-tft-kit/arch.cc +CXX_TARGETS += src/arch/infineon-tc397-tft-kit/driver/gpio.cc +CXX_TARGETS += src/arch/infineon-tc397-tft-kit/driver/stdout.cc + +ifneq (${cpu_freq}, ) + COMMON_FLAGS += -DF_CPU=${cpu_freq}UL +else + COMMON_FLAGS += -DF_CPU=300000000UL +endif + +ifneq ($(findstring counter,${arch_drivers}), ) + CONFIG_arch_infineon_tc397_tft_kit_driver_counter = y +endif + +ifdef CONFIG_arch_infineon_tc397_tft_kit_driver_counter + CXX_TARGETS += src/arch/infineon-tc397-tft-kit/driver/counter.cc +endif + +OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o} ${ASM_TARGETS:.S=.o} + +%.o : %.cc | include/config.h + ${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc} + +%.o : %.c | include/config.h + ${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c} + +%.o : %.S | include/config.h + ${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} -Wa,-gstabs,-ggdb -x assembler-with-cpp -c -o $@ ${@:.o=.S} + +build/system.elf: ${OBJECTS} + ${QUIET}mkdir -p build + ${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} \ + -Wl,--gc-sections \ + -o $@ ${OBJECTS} + +program: build/system.elf + @echo "Not Implemented" + ${QUIET}false + +arch_clean: + ${QUIET}rm -f ${OBJECTS} build/system.elf + +monitor: + @echo "Not Implemented" + ${QUIET}false + +arch_help: + @true + +arch_info: + @echo "CPU Freq: ${cpu_freq} Hz" + +attributes: build/system.elf + ${QUIET}script/size.py "${SIZE}" text,rodata bss + +nfpvalues: build/system.elf + ${QUIET}script/nfpvalues.py "${SIZE}" text,rodata bss + +.PHONY: arch_clean arch_help arch_info attributes monitor program diff --git a/src/arch/infineon-tc397-tft-kit/arch.cc b/src/arch/infineon-tc397-tft-kit/arch.cc new file mode 100644 index 0000000..e219da5 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/arch.cc @@ -0,0 +1,60 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "arch.h" + +#ifdef __acweaving +#define __delay_cycles(x) +#endif + +void Arch::setup(void) +{ +} + +#ifdef CONFIG_wakeup +extern void wakeup(); +#endif + +#if defined(CONFIG_loop) +extern void loop(); +volatile char run_loop = 0; +#endif + +volatile bool sleep_done = false; + +void Arch::sleep_ms(unsigned int const ms) +{ +} + +void Arch::delay_us(unsigned int const us) +{ +} +void Arch::delay_ms(unsigned int const ms) +{ +} + +void Arch::idle_loop(void) +{ + while (1) { +#if defined(CONFIG_loop) + if (run_loop) { + loop(); + run_loop = 0; + } +#endif +#ifdef CONFIG_wakeup + wakeup(); +#endif + } +} + +void Arch::idle(void) +{ +#ifdef CONFIG_wakeup + wakeup(); +#endif +} + +Arch arch; diff --git a/src/arch/infineon-tc397-tft-kit/driver/counter.cc b/src/arch/infineon-tc397-tft-kit/driver/counter.cc new file mode 100644 index 0000000..7279806 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/driver/counter.cc @@ -0,0 +1,10 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "arch.h" +#include "driver/counter.h" +#include "driver/gpio.h" + +Counter counter; diff --git a/src/arch/infineon-tc397-tft-kit/driver/gpio.cc b/src/arch/infineon-tc397-tft-kit/driver/gpio.cc new file mode 100644 index 0000000..b66add2 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/driver/gpio.cc @@ -0,0 +1,8 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "driver/gpio.h" + +GPIO gpio; diff --git a/src/arch/infineon-tc397-tft-kit/driver/stdout.cc b/src/arch/infineon-tc397-tft-kit/driver/stdout.cc new file mode 100644 index 0000000..ccdb7d5 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/driver/stdout.cc @@ -0,0 +1,16 @@ +/* + * Copyright 2022 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + */ +#include "driver/stdout.h" + +void StandardOutput::setup() +{ +} + +void StandardOutput::put(char c) +{ +} + +StandardOutput kout; diff --git a/src/arch/infineon-tc397-tft-kit/prompt b/src/arch/infineon-tc397-tft-kit/prompt new file mode 100644 index 0000000..3313885 --- /dev/null +++ b/src/arch/infineon-tc397-tft-kit/prompt @@ -0,0 +1 @@ +Infineon A2G TC397 3V3 TFT Kit |