Compare commits

..

3 commits

Author SHA1 Message Date
Stephan I. Böttcher
2d860e7dee bate: simplify config_period 2024-04-15 08:58:10 +02:00
Stephan I. Böttcher
ee11d72f6d bate: fix send_config 2024-04-15 08:47:57 +02:00
Stephan I. Böttcher
10b0e22595 oops … 2024-04-14 23:31:03 +02:00
5 changed files with 18 additions and 181 deletions

View file

@ -1,163 +0,0 @@
PROJ=bate
PATH:=/usr/local/bin:$(PATH)
default: all
all: $(PROJ).hex
SN_bate = 1
MCU_bate = attiny424
C_FILES_bate = uart.c rtc.c spi.c adc.c calib.c mul.c cmd.c
S_FILES_bate = uart_tx.S
MCU = $(MCU_$(PROJ))
# When flash gets tight, use `OPT=-Os`, or use more assembler :-)
OPT = -O2
CC=avr-gcc -Wall -Wno-parentheses -MMD -std=c99 $(OPT) \
-mmcu=$(MCU) \
-funsigned-char \
-funsigned-bitfields \
-fpack-struct \
-fshort-enums \
-mtiny-stack \
-mint8 \
-fverbose-asm
SN = $(SN_$(PROJ))
CFLAGS = $($*_CFLAGS) $(DEBUG) -I. -DSN="$(SN)"
C_FILES = $(C_FILES_$(PROJ))
S_FILES = $(S_FILES_$(PROJ))
OBJS = $(patsubst %.c, %.o, $(C_FILES)) $(patsubst %.S, %.o, $(S_FILES))
%.s: %.c %.o
$(CC) $(CFLAGS) -S $<
%.o: %.c
$(CC) -g $(CFLAGS) -c $<
%.o: %.S
$(CC) -g $(CFLAGS) -c $<
-include *.d
LDFLAGS = -Teeprom.ld
%.elf: %.o $(OBJS)
$(CC) $(CFLAGS) -Wl,-Map=$*.map,--cref $^ --output $@ $(LDFLAGS)
OBJCOPY = avr-objcopy
%.hex: %.elf
$(OBJCOPY) -O ihex -R .eeprom -R .eemap $< $@
%.eeprom: %.elf
$(OBJCOPY) -O ihex -j .eemap --change-section-lma .eemap=0 $< $@
pMCU-attiny424 = t424
#
#avrdude> dump fuses
#>>> dump fuses 0x0 0x9
#
#Reading | ################################################## | 100% 0.13 s
#
#0000 00 00 7e ff ff f6 ff 00 00 |..~...... |
#
#avrdude>
# WDT
fuse0_bate= 0x00
# BOD
fuse1_bate= 0x00
# OSC, 20 MHz
fuse2_bate= 0x7e
# ???
fuse4_bate= 0xff
# SYS0 (default 0xf6) RESET, EEPROM erase
fuse5_bate= 0xf7
# SYS1 startup time (64ms)
fuse6_bate= 0xff
# APPEND
fuse7_bate= 0x00
# BOOTEND
fuse8_bate= 0x00
fuses_bate =$(patsubst %, 0x%, 00 00 7e ff ff f7 ff 00 00)
AVRDUDEPROG = avrdude
AVRDUDE = $(AVRDUDEPROG)
AVRDUDE_PROGRAMMER = serialupdi
AVRDUDE_PORT = /dev/ttyUSB1
AD = $(AVRDUDE) -p $(pMCU-$(MCU)) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
sig_bate = 0x1e 0x92 0x2c
id: $(PROJ).id
%.id:
$(AD) -qq -U signature:v:"$(sig_$*)":m
ad: $(PROJ).ad
%.ad:
$(AD) -v -t
%.burn: %.hex
$(AD) -U flash:v:$< || $(AD) -U flash:w:$<
%.verify: %.hex %.eeprom
-$(AD) -qq -U fuses:v:"$(fuses_$*)":m
-$(AD) -qq -U userrow:v:"$(BATE_CONFIG)":m
-$(AD) -qq -U eeprom:v:$(word 2, $^)
-$(AD) -qq -U flash:v:$<
fuse: $(PROJ).fuse$F
%.fuse$F:
echo "$*: fuse$F = $(fuse$F_$*)"
[ -n "$(fuse$F_$*)" ] && $(AD) -B 5 -U fuse$F:w:$(fuse$F_$*):m
# see bate.c: Configuration in USERROW
BC_MAGIC = 0xba
BC_VERS = 6
BC_TRIG = 0x28
BC_SEND = 0x59
BC_PWR = 0x7c
BC_TEST = 0
BC_SPI = 0xff
BC_MDEL = 2
BC_PER = 9 0
BC_CPER = 43 1
BC_CLK = 1
BC_MCLK = 0
BC_BAUD = 0 0
BC_UART = 0xd0
BC_PIT = 0xff
BC_IMM = 5
BATE_CONFIG = $(BC_MAGIC) $(BC_VERS) \
$(BC_TRIG) $(BC_SEND) $(BC_PWR) $(BC_TEST) \
$(BC_SPI) $(BC_MDEL) $(BC_PER) $(BC_CPER) \
$(BC_CLK) $(BC_MCLK) $(BC_BAUD) $(BC_UART) \
$(BC_PIT) $(BC_IMM)
bate.config:
$(AD) -U userrow:v:"$(BATE_CONFIG)":m \
|| $(AD) -U userrow:w:"$(BATE_CONFIG)":m
clean:
rm -f *.hex *.o *.s *.map *.elf *.d
.PHONY: eeprom.eeprom
eeprom.eeprom:
$(AD) -U eeprom:r:$@
%.eeprom.burn: %.eeprom
$(AD) -U eeprom:v:$< || $(AD) -U eeprom:w:$<
calib: calib.c mul.c
gcc -DCALIB_DEBUG -o $@ $<
mul: mul.c
gcc -DMUL_TEST -o $@ $<

