projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Place STM config values at fixed addresses for re-use
[fw/altos]
/
src
/
stm
/
ao_arch.h
diff --git
a/src/stm/ao_arch.h
b/src/stm/ao_arch.h
index 62af86f776faba6cd1ac17c64256b4336e6c06aa..484ce89eb5892232e4109ea232a66cffeba3614f 100644
(file)
--- a/
src/stm/ao_arch.h
+++ b/
src/stm/ao_arch.h
@@
-25,7
+25,7
@@
* STM32L definitions and code fragments for AltOS
*/
* STM32L definitions and code fragments for AltOS
*/
-#define AO_STACK_SIZE
1024
+#define AO_STACK_SIZE
668
#define AO_LED_TYPE uint16_t
#define AO_LED_TYPE uint16_t
@@
-59,7
+59,19
@@
extern void putchar(char c);
extern char getchar(void);
extern void ao_avr_stdio_init(void);
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 uint16_t ao_serial_number;
+extern const uint32_t ao_radio_cal;
#define ARM_PUSH32(stack, val) (*(--(stack)) = (val))
#define ARM_PUSH32(stack, val) (*(--(stack)) = (val))
@@
-74,12
+86,6
@@
extern const uint16_t ao_serial_number;
uint32_t a = (uint32_t) start; \
int i; \
\
uint32_t a = (uint32_t) start; \
int i; \
\
- /* APSR */ \
- ARM_PUSH32(sp, 0); \
- \
- /* PRIMASK with interrupts enabled */ \
- ARM_PUSH32(sp, 0); \
- \
/* Return address (goes into LR) */ \
ARM_PUSH32(sp, a); \
\
/* Return address (goes into LR) */ \
ARM_PUSH32(sp, a); \
\
@@
-88,58
+94,70
@@
extern const uint16_t ao_serial_number;
while (i--) \
ARM_PUSH32(sp, 0); \
\
while (i--) \
ARM_PUSH32(sp, 0); \
\
+ /* APSR */ \
+ ARM_PUSH32(sp, 0); \
+ \
+ /* PRIMASK with interrupts enabled */ \
+ ARM_PUSH32(sp, 0); \
+ \
task->sp = sp; \
} while (0);
#define ao_arch_save_regs() do { \
task->sp = sp; \
} while (0);
#define ao_arch_save_regs() do { \
-
uint32_t apsr;
\
-
uint32_t primask;
\
+
/* Save general registers */
\
+
asm("push {r0-r12,lr}\n");
\
\
/* Save APSR */ \
\
/* Save APSR */ \
- asm("mrs
%0,apsr" : "=&r" (apsr));
\
- asm("push {
%0}" : : "r" (apsr));
\
+ asm("mrs
r0,apsr");
\
+ asm("push {
r0}");
\
\
/* Save PRIMASK */ \
\
/* Save PRIMASK */ \
- asm("mrs
%0,primask" : "=&r" (primask));
\
- asm("push {
%0}" : : "r" (primask));
\
+ asm("mrs
r0,primask");
\
+ asm("push {
r0}");
\
\
\
- /*
Save general registers */
\
-
asm("push {r0-r12,lr}\n");
\
+ /*
Enable interrupts */
\
+
sei();
\
} while (0)
#define ao_arch_save_stack() do { \
uint32_t *sp; \
asm("mov %0,sp" : "=&r" (sp) ); \
ao_cur_task->sp = (sp); \
} while (0)
#define ao_arch_save_stack() do { \
uint32_t *sp; \
asm("mov %0,sp" : "=&r" (sp) ); \
ao_cur_task->sp = (sp); \
- if ((uint8_t *) sp <
ao_cur_task->stack)
\
+ if ((uint8_t *) sp <
&ao_cur_task->stack[0])
\
ao_panic (AO_PANIC_STACK); \
} while (0)
ao_panic (AO_PANIC_STACK); \
} while (0)
-#define ao_arch_isr_stack() /* nothing */
+#if 0
+#define ao_arch_isr_stack() do { \
+ uint32_t *sp = (uint32_t *) 0x20004000; \
+ asm("mov %0,sp" : "=&r" (sp) ); \
+ } while (0)
+#else
+#define ao_arch_isr_stack()
+#endif
+
#define ao_arch_cpu_idle() do { \
#define ao_arch_cpu_idle() do { \
- asm("wfi");
\
+ asm("wfi"); \
} while (0)
#define ao_arch_restore_stack() do { \
uint32_t sp; \
} while (0)
#define ao_arch_restore_stack() do { \
uint32_t sp; \
- uint32_t primask; \
- uint32_t apsr; \
sp = (uint32_t) ao_cur_task->sp; \
\
/* Switch stacks */ \
asm("mov sp, %0" : : "r" (sp) ); \
\
sp = (uint32_t) ao_cur_task->sp; \
\
/* Switch stacks */ \
asm("mov sp, %0" : : "r" (sp) ); \
\
- /* Restore general registers */ \
- asm("pop {r0-r12,lr}\n"); \
- \
/* Restore PRIMASK */ \
/* Restore PRIMASK */ \
- asm("pop {
%0}" : "=&r" (primask) );
\
- asm("msr primask,
%0" : : "r" (primask) );
\
+ asm("pop {
r0}");
\
+ asm("msr primask,
r0");
\
\
/* Restore APSR */ \
\
/* Restore APSR */ \
- asm("pop {%0}" : "=&r" (apsr) ); \
- asm("msr apsr,%0" : : "r" (apsr) ); \
+ asm("pop {r0}"); \
+ asm("msr apsr,r0"); \
+ \
+ /* Restore general registers */ \
+ asm("pop {r0-r12,lr}\n"); \
\
/* Return to calling function */ \
asm("bx lr"); \
\
/* Return to calling function */ \
asm("bx lr"); \
@@
-175,6
+193,11
@@
extern const uint16_t ao_serial_number;
#define AO_TIM91011_CLK (2 * AO_PCLK2)
#endif
#define AO_TIM91011_CLK (2 * AO_PCLK2)
#endif
+#define AO_STM_NVIC_HIGH_PRIORITY 4
+#define AO_STM_NVIC_CLOCK_PRIORITY 6
+#define AO_STM_NVIC_MED_PRIORITY 8
+#define AO_STM_NVIC_LOW_PRIORITY 10
+
void ao_lcd_stm_init(void);
void ao_lcd_font_init(void);
void ao_lcd_stm_init(void);
void ao_lcd_font_init(void);
@@
-217,7
+240,7
@@
ao_serial3_pollchar(void);
void
ao_serial3_set_speed(uint8_t speed);
void
ao_serial3_set_speed(uint8_t speed);
-extern
uint32_t
ao_radio_cal;
+extern
const uint32_t
ao_radio_cal;
void
ao_adc_init();
void
ao_adc_init();