summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-07-17 01:24:52 -0700
committerKeith Packard <keithp@keithp.com>2012-07-17 01:24:52 -0700
commita5d873d47b3b16ca32559b4de668bf07b25eddb0 (patch)
tree47c2ca395d776b4e4574ca59dbfdb49d8b6ea870
parent20877ae9de8bb5d3a29e2a96024e53afbd396f55 (diff)
altos: Place STM config values at fixed addresses for re-use
Just like cc1111, stick the serial number and radio calibration values at known fixed addresses so that when re-flashing the board, we can go find the existing values. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--ao-tools/ao-load/ao-load.c2
-rw-r--r--src/avr/ao_arch.h6
-rw-r--r--src/avr/ao_romconfig.c2
-rw-r--r--src/cc1111/ao_arch.h10
-rw-r--r--src/core/ao_product.c2
-rw-r--r--src/drivers/ao_cc1120.c2
-rw-r--r--src/drivers/ao_companion.c4
-rw-r--r--src/megametrum-v0.1/Makefile2
-rw-r--r--src/megametrum-v0.1/ao_pins.h4
-rw-r--r--src/stm-bringup/Makefile4
-rw-r--r--src/stm/altos.ld21
-rw-r--r--src/stm/ao_arch.h12
-rw-r--r--src/stm/ao_romconfig.c7
13 files changed, 54 insertions, 24 deletions
diff --git a/ao-tools/ao-load/ao-load.c b/ao-tools/ao-load/ao-load.c
index 1b729d39..e3cef4a5 100644
--- a/ao-tools/ao-load/ao-load.c
+++ b/ao-tools/ao-load/ao-load.c
@@ -197,7 +197,7 @@ main (int argc, char **argv)
serial = strtoul(serial_string, NULL, 0);
if (!serial)
-(argv[0]);
+ usage(argv[0]);
serial_int[0] = serial & 0xff;
serial_int[1] = (serial >> 8) & 0xff;
diff --git a/src/avr/ao_arch.h b/src/avr/ao_arch.h
index c775dab6..a14d0ade 100644
--- a/src/avr/ao_arch.h
+++ b/src/avr/ao_arch.h
@@ -67,7 +67,11 @@ extern void putchar(char c);
extern char getchar(void);
extern void ao_avr_stdio_init(void);
-extern const uint16_t ao_serial_number;
+#define AO_ROMCONFIG_VERSION 2
+
+#define AO_ROMCONFIG_SYMBOL(a) const
+
+extern AO_ROMCONFIG_SYMBOL(0) uint16_t ao_serial_number;
#define AVR_PUSH8(stack, val) (*((stack)--) = (val))
diff --git a/src/avr/ao_romconfig.c b/src/avr/ao_romconfig.c
index bbb677e2..ecc19c76 100644
--- a/src/avr/ao_romconfig.c
+++ b/src/avr/ao_romconfig.c
@@ -17,4 +17,4 @@
#include "ao.h"
-const uint16_t ao_serial_number = 0;
+AO_ROMCONFIG_SYMBOL (0) uint16_t ao_serial_number = 0;
diff --git a/src/cc1111/ao_arch.h b/src/cc1111/ao_arch.h
index 8d9e4952..06b04b93 100644
--- a/src/cc1111/ao_arch.h
+++ b/src/cc1111/ao_arch.h
@@ -59,10 +59,12 @@
#define AO_ROMCONFIG_VERSION 2
-extern __code __at (0x00a0) uint16_t ao_romconfig_version;
-extern __code __at (0x00a2) uint16_t ao_romconfig_check;
-extern __code __at (0x00a4) uint16_t ao_serial_number;
-extern __code __at (0x00a6) uint32_t ao_radio_cal;
+#define AO_ROMCONFIG_SYMBOL(a) __code __at(a)
+
+extern AO_ROMCONFIG_SYMBOL(0x00a0) uint16_t ao_romconfig_version;
+extern AO_ROMCONFIG_SYMBOL(0x00a2) uint16_t ao_romconfig_check;
+extern AO_ROMCONFIG_SYMBOL(0x00a4) uint16_t ao_serial_number;
+extern AO_ROMCONFIG_SYMBOL(0x00a6) uint32_t ao_radio_cal;
#ifndef HAS_USB
#error Please define HAS_USB
diff --git a/src/core/ao_product.c b/src/core/ao_product.c
index 67ec6793..ec91b978 100644
--- a/src/core/ao_product.c
+++ b/src/core/ao_product.c
@@ -29,7 +29,7 @@ const char ao_product[] = AO_iProduct_STRING;
#if HAS_USB
#include "ao_usb.h"
/* USB descriptors in one giant block of bytes */
-__code __at(0x00aa) uint8_t ao_usb_descriptors [] =
+AO_ROMCONFIG_SYMBOL(0x00aa) uint8_t ao_usb_descriptors [] =
{
/* Device descriptor */
0x12,
diff --git a/src/drivers/ao_cc1120.c b/src/drivers/ao_cc1120.c
index 569df3b7..97a434d8 100644
--- a/src/drivers/ao_cc1120.c
+++ b/src/drivers/ao_cc1120.c
@@ -29,7 +29,7 @@ uint8_t ao_radio_in_recv;
#define CC1120_DEBUG AO_FEC_DEBUG
#define CC1120_TRACE 0
-const uint32_t ao_radio_cal = 0x6ca333;
+extern const uint32_t ao_radio_cal;
#define FOSC 32000000
diff --git a/src/drivers/ao_companion.c b/src/drivers/ao_companion.c
index 6e0bd2ec..c749adea 100644
--- a/src/drivers/ao_companion.c
+++ b/src/drivers/ao_companion.c
@@ -68,7 +68,7 @@ ao_companion_get_setup(void)
ao_spi_recv(&ao_companion_setup, sizeof (ao_companion_setup), AO_COMPANION_SPI_BUS);
COMPANION_DESELECT();
return (ao_companion_setup.board_id ==
- ~ao_companion_setup.board_id_inverse);
+ (uint16_t) ~ao_companion_setup.board_id_inverse);
}
static void
@@ -116,6 +116,8 @@ ao_companion_status(void) __reentrant
{
uint8_t i;
printf("Companion running: %d\n", ao_companion_running);
+ if (!ao_companion_running)
+ return;
printf("device: %d\n", ao_companion_setup.board_id);
printf("update period: %d\n", ao_companion_setup.update_period);
printf("channels: %d\n", ao_companion_setup.channels);
diff --git a/src/megametrum-v0.1/Makefile b/src/megametrum-v0.1/Makefile
index a519609e..4a4c983a 100644
--- a/src/megametrum-v0.1/Makefile
+++ b/src/megametrum-v0.1/Makefile
@@ -92,7 +92,7 @@ OBJ=$(SRC:.c=.o)
all: $(PROG)
-$(PROG): Makefile $(OBJ)
+$(PROG): Makefile $(OBJ) altos.ld
$(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(SAT_CLIB) -lgcc
../altitude.h: make-altitude
diff --git a/src/megametrum-v0.1/ao_pins.h b/src/megametrum-v0.1/ao_pins.h
index 2c438f6c..6b0f9832 100644
--- a/src/megametrum-v0.1/ao_pins.h
+++ b/src/megametrum-v0.1/ao_pins.h
@@ -268,6 +268,10 @@ struct ao_adc {
* Radio (cc1120)
*/
+/* gets pretty close to 434.550 */
+
+#define AO_RADIO_CAL_DEFAULT 0x6ca333
+
#define AO_FEC_DEBUG 0
#define AO_CC1120_SPI_CS_PORT (&stm_gpioc)
#define AO_CC1120_SPI_CS_PIN 5
diff --git a/src/stm-bringup/Makefile b/src/stm-bringup/Makefile
index 01c80614..d45e836d 100644
--- a/src/stm-bringup/Makefile
+++ b/src/stm-bringup/Makefile
@@ -16,7 +16,7 @@ DEF_CFLAGS=-g -std=gnu99 -Os -mlittle-endian -mthumb -ffreestanding -nostdlib -I
# to run from SRAM
LD_FLAGS_RAM=-L../stm -Wl,-Taltos-ram.ld
-LD_FLAGS=-L../stm -Wl,-Taltos.ld
+LD_FLAGS=-L../stm -Wl,-Tbringup.ld
CFLAGS=$(DEF_CFLAGS) -mcpu=cortex-m3 -DCONFIG_STM32L_DISCOVERY
@@ -28,7 +28,7 @@ all: bringup-ram.elf bringup.elf
%.bin: %.elf
$(OBJCOPY) -O binary $^ $@
-bringup.elf: $(OBJ) $(C_LIB) altos.ld
+bringup.elf: $(OBJ) $(C_LIB) bringup.ld
$(CC) $(CFLAGS) $(LD_FLAGS) -o $@ $(OBJ) $(C_LIB) -lgcc
bringup-ram.elf: $(OBJ) $(C_LIB) altos-ram.ld
diff --git a/src/stm/altos.ld b/src/stm/altos.ld
index f5a84f4c..f78a45d6 100644
--- a/src/stm/altos.ld
+++ b/src/stm/altos.ld
@@ -25,18 +25,22 @@ INCLUDE registers.ld
EXTERN (stm_interrupt_vector)
SECTIONS {
- . = ORIGIN(rom);
-
/*
* Rom contents
*/
- __text_start__ = .;
-
- .text : {
+ .text ORIGIN(rom) : {
+ __text_start__ = .;
*(.interrupt) /* Interrupt vectors */
+
+ . = ORIGIN(rom) + 0x100;
+
+ ao_romconfig.o(.romconfig*)
+ ao_product.o(.romconfig*)
+
*(.text*) /* Executable code */
*(.rodata*) /* Constants */
+
} > rom
.ARM.exidx : {
@@ -44,12 +48,10 @@ SECTIONS {
__text_end__ = .;
} > rom
- . = ORIGIN(ram);
- __data_start__ = .;
-
/* Data -- relocated to RAM, but written to ROM
*/
- .data : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) {
+ .data ORIGIN(ram) : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) {
+ __data_start__ = .;
*(.data) /* initialized data */
__data_end__ = .;
__bss_start__ = .;
@@ -63,7 +65,6 @@ SECTIONS {
PROVIDE(__stack__ = ORIGIN(ram) + LENGTH(ram));
PROVIDE(end = .);
-
}
ENTRY(start);
diff --git a/src/stm/ao_arch.h b/src/stm/ao_arch.h
index d8fa3e89..484ce89e 100644
--- a/src/stm/ao_arch.h
+++ b/src/stm/ao_arch.h
@@ -59,7 +59,19 @@ extern void putchar(char c);
extern char getchar(void);
extern void ao_avr_stdio_init(void);
+
+/*
+ * ao_romconfig.c
+ */
+
+#define AO_ROMCONFIG_VERSION 2
+
+#define AO_ROMCONFIG_SYMBOL(a) __attribute__((section(".romconfig"))) const
+
+extern const uint16_t ao_romconfig_version;
+extern const uint16_t ao_romconfig_check;
extern const uint16_t ao_serial_number;
+extern const uint32_t ao_radio_cal;
#define ARM_PUSH32(stack, val) (*(--(stack)) = (val))
diff --git a/src/stm/ao_romconfig.c b/src/stm/ao_romconfig.c
index 84317458..cbb922ec 100644
--- a/src/stm/ao_romconfig.c
+++ b/src/stm/ao_romconfig.c
@@ -17,4 +17,9 @@
#include "ao.h"
-const uint16_t ao_serial_number = 58;
+AO_ROMCONFIG_SYMBOL (0) uint16_t ao_romconfig_version = AO_ROMCONFIG_VERSION;
+AO_ROMCONFIG_SYMBOL (0) uint16_t ao_romconfig_check = ~AO_ROMCONFIG_VERSION;
+AO_ROMCONFIG_SYMBOL (0) uint16_t ao_serial_number = 0;
+#ifdef AO_RADIO_CAL_DEFAULT
+AO_ROMCONFIG_SYMBOL (0) uint32_t ao_radio_cal = AO_RADIO_CAL_DEFAULT;
+#endif