From 4baa62ef9a587e60b60be93bf24ef50047d3544f Mon Sep 17 00:00:00 2001 From: Ajit Ananthadevan Date: Wed, 20 Aug 2025 21:26:12 +1000 Subject: [PATCH] add pcf8574 --- myapps/misc/pcf8574-blinky/Makefile | 166 ++++++++++++++++++++++++++ myapps/misc/pcf8574-blinky/src/main.c | 31 +++++ 2 files changed, 197 insertions(+) create mode 100644 myapps/misc/pcf8574-blinky/Makefile create mode 100644 myapps/misc/pcf8574-blinky/src/main.c diff --git a/myapps/misc/pcf8574-blinky/Makefile b/myapps/misc/pcf8574-blinky/Makefile new file mode 100644 index 0000000..ac11c38 --- /dev/null +++ b/myapps/misc/pcf8574-blinky/Makefile @@ -0,0 +1,166 @@ +###################################### +# target +###################################### +TARGET = ch592_blinky +# ../../ + + +###################################### +# building variables +###################################### +# debug build? +DEBUG = 1 +# optimization for size +OPT = -Os + + +####################################### +# paths +####################################### +# Build path +BUILD_DIR = build + +###################################### +# source +###################################### +# C sources +C_SOURCES = \ +src/main.c \ +../../../vendor/StdPeriphDriver/CH59x_clk.c \ +../../../vendor/StdPeriphDriver/CH59x_gpio.c \ +../../../vendor/StdPeriphDriver/CH59x_pwr.c \ +../../../vendor/StdPeriphDriver/CH59x_sys.c \ +../../../vendor/StdPeriphDriver/CH59x_i2c.c \ +../../../vendor/RVMSIS/core_riscv.c \ + + +# ASM sources +ASM_SOURCES = \ +../../../vendor/Startup/startup_CH592.S + +####################################### +# binaries +####################################### +#PREFIX = riscv-none-elf- +#PREFIX = riscv64-elf- +#debian +#PREFIX = riscv64-unknown-elf- +PREFIX = riscv-wch-elf- + +CC = $(PREFIX)gcc +AS = $(PREFIX)gcc -x assembler-with-cpp +CP = $(PREFIX)objcopy +SZ = $(PREFIX)size + +HEX = $(CP) -O ihex +BIN = $(CP) -O binary -S + +####################################### +# CFLAGS +####################################### +# cpu +CPU = -march=rv32imac_zicsr -mabi=ilp32 -msmall-data-limit=8 + +# For gcc version less than v12 +# CPU = -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 + +# fpu +FPU = + +# float-abi +FLOAT-ABI = + +# mcu +MCU = $(CPU) $(FPU) $(FLOAT-ABI) + +# AS includes +AS_INCLUDES = + +# C includes +C_INCLUDES = \ +-I../../../vendor/StdPeriphDriver/inc \ +-I../../../vendor/RVMSIS \ +-I../../../vendor/Core \ +-Isrc/include + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +CFLAGS = $(MCU) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +ifeq ($(DEBUG), 1) +CFLAGS += -g -gdwarf-2 +endif + + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + + +####################################### +# LDFLAGS +####################################### +# link script +LDSCRIPT = ../../../vendor/Ld/Link.ld + +# libraries +LIBS = -lc -lm -lnosys ../../../vendor/StdPeriphDriver/libISP592.a +LIBDIR = +LDFLAGS = $(MCU) -mno-save-restore -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -T $(LDSCRIPT) -nostartfiles -Xlinker --gc-sections -Wl,-Map=$(BUILD_DIR)/$(TARGET).map --specs=nano.specs $(LIBS) + +# default action: build all +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + + +####################################### +# build the application +####################################### +# list of objects +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) + +# list of ASM program objects +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.S=.o))) +vpath %.S $(sort $(dir $(ASM_SOURCES))) + +$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) + $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ + +$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR) + $(AS) -c $(CFLAGS) $< -o $@ +#$(LUAOBJECTS) $(OBJECTS) +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + $(SZ) $@ + +$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(HEX) $< $@ + +$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(BIN) $< $@ + +$(BUILD_DIR): + mkdir $@ + +####################################### +# Program +####################################### + +isp: $(BUILD_DIR)/$(TARGET).bin + wchisp flash $(BUILD_DIR)/$(TARGET).bin + +flash: $(BUILD_DIR)/$(TARGET).bin + wlink flash $(BUILD_DIR)/$(TARGET).bin + +####################################### +# clean up +####################################### +clean: + -rm -fR $(BUILD_DIR) + +####################################### +# dependencies +####################################### +-include $(wildcard $(BUILD_DIR)/*.d) + +# *** EOF *** diff --git a/myapps/misc/pcf8574-blinky/src/main.c b/myapps/misc/pcf8574-blinky/src/main.c new file mode 100644 index 0000000..b36a131 --- /dev/null +++ b/myapps/misc/pcf8574-blinky/src/main.c @@ -0,0 +1,31 @@ +// LED on PORT0 + + +#include "CH59x_common.h" + + +int main() +{ + SetSysClock(CLK_SOURCE_PLL_60MHz); + + I2C_Init(I2C_Mode_I2C, 100000, I2C_DutyCycle_16_9, + I2C_Ack_Enable, I2C_AckAddr_7bit, 0x0001); + + I2C_GenerateSTART(ENABLE); + while (!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT)); + I2C_Send7bitAddress(0x40, I2C_Direction_Transmitter); + while (!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); + I2C_SendData(0x01); + while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); + //I2C_GenerateSTOP(ENABLE); + + while (1) { + mDelaymS(400); + I2C_SendData(0x00); + while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); + mDelaymS(100); + I2C_SendData(0x01); + while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); + } +} +