diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2015-07-15 12:03:49 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2015-07-15 12:03:49 +0900 |
commit | d19570954e9c21f31b2aa8fe067221d68f3d2f51 (patch) | |
tree | f21e1c655798d00c403a29dc9dc1110bb908f5d0 /example-fsm-55 | |
parent | 44b4bf640f383f2d2f198df3a9cf3294e20a39ec (diff) |
Update example for FSM-55
Diffstat (limited to 'example-fsm-55')
l--------- | example-fsm-55/board.h | 1 | ||||
-rw-r--r-- | example-fsm-55/hacker-emblem.ld | 36 | ||||
-rw-r--r-- | example-fsm-55/sys.c | 43 | ||||
-rw-r--r-- | example-fsm-55/sys.h | 17 |
4 files changed, 62 insertions, 35 deletions
diff --git a/example-fsm-55/board.h b/example-fsm-55/board.h new file mode 120000 index 0000000..f07842a --- /dev/null +++ b/example-fsm-55/board.h @@ -0,0 +1 @@ +../board/board-fsm-55.h
\ No newline at end of file diff --git a/example-fsm-55/hacker-emblem.ld b/example-fsm-55/hacker-emblem.ld index 7974b10..40bf480 100644 --- a/example-fsm-55/hacker-emblem.ld +++ b/example-fsm-55/hacker-emblem.ld @@ -1,26 +1,19 @@ /* - * ST32F103 memory setup. + * ST32F0 memory setup. */ __main_stack_size__ = 0x0100; /* Exception handlers */ -__process0_stack_size__ = 0x0100; /* Main program */ +__process0_stack_size__ = 0x0100; /* Main program */ __process1_stack_size__ = 0x0100; /* first thread program */ __process2_stack_size__ = 0x0100; /* second thread program */ __process3_stack_size__ = 0x0100; /* third thread program */ MEMORY { -/* flash0 : org = 0x08000000, len = 4k flash : org = 0x08000000+0x1000, len = 60k -*/ - flash0 : org = 0x08000000, len = 1k - flash : org = 0x08000000+0x0400, len = 60k ram : org = 0x20000000, len = 20k } -__flash_start__ = 0x08001000; -__flash_end__ = 0x08020000; - __ram_start__ = ORIGIN(ram); __ram_size__ = 20k; __ram_end__ = __ram_start__ + __ram_size__; @@ -29,24 +22,20 @@ SECTIONS { . = 0; - .sys : ALIGN(16) SUBALIGN(8) + .sys : ALIGN(4) SUBALIGN(4) { - _sys = .; - KEEP(*(.vectors)) + _sys = .; + KEEP(*(.vectors)) . = ALIGN(16); KEEP(*(.sys.version)) - KEEP(*(.sys.board)) + KEEP(*(.sys.board_id)) + KEEP(*(.sys.board_name)) build/sys.o(.text) build/sys.o(.text.*) - build/sys.o(.rodata) + build/sys.o(.rodata) build/sys.o(.rodata.*) . = ALIGN(1024); -/* - *(.sys.0) - *(.sys.1) - *(.sys.2) -*/ - } > flash0 + } > flash0 =0xffffffff _text = .; @@ -66,6 +55,7 @@ SECTIONS *(.glue_7t) *(.glue_7) *(.gcc*) + . = ALIGN(8); } > flash .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash @@ -98,15 +88,15 @@ SECTIONS __process3_stack_base__ = .; . += __process3_stack_size__; . = ALIGN(8); - __process_stack3_end__ = .; + __process3_stack_end__ = .; __process2_stack_base__ = .; . += __process2_stack_size__; . = ALIGN(8); - __process_stack2_end__ = .; + __process2_stack_end__ = .; __process1_stack_base__ = .; . += __process1_stack_size__; . = ALIGN(8); - __process_stack1_end__ = .; + __process1_stack_end__ = .; __process0_stack_base__ = .; . += __process0_stack_size__; . = ALIGN(8); diff --git a/example-fsm-55/sys.c b/example-fsm-55/sys.c index 06af0c6..a37c393 100644 --- a/example-fsm-55/sys.c +++ b/example-fsm-55/sys.c @@ -243,16 +243,25 @@ flash_check_blank (const uint8_t *p_start, size_t size) return 1; } -extern uint8_t __flash_start__, __flash_end__; +#define FLASH_START_ADDR 0x08000000 /* Fixed for all STM32F0/F1. */ +#define FLASH_OFFSET 0x1000 /* First pages are not-writable + when protected. */ +#if defined(__ARM_ARCH_6M__) +#define FLASH_SIZE_REG ((uint16_t *)0x1ffff7cc) +#define CHIP_ID_REG ((uint32_t *)0x40015800) +#else +#define FLASH_SIZE_REG ((uint16_t *)0x1ffff7e0) +#define CHIP_ID_REG ((uint32_t *)0xe0042000) +#endif +#define FLASH_START (FLASH_START_ADDR+FLASH_OFFSET) static int flash_write (uint32_t dst_addr, const uint8_t *src, size_t len) { int status; - uint32_t flash_start = (uint32_t)&__flash_start__; - uint32_t flash_end = (uint32_t)&__flash_end__; + uint32_t flash_end = FLASH_START_ADDR + (*FLASH_SIZE_REG)*1024; - if (dst_addr < flash_start || dst_addr + len > flash_end) + if (dst_addr < FLASH_START || dst_addr + len > flash_end) return 0; while (len) @@ -305,17 +314,21 @@ flash_protect (void) static void __attribute__((naked)) flash_erase_all_and_exec (void (*entry)(void)) { - uint32_t addr = (uint32_t)&__flash_start__; - uint32_t end = (uint32_t)&__flash_end__; + uint32_t addr = FLASH_START; + uint32_t end = FLASH_START_ADDR + (*FLASH_SIZE_REG)*1024; + uint32_t page_size = 1024; int r; + if (((*CHIP_ID_REG) & 0xfff) == 0x0414) + page_size = 2048; + while (addr < end) { r = flash_erase_page (addr); if (r != 0) break; - addr += FLASH_PAGE_SIZE; + addr += page_size; } if (addr >= end) @@ -370,8 +383,8 @@ reset (void) #if defined(__ARM_ARCH_6M__) asm volatile ("cpsid i\n\t" /* Mask all interrupts. */ "ldr r0, 1f\n\t" /* r0 = RAM start */ - "mov r1, pc\n\t" /* r1 = (PC + 0x0400) & ~0x03ff */ - "mov r2, #0x04\n\t" + "mov r1, pc\n\t" /* r1 = (PC + 0x1000) & ~0x0fff */ + "mov r2, #0x10\n\t" "lsl r2, #8\n\t" "add r1, r1, r2\n\t" "sub r2, r2, #1\n\t" @@ -436,7 +449,13 @@ handler vector[] __attribute__ ((section(".vectors"))) = { const uint8_t sys_version[8] __attribute__((section(".sys.version"))) = { 3*2+2, /* bLength */ - 0x03, /* bDescriptorType = USB_STRING_DESCRIPTOR_TYPE*/ - /* sys version: "2.0" */ - '2', 0, '.', 0, '0', 0, + 0x03, /* bDescriptorType = USB_STRING_DESCRIPTOR_TYPE */ + /* sys version: "2.1" */ + '2', 0, '.', 0, '1', 0, }; + +const uint32_t __attribute__((section(".sys.board_id"))) +sys_board_id = BOARD_ID; + +const uint8_t __attribute__((section(".sys.board_name"))) +sys_board_name[] = BOARD_NAME; diff --git a/example-fsm-55/sys.h b/example-fsm-55/sys.h index 25d33f1..9bc5f08 100644 --- a/example-fsm-55/sys.h +++ b/example-fsm-55/sys.h @@ -1,4 +1,21 @@ +#if defined(__ARM_ARCH_6M__) +#define BOARD_ID_STM32F0_DISCOVERY 0xde4b4bc1 +#define BOARD_ID_FSM_55 0x83433c76 +#else +#define BOARD_ID_CQ_STARM 0xc5480875 +#define BOARD_ID_FST_01_00 0x613870a9 +#define BOARD_ID_FST_01 0x696886af +#define BOARD_ID_MAPLE_MINI 0x7a445272 +#define BOARD_ID_OLIMEX_STM32_H103 0xf92bb594 +#define BOARD_ID_STBEE_MINI 0x1f341961 +#define BOARD_ID_STBEE 0x945c37e8 +#define BOARD_ID_STM32_PRIMER2 0x21e5798d +#define BOARD_ID_STM8S_DISCOVERY 0x2f0976bb +#endif + extern const uint8_t sys_version[8]; +extern const uint32_t sys_board_id; +extern const uint8_t sys_board_name[]; typedef void (*handler)(void); extern handler vector[16]; |