diff options
Diffstat (limited to 'stm32')
36 files changed, 0 insertions, 3019 deletions
diff --git a/stm32/.gitignore b/stm32/.gitignore deleted file mode 100644 index 08e4672..0000000 --- a/stm32/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -.gitmodules -*.o -*.d -*.map -*.hex -*.elf -*.swp -*~ -*.dfu -plot/data -plot/script -*.bin -scmversion -commit.h -opencm3.build.stamp -*.orig diff --git a/stm32/Makefile b/stm32/Makefile deleted file mode 100644 index e1cd497..0000000 --- a/stm32/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -default: - make -C libopencm3 - make -C app - -clean: - make -C libopencm3 clean - make -C app clean diff --git a/stm32/Makefile.include b/stm32/Makefile.include deleted file mode 100644 index 4f5cbd9..0000000 --- a/stm32/Makefile.include +++ /dev/null @@ -1,44 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de> -## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net> -## -## This library is free software: you can redistribute it and/or modify -## it under the terms of the GNU Lesser General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public License -## along with this library. If not, see <http://www.gnu.org/licenses/>. -## - -LIBNAME = opencm3_stm32f1 -DEFS = -DSTM32F1 - -FP_FLAGS ?= -msoft-float -ARCH_FLAGS = -mthumb -mcpu=cortex-m3 $(FP_FLAGS) -mfix-cortex-m3-ldrd - -################################################################################ -# OpenOCD specific variables - -OOCD ?= openocd -OOCD_INTERFACE ?= interface/stlink-v2.cfg -OOCD_BOARD ?= target/stm32f1x.cfg - -################################################################################ -# Black Magic Probe specific variables -# Set the BMP_PORT to a serial port and then BMP is used for flashing -BMP_PORT ?= - -################################################################################ -# texane/stlink specific variables -#STLINK_PORT ?= :4242 - - -include ../Makefile.rules diff --git a/stm32/Makefile.rules b/stm32/Makefile.rules deleted file mode 100644 index a723e6f..0000000 --- a/stm32/Makefile.rules +++ /dev/null @@ -1,261 +0,0 @@ -# -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de> -## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net> -## Copyright (C) 2013 Frantisek Burian <BuFran@seznam.cz> -## -## This library is free software: you can redistribute it and/or modify -## it under the terms of the GNU Lesser General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public License -## along with this library. If not, see <http://www.gnu.org/licenses/>. -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -NULL := 2>/dev/null -endif - -############################################################################### -# Executables - -PREFIX ?= arm-none-eabi - -CC := $(PREFIX)-gcc -CXX := $(PREFIX)-g++ -LD := $(PREFIX)-gcc -AR := $(PREFIX)-ar -AS := $(PREFIX)-as -OBJCOPY := $(PREFIX)-objcopy -OBJDUMP := $(PREFIX)-objdump -GDB := $(PREFIX)-gdb -STFLASH = $(shell which st-flash) -STYLECHECK := /checkpatch.pl -STYLECHECKFLAGS := --no-tree -f --terse --mailback -STYLECHECKFILES := $(shell find . -name '*.[ch]') - - -############################################################################### -# Source files - -LDSCRIPT ?= $(BINARY).ld - -#OBJS += $(BINARY).o - - -ifeq ($(strip $(OPENCM3_DIR)),) -# user has not specified the library path, so we try to detect it - -# where we search for the library -LIBPATHS := ./libopencm3 ../libopencm3 - -OPENCM3_DIR := $(wildcard $(LIBPATHS:=/locm3.sublime-project)) -OPENCM3_DIR := $(firstword $(dir $(OPENCM3_DIR))) - -ifeq ($(strip $(OPENCM3_DIR)),) -$(warning Cannot find libopencm3 library in the standard search paths.) -$(error Please specify it through OPENCM3_DIR variable!) -endif -endif - -ifeq ($(V),1) -$(info Using $(OPENCM3_DIR) path to library) -endif - -INCLUDE_DIR = $(OPENCM3_DIR)/include -LIB_DIR = $(OPENCM3_DIR)/lib -SCRIPT_DIR = $(OPENCM3_DIR)/scripts - -############################################################################### -# C flags - -CFLAGS += -Os -g -CFLAGS += -Wextra -Wimplicit-function-declaration -CFLAGS += -Wmissing-prototypes -Wstrict-prototypes -CFLAGS += -fno-common -ffunction-sections -fdata-sections - -############################################################################### -# C++ flags - -CXXFLAGS += -Os -g -CXXFLAGS += -Wextra -Wshadow -Wredundant-decls -Weffc++ -CXXFLAGS += -fno-common -ffunction-sections -fdata-sections - -############################################################################### -# C & C++ preprocessor common flags - -CPPFLAGS += -MD -CPPFLAGS += -Wall -Wundef - -INCLUDES = -I$(INCLUDE_DIR) -DEFINES = $(DEFS) - -CPPFLAGS += $(INCLUDES) $(DEFINES) - -############################################################################### -# Linker flags - -LDFLAGS += --static -nostartfiles -LDFLAGS += -L$(LIB_DIR) -LDFLAGS += -T$(LDSCRIPT) -LDFLAGS += -Wl,-Map=$(*).map -LDFLAGS += -Wl,--gc-sections -ifeq ($(V),99) -LDFLAGS += -Wl,--print-gc-sections -endif - -############################################################################### -# Used libraries - -LDLIBS += -l$(LIBNAME) -LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group - -############################################################################### -############################################################################### -############################################################################### - -.SUFFIXES: .elf .bin .hex .srec .list .map .images .dfu -.SECONDEXPANSION: -.SECONDARY: - -all: elf - - -elf: $(BINARY).elf -bin: $(BINARY).bin -hex: $(BINARY).hex -srec: $(BINARY).srec -list: $(BINARY).list - -images: $(BINARY).images -flash: $(BINARY).flash - -%.images: %.bin %.hex %.srec %.list %.map %.dfu - @#printf "*** $* images generated ***\n" - -%.bin: %.elf - @#printf " OBJCOPY $(*).bin\n" - $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin - -%.hex: %.elf - @#printf " OBJCOPY $(*).hex\n" - $(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex - -%.dfu: %.elf - @#printf " OBJCOPY $(*).dfu\n" - $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).dfu - -%.srec: %.elf - @#printf " OBJCOPY $(*).srec\n" - $(Q)$(OBJCOPY) -Osrec $(*).elf $(*).srec - -%.list: %.elf - @#printf " OBJDUMP $(*).list\n" - $(Q)$(OBJDUMP) -S $(*).elf > $(*).list - -fish: - echo %.elf %.map: $(OBJS) $(LDSCRIPT) $(LIB_DIR)/lib$(LIBNAME).a - echo $(BINARY).elf - -%.elf %.map: $(OBJS) $(LDSCRIPT) $(LIB_DIR)/lib$(LIBNAME).a - @#printf " LD $(*).elf\n" - $(Q)$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(*).elf - -%.o: %.c $(OPENCM3_DIR)/../opencm3.build.stamp - @#printf " CC $(*).c\n" - $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).c - -%.o: %.cxx $(OPENCM3_DIR)/../opencm3.build.stamp - @#printf " CXX $(*).cxx\n" - $(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cxx - -%.o: %.cpp $(OPENCM3_DIR)/../opencm3.build.stamp - @#printf " CXX $(*).cpp\n" - $(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cpp - -clean: - @#printf " CLEAN\n" - $(Q)$(RM) *.o *.d *.elf *.bin *.hex *.srec *.list *.map *~ *.dfu ${EXTRACLEANS} - -stylecheck: $(STYLECHECKFILES:=.stylecheck) -styleclean: $(STYLECHECKFILES:=.styleclean) - -# the cat is due to multithreaded nature - we like to have consistent chunks of text on the output -%.stylecheck: % - $(Q)$(SCRIPT_DIR)$(STYLECHECK) $(STYLECHECKFLAGS) $* > $*.stylecheck; \ - if [ -s $*.stylecheck ]; then \ - cat $*.stylecheck; \ - else \ - rm -f $*.stylecheck; \ - fi; - -%.styleclean: - $(Q)rm -f $*.stylecheck; - - -%.stlink-flash: %.bin - @printf " FLASH $<\n" - $(Q)$(STFLASH) write $(*).bin 0x8000000 - -ifeq ($(STLINK_PORT),) -ifeq ($(BMP_PORT),) -ifeq ($(OOCD_SERIAL),) -%.flash: %.hex - @printf " FLASH $<\n" - @# IMPORTANT: Don't use "resume", only "reset" will work correctly! - $(Q)$(OOCD) -f $(OOCD_INTERFACE) \ - -f $(OOCD_BOARD) \ - -c "init" -c "reset init" \ - -c "flash write_image erase $(*).hex" \ - -c "reset" \ - -c "shutdown" $(NULL) -else -%.flash: %.hex - @printf " FLASH $<\n" - @# IMPORTANT: Don't use "resume", only "reset" will work correctly! - $(Q)$(OOCD) -f $(OOCD_INTERFACE) \ - -f $(OOCD_BOARD) \ - -c "ft2232_serial $(OOCD_SERIAL)" \ - -c "init" -c "reset init" \ - -c "flash write_image erase $(*).hex" \ - -c "reset" \ - -c "shutdown" $(NULL) -endif -else -%.flash: %.elf - @printf " GDB $(*).elf (flash)\n" - $(Q)$(GDB) --batch \ - -ex 'target extended-remote $(BMP_PORT)' \ - -x $(SCRIPT_DIR)/black_magic_probe_flash.scr \ - $(*).elf -endif -else -%.flash: %.elf - @printf " GDB $(*).elf (flash)\n" - $(Q)$(GDB) --batch \ - -ex 'target extended-remote $(STLINK_PORT)' \ - -x $(SCRIPT_DIR)/stlink_flash.scr \ - $(*).elf -endif - -.PHONY: images clean stylecheck styleclean elf bin hex srec list - --include $(OBJS:.o=.d) - - -$(LIB_DIR)/lib$(LIBNAME).a: $(OPENCM3_DIR)/../opencm3.build.stamp - - -$(OPENCM3_DIR)/../opencm3.build.stamp: - ${MAKE} -C ${OPENCM3_DIR} - touch $@ - diff --git a/stm32/app/1wire.c b/stm32/app/1wire.c deleted file mode 100644 index c374c5c..0000000 --- a/stm32/app/1wire.c +++ /dev/null @@ -1,392 +0,0 @@ -#include "project.h" - -#define USART2_TX GPIO_USART2_TX -#define USART2_TX_PORT GPIOA - -#define BIT_ZERO '0' -#define BIT_ONE '1' -#define BIT_UNKNOWN 'U' -#define BIT_CONFLICT 'C' - - -static int poke; -static volatile unsigned exchange_timeout; - -void onewire_tick (void) -{ - static unsigned ticker; - - if (exchange_timeout) - exchange_timeout--; - - - ticker++; - - if (ticker < MS_TO_TICKS (5000)) - return; - - ticker = 0; - poke = 1; - - -} - - -static unsigned usart_send_ready (uint32_t usart) -{ - return (USART_SR (usart) & USART_SR_TXE); -} - - -static unsigned usart_recv_ready (uint32_t usart) -{ - return (USART_SR (usart) & USART_SR_RXNE); -} - - - -static int onewire_exchange (int tx, unsigned timeout) -{ - int rx; - (void) USART_SR (USART2); - (void) usart_recv (USART2); - - - exchange_timeout = MS_TO_TICKS (timeout); - - while (!usart_send_ready (USART2)) - if (!exchange_timeout) - return -1; - - usart_send (USART2, tx); - - exchange_timeout = MS_TO_TICKS (timeout); - - while (!usart_recv_ready (USART2)) - if (!exchange_timeout) - return -1; - - - rx = usart_recv (USART2); - - return rx; - -} - -/* returns 1 if nothing on bus or error */ -int -onewire_reset (void) -{ - int ret; - - usart_set_baudrate (USART2, 9600); - delay_ms (1); - ret = onewire_exchange (0xf0, 60); - usart_set_baudrate (USART2, 115200); - delay_ms (1); - - return (ret == 0xf0); -} - -static void -onewire_one (void) -{ - onewire_exchange (0xff, 3); -} - -static void -onewire_zero (void) -{ - onewire_exchange (0x00, 3); -} - -static int -onewire_read (void) -{ - uint8_t rx; - - rx = onewire_exchange (0xff, 3); - - return (rx == 0xff); -} - - -void -onewire_write_byte (uint8_t v) -{ - int c; - - - for (c = 0; c < 8; ++c) { - if (v & 1) - onewire_one(); - else - onewire_zero(); - - v >>= 1; - } -} - -uint8_t -onewire_read_byte (void) -{ - uint8_t v = 0; - int c; - - - for (c = 0; c < 8; ++c) { - v >>= 1; - - if (onewire_read()) - v |= 0x80; - } - - - return v; -} - - - -void -onewire_read_bytes (uint8_t *buf, int n) -{ - while (n--) - * (buf++) = onewire_read_byte(); -} - - -void -onewire_write_bytes (const uint8_t *buf, int n) -{ - while (n--) - onewire_write_byte (* (buf++)); -} - - -int onewire_select (const Onewire_addr *a) -{ - if (!a) - onewire_write_byte (ONEWIRE_SKIP_ROM); - else { - onewire_write_byte (ONEWIRE_MATCH_ROM); - onewire_write_bytes (a->a, 8); - } - - return 0; -} - - -int onewire_reset_and_select (const Onewire_addr *a) -{ - if (onewire_reset()) - return 1; - - if (onewire_select (a)) - return 1; - - return 0; -} - - - -int onewire_wait_complete (unsigned timeout) -{ - while (! (onewire_read())) { - delay_ms (10); - - if (! (timeout--)) - return 1; - } - - return 0; -} - - - -int -onewire_check_crc (uint8_t *buf, int n, uint8_t v) -{ - uint8_t crc = 0; - int i; - - while (n--) { - uint8_t v = * (buf++); - - for (i = 0; i < 8; ++i) { - uint8_t mix = (crc ^ v) & 0x01; - crc >>= 1; - - if (mix) - crc ^= 0x8C; - - v >>= 1; - } - } - - return ! (crc == v); - -} - -static int onewire_conduct_search (uint8_t *bits) -{ - unsigned i, ir, r; - - if (onewire_reset()) - return -1; - - onewire_write_byte (ONEWIRE_SEARCH_ROM); - - - for (i = 0; i < 64; ++i) { - - r = onewire_read(); - ir = onewire_read(); - -#if 0 - - if ((i == 27) || (i == 24) || (i == 39)) - ir = r = 0; - -#endif - - switch (bits[i]) { - case BIT_UNKNOWN: - - if (!r && ir) { /* Zero */ - bits[i] = BIT_ZERO; - onewire_zero(); - } else if (r && !ir) { /*One */ - bits[i] = BIT_ONE; - onewire_one(); - } else if (r && ir) { /*Nothing here */ - //MEH; - return -1; - } else if (!r && !ir) { /*Both */ - bits[i] = BIT_CONFLICT; - onewire_zero(); - } - - break; - - case BIT_CONFLICT: - if (!r && !ir) /*Both */ - onewire_zero(); - else { - //MEH; - return -1; - } - - break; - - case BIT_ZERO: - if (!r) - onewire_zero(); - else { - //MEH; - return -1; - } - - break; - - case BIT_ONE: - if (!ir) - onewire_one(); - else { - //MEH; - return -1; - } - - break; - } - } - - return 0; -} - -static int onewire_next (uint8_t *bits) -{ - unsigned i; - - for (i = 0; i < 64; ++i) { - - if (bits[63 - i] == BIT_CONFLICT) { - bits[63 - i] = BIT_ONE; - return 1; - } - - bits[63 - i] = BIT_UNKNOWN; - } - - return 0; -} - -static void onewire_bits_to_a (uint8_t *bits, Onewire_addr *a) -{ - unsigned i, j, c; - - for (i = 0, j = 0; i < 8; ++i) { - - a->a[i] = 0; - - for (c = 1; c < 0x100; c <<= 1, ++j) { - if (bits[j] == BIT_ONE) - a->a[i] |= c; - } - } -} - -int onewire_search (void) -{ - uint8_t bits[64]; - Onewire_addr a; - int r, c; - - delay_ms (2000); - - memset (bits, BIT_UNKNOWN, sizeof (bits)); - - do { - r = onewire_conduct_search (bits); - - if (!r) { - onewire_bits_to_a (bits, &a); - c = onewire_check_crc (&a.a[0], 7, a.a[7]); - - if (!c) { - printf ("QO: {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}\r\n", - a.a[0], - a.a[1], - a.a[2], - a.a[3], - a.a[4], - a.a[5], - a.a[6], - a.a[7]); - } - - } - - } while (onewire_next (bits)); - - - return 0; -} - - - -void -onewire_init (void) -{ - MAP_AF_OD (USART2_TX); - - usart_set_baudrate (USART2, 115200); - usart_set_databits (USART2, 8); - usart_set_stopbits (USART2, USART_STOPBITS_1); - usart_set_parity (USART2, USART_PARITY_NONE); - usart_set_flow_control (USART2, USART_FLOWCONTROL_NONE); - usart_set_mode (USART2, USART_MODE_TX_RX); - - USART_CR3 (USART2) |= USART_CR3_HDSEL; - - usart_enable (USART2); -} diff --git a/stm32/app/1wire.h b/stm32/app/1wire.h deleted file mode 100644 index 4a31418..0000000 --- a/stm32/app/1wire.h +++ /dev/null @@ -1,10 +0,0 @@ -#define ONEWIRE_SKIP_ROM 0xcc -#define ONEWIRE_SEARCH_ROM 0xf0 -#define ONEWIRE_MATCH_ROM 0x55 - -#define ONEWIRE_ADDR_LEN 8 -typedef struct { - uint8_t a[ONEWIRE_ADDR_LEN]; -} Onewire_addr; - - diff --git a/stm32/app/Makefile b/stm32/app/Makefile deleted file mode 100644 index d4a4f5b..0000000 --- a/stm32/app/Makefile +++ /dev/null @@ -1,132 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de> -## -## This library is free software: you can redistribute it and/or modify -## it under the terms of the GNU Lesser General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public License -## along with this library. If not, see <http://www.gnu.org/licenses/>. -## - -CPROTO=cproto -PROG=boiler - -CSRCS=main.c ot.c ot_phy_rx.c ot_phy_tx.c led.c ticker.c usart.c ring.c stdio.c util.c commit.c cmd.c pic.c 1wire.c temp.c ds1820.c pressure.c adc.c -HSRCS=pins.h project.h ring.h - -EXTRACLEANS=*.orig scmversion commit.h - - - - -TARGET=10.32.96.18 -#TARGET2=10.32.96.107 - -#soup: ${PROG}.hex -# rsync -vaP ${PROG}.hex ${TARGET2}:/tmp/boiler.hex -# RV=$$(arm-none-eabi-objdump --disassemble=reset_handler ${PROG}.elf | awk '/^0/ { print "0x"$$1 }') && \ -# ssh ${TARGET2} "$(OOCD) -f $(OOCD_INTERFACE) \ -# -f $(OOCD_BOARD) \ -# -c init -c \"reset init\" \ -# -c \"flash write_image erase /tmp/boiler.hex\" \ -# -c \"reset halt\" \ -# -c \"resume $${RV}\" \ -# -c shutdown" $(NULL) && \ -# echo reset_handler is at $${RV} -# - - - -V=1 -default: ${PROG}.fw.bin - rsync -vaP ${PROG}.fw.bin ${TARGET}:/tmp/boiler.fw - ssh ${TARGET} /etc/stm32/startup /tmp/boiler.fw - - -install: ${PROG}.fw.bin - rsync -vaP ${PROG}.fw.bin ${TARGET}:/etc/stm32/boiler.fw - - -128k_of_ff.bin: - dd if=/dev/zero bs=128k count=1 | tr '\0' '\377' > $@ - - -${PROG}.fw.bin:${PROG}.bin 128k_of_ff.bin - cat ${PROG}.bin 128k_of_ff.bin | dd of=$@ bs=128k iflag=fullblock count=1 - - -program: ${PROG}.elf - echo halt | nc -t localhost 4444 - echo flash write_image erase ${PWD}/$< 0x2000 | nc -t localhost 4444 - echo reset halt | nc -t localhost 4444 - RV=$$(arm-none-eabi-objdump --disassemble=reset_handler $< | awk '/^0/ { print "0x"$$1 }') && \ - echo resume $${RV} | nc -t localhost 4444 && \ - echo reset vector at $${RV} - -run:${PROG}.run - -%.run: %.hex - RV=$$(arm-none-eabi-objdump --disassemble=reset_handler $(*).elf | awk '/^0/ { print "0x"$$1 }') && \ - $(Q)$(OOCD) -f $(OOCD_INTERFACE) \ - -f $(OOCD_BOARD) \ - -c "init" -c "reset init" \ - -c "flash write_image erase $(*).hex" \ - -c "reset halt" \ - -c "resume $${RV}" \ - -c "shutdown" $(NULL) && \ - echo reset_handler is at $${RV} - - - - -BINARY = ${PROG} -OBJS = ${CSRCS:%.c=%.o} - -include ../Makefile.include - -CFLAGS+=-Wno-redundant-decls -Wno-unused-parameter -DDEBUG - -INCLUDES += -I.. - -protos: - echo -n > prototypes.h - ${CPROTO} $(INCLUDES) $(DEFINES) -e -v ${CSRCS} > prototypes.h.tmp - mv -f prototypes.h.tmp prototypes.h - -server: - $(OOCD) -f $(OOCD_INTERFACE) \ - -f $(OOCD_BOARD) - -debug: ${PROG}.elf - ${PREFIX}-gdb -x gdb.script ${PROG}.elf - -tidy: - astyle -A3 -s2 --attach-extern-c -L -c -w -Y -m0 -f -p -H -U -k3 -xj -xd ${CSRCS} ${HSRCS} - -HEAD_REF = $(shell git rev-parse --verify --short HEAD) -SCM_DIRTY = $(shell if ! git diff-index --quiet HEAD --; then echo "+dirty"; fi) -SCMVERSION = ${HEAD_REF}${SCM_DIRTY} - -scmversion: - echo -n ${SCMVERSION} > $@ - -.PHONY: scmversion - -commit.o: commit.h - -commit.h: scmversion - echo -n '#define COMMIT_ID "' > $@ - echo -n `cat scmversion` >> $@ - echo '"' >> $@ - - - diff --git a/stm32/app/adc.c b/stm32/app/adc.c deleted file mode 100644 index ee6a4f3..0000000 --- a/stm32/app/adc.c +++ /dev/null @@ -1,121 +0,0 @@ -#include "project.h" - -#define T do { printf("%s:%d\r\n",__FILE__,__LINE__); } while (0) - -void adc_dump (void) -{ - printf ("ADC_SR %x ADC_CR1 %x ADC_CR2 %x\r\n", (unsigned) ADC_SR (ADC1), - (unsigned) ADC_CR1 (ADC1), - (unsigned) ADC_CR2 (ADC1)); - -} - - -volatile unsigned timeout; - - -void adc_tick (void) -{ - if (timeout) timeout--; -} - - -static int adc_wait (volatile uint32_t *reg, uint32_t wait_while_set, uint32_t wait_while_clear, unsigned ms) -{ - timeout = MS_TO_TICKS (ms); - - - while ((*reg) & wait_while_set) - if (!timeout) { - printf ("QADC timeout\r\n"); - return -1; - } - - - while ((~ (*reg)) & wait_while_clear) - if (!timeout) { - printf ("QADC timeout\r\n"); - return -1; - } - - - return 0; -} - - - -int adc_calibrate (void) -{ - adc_off (ADC1); - adc_power_on (ADC1); - delay_ms (5); - - ADC_CR2 (ADC1) |= ADC_CR2_RSTCAL; - - if (adc_wait (&ADC_CR2 (ADC1), ADC_CR2_CAL, 0, 2)) return -1; - - ADC_CR2 (ADC1) |= ADC_CR2_CAL; - - if (adc_wait (&ADC_CR2 (ADC1), ADC_CR2_CAL, 0, 2)) return -1; - - return 0; -} - - - - -unsigned adc_convert (unsigned channel) -{ - uint8_t ch = channel; - - adc_calibrate(); - - adc_set_regular_sequence (ADC1, 1, &ch); - - /* Start conversion on regular channels. */ - ADC_CR2 (ADC1) |= ADC_CR2_SWSTART; - - if (adc_wait (&ADC_CR2 (ADC1), ADC_CR2_SWSTART, 0, 2)) - return 0; - - if (adc_wait (&ADC_SR (ADC1), 0, ADC_SR_EOC, 2)) - return 0; - - return adc_read_regular (ADC1); -} - -void adc_init (void) -{ - /* main set ADC clock is 9Mhz */ - - adc_dump(); - - adc_off (ADC1); - rcc_periph_clock_enable (RCC_ADC1); -#if 0 - rcc_peripheral_reset (&RCC_APB2RSTR, RCC_APB2RSTR_ADC1RST); - rcc_peripheral_clear_reset (&RCC_APB2RSTR, RCC_APB2RSTR_ADC1RST); -#endif - - adc_set_dual_mode (ADC_CR1_DUALMOD_IND); - adc_disable_scan_mode (ADC1); - adc_enable_temperature_sensor (ADC1); - adc_set_single_conversion_mode (ADC1); - - adc_set_sample_time (ADC1, ADC_CHANNEL0, ADC_SMPR_SMP_239DOT5CYC); - adc_set_sample_time (ADC1, ADC_CHANNEL17, ADC_SMPR_SMP_239DOT5CYC); /*Want 17.1uS , which is 154 cycles */ - adc_enable_external_trigger_regular (ADC1, ADC_CR2_EXTSEL_SWSTART); - - adc_set_right_aligned (ADC1); - - - adc_dump(); - - adc_calibrate(); - - adc_dump(); - - - -} - diff --git a/stm32/app/boiler.ld b/stm32/app/boiler.ld deleted file mode 100644 index e15beca..0000000 --- a/stm32/app/boiler.ld +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -/* Linker script for Olimex STM32-H103 (STM32F103RBT6, 128K flash, 20K RAM). */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K -} - -/* Include the common ld script. */ -INCLUDE libopencm3_stm32f1.ld - diff --git a/stm32/app/cmd.c b/stm32/app/cmd.c deleted file mode 100644 index 7e1975a..0000000 --- a/stm32/app/cmd.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "project.h" - - -static void cmd_dispatch (char *cmd) -{ - - printf ("Q received cmd %s\r\n", cmd); - - if (!strncmp (cmd, "CH=", 3)) { - ot_override_ch = atoi (cmd + 3); - printf ("Q CH override set to %d\r\n", ot_override_ch); - } - - - if (!strncmp (cmd, "DHW=", 4)) { - ot_override_dhw = atoi (cmd + 4); - printf ("Q DHW override set to %d\r\n", ot_override_dhw); - } - - if (!strcmp (cmd, "PIC")) { - ot_override_dhw = atoi (cmd + 4); - printf ("Q Entering PIC mode, reset to leave\r\n"); - pic_passthru(); - } - -} - - -void cmd_usart_dispatch (void) -{ - static char cmd[16]; - static unsigned cmd_ptr; - - uint8_t c; - - if (ring_read_byte (&rx1_ring, &c)) - return; - - - if ((c == '\n') || (c == '\r')) { - if (cmd_ptr) - cmd_dispatch (cmd); - - cmd_ptr = 0; - return; - } - - - if (cmd_ptr < (sizeof (cmd) - 1)) { - cmd[cmd_ptr++] = c; - cmd[cmd_ptr] = 0; - } -} - - diff --git a/stm32/app/commit.c b/stm32/app/commit.c deleted file mode 100644 index 207448f..0000000 --- a/stm32/app/commit.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "commit.h" - -char scm_version[] = COMMIT_ID; diff --git a/stm32/app/ds1820.c b/stm32/app/ds1820.c deleted file mode 100644 index 200f4b7..0000000 --- a/stm32/app/ds1820.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "project.h" - -#define DS1820_READ_SCRATCHPAD 0xbe -#define DS1820_CONVERT_T 0x44 - - -#define TIMEOUT 150 - - - -static unsigned extract_leu16 (uint8_t *d) -{ - uint32_t u; - - u = (uint32_t) d[0] | (((uint32_t) d[1]) << 8); - return u; -} - - - -static int extract_les16 (uint8_t *d) -{ - uint32_t u; - u = extract_leu16 (d); - - if (u & 0x8000) u |= 0xffff0000; - - return (int) u; -} - - - - - -static int -ds1820_read_sp (const Onewire_addr *a, unsigned page, uint8_t *buf, unsigned len) -{ - if (onewire_reset_and_select (a)) - return ~0U; - - onewire_write_byte (DS1820_READ_SCRATCHPAD); - onewire_read_bytes (buf, len); - - if ((len == 9) && onewire_check_crc (buf, 8, buf[8])) - return ~0U; - - return 0; -} - - - -static int ds1820_convert_t (const Onewire_addr *a) -{ - - if (onewire_reset_and_select (a)) - return ~0U; - - onewire_write_byte (DS1820_CONVERT_T); - - if (onewire_wait_complete (TIMEOUT)) - return ~0U; - - return 0; -} - -int -ds1820_read (const Onewire_addr *a, int *temp) -{ - uint8_t buf[9]; - int t; - - if (ds1820_read_sp (a, 0, buf, 9)) - return 1; - - if (ds1820_convert_t (a)) - return 1; - - if (ds1820_read_sp (a, 0, buf, 9)) - return 1; - - t = extract_les16 (&buf[0]); - - t <<= 4 ; - - if (temp) - *temp = t; - - - return 0; -} - - - diff --git a/stm32/app/gdb.script b/stm32/app/gdb.script deleted file mode 100644 index 7cf9d09..0000000 --- a/stm32/app/gdb.script +++ /dev/null @@ -1,2 +0,0 @@ -target remote localhost:3333 -cont diff --git a/stm32/app/led.c b/stm32/app/led.c deleted file mode 100644 index bdfd084..0000000 --- a/stm32/app/led.c +++ /dev/null @@ -1,101 +0,0 @@ -#include "project.h" - -#define LED_BOARD GPIO13 -#define LED_BOARD_PORT GPIOC - -#define LED_YELLOW GPIO11 -#define LED_YELLOW_PORT GPIOA - -#define LED_GREEN1 GPIO12 -#define LED_GREEN1_PORT GPIOA - -#define LED_GREEN2 GPIO15 -#define LED_GREEN2_PORT GPIOA - -#define LED_RED GPIO3 -#define LED_RED_PORT GPIOB - -static unsigned led, yellow; - - -void led_red_set (int i) -{ - if (i) - CLEAR (LED_RED); - else - SET (LED_RED); -} - -void led_green1_set (int i) -{ - if (i) - CLEAR (LED_GREEN1); - else - SET (LED_GREEN1); -} - -void led_green2_set (int i) -{ - if (i) - CLEAR (LED_GREEN2); - else - SET (LED_GREEN2); -} - -static void _led_yellow_set (int i) -{ - if (i) - CLEAR (LED_YELLOW); - else - SET (LED_YELLOW); -} - -static void led_board_set (int i) -{ - if (i) - CLEAR (LED_BOARD); - else - SET (LED_BOARD); -} - -void led_blink (void) -{ - led = MS_TO_TICKS (25); -} - - -void led_yellow_set (int i) -{ - yellow = !!i; -} - - -void -led_tick (void) -{ - if (led) { - led--; - - led_board_set (1); - _led_yellow_set (!yellow); - } else { - - led_board_set (0); - _led_yellow_set (yellow); - } -} - - -void -led_init (void) -{ - MAP_OUTPUT_PP (LED_BOARD); - MAP_OUTPUT_PP (LED_RED); - MAP_OUTPUT_PP (LED_GREEN1); - MAP_OUTPUT_PP (LED_GREEN2); - MAP_OUTPUT_PP (LED_YELLOW); - - CLEAR (LED_BOARD); -} - - diff --git a/stm32/app/main.c b/stm32/app/main.c deleted file mode 100644 index 70c22b2..0000000 --- a/stm32/app/main.c +++ /dev/null @@ -1,135 +0,0 @@ -#include "project.h" -extern uint32_t dfu_flag; - -extern volatile uint32_t vector_table[]; - - -void reset_hardware (void) -{ - int i; - - rcc_periph_reset_pulse (RST_OTGFS); - rcc_periph_reset_pulse (RST_ETHMAC); - rcc_periph_reset_pulse (RST_AFIO); - rcc_periph_reset_pulse (RST_GPIOA); - rcc_periph_reset_pulse (RST_GPIOB); - rcc_periph_reset_pulse (RST_GPIOC); - rcc_periph_reset_pulse (RST_GPIOD); - rcc_periph_reset_pulse (RST_GPIOE); - rcc_periph_reset_pulse (RST_GPIOF); - rcc_periph_reset_pulse (RST_GPIOG); - rcc_periph_reset_pulse (RST_ADC1); - rcc_periph_reset_pulse (RST_ADC2); - rcc_periph_reset_pulse (RST_TIM1); - rcc_periph_reset_pulse (RST_SPI1); - rcc_periph_reset_pulse (RST_TIM8); - rcc_periph_reset_pulse (RST_USART1); - rcc_periph_reset_pulse (RST_ADC3); - rcc_periph_reset_pulse (RST_TIM15); - rcc_periph_reset_pulse (RST_TIM16); - rcc_periph_reset_pulse (RST_TIM17); - rcc_periph_reset_pulse (RST_TIM9); - rcc_periph_reset_pulse (RST_TIM10); - rcc_periph_reset_pulse (RST_TIM11); - rcc_periph_reset_pulse (RST_TIM2); - rcc_periph_reset_pulse (RST_TIM3); - rcc_periph_reset_pulse (RST_TIM4); - rcc_periph_reset_pulse (RST_TIM5); - rcc_periph_reset_pulse (RST_TIM6); - rcc_periph_reset_pulse (RST_TIM7); - rcc_periph_reset_pulse (RST_TIM12); - rcc_periph_reset_pulse (RST_TIM13); - rcc_periph_reset_pulse (RST_TIM14); - rcc_periph_reset_pulse (RST_WWDG); - rcc_periph_reset_pulse (RST_SPI2); - rcc_periph_reset_pulse (RST_SPI3); - rcc_periph_reset_pulse (RST_USART2); - rcc_periph_reset_pulse (RST_USART3); - rcc_periph_reset_pulse (RST_UART4); - rcc_periph_reset_pulse (RST_UART5); - rcc_periph_reset_pulse (RST_I2C1); - rcc_periph_reset_pulse (RST_I2C2); - rcc_periph_reset_pulse (RST_USB); - rcc_periph_reset_pulse (RST_CAN); - rcc_periph_reset_pulse (RST_CAN1); - rcc_periph_reset_pulse (RST_CAN2); - rcc_periph_reset_pulse (RST_BKP); - rcc_periph_reset_pulse (RST_PWR); - rcc_periph_reset_pulse (RST_DAC); - rcc_periph_reset_pulse (RST_CEC); - - - for (i = 0; i < NVIC_IRQ_COUNT; ++i) - nvic_disable_irq (i); - -} - - -int -main (void) -{ - - SCB_VTOR = (uint32_t) &vector_table; - asm volatile ("msr msp, %0"::"g" (vector_table[0])); - - reset_hardware(); - - - - // rcc_clock_setup_in_hsi_out_48mhz (); - //nvic_set_priority_grouping(NVIC_PriorityGroup_4); - - /*set up pll */ - rcc_clock_setup_in_hse_8mhz_out_72mhz(); - - /*turn on clocks to periferals */ - rcc_periph_clock_enable (RCC_GPIOA); - rcc_periph_clock_enable (RCC_GPIOB); - rcc_periph_clock_enable (RCC_GPIOC); - rcc_periph_clock_enable (RCC_AFIO); - rcc_periph_clock_enable (RCC_USART1); - rcc_periph_clock_enable (RCC_USART2); - rcc_periph_clock_enable (RCC_USART3); - rcc_periph_clock_enable (RCC_ADC1); - - dwt_enable_cycle_counter(); - - /*Change interrupt priorities so that USART trumps Timer trumps ATKBD */ - nvic_set_priority (NVIC_USART1_IRQ, 0x40); - nvic_set_priority (NVIC_USART2_IRQ, 0x40); - nvic_set_priority (NVIC_USART3_IRQ, 0x40); - nvic_set_priority (NVIC_SYSTICK_IRQ, 0x80); - nvic_set_priority (NVIC_EXTI9_5_IRQ, 0xc0); - - gpio_primary_remap (AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON, 0); - - led_init(); - - usart_init(); - ticker_init(); - - pic_init(); - ot_init(); - - onewire_init(); - - pressure_init(); - adc_init(); - - - printf ("STARTUP\r\n"); - printf ("%s\r\n", scm_version); - - - for (;;) { - if (!ring_empty (&rx1_ring)) - cmd_usart_dispatch(); - - temp_dispatch(); - pressure_dispatch(); - - } - - - return 0; -} diff --git a/stm32/app/ot.c b/stm32/app/ot.c deleted file mode 100644 index ba2b7d9..0000000 --- a/stm32/app/ot.c +++ /dev/null @@ -1,441 +0,0 @@ -#include "project.h" - - -typedef struct { - uint8_t flags: 5; - uint8_t type: 3; - uint8_t data[2]; -} OT_Msg; - - -#define FLAGS_PENDING_THM 1U << 0 -#define FLAGS_PROCESSED_THM 1U << 1 -#define FLAGS_PENDING_USR 1U << 2 -#define FLAGS_PROCESSED_USR 1U << 3 -#define FLAGS_PENDING_OVR 1U << 4 - -#define FLAGS_PENDING (FLAGS_PENDING_THM|FLAGS_PENDING_USR | FLAGS_PENDING_OVR) - -#define IDX_MAX 0x300 - -static OT_Msg ot_thm_req[IDX_MAX]; -static OT_Msg ot_blr_rsp[IDX_MAX]; - -#define OT_NEXT(a) (((a) < 0x2ff) ? ((a)+1):0) -#define OT_INDEX(t,id) ((((unsigned) (t) ) <<8 ) | ((unsigned) (id))) -#define OT_IDX_TO_ID(idx) ((idx) & 0xff) -#define OT_IDX_TO_TYPE(idx) ((idx) >> 8) - -static unsigned ot_req_idx; -static unsigned in_flight_req_type; -static unsigned blr_backoff; -static unsigned ot_status_wdt; - - -#define OT_READ_DATA 0x0 -#define OT_WRITE_DATA 0x1 -#define OT_INVALID_DATA 0x2 -#define OT_READ_ACK 0x4 -#define OT_WRITE_ACK 0x5 -#define OT_DATA_INVALID 0x6 -#define OT_UNKNOWN_DATAID 0x7 - - -#define OT_IDX_STATUS 0 -/*TX*/ -#define OT_IDX_STATUS_BIT_ENABLE_CH (1U << 0) -#define OT_IDX_STATUS_BIT_ENABLE_DHW (1U << 1) - -/*RX*/ -#define OT_IDX_STATUS_BIT_FAULT (1U << 0) -#define OT_IDX_STATUS_BIT_CH_MODE (1U << 1) -#define OT_IDX_STATUS_BIT_DHW_MODE (1U << 2) -#define OT_IDX_STATUS_BIT_FLAME (1U << 3) - -#define OT_IDX_CONTROL_SETPOINT 1 -#define OT_IDX_DHW_SETPOINT 56 - - -#define OT_IDX_CH_WATER_PRESSURE 18 -#define OT_IDX_RETURN_WATER_TEMP 28 -#define OT_IDX_SUPPLY_INLET_TEMP 80 - - - -unsigned ot_override_ch = 0; -unsigned ot_override_dhw = 0; - - -static inline int parity (uint8_t v) -{ - return (0x6996u >> ((v ^ (v >> 4)) & 0xf)) & 1; -} - -static void ot_parity (uint8_t *data) -{ - int p; - p = parity (data[0]); - p ^= parity (data[1]); - p ^= parity (data[2]); - p ^= parity (data[3]); - - if (p) data[0] ^= 0x80; -} - - -static const char *type_str[8] = { - ">Read Data", - ">Write Data", - ">Invalid Data", - ">Reserved", - "<Read ACK", - "<Write ACK", - "<Data Invalid", - "<Unknown DataID" -}; - -static void ot_debug (char *who, uint8_t *msg, char *what) -{ - unsigned type = (msg[0] >> 4) & 7; - - - printf ("%s%02x%02x%02x%02x %s %s\r\n", - who, - msg[0], - msg[1], - msg[2], - msg[3], - type_str[type], - what - ); -} - -static void send_reply_to_thm (unsigned idx) -{ - uint8_t reply[4]; - - if (ot_tx_thm (NULL)) return; - - reply[0] = ot_blr_rsp[idx].type << 4; - reply[1] = OT_IDX_TO_ID (idx); - reply[2] = ot_blr_rsp[idx].data[0]; - reply[3] = ot_blr_rsp[idx].data[1]; - - ot_debug ("B", reply, ""); - - ot_parity (reply); - ot_tx_thm (reply); - - ot_blr_rsp[idx].flags &= ~FLAGS_PROCESSED_THM; - -} - - -static int send_req_to_blr (unsigned idx) -{ - uint8_t req[4]; - - if (ot_tx_blr (NULL)) return -1; - - - - req[0] = ot_thm_req[ot_req_idx].type << 4; - req[1] = OT_IDX_TO_ID (ot_req_idx); - req[2] = ot_thm_req[ot_req_idx].data[0]; - req[3] = ot_thm_req[ot_req_idx].data[1]; - - ot_parity (req); - ot_debug (" S", req, ""); - - return ot_tx_blr (req); -} - - - - -void ot_rx_thm (uint8_t *msg, int error) -{ - unsigned type = (msg[0] >> 4) & 7; - unsigned id = msg[1]; - - unsigned idx; - - if (error) return; - - if (type > 2) { - ot_debug ("T", msg, "message type invalid for thermostat"); - return; - } - - if (ot_override_ch) { - if ((id == OT_IDX_STATUS) && (type == OT_READ_DATA)) /* Turn on heating */ - msg[2] |= OT_IDX_STATUS_BIT_ENABLE_CH; - - if ((id == OT_IDX_CONTROL_SETPOINT) && (type == OT_WRITE_DATA)) /* set water temp */ - msg[2] = ot_override_ch; - - } - - if (ot_override_dhw) { - if ((id == OT_IDX_STATUS) && (type == OT_READ_DATA)) /* Turn on hotwater */ - msg[2] |= OT_IDX_STATUS_BIT_ENABLE_DHW; - - if ((id == OT_IDX_DHW_SETPOINT) && (type == OT_WRITE_DATA)) /* set water temp */ - msg[2] = ot_override_dhw; - - } - - if ((id == OT_IDX_STATUS) && (type == OT_READ_DATA)) - ot_status_wdt = 0; - - ot_debug ("T", msg, ""); - - idx = OT_INDEX (type, id); - - if (ot_blr_rsp[idx].flags & FLAGS_PROCESSED_THM) - send_reply_to_thm (idx); - - else { - ot_thm_req[idx].type = type; - ot_thm_req[idx].data[0] = msg[2];; - ot_thm_req[idx].data[1] = msg[3];; - ot_thm_req[idx].flags |= FLAGS_PENDING_THM; - } -} - -static int ot_fake_read_ack (unsigned id, uint8_t *msg) -{ - unsigned t; - - switch (id) { - case OT_IDX_CH_WATER_PRESSURE: - t = pressure_ch(); - - if (!t) return -1; - - break; - - case OT_IDX_RETURN_WATER_TEMP: - t = temp_ch_return(); - - if (!t) return -1; - - break; - - case OT_IDX_SUPPLY_INLET_TEMP: - t = temp_supply_inlet(); - - if (!t) return -1; - - break; - - default: - return -1; - } - - - - msg[0] = OT_READ_ACK << 4; - msg[1] = id; - msg[2] = t >> 8; - msg[3] = t & 0xff; - - return 0; -} - - -void ot_rx_blr (uint8_t *msg, int error) -{ - unsigned type = (msg[0] >> 4) & 7; - unsigned id = msg[1]; - - unsigned idx; - - if (error) return; - - ot_debug (" A", msg, ""); - - idx = OT_INDEX (in_flight_req_type, id); - - if ((in_flight_req_type == OT_READ_DATA) && (type != OT_READ_ACK)) { - if (!ot_fake_read_ack (id, msg)) { - ot_debug (" A", msg, " (faked)"); - type = (msg[0] >> 4) & 7; - } - } - - ot_blr_rsp[idx].type = type; - ot_blr_rsp[idx].data[0] = msg[2];; - ot_blr_rsp[idx].data[1] = msg[3];; - ot_blr_rsp[idx].flags |= FLAGS_PROCESSED_THM | FLAGS_PROCESSED_USR; - - if (ot_thm_req[idx].flags & FLAGS_PENDING_THM) { - ot_thm_req[idx].flags &= ~FLAGS_PENDING_THM; - send_reply_to_thm (idx); - } - - if (ot_thm_req[idx].flags & FLAGS_PENDING_USR) { - ot_thm_req[idx].flags &= ~FLAGS_PENDING_USR; - //send_reply_to_usr (idx); - } - - if (ot_thm_req[idx].flags & FLAGS_PENDING_OVR) - ot_thm_req[idx].flags &= ~FLAGS_PENDING_OVR; - - blr_backoff = 0; - -} - - - -static void ot_boiler_worker (void) -{ - unsigned i; - - if (blr_backoff) { - blr_backoff--; - return; - } - - if (ot_tx_blr (NULL)) return; - - - for (i = 0; i < IDX_MAX; ++i, ot_req_idx = OT_NEXT (ot_req_idx)) { - - if (ot_thm_req[ot_req_idx].flags & FLAGS_PENDING) { - - if (!send_req_to_blr (ot_req_idx)) { - ot_thm_req[ot_req_idx].flags &= ~FLAGS_PENDING; - in_flight_req_type = OT_IDX_TO_TYPE (ot_req_idx); - blr_backoff = 10; - ot_req_idx = OT_NEXT (ot_req_idx); - return; - } - } - - } - -} - - -static void ot_request (unsigned flags, unsigned type, unsigned id, uint8_t *data) -{ - unsigned idx = OT_INDEX (type, id); - - ot_thm_req[idx].type = type; - - if (data) { - ot_thm_req[idx].data[0] = data[0]; - ot_thm_req[idx].data[1] = data[1]; - } else { - ot_thm_req[idx].data[0] = 0; - ot_thm_req[idx].data[1] = 0; - } - - ot_thm_req[idx].flags |= FLAGS_PENDING_USR; - -} - -void ot_request_usr (unsigned type, unsigned id, uint8_t *data) -{ - ot_request (FLAGS_PENDING_USR, type, id, data); -} -static void ot_request_ovr (unsigned type, unsigned id, uint8_t *data) -{ - ot_request (FLAGS_PENDING_OVR, type, id, data); -} - - - -static void ot_force_status (void) -{ - uint8_t data[2] = { (ot_override_ch ? OT_IDX_STATUS_BIT_ENABLE_CH : 0) | (ot_override_dhw ? OT_IDX_STATUS_BIT_ENABLE_DHW : 0), 0}; - - ot_request_ovr (OT_READ_DATA, OT_IDX_STATUS, data); - -} - -static void ot_30s_ticker (void) -{ - uint8_t data[2]; - uint8_t msg[4]; - - printf ("Q ot ticker - push control flags and log data"); - - if (ot_override_ch) { - data[0] = ot_override_ch; - data[1] = 0; - ot_request_ovr (OT_WRITE_DATA, OT_IDX_CONTROL_SETPOINT, data); - } - - if (ot_override_dhw) { - - data[0] = ot_override_dhw; - data[1] = 0; - ot_request_ovr (OT_WRITE_DATA, OT_IDX_DHW_SETPOINT, data); - } - - - if (!ot_fake_read_ack (OT_IDX_CH_WATER_PRESSURE, msg)) - ot_debug ("B", msg, " (fake reply)"); - - if (!ot_fake_read_ack (OT_IDX_RETURN_WATER_TEMP, msg)) - ot_debug ("B", msg, " (fake reply)"); - - if (!ot_fake_read_ack (OT_IDX_SUPPLY_INLET_TEMP, msg)) - ot_debug ("B", msg, " (fake reply)"); - -} - - - - -static void ot_4hz_ticker (void) -{ - static unsigned i; - i++; - - ot_boiler_worker(); - - ot_status_wdt++; - - if (ot_status_wdt > 120) { - printf ("Q forcing status packet\r\n"); - ot_force_status(); - ot_status_wdt = 0; - } - - - if (i >= 120) { - ot_30s_ticker(); - i = 0; - } - - - led_yellow_set (ot_blr_rsp[OT_INDEX (OT_READ_DATA, OT_IDX_STATUS)].data[1] & OT_IDX_STATUS_BIT_FAULT); - led_green1_set (ot_blr_rsp[OT_INDEX (OT_READ_DATA, OT_IDX_STATUS)].data[1] & OT_IDX_STATUS_BIT_CH_MODE); - led_green2_set (ot_blr_rsp[OT_INDEX (OT_READ_DATA, OT_IDX_STATUS)].data[1] & OT_IDX_STATUS_BIT_DHW_MODE); - led_red_set (ot_blr_rsp[OT_INDEX (OT_READ_DATA, OT_IDX_STATUS)].data[1] & OT_IDX_STATUS_BIT_FLAME); - -} - - -void ot_tick (void) -{ - static unsigned i; - i++; - - if (i >= 500) { - ot_4hz_ticker(); - i = 0; - } - - -} - - -void ot_init (void) -{ - ot_phy_rx_init(); - ot_phy_tx_init(); -} diff --git a/stm32/app/ot_phy_rx.c b/stm32/app/ot_phy_rx.c deleted file mode 100644 index 9348d24..0000000 --- a/stm32/app/ot_phy_rx.c +++ /dev/null @@ -1,177 +0,0 @@ -#include "project.h" - -#define OT_THM_IN GPIO6 -#define OT_THM_IN_PORT GPIOB - -#define OT_BLR_IN GPIO7 -#define OT_BLR_IN_PORT GPIOB - - -#define OT_RX_IRQ NVIC_EXTI9_5_IRQ - - -typedef struct rx_phy { - uint32_t last_cycle; - int last_v; - unsigned half_bits; - unsigned data_bits; - int frame_error; - uint8_t data[10]; - int parity; -} RX_Phy; - - -static RX_Phy p_thm, p_blr; - - -static uint32_t -cycle_diff (uint32_t a, uint32_t b) -{ - return b - a; -} - - - - -static void ot_phy_rx_bit (RX_Phy *p) -{ - - - if (p->half_bits & 1) - p->frame_error = 1; - - if (!p->half_bits) { - if (!p->last_v) - p->frame_error = 1; - - return; - } - - if (p->data_bits < 32) { - if (p->last_v) p->data[p->data_bits >> 3] |= 0x80 >> (p->data_bits & 7); - - p->parity ^= p->last_v; - } else if (p->data_bits == 32) { - if ((!p->last_v) || (p->parity)) - p->frame_error = 1; - - led_blink(); - - if (p == &p_thm) - ot_rx_thm (p->data, p->frame_error); - else - ot_rx_blr (p->data, p->frame_error); - } - - - p->data_bits++; - -} - - -static void ot_phy_rx_worker (RX_Phy *p, int v) -{ - uint32_t now, diff; - - if (v == p->last_v) return; - - - now = dwt_read_cycle_counter(); - diff = cycle_diff (p->last_cycle, now); - - - if (diff < 10000) return; - - if (diff < 50000) { - if (! (p->half_bits & 1)) ot_phy_rx_bit (p); - - p->half_bits++; - } else if (diff < 85000) { - p->half_bits++; - ot_phy_rx_bit (p); - p->half_bits++; - } else { - p->parity = 0; - p->half_bits = 0; - p->frame_error = 0; - p->data_bits = 0; - memset (p->data, 0, sizeof (p->data)); - } - - p->last_cycle = now; - p->last_v = v; -} - - - -void -exti9_5_isr (void) -{ - int v; - - if (EXTI_PR & OT_THM_IN) { - EXTI_PR = OT_THM_IN; - v = !GET (OT_THM_IN); - -#if 0 - - if (v) - CLEAR (OT_BLR_OUT); - else - SET (OT_BLR_OUT); - -#endif - - ot_phy_rx_worker (&p_thm, v); - - - } - - if (EXTI_PR & OT_BLR_IN) { - EXTI_PR = OT_BLR_IN; - v = !GET (OT_BLR_IN); - -#if 0 - - if (v) - CLEAR (OT_THM_OUT); - else - SET (OT_THM_OUT); - -#endif - - ot_phy_rx_worker (&p_blr, v); - } - - return; -} - - -void ot_phy_rx_tick (void) -{ -} - - - -void ot_phy_rx_init (void) -{ - MAP_INPUT_PU (OT_THM_IN); - MAP_INPUT_PU (OT_BLR_IN); - - - exti_select_source (OT_THM_IN, OT_THM_IN_PORT); - exti_set_trigger (OT_THM_IN, EXTI_TRIGGER_BOTH); - exti_enable_request (OT_THM_IN); - exti_reset_request (OT_THM_IN); - - exti_select_source (OT_BLR_IN, OT_BLR_IN_PORT); - exti_set_trigger (OT_BLR_IN, EXTI_TRIGGER_BOTH); - exti_enable_request (OT_BLR_IN); - exti_reset_request (OT_BLR_IN); - - nvic_enable_irq (OT_RX_IRQ); - -} - - - diff --git a/stm32/app/ot_phy_tx.c b/stm32/app/ot_phy_tx.c deleted file mode 100644 index 36fbcc5..0000000 --- a/stm32/app/ot_phy_tx.c +++ /dev/null @@ -1,121 +0,0 @@ -#include "project.h" - -#define OT_THM_OUT GPIO9 -#define OT_THM_OUT_PORT GPIOB - -#define OT_BLR_OUT GPIO8 -#define OT_BLR_OUT_PORT GPIOB - - -typedef struct tx_phy { - int busy; - unsigned half_bit; - uint8_t data[4]; -} TX_Phy; - - -static TX_Phy p_thm, p_blr; - - - -#if 0 -static uint32_t -cycle_diff (uint32_t a, uint32_t b) -{ - return b - a; -} -#endif - - -static int ot_phy_tx_worker (TX_Phy *p) -{ - int ret = p->half_bit & 1; - unsigned bit; - - - if (p->half_bit < 2) - ret ^= 1; - - else if (p->half_bit < 66) { - bit = (p->half_bit >> 1) - 1; - - if (p->data[bit >> 3] & (0x80 >> (bit & 7))) - ret ^= 1; - } else if (p->half_bit < 68) - - ret ^= 1; - - p->half_bit++; - - if (p->half_bit == 68) { - p->half_bit = 0; - p->busy = 0; - } - - return ret; -} - - -void ot_phy_tx_tick (void) -{ - int v; - - if (p_thm.busy) { - v = ot_phy_tx_worker (&p_thm); - - if (v) - CLEAR (OT_THM_OUT); - else - SET (OT_THM_OUT); - } - - - if (p_blr.busy) { - v = ot_phy_tx_worker (&p_blr); - - if (v) - CLEAR (OT_BLR_OUT); - else - SET (OT_BLR_OUT); - - } -} - - -int ot_tx_thm (uint8_t *data) -{ - if (p_thm.busy) return -1; - - if (!data) return 0; - - led_blink(); - - memcpy (p_thm.data, data, sizeof (p_thm.data)); - p_thm.busy = 1; - - return 0; -} - - -int ot_tx_blr (uint8_t *data) -{ - - if (p_blr.busy) return -1; - - if (!data) return 0; - - led_blink(); - - memcpy (p_blr.data, data, sizeof (p_blr.data)); - p_blr.busy = 1; - - return 0; -} - - - -void ot_phy_tx_init (void) -{ - MAP_OUTPUT_PP (OT_THM_OUT); - MAP_OUTPUT_PP (OT_BLR_OUT); -} diff --git a/stm32/app/pic.c b/stm32/app/pic.c deleted file mode 100644 index b478766..0000000 --- a/stm32/app/pic.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "project.h" - -#define PIC_RESET GPIO1 -#define PIC_RESET_PORT GPIOB - - -static void pic_reset (void) -{ - SET (PIC_RESET); - delay_ms (1); - CLEAR (PIC_RESET); -} - - -void pic_passthru (void) -{ - uint8_t c; - - printf ("\r\nPIC MODE\r\n"); - usart1_drain(); - block_stdio = 1; - - while (!ring_read_byte (&rx3_ring, &c)); - - pic_reset(); - - - for (;;) { - if (!ring_read_byte (&rx1_ring, &c)) - usart3_queue (c); - - if (!ring_read_byte (&rx3_ring, &c)) - usart1_queue (c); - - } -} - - - - - - - -void pic_init (void) -{ - MAP_OUTPUT_PP (PIC_RESET); - - pic_reset(); - -} - - diff --git a/stm32/app/pins.h b/stm32/app/pins.h deleted file mode 100644 index 9ea01cf..0000000 --- a/stm32/app/pins.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _PINS_H_ -#define _PINS_H_ - -/* st seem to change these with every chip revision */ - -#define MAP_AF(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, a ); \ - } while (0) - -/* STM32F1 doesn't have AF pull up, but also doesn't disconnect af inputs so just use regular pull up */ -#define MAP_AF_PU(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \ - gpio_set( a ## _PORT, a); \ - } while (0) - -#define MAP_AF_OD(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_OPENDRAIN, a ); \ - } while (0) - - -#define MAP_OUTPUT_PP(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, a ); \ - } while (0) - - -#define MAP_OUTPUT_OD(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, a ); \ - } while (0) - - -/* STM32F1 madly uses the output register to drive the other end of the resistor, so pull up */ -/* requires us to write a 1 there */ - -#define MAP_INPUT_PU(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \ - gpio_set( a ## _PORT, a); \ - } while (0) - - -#define MAP_INPUT(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, a); \ - } while (0) - -#define MAP_ANALOG(a) do { \ - gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_ANALOG, a); \ - } while (0) - - -#define CLEAR(a) gpio_clear( a ## _PORT, a) -#define SET(a) gpio_set( a ## _PORT, a) -#define GET(a) gpio_get( a ## _PORT, a) - -#endif diff --git a/stm32/app/pressure.c b/stm32/app/pressure.c deleted file mode 100644 index 6b90d93..0000000 --- a/stm32/app/pressure.c +++ /dev/null @@ -1,79 +0,0 @@ -#include "project.h" - -#define PRESSURE GPIO0 -#define PRESSURE_PORT GPIOA -#define PRESSURE_CHANNEL ADC_CHANNEL0 -#define VREF_CHANNEL ADC_CHANNEL17 - -static unsigned poke; - -static int pressure; - -uint16_t pressure_ch (void) -{ - return pressure; -} - - - - -void pressure_tick (void) -{ - static unsigned ticker; - - ticker++; - - if (ticker < MS_TO_TICKS (2500)) - return; - - ticker = 0; - poke = 1; - -} - - - - -void pressure_dispatch (void) -{ - int v, r; - - if (!poke) return; - - poke = 0; - - if (adc_calibrate()) { - pressure = 0; - return; - } - - v = adc_convert (PRESSURE_CHANNEL); - r = adc_convert (VREF_CHANNEL); - - - /* r is 1.25 volts, transducer is 0.5V -> 0 psi 4.5V -> 100psi */ - /* 100psi is 6.8947573 bar, and we want 256ths of bar */ - - if (!r) { - pressure = 0; - return; - } - - pressure = ((v * 552) / r) - 221; - - if (pressure < 0) pressure = 0; - - printf ("QP: %d %d %d\r\n", v, r, (pressure * 100) / 256); - -} - - - -void pressure_init (void) -{ - MAP_ANALOG (PRESSURE); -} - - - - diff --git a/stm32/app/project.h b/stm32/app/project.h deleted file mode 100644 index d1bfa52..0000000 --- a/stm32/app/project.h +++ /dev/null @@ -1,30 +0,0 @@ -#include <stdlib.h> -#include <libopencm3/stm32/rcc.h> -#include <libopencm3/stm32/gpio.h> -#include <libopencm3/stm32/usart.h> -#include <libopencm3/stm32/usb.h> -#include <libopencm3/stm32/exti.h> -#include <libopencm3/stm32/adc.h> -#include <libopencm3/cm3/systick.h> -#include <libopencm3/cm3/nvic.h> -#include <libopencm3/cm3/cortex.h> -#include <libopencm3/cm3/scb.h> -#include <libopencm3/cm3/dwt.h> - -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include "ring.h" -#include "pins.h" -#include "1wire.h" - - -#define US (72) -#define MS (US * 1000) -#define HZ (MS * 1000) - -#define MS_TO_TICKS(a) ((a) *2) - - -#include "prototypes.h" diff --git a/stm32/app/prototypes.h b/stm32/app/prototypes.h deleted file mode 100644 index 25a1627..0000000 --- a/stm32/app/prototypes.h +++ /dev/null @@ -1,103 +0,0 @@ -/* main.c */ -extern void reset_hardware(void); -extern int main(void); -/* ot.c */ -extern unsigned ot_override_ch; -extern unsigned ot_override_dhw; -extern void ot_rx_thm(uint8_t *msg, int error); -extern void ot_rx_blr(uint8_t *msg, int error); -extern void ot_request_usr(unsigned type, unsigned id, uint8_t *data); -extern void ot_tick(void); -extern void ot_init(void); -/* ot_phy_rx.c */ -extern void exti9_5_isr(void); -extern void ot_phy_rx_tick(void); -extern void ot_phy_rx_init(void); -/* ot_phy_tx.c */ -extern void ot_phy_tx_tick(void); -extern int ot_tx_thm(uint8_t *data); -extern int ot_tx_blr(uint8_t *data); -extern void ot_phy_tx_init(void); -/* led.c */ -extern void led_red_set(int i); -extern void led_green1_set(int i); -extern void led_green2_set(int i); -extern void led_blink(void); -extern void led_yellow_set(int i); -extern void led_tick(void); -extern void led_init(void); -/* ticker.c */ -extern void delay_us(uint32_t d); -extern void sys_tick_handler(void); -extern void delay_ms(uint32_t d); -extern void ticker_init(void); -/* usart.c */ -extern ring_t rx1_ring; -extern ring_t tx1_ring; -extern ring_t rx3_ring; -extern ring_t tx3_ring; -extern void usart1_isr(void); -extern void usart1_queue(uint8_t d); -extern void usart1_drain(void); -extern int usart1_write(char *ptr, int len, int blocking); -extern void usart3_isr(void); -extern void usart3_queue(uint8_t d); -extern void usart3_drain(void); -extern int usart3_write(char *ptr, int len, int blocking); -extern void usart_init(void); -/* ring.c */ -extern void ring_init(volatile ring_t *r, uint8_t *buf, size_t len); -extern int ring_write_byte(volatile ring_t *r, uint8_t c); -extern int ring_read_byte(volatile ring_t *r, uint8_t *c); -extern int ring_write(volatile ring_t *r, uint8_t *buf, size_t len, int blocking); -extern int ring_empty(volatile ring_t *r); -/* stdio.c */ -extern unsigned block_stdio; -extern int _open(const char *name, int flags, int mode); -extern int _close(int file); -extern int _write(int file, char *buf, int nbytes); -extern int _read(int file, char *buf, int nbytes); -extern int _lseek(int file, int offset, int whence); -extern int isatty(int file); -extern void stdio_drain(void); -/* util.c */ -extern char int_to_hex_char(int a); -/* commit.c */ -extern char scm_version[]; -/* cmd.c */ -extern void cmd_usart_dispatch(void); -/* pic.c */ -extern void pic_passthru(void); -extern void pic_init(void); -/* 1wire.c */ -extern void onewire_tick(void); -extern int onewire_reset(void); -extern void onewire_write_byte(uint8_t v); -extern uint8_t onewire_read_byte(void); -extern void onewire_read_bytes(uint8_t *buf, int n); -extern void onewire_write_bytes(const uint8_t *buf, int n); -extern int onewire_select(const Onewire_addr *a); -extern int onewire_reset_and_select(const Onewire_addr *a); -extern int onewire_wait_complete(unsigned timeout); -extern int onewire_check_crc(uint8_t *buf, int n, uint8_t v); -extern int onewire_search(void); -extern void onewire_init(void); -/* temp.c */ -extern void temp_tick(void); -extern void temp_dispatch(void); -extern uint16_t temp_ch_return(void); -extern uint16_t temp_supply_inlet(void); -/* ds1820.c */ -extern int ds1820_read(const Onewire_addr *a, int *temp); -/* pressure.c */ -extern uint16_t pressure_ch(void); -extern void pressure_tick(void); -extern void pressure_dispatch(void); -extern void pressure_init(void); -/* adc.c */ -extern void adc_dump(void); -extern volatile unsigned timeout; -extern void adc_tick(void); -extern int adc_calibrate(void); -extern unsigned adc_convert(unsigned channel); -extern void adc_init(void); diff --git a/stm32/app/ring.c b/stm32/app/ring.c deleted file mode 100644 index 973f345..0000000 --- a/stm32/app/ring.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "project.h" - - -static inline size_t -ring_next (volatile ring_t *r, size_t p) -{ - p++; - - if (p >= r->size) - p -= r->size; - - return p; -} - -void -ring_init (volatile ring_t *r, uint8_t *buf, size_t len) -{ - r->data = buf; - r->size = len; - r->write = 0; - r->read = 0; -} - -int -ring_write_byte (volatile ring_t *r, uint8_t c) -{ - size_t n = ring_next (r, r->write); - - if (n == r->read) - return -EAGAIN; - - r->data[r->write] = c; - - r->write = n; - - return 0; -} - - -int -ring_read_byte (volatile ring_t *r, uint8_t *c) -{ - size_t n = ring_next (r, r->read); - - if (r->read == r->write) - return -EAGAIN; - - *c = r->data[r->read]; - r->read = n; - - return 0; -} - -int -ring_write (volatile ring_t *r, uint8_t *buf, size_t len, int blocking) -{ - while (len--) { - if (blocking) { - while (ring_write_byte (r, *buf)); - - buf++; - } else { - if (ring_write_byte (r, * (buf++))) - return -EAGAIN; - } - } - - return 0; -} - - - -int -ring_empty (volatile ring_t *r) -{ - return (r->read == r->write) ? 1 : 0; -} diff --git a/stm32/app/ring.h b/stm32/app/ring.h deleted file mode 100644 index a329354..0000000 --- a/stm32/app/ring.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _RING_H_ -#define _RING_H_ - -typedef struct ring { - uint8_t *data; - size_t size; - size_t write; - size_t read; -} ring_t; - -#endif - - diff --git a/stm32/app/stdio.c b/stm32/app/stdio.c deleted file mode 100644 index bcdd5c7..0000000 --- a/stm32/app/stdio.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "project.h" - -unsigned block_stdio; - -int -_open (const char *name, int flags, int mode) -{ - errno = ENOSYS; - return -1; /* Always fails */ - -} /* _open () */ - -int -_close (int file) -{ - errno = EBADF; - return -1; /* Always fails */ - -} /* _close () */ - -int -_write (int file, char *buf, int nbytes) -{ - - int ret = nbytes; - - if (!block_stdio) - ret = usart1_write (buf, nbytes, 1); - - if (ret < 0) { - errno = -ret; - return -1; - } - - return ret; -} /* _write () */ - - -int -_read (int file, char *buf, int nbytes) -{ - - errno = -EAGAIN; - return -1; /* EOF */ - -} /* _read () */ - -#if 0 -int -_fstat (int file, struct stat *st) -{ - st->st_mode = S_IFCHR; - return 0; - -} /* _fstat () */ -#endif - -int -_lseek (int file, int offset, int whence) -{ - return 0; - -} /* _lseek () */ - -int -isatty (int file) -{ - return 1; - -} /* _isatty () */ - - -void -stdio_drain (void) -{ - usart1_drain(); -} diff --git a/stm32/app/temp.c b/stm32/app/temp.c deleted file mode 100644 index 4548d01..0000000 --- a/stm32/app/temp.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "project.h" - - -#define N_SENSORS 2 - -#define SENSOR_INDEX_CH_RETURN 0 -#define SENSOR_INDEX_SUPPLY_INLET 1 - -static const Onewire_addr s_addr[N_SENSORS] = { - [0] = {{0x28, 0x60, 0x06, 0x53, 0x03, 0x00, 0x00, 0xf5}}, - [1] = {{0x28, 0xa4, 0x08, 0x53, 0x03, 0x00, 0x00, 0x14}}, -}; - - -static int s_temp[N_SENSORS]; - -static unsigned poke; - - -void temp_tick (void) -{ - static unsigned ticker; - - ticker++; - - if (ticker < 3000) - return; - - ticker = 0; - poke = 1; - -} - - - - - -void temp_dispatch (void) -{ - static unsigned sensor; - - if (!poke) return; - - poke = 0; - - if (sensor < N_SENSORS) { - if (ds1820_read (&s_addr[sensor], &s_temp[sensor])) - s_temp[sensor] = 0; - - - printf ("Q1W: sensor %d temp %d\r\n", sensor, (s_temp[sensor] * 100) / 256); - - - sensor++; - } else { -#if 0 - onewire_search(); -#endif - } - - if (sensor == N_SENSORS) - sensor = 0; - - -} - - - -uint16_t temp_ch_return (void) -{ - return s_temp[SENSOR_INDEX_CH_RETURN]; -} -uint16_t temp_supply_inlet (void) -{ - return s_temp[SENSOR_INDEX_SUPPLY_INLET]; -} diff --git a/stm32/app/ticker.c b/stm32/app/ticker.c deleted file mode 100644 index e47f4eb..0000000 --- a/stm32/app/ticker.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "project.h" - - -static volatile uint32_t delay_hms_count; -static volatile uint32_t ticks; -static uint32_t scale = 7; - -void -delay_us (uint32_t d) -{ - d *= scale; - - while (d--) - __asm__ ("nop"); -} - -void -sys_tick_handler (void) -{ - if (delay_hms_count) - delay_hms_count--; - - led_tick(); - ot_phy_tx_tick(); - ot_tick(); - onewire_tick(); - temp_tick(); - adc_tick(); - pressure_tick(); - - - ticks++; -} - - - -void -delay_ms (uint32_t d) -{ - delay_hms_count = d << 1; - - while (delay_hms_count); -} - -#if 0 -int -timed_out (uint32_t then, unsigned int ms) -{ - then = ticks - then; - - if (then > ms) - return 1; - - return 0; -} - -int -timed_out_cycles (uint32_t then, unsigned int cycles) -{ - then = dwt_read_cycle_counter() - then; - - if (then > cycles) - return 1; - - return 0; -} -#endif - - - -void -ticker_init (void) -{ - uint32_t v, w; - - /*Start periodic timer */ - - systick_set_clocksource (STK_CSR_CLKSOURCE_AHB_DIV8); - /* 72MHz / 8 = > 9Mhz */ - systick_set_reload (4500); - /* 9MHz / 4500 => 2kHz */ - systick_interrupt_enable(); - systick_counter_enable(); - - /*Calibrate the delay loop */ - - - - do { - scale--; - v = ticks; - - while (v == ticks); - - delay_us (500); - w = ticks; - v++; - w -= v; - } while (w); - - - -} diff --git a/stm32/app/usart.c b/stm32/app/usart.c deleted file mode 100644 index 28676a0..0000000 --- a/stm32/app/usart.c +++ /dev/null @@ -1,175 +0,0 @@ -#include "project.h" - -#define BUFFER_SIZE 256 - - -#define USART1_TX GPIO_USART1_TX -#define USART1_TX_PORT GPIOA - -#define USART1_RX GPIO_USART1_RX -#define USART1_RX_PORT GPIOA - -#define USART3_TX GPIO_USART3_TX -#define USART3_TX_PORT GPIOB - -#define USART3_RX GPIO_USART3_RX -#define USART3_RX_PORT GPIOB - - - -ring_t rx1_ring; -static uint8_t rx1_ring_buf[BUFFER_SIZE]; - -ring_t tx1_ring; -static uint8_t tx1_ring_buf[BUFFER_SIZE]; - -ring_t rx3_ring; -static uint8_t rx3_ring_buf[BUFFER_SIZE]; - -ring_t tx3_ring; -static uint8_t tx3_ring_buf[BUFFER_SIZE]; - -void -usart1_isr (void) -{ - uint8_t data; - - /* Check if we were called because of RXNE. */ - if (((USART_CR1 (USART1) & USART_CR1_RXNEIE) != 0) && - ((USART_SR (USART1) & USART_SR_RXNE) != 0)) { - data = usart_recv (USART1); - ring_write_byte (&rx1_ring, data); - } - - /* Check if we were called because of TXE. */ - if (((USART_CR1 (USART1) & USART_CR1_TXEIE) != 0) && - ((USART_SR (USART1) & USART_SR_TXE) != 0)) { - - if (ring_read_byte (&tx1_ring, &data)) { - /*No more data, Disable the TXE interrupt, it's no longer needed. */ - usart_disable_tx_interrupt (USART1); - } else - usart_send_blocking (USART1, data); - } - -} - -void -usart1_queue (uint8_t d) -{ - ring_write_byte (&tx1_ring, d); - usart_enable_tx_interrupt (USART1); -} - -void -usart1_drain (void) -{ - while (!ring_empty (&tx1_ring)); -} - - -int -usart1_write (char *ptr, int len, int blocking) -{ - int ret; - - ret = ring_write (&tx1_ring, (uint8_t *) ptr, len, blocking); - usart_enable_tx_interrupt (USART1); - return ret; -} - - -void -usart3_isr (void) -{ - uint8_t data; - - /* Check if we were called because of RXNE. */ - if (((USART_CR1 (USART3) & USART_CR1_RXNEIE) != 0) && - ((USART_SR (USART3) & USART_SR_RXNE) != 0)) { - data = usart_recv (USART3); - ring_write_byte (&rx3_ring, data); - } - - /* Check if we were called because of TXE. */ - if (((USART_CR1 (USART3) & USART_CR1_TXEIE) != 0) && - ((USART_SR (USART3) & USART_SR_TXE) != 0)) { - - if (ring_read_byte (&tx3_ring, &data)) { - /*No more data, Disable the TXE interrupt, it's no longer needed. */ - usart_disable_tx_interrupt (USART3); - } else - usart_send_blocking (USART3, data); - } - -} - -void -usart3_queue (uint8_t d) -{ - ring_write_byte (&tx3_ring, d); - usart_enable_tx_interrupt (USART3); -} - -void -usart3_drain (void) -{ - while (!ring_empty (&tx3_ring)); -} - - -int -usart3_write (char *ptr, int len, int blocking) -{ - int ret; - - ret = ring_write (&tx3_ring, (uint8_t *) ptr, len, blocking); - usart_enable_tx_interrupt (USART3); - return ret; -} - - -void -usart_init (void) -{ - ring_init (&rx1_ring, rx1_ring_buf, sizeof (rx1_ring_buf)); - ring_init (&tx1_ring, tx1_ring_buf, sizeof (tx1_ring_buf)); - - nvic_enable_irq (NVIC_USART1_IRQ); - - MAP_AF (USART1_TX); - MAP_AF_PU (USART1_RX); - - - usart_set_baudrate (USART1, 57600); - usart_set_databits (USART1, 8); - usart_set_stopbits (USART1, USART_STOPBITS_1); - usart_set_parity (USART1, USART_PARITY_NONE); - usart_set_flow_control (USART1, USART_FLOWCONTROL_NONE); - usart_set_mode (USART1, USART_MODE_TX_RX); - - USART_CR1 (USART1) |= USART_CR1_RXNEIE; - - usart_enable (USART1); - - - ring_init (&rx3_ring, rx3_ring_buf, sizeof (rx3_ring_buf)); - ring_init (&tx3_ring, tx3_ring_buf, sizeof (tx3_ring_buf)); - - - nvic_enable_irq (NVIC_USART3_IRQ); - - MAP_AF (USART3_TX); - MAP_AF_PU (USART3_RX); - - usart_set_baudrate (USART3, 9600); - usart_set_databits (USART3, 8); - usart_set_stopbits (USART3, USART_STOPBITS_1); - usart_set_parity (USART3, USART_PARITY_NONE); - usart_set_flow_control (USART3, USART_FLOWCONTROL_NONE); - usart_set_mode (USART3, USART_MODE_TX_RX); - - USART_CR1 (USART3) |= USART_CR1_RXNEIE; - - usart_enable (USART3); -} diff --git a/stm32/app/util.c b/stm32/app/util.c deleted file mode 100644 index bf65510..0000000 --- a/stm32/app/util.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "project.h" - -char int_to_hex_char (int a) -{ - if (a < 0) return '?'; - - if (a < 0xa) return '0' + a; - - if (a < 0x10) return '7' + a; - - return '?'; -} - - diff --git a/stm32/docs/pinout.txt b/stm32/docs/pinout.txt deleted file mode 100644 index 03abe35..0000000 --- a/stm32/docs/pinout.txt +++ /dev/null @@ -1,24 +0,0 @@ - -A0 <- pressure sensor -A2 <-> one wire bus -A11 -> yellow LED (OD) -A12 -> green LED 1 (OD) -A15 -> green LED 2 (OD) - -B1 -> PIC RESET -B3 -> red LED (OD) -B6 <- PIC B6 LED_C (from A0, OT from thermostat) -B7 <- PIC B7 LED_D (from A1, OT from boiler) -B8 -> PIC A6 GPIO_A (to A3, OT to boiler) -B9 -> PIC A7 GPIO_B (to A4, OT to thermostat) -B10 -> PIC RX -B11 <- PIX TX - -C13 -> onboard LED (OD) - -A2 -> MR3020 TX -A3 <- MR4020 RX -RST <- MR3020 GPIO5 - - - diff --git a/stm32/docs/pm0056.pdf b/stm32/docs/pm0056.pdf Binary files differdeleted file mode 100644 index 659c9de..0000000 --- a/stm32/docs/pm0056.pdf +++ /dev/null diff --git a/stm32/docs/rm0008.pdf b/stm32/docs/rm0008.pdf Binary files differdeleted file mode 100644 index 8f3d0e1..0000000 --- a/stm32/docs/rm0008.pdf +++ /dev/null diff --git a/stm32/docs/stm32f103c8.pdf b/stm32/docs/stm32f103c8.pdf Binary files differdeleted file mode 100644 index 2723cee..0000000 --- a/stm32/docs/stm32f103c8.pdf +++ /dev/null diff --git a/stm32/docs/stm32f103c8t6_pinout_voltage01.png b/stm32/docs/stm32f103c8t6_pinout_voltage01.png Binary files differdeleted file mode 100644 index 2c22a74..0000000 --- a/stm32/docs/stm32f103c8t6_pinout_voltage01.png +++ /dev/null diff --git a/stm32/libopencm3 b/stm32/libopencm3 deleted file mode 160000 -Subproject 5c73d601763dd140bff020be8d6d06f03c2bea7 |