View file

@ -1 +0,0 @@
stephan@blaulicht.31918:1708279459

View file

@ -121,15 +121,15 @@ fuse: $(PROJ).fuse$F
# see bate.c: Configuration in USERROW # see bate.c: Configuration in USERROW
BC_MAGIC = 0xba BC_MAGIC = 0xba
BC_VERS = 6 BC_VERS = 8
BC_TRIG = 0x28 BC_TRIG = 0x29
BC_SEND = 0x59 BC_SEND = 0x59
BC_PWR = 0x2d BC_PWR = 0x7c
BC_TEST = 0 BC_TEST = 0
BC_SPI = 0xff BC_SPI = 0xff
BC_MDEL = 2 BC_MDEL = 2
BC_PER = 9 0 BC_PER = 9
BC_CPER = 43 1 BC_CPER = 30
BC_CLK = 1 BC_CLK = 1
BC_MCLK = 0 BC_MCLK = 0

View file

@ -364,7 +364,7 @@ struct config config = {
.triggers = TRIGGER_CLOCK | TRIGGER_IMMED, .triggers = TRIGGER_CLOCK | TRIGGER_IMMED,
.mclk_delay = 2, .mclk_delay = 2,
.period = 59, .period = 59,
.cperiod = 3599, .confp = 59,
.uart_mode = UART_Tx | UART_Rx | UART_SFD, .uart_mode = UART_Tx | UART_Rx | UART_SFD,
}; };
@ -426,9 +426,9 @@ int main()
uint8_t trigger = TRIGGER_CONT | TRIGGER_ONCE; uint8_t trigger = TRIGGER_CONT | TRIGGER_ONCE;
uint8_t mclk_delay = 0; uint8_t mclk_delay = 0;
static uint16_t trigger_clock = 0; uint8_t trigger_clock = 0;
static uint16_t config_clock = 0; uint8_t config_clock = 0;
uint8_t send_config = 1; uint8_t send_config = 0;
uint8_t uart_rx_delay = 0; uint8_t uart_rx_delay = 0;
immediate = config.immediate; immediate = config.immediate;
test_calib = config.calib_test; test_calib = config.calib_test;
@ -444,10 +444,6 @@ int main()
trigger |= TRIGGER_CLOCK; trigger |= TRIGGER_CLOCK;
trigger_clock = config.period; trigger_clock = config.period;
} }
if (config.send & SEND_CONFIG && !config_clock--) {
send_config = 1;
config_clock = config.cperiod;
}
if (uart_rx_delay) if (uart_rx_delay)
uart_rx_delay--; uart_rx_delay--;
} }
@ -527,6 +523,11 @@ int main()
continue; continue;
} }
if (config.send & SEND_CONFIG && !config_clock--) {
send_config = 1;
config_clock = config.confp;
}
if (immediate) if (immediate)
immediate--; immediate--;
@ -538,7 +539,6 @@ int main()
start_adc(); start_adc();
if (send_config) { if (send_config) {
send_config = 0;
send_hex('S', (uint8_t *)&SIGROW, sizeof(SIGROW_t), 0); send_hex('S', (uint8_t *)&SIGROW, sizeof(SIGROW_t), 0);
send_hex('F', (uint8_t *)&FUSE, sizeof(FUSE_t), 1); send_hex('F', (uint8_t *)&FUSE, sizeof(FUSE_t), 1);
send_hex('U', (uint8_t *)&USERROW, sizeof(USERROW_t), 1); send_hex('U', (uint8_t *)&USERROW, sizeof(USERROW_t), 1);
@ -583,5 +583,6 @@ int main()
uart_tick(); uart_tick();
trigger = TRIGGER_CONT; trigger = TRIGGER_CONT;
send_config = 0;
} }
} }

View file

@ -17,8 +17,8 @@ struct config {
uint8_t calib_test; uint8_t calib_test;
uint8_t spi_div; uint8_t spi_div;
uint8_t mclk_delay; uint8_t mclk_delay;
uint16_t period; uint8_t period;
uint16_t cperiod; uint8_t confp;
uint8_t cpu_clk; uint8_t cpu_clk;
uint8_t mclk_period; uint8_t mclk_period;
uint16_t baud_div; uint16_t baud_div;
@ -30,7 +30,7 @@ struct config {
enum magic_flags { enum magic_flags {
USE_USERROW = 0xBA, USE_USERROW = 0xBA,
USE_VERSION = 0x07, USE_VERSION = 0x08,
}; };
enum power_flags { enum power_flags {
POWER_DOWN = 0x01, POWER_DOWN = 0x01,