Init example
This commit is contained in:
commit
ad1ce76549
7 changed files with 252 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
use flake git+https://git.ghoscht.com/ghoscht/xmclib
|
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.direnv/
|
||||||
|
target
|
||||||
|
result
|
||||||
|
build/
|
||||||
|
lib_build/
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "xmclib"]
|
||||||
|
path = xmclib
|
||||||
|
url = https://git.ghoscht.com/ghoscht/xmclib.git
|
168
Makefile
Executable file
168
Makefile
Executable file
|
@ -0,0 +1,168 @@
|
||||||
|
##### Makefile for the ESS deliverables #####
|
||||||
|
# DO NOT CHANGE THIS FILE, IT WILL BE REPLACED BY THE ORIGINAL VERSION BEFORE GRADING #
|
||||||
|
|
||||||
|
include student.mk
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
CROSS_COMPILE=arm-none-eabi
|
||||||
|
|
||||||
|
CC = $(CROSS_COMPILE)-gcc
|
||||||
|
LD = $(CROSS_COMPILE)-gcc --specs=nosys.specs
|
||||||
|
AR = $(CROSS_COMPILE)-ar
|
||||||
|
AS = $(CROSS_COMPILE)-as
|
||||||
|
OC = $(CROSS_COMPILE)-objcopy
|
||||||
|
OD = $(CROSS_COMPILE)-objdump
|
||||||
|
SZ = $(CROSS_COMPILE)-size
|
||||||
|
DB = $(CROSS_COMPILE)-gdb
|
||||||
|
|
||||||
|
# Paths to build directories for out-of-tree build and path to LUFA USB library
|
||||||
|
BUILDDIR = build
|
||||||
|
LIB_BUILDDIR = lib_build
|
||||||
|
USB_LIBDIR = $(XMC_LIBDIR)/ThirdPartyLibraries/USBlib/USB
|
||||||
|
|
||||||
|
# Specify device
|
||||||
|
XMC_SERIES=4500
|
||||||
|
XMC_PACKAGE=F100
|
||||||
|
XMC_SIZE=1024
|
||||||
|
|
||||||
|
VPATH += $(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/BasicMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/CommonTables:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/ComplexMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/ControllerFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/FastMathFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/FilteringFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/MatrixFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/StatisticsFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/SupportFunctions:$(XMC_LIBDIR)/CMSIS/DSP_Lib/Source/TransformFunctions:$(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Source:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/SRC:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/SRC/ARM:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/Templates:$(XMC_LIBDIR)/CMSIS/RTOS/RTX/UserCodeTemplates:$(XMC_LIBDIR)/ThirdPartyLibraries/Newlib:$(XMC_LIBDIR)/XMCLib/src:$(USB_LIBDIR)/Class/Common:$(USB_LIBDIR)/Class/Device:$(USB_LIBDIR)/Common:$(USB_LIBDIR)/Core:$(USB_LIBDIR)/Core/XMC4000
|
||||||
|
|
||||||
|
# Where to find CMSIS, device and XMClib header files
|
||||||
|
CFLAGS = -I$(XMC_LIBDIR)/CMSIS/Include/
|
||||||
|
# Where to find device specific header files
|
||||||
|
CFLAGS += -I$(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Include/
|
||||||
|
# Where to find XMClib headers
|
||||||
|
CFLAGS += -I$(XMC_LIBDIR)/XMCLib/inc/
|
||||||
|
# USB LIB Include paths
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Class
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Class/Common
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Class/Device
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Common
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Core
|
||||||
|
CFLAGS += -I$(USB_LIBDIR)/Core/XMC4000
|
||||||
|
# Which device
|
||||||
|
CFLAGS += -DXMC$(XMC_SERIES)_$(XMC_PACKAGE)x$(XMC_SIZE)
|
||||||
|
# Which core architecture
|
||||||
|
CFLAGS += -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mthumb
|
||||||
|
# Debug level and format
|
||||||
|
CFLAGS += -g3 -gdwarf-2
|
||||||
|
# Compile without linking
|
||||||
|
CFLAGS += -c
|
||||||
|
# Write separate *.lst file for each source
|
||||||
|
CFLAGS += -Wa,-adhlns="$@.lst"
|
||||||
|
# Until here all options are also necessary for compiling startup_XMC4500.S
|
||||||
|
SFLAGS = $(CFLAGS)
|
||||||
|
# Add student options, so -Wall comes after and overrides any possible -Wnone or so
|
||||||
|
CFLAGS +=$(SCFLAGS)
|
||||||
|
# Enable standard warnings for both
|
||||||
|
SFLAGS += -Wall
|
||||||
|
CFLAGS += -Wall
|
||||||
|
# Put functions into separate sections, so they can be omitted by linker if unused
|
||||||
|
CFLAGS += -ffunction-sections
|
||||||
|
# Option for assembly compilation
|
||||||
|
SFLAGS += -x assembler-with-cpp
|
||||||
|
# Tell the linker to use our own linker script and startup files
|
||||||
|
LFLAGS = -T$(BUILDDIR)/$(LD_NAME).ld -nostartfiles
|
||||||
|
# Where to find the precompiled math libraries
|
||||||
|
LFLAGS += -L$(XMC_LIBDIR)/CMSIS/Lib/GCC/
|
||||||
|
# Create a map file
|
||||||
|
LFLAGS += -Wl,-Map,"$@.map"
|
||||||
|
# Also tell the linker core architecture
|
||||||
|
LFLAGS += -mcpu=cortex-m4 -mthumb
|
||||||
|
# Inform about debug info
|
||||||
|
LFLAGS += -g3 -gdwarf-2
|
||||||
|
|
||||||
|
# startup files
|
||||||
|
LIBSRCS += startup_XMC$(XMC_SERIES).c system_XMC$(XMC_SERIES).c
|
||||||
|
# minimal syscalls definition for gcc
|
||||||
|
LIBSRCS += syscalls.c
|
||||||
|
|
||||||
|
|
||||||
|
# convert srcs to respective build targets
|
||||||
|
OBJS = $(patsubst %.c,$(BUILDDIR)/%.o,$(SRCS))
|
||||||
|
LIBOBJS = $(patsubst %.c,$(LIB_BUILDDIR)/%.o,$(LIBSRCS))
|
||||||
|
|
||||||
|
.PHONY: default program debug clean
|
||||||
|
|
||||||
|
PARENT_DIR := $(notdir $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/../))
|
||||||
|
NOT_PACKED := $(shell cd ..; ls | grep -xv "Part[A-Z]")
|
||||||
|
_PACKED := $(shell cd ..; ls */*/*.elf | tr "/" "\n" | grep "Part")
|
||||||
|
PACKED := $(patsubst %,../%,$(_PACKED))
|
||||||
|
|
||||||
|
ifneq ($(NOT_PACKED),)
|
||||||
|
NOT_PACKING_STRING_1 := "NOTE: NOT PACKING THE FOLLOWING FILES: "
|
||||||
|
NOT_PACKING_STRING_2 := "(if you want to submit them, rename to 'Part[A-Z]' and make sure your *.elf is present): "
|
||||||
|
endif
|
||||||
|
|
||||||
|
default: $(BUILDDIR)/main.elf $(BUILDDIR)/main.lst
|
||||||
|
|
||||||
|
program: $(BUILDDIR)/main.hex $(BUILDDIR)/JLinkCommands
|
||||||
|
JLinkExe -Device XMC$(XMC_SERIES) -If SWD -Speed 1000 -CommanderScript $(BUILDDIR)/JLinkCommands
|
||||||
|
|
||||||
|
debug: $(BUILDDIR)/main.elf $(BUILDDIR)/GDBCommands
|
||||||
|
echo "##### Debug session started at $(date) #####" >JLinkLog
|
||||||
|
JLinkGDBServer -device XMC$(XMC_SERIES) -endian little -if SWD -speed 1000 -halt -logtofile -log JLinkLog -silent -vd &
|
||||||
|
sleep 1
|
||||||
|
sh -ci "$(DB) -command=$(BUILDDIR)/GDBCommands -tui"
|
||||||
|
killall JLinkGDBServer
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.bin: $(BUILDDIR)/%.elf
|
||||||
|
$(OC) -O binary $< $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.hex: $(BUILDDIR)/%.elf
|
||||||
|
$(OC) -O ihex $< $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.lst: $(BUILDDIR)/%.elf
|
||||||
|
$(OD) -h -S $< > $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.elf: $(OBJS) $(LIBOBJS) $(BUILDDIR)/$(LD_NAME).ld
|
||||||
|
$(LD) $(LFLAGS) -o $@ $(OBJS) $(LIBOBJS) $(LIBLNK)
|
||||||
|
$(SZ) $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.o: %.c $(HDRS) | $(BUILDDIR)
|
||||||
|
echo "building $@"
|
||||||
|
$(CC) $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
$(LIB_BUILDDIR)/%.o: %.c | $(LIB_BUILDDIR)
|
||||||
|
echo "building $@"
|
||||||
|
$(CC) $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
# startup
|
||||||
|
$(LIB_BUILDDIR)/startup_XMC$(XMC_SERIES).o: $(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Source/GCC/startup_XMC$(XMC_SERIES).S | $(LIB_BUILDDIR)
|
||||||
|
$(CC) $(SFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
# When copying the linker description file, first try to copy one created by the student (and don't
|
||||||
|
# complain if it does not exist), otherwise use the one from the library
|
||||||
|
$(BUILDDIR)/$(LD_NAME).ld: $(XMC_LIBDIR)/CMSIS/Infineon/XMC$(XMC_SERIES)_series/Source/GCC/XMC$(XMC_SERIES)x$(XMC_SIZE).ld | $(BUILDDIR)
|
||||||
|
cp -pu $(LD_NAME).ld $@ | true
|
||||||
|
cp -n --preserve=timestamps $< $@
|
||||||
|
|
||||||
|
$(BUILDDIR):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
$(LIB_BUILDDIR):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
# Write a script file for JLinkExe
|
||||||
|
$(BUILDDIR)/JLinkCommands: | $(BUILDDIR)
|
||||||
|
echo "h;loadfile ${BUILDDIR}/main.hex;r;g;q;" | sed 's/;/\n/g' > $(BUILDDIR)/JLinkCommands
|
||||||
|
|
||||||
|
# Write a script file for GDB
|
||||||
|
$(BUILDDIR)/GDBCommands: | $(BUILDDIR)
|
||||||
|
echo "file ${BUILDDIR}/main.elf;target remote localhost:2331;monitor reset;load;break main;" | sed 's/;/\n/g' > $(BUILDDIR)/GDBCommands
|
||||||
|
|
||||||
|
deliverable:
|
||||||
|
@echo "packing deliverable"
|
||||||
|
@echo $(NOT_PACKING_STRING_1)
|
||||||
|
@echo $(NOT_PACKED)
|
||||||
|
@echo $(NOT_PACKING_STRING_2)
|
||||||
|
@echo ""
|
||||||
|
@zip ../$(PARENT_DIR).zip -r $(PACKED)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)
|
||||||
|
|
||||||
|
clean_all:
|
||||||
|
rm -rf $(BUILDDIR) $(LIB_BUILDDIR)
|
||||||
|
|
48
dimming.c
Executable file
48
dimming.c
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#include <xmc_common.h>
|
||||||
|
|
||||||
|
void initCCU4(void);
|
||||||
|
void connectLED(void);
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
|
||||||
|
initCCU4();
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initCCU4() {
|
||||||
|
// step2: release reset of CCU40, all following lines are equal
|
||||||
|
//*(0x500414) = 0b100;
|
||||||
|
// SCU_RESET->PRCLR0 = 0b100;
|
||||||
|
SCU_RESET->PRCLR0 = SCU_RESET_PRCLR0_CCU40RS_Msk;
|
||||||
|
|
||||||
|
// step 3
|
||||||
|
SCU_CLK->CLKSET = SCU_CLK_CLKSET_CCUCEN_Msk;
|
||||||
|
|
||||||
|
// step 4
|
||||||
|
CCU40->GIDLC = CCU4_GIDLC_SPRB_Msk;
|
||||||
|
|
||||||
|
// step 6: period value & compare value for PWM
|
||||||
|
// choose 0xffff to be most flexible & granular
|
||||||
|
CCU40_CC42->PRS = 0xffff;
|
||||||
|
// CCU40_CC42->PSC = 0b1010;
|
||||||
|
CCU40_CC42->CRS = 0xffff * (1 - 0.1);
|
||||||
|
CCU40->GCSS = CCU4_GCSS_S2SE_Msk;
|
||||||
|
|
||||||
|
// connect led before CCU is started
|
||||||
|
connectLED();
|
||||||
|
|
||||||
|
// step 8
|
||||||
|
CCU40->GIDLC = CCU4_GIDLC_CS2I_Msk;
|
||||||
|
|
||||||
|
// step 9
|
||||||
|
CCU40_CC42->TCSET = CCU4_CC4_TCSET_TRBS_Msk;
|
||||||
|
}
|
||||||
|
|
||||||
|
void connectLED() {
|
||||||
|
const static uint8_t ALT3 = 0b10011;
|
||||||
|
PORT1->IOCR0 =
|
||||||
|
(PORT1->IOCR0 & ~PORT0_IOCR0_PC1_Msk) | (ALT3 << PORT0_IOCR0_PC1_Pos);
|
||||||
|
}
|
26
student.mk
Executable file
26
student.mk
Executable file
|
@ -0,0 +1,26 @@
|
||||||
|
##### Student Makefile for the ESS deliverables #####
|
||||||
|
# Change this file to match your requirements
|
||||||
|
|
||||||
|
# Name of your project
|
||||||
|
LD_NAME = dimming
|
||||||
|
|
||||||
|
# Add lists of space separated source files
|
||||||
|
# Own sources, e.g. main.c
|
||||||
|
SRCS = dimming.c
|
||||||
|
# Library sources, e.g. xmc_gpio.c
|
||||||
|
LIBSRCS =
|
||||||
|
# Precompiled libraries, e.g. -lm for math functions
|
||||||
|
LIBLNK =
|
||||||
|
|
||||||
|
# Change this line if the path to your XMC-Library differs, it will be overwritten before grading to
|
||||||
|
# match the system the grading is performed on.
|
||||||
|
XMC_LIBDIR = /home/ghoscht/Coding/embedded/ccu/xmclib/
|
||||||
|
|
||||||
|
# Language dialect
|
||||||
|
SCFLAGS = -std=gnu99
|
||||||
|
# Optimization level, remember that enabling optimization will stirr up the assembly code and thus
|
||||||
|
# debugging is more difficult
|
||||||
|
SCFLAGS += -O0
|
||||||
|
# If you like, you can enable even more warnings, e.g. -Wextra, but for grading -Wall will be used
|
||||||
|
SCFLAGS +=
|
||||||
|
|
1
xmclib
Submodule
1
xmclib
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5fd71915274f4f9bfdab552d301f5f3bc99134c1
|
Loading…
Reference in a new issue