summaryrefslogtreecommitdiff
path: root/src/stm
diff options
context:
space:
mode:
Diffstat (limited to 'src/stm')
-rw-r--r--src/stm/altos.ld21
-rw-r--r--src/stm/ao_arch.h12
-rw-r--r--src/stm/ao_romconfig.c7
3 files changed, 29 insertions, 11 deletions
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