From 7e0de5b86b654842c85e38bd36b22fe4176068bf Mon Sep 17 00:00:00 2001 From: Gareth McMullin Date: Sun, 8 Jan 2012 18:42:24 +1300 Subject: Inline GPIO functions and optimise for speed. This gives a modest but measurable performance improvement. --- src/stm32/Makefile.inc | 2 +- src/stm32/jtagtap.c | 3 +-- src/stm32/platform.c | 3 +-- src/stm32/platform.h | 21 +++++++++++++++++++++ src/stm32/swdptap.c | 9 ++++----- 5 files changed, 28 insertions(+), 10 deletions(-) (limited to 'src/stm32') diff --git a/src/stm32/Makefile.inc b/src/stm32/Makefile.inc index ac8f4c6..79e4316 100644 --- a/src/stm32/Makefile.inc +++ b/src/stm32/Makefile.inc @@ -6,7 +6,7 @@ LIBOPENCM3 ?= /usr/local/arm-none-eabi CFLAGS += -Istm32/include -mcpu=cortex-m3 -mthumb -msoft-float -DSTM32F1 -I$(LIBOPENCM3)/include LDFLAGS_BOOT = -lopencm3_stm32f1 -Wl,--defsym,_stack=0x20005000 \ -Wl,-T,stm32/blackmagic.ld -nostartfiles -lc -lnosys -Wl,-Map=mapfile \ - -mthumb -march=armv7 -mcpu=cortex-m3 -mfix-cortex-m3-ldrd -msoft-float -L$(LIBOPENCM3)/lib/stm32/f1 + -mthumb -march=armv7 -mcpu=cortex-m3 -mfix-cortex-m3-ldrd -msoft-float -L$(LIBOPENCM3)/lib/stm32/f1 -Wl,-gc-sections LDFLAGS = $(LDFLAGS_BOOT) -Wl,-Ttext=0x8002000 SRC += cdcacm.c \ diff --git a/src/stm32/jtagtap.c b/src/stm32/jtagtap.c index ee00eef..4c5bbeb 100644 --- a/src/stm32/jtagtap.c +++ b/src/stm32/jtagtap.c @@ -20,7 +20,6 @@ /* This file implements the low-level JTAG TAP interface. */ -#include #include #include "general.h" @@ -37,7 +36,7 @@ int jtagtap_init(void) gpio_port_write(GPIOA, 0x8180); gpio_port_write(GPIOB, 0x0002); - gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_10_MHZ, + gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN); /* Go to JTAG mode for SWJ-DP */ diff --git a/src/stm32/platform.c b/src/stm32/platform.c index ba784c9..3923ed1 100644 --- a/src/stm32/platform.c +++ b/src/stm32/platform.c @@ -23,7 +23,6 @@ */ #include -#include #include #include #include @@ -63,7 +62,7 @@ int platform_init(void) gpio_set_mode(USB_PU_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, USB_PU_PIN); - gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_10_MHZ, + gpio_set_mode(JTAG_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, TMS_PIN | TCK_PIN | TDI_PIN); diff --git a/src/stm32/platform.h b/src/stm32/platform.h index af8e3b8..a9a1cca 100644 --- a/src/stm32/platform.h +++ b/src/stm32/platform.h @@ -32,6 +32,7 @@ #include "gdb_packet.h" #define INCLUDE_UART_INTERFACE +#define INLINE_GPIO /* Important pin mappings for STM32 implementation: * @@ -116,5 +117,25 @@ int cdcacm_get_dtr(void); #define sprintf siprintf #define vasprintf vasiprintf +#ifdef INLINE_GPIO +static inline void _gpio_set(u32 gpioport, u16 gpios) +{ + GPIO_BSRR(gpioport) = gpios; +} +#define gpio_set _gpio_set + +static inline void _gpio_clear(u32 gpioport, u16 gpios) +{ + GPIO_BRR(gpioport) = gpios; +} +#define gpio_clear _gpio_clear + +static inline u16 _gpio_get(u32 gpioport, u16 gpios) +{ + return (u16)GPIO_IDR(gpioport) & gpios; +} +#define gpio_get _gpio_get +#endif + #endif diff --git a/src/stm32/swdptap.c b/src/stm32/swdptap.c index 36f3448..8ac78b2 100644 --- a/src/stm32/swdptap.c +++ b/src/stm32/swdptap.c @@ -20,7 +20,6 @@ /* This file implements the low-level SW-DP interface. */ -#include #include #include "general.h" @@ -29,7 +28,7 @@ #include "gdb_packet.h" -void swdptap_turnaround(uint8_t dir) +static void swdptap_turnaround(uint8_t dir) { static uint8_t olddir = 0; @@ -45,11 +44,11 @@ void swdptap_turnaround(uint8_t dir) gpio_set(SWDP_PORT, SWCLK_PIN); gpio_clear(SWDP_PORT, SWCLK_PIN); if(!dir) - gpio_set_mode(SWDP_PORT, GPIO_MODE_OUTPUT_10_MHZ, + gpio_set_mode(SWDP_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, SWDIO_PIN); } -uint8_t swdptap_bit_in(void) +static uint8_t swdptap_bit_in(void) { uint8_t ret; @@ -62,7 +61,7 @@ uint8_t swdptap_bit_in(void) return ret; } -void swdptap_bit_out(uint8_t val) +static void swdptap_bit_out(uint8_t val) { DEBUG("%d", val); -- cgit v1.2.3