aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarti Bolivar <mbolivar@leaflabs.com>2011-03-16 17:37:21 -0400
committerMarti Bolivar <mbolivar@leaflabs.com>2011-03-16 17:56:54 -0400
commit4862d1eae5813e278cfbb1d5e0a040010b92eb3f (patch)
treeb0771810e7d1da7d254375b4758128dce3793668
parent04ee498b46393250c31606e526c28cb3b2b870ed (diff)
downloadlibrambutan-4862d1eae5813e278cfbb1d5e0a040010b92eb3f.tar.gz
librambutan-4862d1eae5813e278cfbb1d5e0a040010b92eb3f.zip
Maple RET6 edition support
-rw-r--r--Makefile7
-rw-r--r--examples/test-session.cpp9
-rw-r--r--libmaple/libmaple.h7
-rw-r--r--libmaple/pwr.c2
-rw-r--r--libmaple/rules.mk1
-rw-r--r--libmaple/usb/usb_config.h10
-rw-r--r--support/ld/maple_RET6/flash.ld18
-rw-r--r--support/ld/maple_RET6/jtag.ld17
-rw-r--r--support/ld/maple_RET6/ram.ld18
-rw-r--r--support/ld/maple_native/ram.ld1
-rwxr-xr-xsupport/scripts/copy-to-ide18
-rw-r--r--wirish/boards.cpp89
-rw-r--r--wirish/boards.h15
-rw-r--r--wirish/wirish.cpp2
14 files changed, 194 insertions, 20 deletions
diff --git a/Makefile b/Makefile
index 3804421..d31c9ed 100644
--- a/Makefile
+++ b/Makefile
@@ -31,6 +31,13 @@ ifeq ($(BOARD), maple_mini)
ERROR_LED_PIN := 1
DENSITY := STM32_MEDIUM_DENSITY
endif
+ifeq ($(BOARD), maple_RET6)
+ MCU := STM32F103RE
+ PRODUCT_ID := 0003
+ ERROR_LED_PORT := GPIOA
+ ERROR_LED_PIN := 5
+ DENSITY := STM32_HIGH_DENSITY
+endif
# Useful paths
ifeq ($(LIB_MAPLE_HOME),)
diff --git a/examples/test-session.cpp b/examples/test-session.cpp
index ea631ca..a147e06 100644
--- a/examples/test-session.cpp
+++ b/examples/test-session.cpp
@@ -20,7 +20,7 @@
int rate = 0;
-#if defined(BOARD_maple)
+#if defined(BOARD_maple) || defined(BOARD_maple_RET6)
const uint8 pwm_pins[] =
{0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 24, 25, 27, 28};
const uint8 adc_pins[] =
@@ -617,15 +617,14 @@ void init_all_timers(uint16 prescale) {
timer_init(TIMER4, prescale);
#ifdef STM32_HIGH_DENSITY
timer_init(TIMER5, prescale);
- timer_init(TIMER6, prescale);
- timer_init(TIMER7, prescale);
+ // timer_init(TIMER6, prescale);
+ // timer_init(TIMER7, prescale);
timer_init(TIMER8, prescale);
#endif
}
-
// Force init to be called *first*, i.e. before static object allocation.
-// Otherwise, statically allocated object that need libmaple may fail.
+// Otherwise, statically allocated objects that need libmaple may fail.
__attribute__(( constructor )) void premain() {
init();
}
diff --git a/libmaple/libmaple.h b/libmaple/libmaple.h
index 0bbd34e..7814730 100644
--- a/libmaple/libmaple.h
+++ b/libmaple/libmaple.h
@@ -56,7 +56,6 @@
/* e.g., LeafLabs Maple Native */
#define NR_GPIO_PORTS 7
-
#define SRAM_SIZE 0x10000
#elif defined(MCU_STM32F103CB)
@@ -69,6 +68,12 @@
#define SRAM_SIZE 0x5000
+#elif defined(MCU_STM32F103RE)
+ /* e.g., LeafLabs Maple RET6 edition */
+
+ #define NR_GPIO_PORTS 4
+ #define SRAM_SIZE 0x10000
+
#else
#error "No MCU type specified. Add something like -DMCU_STM32F103RB " \
diff --git a/libmaple/pwr.c b/libmaple/pwr.c
index b43193e..d63a92d 100644
--- a/libmaple/pwr.c
+++ b/libmaple/pwr.c
@@ -28,7 +28,7 @@
#include "rcc.h"
pwr_dev pwr = {
- .regs = PWR_BASE;
+ .regs = PWR_BASE,
};
const pwr_dev *PWR = &pwr;
diff --git a/libmaple/rules.mk b/libmaple/rules.mk
index b87595d..b264b96 100644
--- a/libmaple/rules.mk
+++ b/libmaple/rules.mk
@@ -22,6 +22,7 @@ cSRCS_$(d) := adc.c \
gpio.c \
iwdg.c \
nvic.c \
+ pwr.c \
rcc.c \
spi.c \
syscalls.c \
diff --git a/libmaple/usb/usb_config.h b/libmaple/usb/usb_config.h
index 9003da9..0860b90 100644
--- a/libmaple/usb/usb_config.h
+++ b/libmaple/usb/usb_config.h
@@ -28,7 +28,7 @@
#define RESET_DELAY (100)
#define USB_CONFIG_MAX_POWER (100 >> 1)
-#if defined(BOARD_maple)
+#if defined(BOARD_maple) || defined(BOARD_maple_RET6)
/* USB Identifier numbers */
#define VCOM_ID_PRODUCT 0x0004
@@ -37,13 +37,13 @@
#elif defined(BOARD_maple_mini)
- #define VCOM_ID_PRODUCT 0x0005
+ #define VCOM_ID_PRODUCT 0x0004
#define USB_DISC_DEV GPIOB
#define USB_DISC_PIN 9
#elif defined(BOARD_maple_native)
- #define VCOM_ID_PRODUCT 0x0006
+ #define VCOM_ID_PRODUCT 0x0004
#define USB_DISC_DEV GPIOB
#define USB_DISC_PIN 8
@@ -51,8 +51,8 @@
#error ("Sorry! the USB stack relies on LeafLabs board-specific " \
"configuration right now. If you want, you can pretend you're one " \
- "of our boards; i.e., #define BOARD_maple, BOARD_maple_mini, or " \
- "BOARD_maple_native according to what matches your MCU best. " \
+ "of our boards; i.e., #define BOARD_maple, BOARD_maple_mini, or " \
+ "BOARD_maple_native according to what matches your MCU best. " \
"You should also take a look at libmaple/usb/descriptors.c; we make " \
"some assumptions there that you probably won't like.")
diff --git a/support/ld/maple_RET6/flash.ld b/support/ld/maple_RET6/flash.ld
new file mode 100644
index 0000000..2a4f0c7
--- /dev/null
+++ b/support/ld/maple_RET6/flash.ld
@@ -0,0 +1,18 @@
+/*
+ * STM32F103RET6 high density chip linker script for use with Maple
+ * bootloader. Loads to Flash.
+ */
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K
+ rom (rx) : ORIGIN = 0x08005000, LENGTH = 492K
+}
+
+GROUP(libcs3_stm32_high_density.a)
+
+REGION_ALIAS("REGION_TEXT", rom);
+REGION_ALIAS("REGION_DATA", ram);
+REGION_ALIAS("REGION_BSS", ram);
+
+INCLUDE common_rom.inc
diff --git a/support/ld/maple_RET6/jtag.ld b/support/ld/maple_RET6/jtag.ld
new file mode 100644
index 0000000..88f45e0
--- /dev/null
+++ b/support/ld/maple_RET6/jtag.ld
@@ -0,0 +1,17 @@
+/*
+ * STM32F103RET6 high density bare metal linker script.
+ */
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
+ rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K
+}
+
+GROUP(libcs3_stm32_high_density.a)
+
+REGION_ALIAS("REGION_TEXT", rom);
+REGION_ALIAS("REGION_DATA", ram);
+REGION_ALIAS("REGION_BSS", ram);
+
+INCLUDE common_rom.inc
diff --git a/support/ld/maple_RET6/ram.ld b/support/ld/maple_RET6/ram.ld
new file mode 100644
index 0000000..f09acd9
--- /dev/null
+++ b/support/ld/maple_RET6/ram.ld
@@ -0,0 +1,18 @@
+/*
+ * STM32F103RET6 high density chip linker script for use with Maple
+ * bootloader. Loads to RAM.
+ */
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K
+ rom (rx) : ORIGIN = 0x08005000, LENGTH = 0K
+}
+
+GROUP(libcs3_stm32_high_density.a)
+
+REGION_ALIAS("REGION_TEXT", ram);
+REGION_ALIAS("REGION_DATA", ram);
+REGION_ALIAS("REGION_BSS", ram);
+
+INCLUDE common_ram.inc
diff --git a/support/ld/maple_native/ram.ld b/support/ld/maple_native/ram.ld
index 22c09cd..d5bd3b0 100644
--- a/support/ld/maple_native/ram.ld
+++ b/support/ld/maple_native/ram.ld
@@ -19,4 +19,3 @@ REGION_ALIAS("REGION_DATA", ram);
REGION_ALIAS("REGION_BSS", ram);
INCLUDE common_ram.inc
-
diff --git a/support/scripts/copy-to-ide b/support/scripts/copy-to-ide
index 301126d..5254974 100755
--- a/support/scripts/copy-to-ide
+++ b/support/scripts/copy-to-ide
@@ -1,7 +1,8 @@
#!/bin/sh
-# This hack copies the necessary library files into the Maple IDE
-# repository.
+# This hack copies libmaple's source, linker scripts, and built
+# documentation into the Maple IDE repository (which is expected as
+# its first argument).
DEST=$1
@@ -18,14 +19,18 @@ LMAPLE_SRC="LICENSE
./libmaple/usb/usb_lib/*.h
./libmaple/usb/usb_lib/*.c
./wirish/*.h
- ./wirish/*.c
./wirish/main.cxx
./wirish/*.cpp
./wirish/comm/*.cpp
./wirish/comm/*.h
+ ./support/ld/common_ram.inc
+ ./support/ld/common_rom.inc
+ ./support/ld/libcs3_stm32_high_density.a
+ ./support/ld/libcs3_stm32_med_density.a
./support/ld/maple
+ ./support/ld/maple_mini
./support/ld/maple_native
- ./support/ld/libcs3-lanchon-stm32.a
+ ./support/ld/maple_RET6
./support/ld/names.inc"
LMAPLE_DOCS=./docs
@@ -40,7 +45,8 @@ fi
# source
echo Copying libmaple source
-rm -rf $DEST_CORES/*.c $DEST_CORES/*.cpp $DEST_CORES/*.h $DEST_CORES/*.cxx $DEST_CORES/*.inc $DEST_CORES/*.a $DEST_CORES/*.S $DEST_CORES/maple $DEST_CORES/maple_native
+rm -rf $DEST_CORES/*.c $DEST_CORES/*.cpp $DEST_CORES/*.h $DEST_CORES/*.cxx $DEST_CORES/*.S
+rm -rf $DEST_CORES/*.inc $DEST_CORES/*.a $DEST_CORES/maple $DEST_CORES/maple_*
cp -R $LMAPLE_SRC $DEST_CORES
echo Copying over libraries
@@ -51,7 +57,7 @@ echo Deleting old reference directory contents
rm -rf $DEST_REF/*
echo Rebuilding documentation
-( cd $LMAPLE_DOCS; doxygen && make clean 2>/dev/null 1>/dev/null && make html )
+( cd $LMAPLE_DOCS; doxygen >/dev/null 2>&1 && make clean >/dev/null 2>&1 && make html )
echo Copying over documentation
cp -R $LMAPLE_DOCS_BUILD/* $DEST_REF
diff --git a/wirish/boards.cpp b/wirish/boards.cpp
index 440218b..66f008f 100644
--- a/wirish/boards.cpp
+++ b/wirish/boards.cpp
@@ -380,6 +380,95 @@ PinMapping PIN_MAP[NR_GPIO_PINS] = {
{GPIOB, 1, 9, TIMER3_CH4_CCR, TIMER3, 4, AFIO_EXTI_PB},
};
+#elif defined(BOARD_maple_RET6)
+
+PinMapping PIN_MAP[NR_GPIO_PINS] = {
+ /* D0/PA3 */
+ {GPIOA, 3, 3, TIMER2_CH4_CCR, TIMER2, 4, AFIO_EXTI_PA},
+ /* D1/PA2 */
+ {GPIOA, 2, 2, TIMER2_CH3_CCR, TIMER2, 3, AFIO_EXTI_PA},
+ /* D2/PA0 */
+ {GPIOA, 0, 0, TIMER2_CH1_CCR, TIMER2, 1, AFIO_EXTI_PA},
+ /* D3/PA1 */
+ {GPIOA, 1, 1, TIMER2_CH2_CCR, TIMER2, 2, AFIO_EXTI_PA},
+ /* D4/PB5 */
+ {GPIOB, 5, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D5/PB6 */
+ {GPIOB, 6, ADCx, TIMER4_CH1_CCR, TIMER4, 1, AFIO_EXTI_PB},
+ /* D6/PA8 */
+ {GPIOA, 8, ADCx, TIMER1_CH1_CCR, TIMER1, 1, AFIO_EXTI_PA},
+ /* D7/PA9 */
+ {GPIOA, 9, ADCx, TIMER1_CH2_CCR, TIMER1, 2, AFIO_EXTI_PA},
+ /* D8/PA10 */
+ {GPIOA, 10, ADCx, TIMER1_CH3_CCR, TIMER1, 3, AFIO_EXTI_PA},
+ /* D9/PB7 */
+ {GPIOB, 7, ADCx, TIMER4_CH2_CCR, TIMER4, 2, AFIO_EXTI_PB},
+ /* D10/PA4 */
+ {GPIOA, 4, 4, 0, TIMERx, TIMERx, AFIO_EXTI_PA},
+ /* D11/PA7 */
+ {GPIOA, 7, 7, TIMER3_CH2_CCR, TIMER3, 2, AFIO_EXTI_PA},
+ /* D12/PA6 */
+ {GPIOA, 6, 6, TIMER3_CH1_CCR, TIMER3, 1, AFIO_EXTI_PA},
+ /* D13/PA5 */
+ {GPIOA, 5, 5, 0, TIMERx, TIMERx, AFIO_EXTI_PA},
+ /* D14/PB8 */
+ {GPIOB, 8, ADCx, TIMER4_CH3_CCR, TIMER4, 3, AFIO_EXTI_PB},
+
+ /* Little header */
+
+ /* D15/PC0 */
+ {GPIOC, 0, 10, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D16/PC1 */
+ {GPIOC, 1, 11, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D17/PC2 */
+ {GPIOC, 2, 12, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D18/PC3 */
+ {GPIOC, 3, 13, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D19/PC4 */
+ {GPIOC, 4, 14, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D20/PC5 */
+ {GPIOC, 5, 15, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+
+ /* External header */
+
+ /* D21/PC13 */
+ {GPIOC, 13, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D22/PC14 */
+ {GPIOC, 14, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D23/PC15 */
+ {GPIOC, 15, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D24/PB9 */
+ {GPIOB, 9, ADCx, TIMER4_CH4_CCR, TIMER4, 4, AFIO_EXTI_PB},
+ /* D25/PD2 */
+ {GPIOD, 2, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PD},
+ /* D26/PC10 */
+ {GPIOC, 10, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PC},
+ /* D27/PB0 */
+ {GPIOB, 0, 8, TIMER3_CH3_CCR, TIMER3, 3, AFIO_EXTI_PB},
+ /* D28/PB1 */
+ {GPIOB, 1, 9, TIMER3_CH4_CCR, TIMER3, 4, AFIO_EXTI_PB},
+ /* D29/PB10 */
+ {GPIOB, 10, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D30/PB11 */
+ {GPIOB, 11, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D31/PB12 */
+ {GPIOB, 12, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D32/PB13 */
+ {GPIOB, 13, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D33/PB14 */
+ {GPIOB, 14, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D34/PB15 */
+ {GPIOB, 15, ADCx, 0, TIMERx, TIMERx, AFIO_EXTI_PB},
+ /* D35/PC6 */
+ {GPIOC, 6, ADCx, TIMER8_CH1_CCR, TIMER8, 1, AFIO_EXTI_PC},
+ /* D36/PC7 */
+ {GPIOC, 7, ADCx, TIMER8_CH1_CCR, TIMER8, 2, AFIO_EXTI_PC},
+ /* D37/PC8 */
+ {GPIOC, 8, ADCx, TIMER8_CH1_CCR, TIMER8, 3, AFIO_EXTI_PC},
+ /* D38/PC9 (BUT) */
+ {GPIOC, 9, ADCx, TIMER8_CH1_CCR, TIMER8, 4, AFIO_EXTI_PC}
+};
+
#else
#error "Board type has not been selected correctly."
diff --git a/wirish/boards.h b/wirish/boards.h
index 2941127..94566fa 100644
--- a/wirish/boards.h
+++ b/wirish/boards.h
@@ -113,6 +113,21 @@ extern PinMapping PIN_MAP[];
afio_mapr_swj_config(AFIO_MAPR_SWJ_NO_JTAG_NO_SW); \
} while (0)
+#elif defined(BOARD_maple_RET6)
+
+ #define CYCLES_PER_MICROSECOND 72
+ #define SYSTICK_RELOAD_VAL 71999 /* takes a cycle to reload */
+
+ #define BOARD_BUTTON_PIN 38
+ #define BOARD_LED_PIN 13
+
+ /* Total number of GPIO pins that are broken out to headers and
+ intended for general use. */
+ #define NR_GPIO_PINS 39
+
+ #define BOARD_INIT do { \
+ } while(0)
+
#else
#error "Board type has not been selected correctly."
diff --git a/wirish/wirish.cpp b/wirish/wirish.cpp
index 6967489..6d77bc8 100644
--- a/wirish/wirish.cpp
+++ b/wirish/wirish.cpp
@@ -47,7 +47,7 @@ void init(void) {
flash_enable_prefetch();
flash_set_latency(FLASH_WAIT_STATE_2);
-#ifdef STM32_HIGH_DENSITY
+#ifdef BOARD_maple_native
fsmc_native_sram_init();
#endif