Inline GPIO functions and optimise for speed.

This gives a modest but measurable performance improvement.
This commit is contained in:
Gareth McMullin 2012-01-08 18:42:24 +13:00
parent 7c6317a426
commit 7e0de5b86b
7 changed files with 32 additions and 16 deletions

View File

@ -7,9 +7,9 @@ VPATH += $(PROBE_HOST)
BUILDDATE := `date +"%Y%m%d"`
CFLAGS += -Wall -Wextra -Wno-pointer-sign -Wno-char-subscripts\
-O0 -std=gnu99 -g3 -DBUILDDATE=\"$(BUILDDATE)\"\
-O2 -std=gnu99 -g3 -DBUILDDATE=\"$(BUILDDATE)\"\
-I. -Iinclude -I$(PROBE_HOST) \
-DVERSION_SUFFIX=\"`../scripts/setlocalversion`\"
-DVERSION_SUFFIX=\"`../scripts/setlocalversion`\" -MD
SRC = gdb_if.c \
gdb_packet.c \
@ -44,3 +44,5 @@ blackmagic: $(OBJ)
clean: host_clean
$(RM) *.o *~ blackmagic $(HOSTFILES)
-include *.d

View File

@ -26,10 +26,6 @@
int swdptap_init(void);
void swdptap_reset(void);
void swdptap_turnaround(uint8_t dir);
uint8_t swdptap_bit_in(void);
void swdptap_bit_out(uint8_t val);
uint32_t swdptap_seq_in(int ticks);
uint8_t swdptap_seq_in_parity(uint32_t *data, int ticks);
void swdptap_seq_out(uint32_t MS, int ticks);

View File

@ -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 \

View File

@ -20,7 +20,6 @@
/* This file implements the low-level JTAG TAP interface. */
#include <libopencm3/stm32/f1/gpio.h>
#include <stdio.h>
#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 */

View File

@ -23,7 +23,6 @@
*/
#include <libopencm3/stm32/f1/rcc.h>
#include <libopencm3/stm32/f1/gpio.h>
#include <libopencm3/stm32/systick.h>
#include <libopencm3/stm32/f1/scb.h>
#include <libopencm3/stm32/nvic.h>
@ -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);

View File

@ -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

View File

@ -20,7 +20,6 @@
/* This file implements the low-level SW-DP interface. */
#include <libopencm3/stm32/f1/gpio.h>
#include <stdio.h>
#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);