mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-18 03:52:11 +01:00
Flight firmware-Start of the new bootloader
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1235 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
297985c2a0
commit
a688b95eb6
637
flight/Bootloaders/OpenPilot2/Makefile
Normal file
637
flight/Bootloaders/OpenPilot2/Makefile
Normal file
@ -0,0 +1,637 @@
|
||||
#####
|
||||
# Project: OpenPilot
|
||||
#
|
||||
#
|
||||
# Makefile for OpenPilot project build PiOS and the AP.
|
||||
#
|
||||
# The OpenPilot Team, http://www.openpilot.org, Copyright (C) 2009.
|
||||
#
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#####
|
||||
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
DEBUG ?= YES
|
||||
|
||||
# Set to YES to use the Servo output pins for debugging via scope or logic analyser
|
||||
ENABLE_DEBUG_PINS ?= NO
|
||||
|
||||
# Set to Yes to enable the AUX UART which is mapped on the S1 (Tx) and S2 (Rx) servo outputs
|
||||
ENABLE_AUX_UART ?= NO
|
||||
|
||||
#
|
||||
USE_BOOTLOADER ?= NO
|
||||
|
||||
|
||||
# Set to YES when using Code Sourcery toolchain
|
||||
CODE_SOURCERY ?= NO
|
||||
|
||||
# Toolchain prefix (i.e arm-elf- -> arm-elf-gcc.exe)
|
||||
TCHAIN_PREFIX ?= arm-none-eabi-
|
||||
|
||||
# Remove command is different for Code Sourcery on Windows
|
||||
ifeq ($(CODE_SOURCERY), YES)
|
||||
REMOVE_CMD = cs-rm
|
||||
else
|
||||
REMOVE_CMD = rm
|
||||
endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# YES enables -mthumb option to flags for source-files listed
|
||||
# in SRC and CPPSRC
|
||||
USE_THUMB_MODE = YES
|
||||
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103RET
|
||||
BOARD = STM3210E_OP
|
||||
ifeq ($(USE_BOOTLOADER), YES)
|
||||
MODEL = HD_BL
|
||||
|
||||
else
|
||||
MODEL = HD
|
||||
endif
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = Build
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = OpenPilot2_BL
|
||||
|
||||
# Paths
|
||||
|
||||
OPSYSTEM = ./
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
OPUAVTALK = ./UAVTalk
|
||||
OPUAVTALKINC = $(OPUAVTALK)/inc
|
||||
OPUAVOBJ = ./UAVObjects
|
||||
OPUAVOBJINC = $(OPUAVOBJ)/inc
|
||||
OPTESTS = ./Tests
|
||||
OPMODULEDIR = ./Modules
|
||||
PIOS = ../../PiOS
|
||||
PIOSINC = $(PIOS)/inc
|
||||
PIOSSTM32F10X = $(PIOS)/STM32F10x
|
||||
PIOSCOMMON = $(PIOS)/Common
|
||||
APPLIBDIR = $(PIOSSTM32F10X)/Libraries
|
||||
STMLIBDIR = $(APPLIBDIR)
|
||||
STMSPDDIR = $(STMLIBDIR)/STM32F10x_StdPeriph_Driver
|
||||
STMUSBDIR = $(STMLIBDIR)/STM32_USB-FS-Device_Driver
|
||||
STMSPDSRCDIR = $(STMSPDDIR)/src
|
||||
STMSPDINCDIR = $(STMSPDDIR)/inc
|
||||
STMUSBSRCDIR = $(STMUSBDIR)/src
|
||||
STMUSBINCDIR = $(STMUSBDIR)/inc
|
||||
CMSISDIR = $(STMLIBDIR)/CMSIS/Core/CM3
|
||||
DOSFSDIR = $(APPLIBDIR)/dosfs
|
||||
MSDDIR = $(APPLIBDIR)/msd
|
||||
RTOSDIR = $(APPLIBDIR)/FreeRTOS
|
||||
RTOSSRCDIR = $(RTOSDIR)/Source
|
||||
RTOSINCDIR = $(RTOSSRCDIR)/include
|
||||
DOXYGENDIR = ../Doc/Doxygen
|
||||
|
||||
# List C source files here. (C dependencies are automatically generated.)
|
||||
# use file-extension c for "c-only"-files
|
||||
|
||||
MODNAMES = $(notdir ${MODULES})
|
||||
|
||||
|
||||
## OPENPILOT CORE:
|
||||
SRC += $(OPSYSTEM)/dfu_mal.c
|
||||
SRC += $(OPSYSTEM)/flash_if.c
|
||||
SRC += $(OPSYSTEM)/stm32f10x_it.c
|
||||
SRC += $(OPSYSTEM)/fsmc_nor.c
|
||||
SRC += $(OPSYSTEM)/hw_config.c
|
||||
SRC += $(OPSYSTEM)/main.c
|
||||
SRC += $(OPSYSTEM)/nor_if.c
|
||||
SRC += $(OPSYSTEM)/spi_flash.c
|
||||
SRC += $(OPSYSTEM)/spi_if.c
|
||||
SRC += $(OPSYSTEM)/usb_desc.c
|
||||
#SRC += $(OPSYSTEM)/usb_endp.c
|
||||
SRC += $(OPSYSTEM)/usb_istr.c
|
||||
SRC += $(OPSYSTEM)/usb_prop.c
|
||||
SRC += $(OPSYSTEM)/usb_pwr.c
|
||||
|
||||
|
||||
## CMSIS for STM32
|
||||
SRC += $(CMSISDIR)/core_cm3.c
|
||||
SRC += $(CMSISDIR)/system_stm32f10x.c
|
||||
|
||||
## Used parts of the STM-Library
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_adc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_bkp.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_crc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dac.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dma.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_exti.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_flash.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_gpio.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_i2c.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_pwr.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rcc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_tim.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_wwdg.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_fsmc.c
|
||||
SRC += $(STMSPDSRCDIR)/misc.c
|
||||
|
||||
## STM32 USB Library
|
||||
SRC += $(STMUSBSRCDIR)/usb_core.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_init.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_int.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_mem.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_regs.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_sil.c
|
||||
|
||||
|
||||
# List C source files here which must be compiled in ARM-Mode (no -mthumb).
|
||||
# use file-extension c for "c-only"-files
|
||||
## just for testing, timer.c could be compiled in thumb-mode too
|
||||
SRCARM =
|
||||
|
||||
# List C++ source files here.
|
||||
# use file-extension .cpp for C++-files (not .C)
|
||||
CPPSRC =
|
||||
|
||||
# List C++ source files here which must be compiled in ARM-Mode.
|
||||
# use file-extension .cpp for C++-files (not .C)
|
||||
#CPPSRCARM = $(TARGET).cpp
|
||||
CPPSRCARM =
|
||||
|
||||
# List Assembler source files here.
|
||||
# Make them always end in a capital .S. Files ending in a lowercase .s
|
||||
# will not be considered source files but generated files (assembler
|
||||
# output from the compiler), and will be deleted upon "make clean"!
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
|
||||
# List any extra directories to look for include files here.
|
||||
# Each directory must be seperated by a space.
|
||||
EXTRAINCDIRS = $(OPSYSTEM)
|
||||
EXTRAINCDIRS += $(OPSYSTEMINC)
|
||||
XTRAINCDIRS += $(PIOSSTM32F10X)
|
||||
EXTRAINCDIRS += $(STMSPDINCDIR)
|
||||
EXTRAINCDIRS += $(STMUSBINCDIR)
|
||||
EXTRAINCDIRS += $(CMSISDIR)
|
||||
|
||||
EXTRAINCDIRS += $(APPLIBDIR)
|
||||
|
||||
EXTRAINCDIRS += ${foreach MOD, ${MODULES}, Modules/${MOD}/inc} ${OPMODULEDIR}/System/inc
|
||||
|
||||
|
||||
# List any extra directories to look for library files here.
|
||||
# Also add directories where the linker should search for
|
||||
# includes from linker-script to the list
|
||||
# Each directory must be seperated by a space.
|
||||
EXTRA_LIBDIRS =
|
||||
|
||||
# Extra Libraries
|
||||
# Each library-name must be seperated by a space.
|
||||
# i.e. to link with libxyz.a, libabc.a and libefsl.a:
|
||||
# EXTRA_LIBS = xyz abc efsl
|
||||
# for newlib-lpc (file: libnewlibc-lpc.a):
|
||||
# EXTRA_LIBS = newlib-lpc
|
||||
EXTRA_LIBS =
|
||||
|
||||
# Path to Linker-Scripts
|
||||
LINKERSCRIPTPATH = $(PIOSSTM32F10X)
|
||||
|
||||
# Optimization level, can be [0, 1, 2, 3, s].
|
||||
# 0 = turn off optimization. s = optimize for size.
|
||||
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
|
||||
|
||||
ifeq ($(DEBUG),YES)
|
||||
OPT = 0
|
||||
else
|
||||
OPT = s
|
||||
endif
|
||||
|
||||
# Output format. (can be ihex or binary or both)
|
||||
# binary to create a load-image in raw-binary format i.e. for SAM-BA,
|
||||
# ihex to create a load-image in Intel hex format
|
||||
#LOADFORMAT = ihex
|
||||
#LOADFORMAT = binary
|
||||
LOADFORMAT = both
|
||||
|
||||
# Debugging format.
|
||||
DEBUGF = dwarf-2
|
||||
|
||||
# Place project-specific -D (define) and/or
|
||||
# -U options for C here.
|
||||
CDEFS = -DSTM32F10X_$(MODEL)
|
||||
CDEFS += -DUSE_STDPERIPH_DRIVER
|
||||
CDEFS += -DUSE_$(BOARD)
|
||||
CDEFS += -DUSE_STM3210E_EVAL
|
||||
ifeq ($(ENABLE_DEBUG_PINS), YES)
|
||||
CDEFS += -DPIOS_ENABLE_DEBUG_PINS
|
||||
endif
|
||||
ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
ifeq ($(USE_BOOTLOADER), YES)
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
endif
|
||||
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
ADEFS = -D__ASSEMBLY__
|
||||
|
||||
# Compiler flag to set the C Standard level.
|
||||
# c89 - "ANSI" C
|
||||
# gnu89 - c89 plus GCC extensions
|
||||
# c99 - ISO C99 standard (not yet fully implemented)
|
||||
# gnu99 - c99 plus GCC extensions
|
||||
CSTANDARD = -std=gnu99
|
||||
|
||||
#-----
|
||||
|
||||
# Compiler flags.
|
||||
|
||||
# -g*: generate debugging information
|
||||
# -O*: optimization level
|
||||
# -f...: tuning, see GCC manual and avr-libc documentation
|
||||
# -Wall...: warning level
|
||||
# -Wa,...: tell GCC to pass this to the assembler.
|
||||
# -adhlns...: create assembler listing
|
||||
#
|
||||
# Flags for C and C++ (arm-elf-gcc/arm-elf-g++)
|
||||
|
||||
ifeq ($(DEBUG),YES)
|
||||
CFLAGS = -g$(DEBUGF) -DDEBUG
|
||||
endif
|
||||
|
||||
CFLAGS += -O$(OPT)
|
||||
CFLAGS += -mcpu=$(MCU) -mthumb
|
||||
CFLAGS += $(CDEFS)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I.
|
||||
|
||||
CFLAGS += -mapcs-frame
|
||||
CFLAGS += -fomit-frame-pointer
|
||||
CFLAGS += -fpromote-loop-indices
|
||||
|
||||
CFLAGS += -Wall
|
||||
CFLAGS += -Werror
|
||||
CFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))
|
||||
# Compiler flags to generate dependency files:
|
||||
CFLAGS += -MD -MP -MF $(OUTDIR)/dep/$(@F).d
|
||||
|
||||
# flags only for C
|
||||
#CONLYFLAGS += -Wnested-externs
|
||||
CONLYFLAGS += $(CSTANDARD)
|
||||
|
||||
# Assembler flags.
|
||||
# -Wa,...: tell GCC to pass this to the assembler.
|
||||
# -ahlns: create listing
|
||||
ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp
|
||||
ASFLAGS += $(ADEFS)
|
||||
ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))
|
||||
ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
|
||||
MATH_LIB = -lm
|
||||
|
||||
# Linker flags.
|
||||
# -Wl,...: tell GCC to pass this to linker.
|
||||
# -Map: create map file
|
||||
# --cref: add cross reference to map file
|
||||
LDFLAGS = -nostartfiles -Wl,-Map=$(OUTDIR)/$(TARGET).map,--cref,--gc-sections
|
||||
LDFLAGS += $(patsubst %,-L%,$(EXTRA_LIBDIRS))
|
||||
LDFLAGS += -lc
|
||||
LDFLAGS += $(patsubst %,-l%,$(EXTRA_LIBS))
|
||||
LDFLAGS += $(MATH_LIB)
|
||||
LDFLAGS += -lc -lgcc
|
||||
|
||||
# Set linker-script name depending on selected submodel name
|
||||
LDFLAGS +=-T$(LINKERSCRIPTPATH)/link_stm32f10x_$(MODEL).ld
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Options for OpenOCD flash-programming
|
||||
# see openocd.pdf/openocd.texi for further information
|
||||
#
|
||||
#OOCD_LOADFILE+=$(OUTDIR)/x.hex
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).elf
|
||||
# if OpenOCD is in the $PATH just set OOCD_EXE=openocd
|
||||
OOCD_EXE=openocd
|
||||
# debug level
|
||||
OOCD_CL=-d0
|
||||
# interface and board/target settings (using the OOCD target-library here)
|
||||
OOCD_CL+=-f ../../Project/OpenOCD/floss-jtag.openpilot.cfg -f ../../Project/OpenOCD/stm32.cfg
|
||||
# initialize
|
||||
OOCD_CL+=-c init
|
||||
# show the targets
|
||||
OOCD_CL+=-c targets
|
||||
# commands to prepare flash-write
|
||||
OOCD_CL+= -c "reset halt"
|
||||
# flash erase
|
||||
OOCD_CL+=-c "stm32x mass_erase 0"
|
||||
# flash-write
|
||||
OOCD_CL+=-c "flash write_image $(OOCD_LOADFILE)"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE)"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
# Define programs and commands.
|
||||
CC = $(TCHAIN_PREFIX)gcc
|
||||
CPP = $(TCHAIN_PREFIX)g++
|
||||
AR = $(TCHAIN_PREFIX)ar
|
||||
OBJCOPY = $(TCHAIN_PREFIX)objcopy
|
||||
OBJDUMP = $(TCHAIN_PREFIX)objdump
|
||||
SIZE = $(TCHAIN_PREFIX)size
|
||||
NM = $(TCHAIN_PREFIX)nm
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
|
||||
|
||||
# Define Messages
|
||||
# English
|
||||
MSG_ERRORS_NONE = Errors: none
|
||||
MSG_BEGIN = ${quote}-------- begin (mode: $(RUN_MODE)) --------${quote}
|
||||
MSG_END = ${quote}-------- end --------${quote}
|
||||
MSG_MODINIT = ${quote}**** Generating ModInit.c${quote}
|
||||
MSG_SIZE_BEFORE = ${quote}Size before:${quote}
|
||||
MSG_SIZE_AFTER = ${quote}Size after build:${quote}
|
||||
MSG_LOAD_FILE = ${quote}Creating load file:${quote}
|
||||
MSG_EXTENDED_LISTING = ${quote}Creating Extended Listing/Disassembly:${quote}
|
||||
MSG_SYMBOL_TABLE = ${quote}Creating Symbol Table:${quote}
|
||||
MSG_LINKING = ${quote}**** Linking :${quote}
|
||||
MSG_COMPILING = ${quote}**** Compiling C :${quote}
|
||||
MSG_COMPILING_ARM = ${quote}**** Compiling C (ARM-only):${quote}
|
||||
MSG_COMPILINGCPP = ${quote}Compiling C++ :${quote}
|
||||
MSG_COMPILINGCPP_ARM = ${quote}Compiling C++ (ARM-only):${quote}
|
||||
MSG_ASSEMBLING = ${quote}**** Assembling:${quote}
|
||||
MSG_ASSEMBLING_ARM = ${quote}****Assembling (ARM-only):${quote}
|
||||
MSG_CLEANING = ${quote}Cleaning project:${quote}
|
||||
MSG_FORMATERROR = ${quote}Can not handle output-format${quote}
|
||||
MSG_ASMFROMC = ${quote}Creating asm-File from C-Source:${quote}
|
||||
MSG_ASMFROMC_ARM = ${quote}Creating asm-File from C-Source (ARM-only):${quote}
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
# List of all source files without directory and file-extension.
|
||||
ALLSRCBASE = $(notdir $(basename $(ALLSRC)))
|
||||
|
||||
# Define all object files.
|
||||
ALLOBJ = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(ALLSRCBASE)))
|
||||
|
||||
# Define all listing files (used for make clean).
|
||||
LSTFILES = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE)))
|
||||
# Define all depedency-files (used for make clean).
|
||||
DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE)))
|
||||
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
# Default target.
|
||||
#all: begin gccversion sizebefore build sizeafter finished end
|
||||
all: begin gccversion build sizeafter finished end
|
||||
|
||||
ifeq ($(LOADFORMAT),ihex)
|
||||
build: elf hex lss sym
|
||||
else
|
||||
ifeq ($(LOADFORMAT),binary)
|
||||
build: elf bin lss sym
|
||||
else
|
||||
ifeq ($(LOADFORMAT),both)
|
||||
build: elf hex bin lss sym
|
||||
else
|
||||
$(error "$(MSG_FORMATERROR) $(FORMAT)")
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Test if quotes are needed for the echo-command
|
||||
result = ${shell echo "test"}
|
||||
ifeq (${result}, test)
|
||||
quote = '
|
||||
else
|
||||
quote =
|
||||
endif
|
||||
|
||||
${OUTDIR}/InitMods.c: Makefile
|
||||
@echo ${MSG_MODINIT}
|
||||
@echo ${quote}// Autogenerated file${quote} > ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, extern unsigned int ${MOD}Initialize(void);}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}void InitModules() {${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Eye candy.
|
||||
begin:
|
||||
## @echo
|
||||
@echo $(MSG_BEGIN)
|
||||
|
||||
finished:
|
||||
## @echo $(MSG_ERRORS_NONE)
|
||||
|
||||
end:
|
||||
@echo $(MSG_END)
|
||||
## @echo
|
||||
|
||||
# Display sizes of sections.
|
||||
ELFSIZE = $(SIZE) -A $(OUTDIR)/$(TARGET).elf
|
||||
##ELFSIZE = $(SIZE) --format=Berkeley --common $(OUTDIR)/$(TARGET).elf
|
||||
sizebefore:
|
||||
# @if [ -f $(OUTDIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
|
||||
|
||||
sizeafter:
|
||||
# @if [ -f $(OUTDIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
|
||||
@echo $(MSG_SIZE_AFTER)
|
||||
$(ELFSIZE)
|
||||
|
||||
# Display compiler version information.
|
||||
gccversion :
|
||||
@$(CC) --version
|
||||
# @echo $(ALLOBJ)
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).elf
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Create final output file (.hex) from ELF output file.
|
||||
%.hex: %.elf
|
||||
## @echo
|
||||
@echo $(MSG_LOAD_FILE) $@
|
||||
$(OBJCOPY) -O ihex $< $@
|
||||
|
||||
# Create final output file (.bin) from ELF output file.
|
||||
%.bin: %.elf
|
||||
## @echo
|
||||
@echo $(MSG_LOAD_FILE) $@
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
|
||||
# Create extended listing file/disassambly from ELF output file.
|
||||
# using objdump testing: option -C
|
||||
%.lss: %.elf
|
||||
## @echo
|
||||
@echo $(MSG_EXTENDED_LISTING) $@
|
||||
$(OBJDUMP) -h -S -C -r $< > $@
|
||||
# $(OBJDUMP) -x -S $< > $@
|
||||
|
||||
# Create a symbol table from ELF output file.
|
||||
%.sym: %.elf
|
||||
## @echo
|
||||
@echo $(MSG_SYMBOL_TABLE) $@
|
||||
$(NM) -n $< > $@
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
.SECONDARY : $(TARGET).elf
|
||||
.PRECIOUS : $(ALLOBJ)
|
||||
%.elf: $(ALLOBJ)
|
||||
@echo $(MSG_LINKING) $@
|
||||
# use $(CC) for C-only projects or $(CPP) for C++-projects:
|
||||
$(CC) $(THUMB) $(CFLAGS) $(ALLOBJ) --output $@ $(LDFLAGS)
|
||||
# $(CPP) $(THUMB) $(CFLAGS) $(ALLOBJ) --output $@ $(LDFLAGS)
|
||||
|
||||
|
||||
# Assemble: create object files from assembler source files.
|
||||
define ASSEMBLE_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_ASSEMBLING) $$< to $$@
|
||||
$(CC) -c $(THUMB) $$(ASFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(ASRC), $(eval $(call ASSEMBLE_TEMPLATE, $(src))))
|
||||
|
||||
# Assemble: create object files from assembler source files. ARM-only
|
||||
define ASSEMBLE_ARM_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_ASSEMBLING_ARM) $$< to $$@
|
||||
$(CC) -c $$(ASFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(ASRCARM), $(eval $(call ASSEMBLE_ARM_TEMPLATE, $(src))))
|
||||
|
||||
|
||||
# Compile: create object files from C source files.
|
||||
define COMPILE_C_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_COMPILING) $$< to $$@
|
||||
$(CC) -c $(THUMB) $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(SRC), $(eval $(call COMPILE_C_TEMPLATE, $(src))))
|
||||
|
||||
# Compile: create object files from C source files. ARM-only
|
||||
define COMPILE_C_ARM_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_COMPILING_ARM) $$< to $$@
|
||||
$(CC) -c $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(SRCARM), $(eval $(call COMPILE_C_ARM_TEMPLATE, $(src))))
|
||||
|
||||
|
||||
# Compile: create object files from C++ source files.
|
||||
define COMPILE_CPP_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_COMPILINGCPP) $$< to $$@
|
||||
$(CC) -c $(THUMB) $$(CFLAGS) $$(CPPFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(CPPSRC), $(eval $(call COMPILE_CPP_TEMPLATE, $(src))))
|
||||
|
||||
# Compile: create object files from C++ source files. ARM-only
|
||||
define COMPILE_CPP_ARM_TEMPLATE
|
||||
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
||||
## @echo
|
||||
@echo $(MSG_COMPILINGCPP_ARM) $$< to $$@
|
||||
$(CC) -c $$(CFLAGS) $$(CPPFLAGS) $$< -o $$@
|
||||
endef
|
||||
$(foreach src, $(CPPSRCARM), $(eval $(call COMPILE_CPP_ARM_TEMPLATE, $(src))))
|
||||
|
||||
|
||||
# Compile: create assembler files from C source files. ARM/Thumb
|
||||
$(SRC:.c=.s) : %.s : %.c
|
||||
@echo $(MSG_ASMFROMC) $< to $@
|
||||
$(CC) $(THUMB) -S $(CFLAGS) $(CONLYFLAGS) $< -o $@
|
||||
|
||||
# Compile: create assembler files from C source files. ARM only
|
||||
$(SRCARM:.c=.s) : %.s : %.c
|
||||
@echo $(MSG_ASMFROMC_ARM) $< to $@
|
||||
$(CC) -S $(CFLAGS) $(CONLYFLAGS) $< -o $@
|
||||
|
||||
# Generate Doxygen documents
|
||||
docs:
|
||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||
|
||||
# Target: clean project.
|
||||
clean: begin clean_list finished end
|
||||
|
||||
clean_list :
|
||||
## @echo
|
||||
@echo $(MSG_CLEANING)
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).map
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).elf
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).hex
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).bin
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).sym
|
||||
$(REMOVE) $(OUTDIR)/$(TARGET).lss
|
||||
$(REMOVE) $(ALLOBJ)
|
||||
$(REMOVE) $(LSTFILES)
|
||||
$(REMOVE) $(DEPFILES)
|
||||
$(REMOVE) $(SRC:.c=.s)
|
||||
$(REMOVE) $(SRCARM:.c=.s)
|
||||
$(REMOVE) $(CPPSRC:.cpp=.s)
|
||||
$(REMOVE) $(CPPSRCARM:.cpp=.s)
|
||||
|
||||
|
||||
# Create output files directory
|
||||
# all known MS Windows OS define the ComSpec environment variable
|
||||
ifdef ComSpec
|
||||
$(shell md $(OUTDIR) 2>NUL)
|
||||
else
|
||||
$(shell mkdir $(OUTDIR) 2>/dev/null)
|
||||
endif
|
||||
|
||||
# Include the dependency files.
|
||||
ifdef ComSpec
|
||||
-include $(shell md $(OUTDIR)\dep 2>NUL) $(wildcard $(OUTDIR)/dep/*)
|
||||
else
|
||||
-include $(shell mkdir $(OUTDIR) 2>/dev/null) $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
|
||||
endif
|
||||
|
||||
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all begin finish end sizebefore sizeafter gccversion \
|
||||
build elf hex bin lss sym clean clean_list program
|
||||
|
220
flight/Bootloaders/OpenPilot2/dfu_mal.c
Normal file
220
flight/Bootloaders/OpenPilot2/dfu_mal.c
Normal file
@ -0,0 +1,220 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : dfu_mal.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Generic media access Layer
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "dfu_mal.h"
|
||||
#include "spi_if.h"
|
||||
#include "flash_if.h"
|
||||
#include "nor_if.h"
|
||||
#include "fsmc_nor.h"
|
||||
#include "usb_lib.h"
|
||||
#include "usb_type.h"
|
||||
#include "usb_desc.h"
|
||||
#include "platform_config.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
uint16_t (*pMAL_Init) (void);
|
||||
uint16_t (*pMAL_Erase) (uint32_t SectorAddress);
|
||||
uint16_t (*pMAL_Write) (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint8_t *(*pMAL_Read) (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint8_t MAL_Buffer[wTransferSize]; /* RAM Buffer for Downloaded Data */
|
||||
NOR_IDTypeDef NOR_ID;
|
||||
extern ONE_DESCRIPTOR DFU_String_Descriptor[7];
|
||||
|
||||
|
||||
static const uint16_t TimingTable[5][2] =
|
||||
{
|
||||
{ 3000 , 20 }, /* SPI Flash */
|
||||
{ 1000 , 25 }, /* NOR Flash M29W128F */
|
||||
{ 100 , 104 }, /* Internal Flash */
|
||||
{ 1000 , 25 }, /* NOR Flash M29W128G */
|
||||
{ 1000 , 45 } /* NOR Flash S29GL128 */
|
||||
};
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MAL_Init
|
||||
* Description : Initializes the Media on the STM32
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t MAL_Init(void)
|
||||
{
|
||||
|
||||
FLASH_If_Init(); /* Internal Flash */
|
||||
|
||||
#if defined(USE_STM3210B_EVAL) || defined(USE_STM3210E_EVAL)
|
||||
SPI_If_Init(); /* SPI Flash */
|
||||
#endif /* USE_STM3210B_EVAL or USE_STM3210E_EVAL */
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
NOR_If_Init(); /* NOR Flash */
|
||||
FSMC_NOR_ReadID(&NOR_ID);
|
||||
|
||||
FSMC_NOR_ReturnToReadMode();
|
||||
|
||||
/* select the alternate descriptor following NOR ID */
|
||||
if ((NOR_ID.Manufacturer_Code == 0x01)&&(NOR_ID.Device_Code2 == NOR_S29GL128))
|
||||
{
|
||||
DFU_String_Descriptor[6].Descriptor = DFU_StringInterface2_3;
|
||||
}
|
||||
|
||||
/* select the alternate descriptor following NOR ID */
|
||||
if ((NOR_ID.Manufacturer_Code == 0x20)&&(NOR_ID.Device_Code2 == NOR_M29W128G))
|
||||
{
|
||||
DFU_String_Descriptor[6].Descriptor = DFU_StringInterface2_2;
|
||||
}
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MAL_Erase
|
||||
* Description : Erase sector
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t MAL_Erase(uint32_t SectorAddress)
|
||||
{
|
||||
|
||||
switch (SectorAddress & MAL_MASK)
|
||||
{
|
||||
case INTERNAL_FLASH_BASE:
|
||||
pMAL_Erase = FLASH_If_Erase;
|
||||
break;
|
||||
|
||||
#if defined(USE_STM3210B_EVAL) || defined(USE_STM3210E_EVAL)
|
||||
case SPI_FLASH_BASE:
|
||||
pMAL_Erase = SPI_If_Erase;
|
||||
break;
|
||||
#endif /* USE_STM3210B_EVAL or USE_STM3210E_EVAL */
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
case NOR_FLASH_BASE:
|
||||
pMAL_Erase = NOR_If_Erase;
|
||||
break;
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
|
||||
default:
|
||||
return MAL_FAIL;
|
||||
}
|
||||
return pMAL_Erase(SectorAddress);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MAL_Write
|
||||
* Description : Write sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t MAL_Write (uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
|
||||
switch (SectorAddress & MAL_MASK)
|
||||
{
|
||||
case INTERNAL_FLASH_BASE:
|
||||
pMAL_Write = FLASH_If_Write;
|
||||
break;
|
||||
|
||||
#if defined(USE_STM3210B_EVAL) || defined(USE_STM3210E_EVAL)
|
||||
case SPI_FLASH_BASE:
|
||||
pMAL_Write = SPI_If_Write;
|
||||
break;
|
||||
#endif /* USE_STM3210B_EVAL || USE_STM3210E_EVAL */
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
case NOR_FLASH_BASE:
|
||||
pMAL_Write = NOR_If_Write;
|
||||
break;
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
default:
|
||||
return MAL_FAIL;
|
||||
}
|
||||
return pMAL_Write(SectorAddress, DataLength);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MAL_Read
|
||||
* Description : Read sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : Buffer pointer
|
||||
*******************************************************************************/
|
||||
uint8_t *MAL_Read (uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
|
||||
switch (SectorAddress & MAL_MASK)
|
||||
{
|
||||
case INTERNAL_FLASH_BASE:
|
||||
pMAL_Read = FLASH_If_Read;
|
||||
break;
|
||||
|
||||
#if defined(USE_STM3210B_EVAL) || defined(USE_STM3210E_EVAL)
|
||||
case SPI_FLASH_BASE:
|
||||
pMAL_Read = SPI_If_Read;
|
||||
break;
|
||||
#endif /* USE_STM3210B_EVAL or USE_STM3210E_EVAL */
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
case NOR_FLASH_BASE:
|
||||
pMAL_Read = NOR_If_Read;
|
||||
break;
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return pMAL_Read (SectorAddress, DataLength);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MAL_GetStatus
|
||||
* Description : Get status
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : Buffer pointer
|
||||
*******************************************************************************/
|
||||
uint16_t MAL_GetStatus(uint32_t SectorAddress , uint8_t Cmd, uint8_t *buffer)
|
||||
{
|
||||
uint8_t x = (SectorAddress >> 26) & 0x03 ; /* 0x000000000 --> 0 */
|
||||
/* 0x640000000 --> 1 */
|
||||
/* 0x080000000 --> 2 */
|
||||
|
||||
uint8_t y = Cmd & 0x01;
|
||||
|
||||
if ((x == 1) && (NOR_ID.Device_Code2 == NOR_M29W128G)&& (NOR_ID.Manufacturer_Code == 0x20))
|
||||
{
|
||||
x = 3 ;
|
||||
}
|
||||
else if((x == 1) && (NOR_ID.Device_Code2 == NOR_S29GL128) && (NOR_ID.Manufacturer_Code == 0x01))
|
||||
{
|
||||
x = 4 ;
|
||||
}
|
||||
|
||||
SET_POLLING_TIMING(TimingTable[x][y]); /* x: Erase/Write Timing */
|
||||
/* y: Media */
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
92
flight/Bootloaders/OpenPilot2/flash_if.c
Normal file
92
flight/Bootloaders/OpenPilot2/flash_if.c
Normal file
@ -0,0 +1,92 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : flash_if.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : specific media access Layer for internal flash
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "flash_if.h"
|
||||
#include "dfu_mal.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FLASH_If_Init
|
||||
* Description : Initializes the Media on the STM32
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t FLASH_If_Init(void)
|
||||
{
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FLASH_If_Erase
|
||||
* Description : Erase sector
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t FLASH_If_Erase(uint32_t SectorAddress)
|
||||
{
|
||||
FLASH_ErasePage(SectorAddress);
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FLASH_If_Write
|
||||
* Description : Write sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t FLASH_If_Write(uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
uint32_t idx = 0;
|
||||
|
||||
if (DataLength & 0x3) /* Not an aligned data */
|
||||
{
|
||||
for (idx = DataLength; idx < ((DataLength & 0xFFFC) + 4); idx++)
|
||||
{
|
||||
MAL_Buffer[idx] = 0xFF;
|
||||
}
|
||||
}
|
||||
/* Data received are Word multiple */
|
||||
|
||||
for (idx = 0; idx < DataLength; idx = idx + 4)
|
||||
{
|
||||
FLASH_ProgramWord(SectorAddress, *(uint32_t *)(MAL_Buffer + idx));
|
||||
SectorAddress += 4;
|
||||
}
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FLASH_If_Read
|
||||
* Description : Read sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : buffer address pointer
|
||||
*******************************************************************************/
|
||||
uint8_t *FLASH_If_Read (uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
return (uint8_t*)(SectorAddress);
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
415
flight/Bootloaders/OpenPilot2/fsmc_nor.c
Normal file
415
flight/Bootloaders/OpenPilot2/fsmc_nor.c
Normal file
@ -0,0 +1,415 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : fsmc_nor.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : This file provides a set of functions needed to drive the
|
||||
* M29W128FL, M29W128GL and S29GL128P NOR memories mounted
|
||||
* on STM3210E-EVAL board.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "fsmc_nor.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
#define Bank1_NOR2_ADDR ((uint32_t)0x64000000)
|
||||
|
||||
/* Delay definition */
|
||||
#define BlockErase_Timeout ((uint32_t)0x00A00000)
|
||||
#define ChipErase_Timeout ((uint32_t)0x30000000)
|
||||
#define Program_Timeout ((uint32_t)0x00001400)
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
#define ADDR_SHIFT(A) (Bank1_NOR2_ADDR + (2 * (A)))
|
||||
#define NOR_WRITE(Address, Data) (*(__IO uint16_t *)(Address) = (Data))
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_Init
|
||||
* Description : Configures the FSMC and GPIOs to interface with the NOR memory.
|
||||
* This function must be called before any write/read operation
|
||||
* on the NOR.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void FSMC_NOR_Init(void)
|
||||
{
|
||||
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
|
||||
FSMC_NORSRAMTimingInitTypeDef p;
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
|
||||
RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
|
||||
|
||||
/*-- GPIO Configuration ------------------------------------------------------*/
|
||||
/* NOR Data lines configuration */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
|
||||
GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
|
||||
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
|
||||
GPIO_Pin_14 | GPIO_Pin_15;
|
||||
GPIO_Init(GPIOE, &GPIO_InitStructure);
|
||||
|
||||
/* NOR Address lines configuration */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
|
||||
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |
|
||||
GPIO_Pin_14 | GPIO_Pin_15;
|
||||
GPIO_Init(GPIOF, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |
|
||||
GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
|
||||
GPIO_Init(GPIOG, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
|
||||
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
|
||||
GPIO_Init(GPIOE, &GPIO_InitStructure);
|
||||
|
||||
/* NOE and NWE configuration */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
|
||||
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
||||
|
||||
/* NE2 configuration */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
|
||||
GPIO_Init(GPIOG, &GPIO_InitStructure);
|
||||
|
||||
/*-- FSMC Configuration ----------------------------------------------------*/
|
||||
p.FSMC_AddressSetupTime = 0x02;
|
||||
p.FSMC_AddressHoldTime = 0x00;
|
||||
p.FSMC_DataSetupTime = 0x05;
|
||||
p.FSMC_BusTurnAroundDuration = 0x00;
|
||||
p.FSMC_CLKDivision = 0x00;
|
||||
p.FSMC_DataLatency = 0x00;
|
||||
p.FSMC_AccessMode = FSMC_AccessMode_B;
|
||||
|
||||
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
|
||||
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
|
||||
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
|
||||
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
|
||||
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
|
||||
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
|
||||
|
||||
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
|
||||
|
||||
/* Enable FSMC Bank1_NOR Bank */
|
||||
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_ReadID
|
||||
* Description : Reads NOR memory's Manufacturer and Device Code.
|
||||
* Input : - NOR_ID: pointer to a NOR_IDTypeDef structure which will hold
|
||||
* the Manufacturer and Device Code.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void FSMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x0090);
|
||||
|
||||
NOR_ID->Manufacturer_Code = *(__IO uint16_t *) ADDR_SHIFT(0x0000);
|
||||
NOR_ID->Device_Code1 = *(__IO uint16_t *) ADDR_SHIFT(0x0001);
|
||||
NOR_ID->Device_Code2 = *(__IO uint16_t *) ADDR_SHIFT(0x000E);
|
||||
NOR_ID->Device_Code3 = *(__IO uint16_t *) ADDR_SHIFT(0x000F);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_EraseBlock
|
||||
* Description : Erases the specified Nor memory block.
|
||||
* Input : - BlockAddr: address of the block to erase.
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_EraseBlock(uint32_t BlockAddr)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x0080);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE((Bank1_NOR2_ADDR + BlockAddr), 0x30);
|
||||
|
||||
return (FSMC_NOR_GetStatus(BlockErase_Timeout));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_EraseChip
|
||||
* Description : Erases the entire chip.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_EraseChip(void)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x0080);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x0010);
|
||||
|
||||
return (FSMC_NOR_GetStatus(ChipErase_Timeout));
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_WriteHalfWord
|
||||
* Description : Writes a half-word to the NOR memory.
|
||||
* Input : - WriteAddr : NOR memory internal address to write to.
|
||||
* - Data : Data to write.
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_WriteHalfWord(uint32_t WriteAddr, uint16_t Data)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00A0);
|
||||
NOR_WRITE((Bank1_NOR2_ADDR + WriteAddr), Data);
|
||||
|
||||
return (FSMC_NOR_GetStatus(Program_Timeout));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_WriteBuffer
|
||||
* Description : Writes a half-word buffer to the FSMC NOR memory.
|
||||
* Input : - pBuffer : pointer to buffer.
|
||||
* - WriteAddr : NOR memory internal address from which the data
|
||||
* will be written.
|
||||
* - NumHalfwordToWrite : number of Half words to write.
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite)
|
||||
{
|
||||
NOR_Status status = NOR_ONGOING;
|
||||
|
||||
do
|
||||
{
|
||||
/* Transfer data to the memory */
|
||||
status = FSMC_NOR_WriteHalfWord(WriteAddr, *pBuffer++);
|
||||
WriteAddr = WriteAddr + 2;
|
||||
NumHalfwordToWrite--;
|
||||
}
|
||||
while((status == NOR_SUCCESS) && (NumHalfwordToWrite != 0));
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_ProgramBuffer
|
||||
* Description : Writes a half-word buffer to the FSMC NOR memory. This function
|
||||
* must be used only with S29GL128P NOR memory.
|
||||
* Input : - pBuffer : pointer to buffer.
|
||||
* - WriteAddr: NOR memory internal address from which the data
|
||||
* will be written.
|
||||
* - NumHalfwordToWrite: number of Half words to write.
|
||||
* The maximum allowed value is 32 Half words (64 bytes).
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_ProgramBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite)
|
||||
{
|
||||
uint32_t lastloadedaddress = 0x00;
|
||||
uint32_t currentaddress = 0x00;
|
||||
uint32_t endaddress = 0x00;
|
||||
|
||||
/* Initialize variables */
|
||||
currentaddress = WriteAddr;
|
||||
endaddress = WriteAddr + NumHalfwordToWrite - 1;
|
||||
lastloadedaddress = WriteAddr;
|
||||
|
||||
/* Issue unlock command sequence */
|
||||
NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
|
||||
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
|
||||
/* Write Write Buffer Load Command */
|
||||
NOR_WRITE(ADDR_SHIFT(WriteAddr), 0x0025);
|
||||
NOR_WRITE(ADDR_SHIFT(WriteAddr), (NumHalfwordToWrite - 1));
|
||||
|
||||
/* Load Data into NOR Buffer */
|
||||
while(currentaddress <= endaddress)
|
||||
{
|
||||
/* Store last loaded address & data value (for polling) */
|
||||
lastloadedaddress = currentaddress;
|
||||
|
||||
NOR_WRITE(ADDR_SHIFT(currentaddress), *pBuffer++);
|
||||
currentaddress += 1;
|
||||
}
|
||||
|
||||
NOR_WRITE(ADDR_SHIFT(lastloadedaddress), 0x29);
|
||||
|
||||
return(FSMC_NOR_GetStatus(Program_Timeout));
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_ReadHalfWord
|
||||
* Description : Reads a half-word from the NOR memory.
|
||||
* Input : - ReadAddr : NOR memory internal address to read from.
|
||||
* Output : None
|
||||
* Return : Half-word read from the NOR memory
|
||||
*******************************************************************************/
|
||||
uint16_t FSMC_NOR_ReadHalfWord(uint32_t ReadAddr)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x002AA), 0x0055);
|
||||
NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0 );
|
||||
|
||||
return (*(__IO uint16_t *)((Bank1_NOR2_ADDR + ReadAddr)));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : FSMC_NOR_ReadBuffer
|
||||
* Description : Reads a block of data from the FSMC NOR memory.
|
||||
* Input : - pBuffer : pointer to the buffer that receives the data read
|
||||
* from the NOR memory.
|
||||
* - ReadAddr : NOR memory internal address to read from.
|
||||
* - NumHalfwordToRead : number of Half word to read.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void FSMC_NOR_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
|
||||
NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0);
|
||||
|
||||
for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /* while there is data to read */
|
||||
{
|
||||
/* Read a Halfword from the NOR */
|
||||
*pBuffer++ = *(__IO uint16_t *)((Bank1_NOR2_ADDR + ReadAddr));
|
||||
ReadAddr = ReadAddr + 2;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_ReturnToReadMode
|
||||
* Description : Returns the NOR memory to Read mode.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : NOR_SUCCESS
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_ReturnToReadMode(void)
|
||||
{
|
||||
NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0);
|
||||
|
||||
return (NOR_SUCCESS);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_Reset
|
||||
* Description : Returns the NOR memory to Read mode and resets the errors in
|
||||
* the NOR memory Status Register.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : NOR_SUCCESS
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_Reset(void)
|
||||
{
|
||||
NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
|
||||
NOR_WRITE(ADDR_SHIFT(0x002AA), 0x0055);
|
||||
NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0);
|
||||
|
||||
return (NOR_SUCCESS);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function Name : FSMC_NOR_GetStatus
|
||||
* Description : Returns the NOR operation status.
|
||||
* Input : - Timeout: NOR progamming Timeout
|
||||
* Output : None
|
||||
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
|
||||
* or NOR_TIMEOUT
|
||||
*******************************************************************************/
|
||||
NOR_Status FSMC_NOR_GetStatus(uint32_t Timeout)
|
||||
{
|
||||
uint16_t val1 = 0x00, val2 = 0x00;
|
||||
NOR_Status status = NOR_ONGOING;
|
||||
uint32_t timeout = Timeout;
|
||||
|
||||
/* Poll on NOR memory Ready/Busy signal ------------------------------------*/
|
||||
while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) != RESET) && (timeout > 0))
|
||||
{
|
||||
timeout--;
|
||||
}
|
||||
|
||||
timeout = Timeout;
|
||||
|
||||
while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) == RESET) && (timeout > 0))
|
||||
{
|
||||
timeout--;
|
||||
}
|
||||
|
||||
/* Get the NOR memory operation status -------------------------------------*/
|
||||
while((Timeout != 0x00) && (status != NOR_SUCCESS))
|
||||
{
|
||||
Timeout--;
|
||||
|
||||
/* Read DQ6 and DQ5 */
|
||||
val1 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
|
||||
val2 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
|
||||
|
||||
/* If DQ6 did not toggle between the two reads then return NOR_Success */
|
||||
if((val1 & 0x0040) == (val2 & 0x0040))
|
||||
{
|
||||
return NOR_SUCCESS;
|
||||
}
|
||||
|
||||
if((val1 & 0x0020) != 0x0020)
|
||||
{
|
||||
status = NOR_ONGOING;
|
||||
}
|
||||
|
||||
val1 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
|
||||
val2 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
|
||||
|
||||
if((val1 & 0x0040) == (val2 & 0x0040))
|
||||
{
|
||||
return NOR_SUCCESS;
|
||||
}
|
||||
else if((val1 & 0x0020) == 0x0020)
|
||||
{
|
||||
return NOR_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if(Timeout == 0x00)
|
||||
{
|
||||
status = NOR_TIMEOUT;
|
||||
}
|
||||
|
||||
/* Return the operation status */
|
||||
return (status);
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
309
flight/Bootloaders/OpenPilot2/hw_config.c
Normal file
309
flight/Bootloaders/OpenPilot2/hw_config.c
Normal file
@ -0,0 +1,309 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : hw_config.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Hardware Configuration & Setup
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
#include "spi_flash.h"
|
||||
#include "hw_config.h"
|
||||
#include "dfu_mal.h"
|
||||
#include "usb_lib.h"
|
||||
#include "usb_desc.h"
|
||||
#include "platform_config.h"
|
||||
#include "usb_pwr.h"
|
||||
#include "stm32_eval.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
ErrorStatus HSEStartUpStatus;
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len);
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/*******************************************************************************
|
||||
* Function Name : Set_System.
|
||||
* Description : Configures Main system clocks & power.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Set_System(void)
|
||||
{
|
||||
#ifndef USE_STM3210C_EVAL
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
#endif /* USE_STM3210C_EVAL */
|
||||
|
||||
/* Unlock the internal flash */
|
||||
FLASH_Unlock();
|
||||
|
||||
#ifdef STM32F10X_HD
|
||||
/* Enable the FSMC Clock */
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
|
||||
#endif /* STM32F10X_HD */
|
||||
|
||||
#ifndef USE_STM3210C_EVAL
|
||||
/* Enable "DISCONNECT" GPIO clock */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);
|
||||
|
||||
/* Configure USB pull-up */
|
||||
GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
|
||||
GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);
|
||||
|
||||
USB_Cable_Config(DISABLE);
|
||||
#endif /* USE_STM3210C_EVAL */
|
||||
|
||||
/* Init the media interface */
|
||||
MAL_Init();
|
||||
|
||||
#ifndef USE_STM3210C_EVAL
|
||||
USB_Cable_Config(ENABLE);
|
||||
#endif /* USE_STM3210C_EVAL */
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Set_USBClock.
|
||||
* Description : Configures USB Clock input (48MHz).
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Set_USBClock(void)
|
||||
{
|
||||
#ifdef STM32F10X_CL
|
||||
/* Select USBCLK source */
|
||||
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
|
||||
|
||||
/* Enable the USB clock */
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
|
||||
#else
|
||||
/* Select USBCLK source */
|
||||
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
|
||||
|
||||
/* Enable the USB clock */
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
|
||||
#endif /* STM32F10X_CL */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Enter_LowPowerMode.
|
||||
* Description : Power-off system clocks and power while entering suspend mode.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Enter_LowPowerMode(void)
|
||||
{
|
||||
/* Set the device state to suspend */
|
||||
bDeviceState = SUSPENDED;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Leave_LowPowerMode.
|
||||
* Description : Restores system clocks and power while exiting suspend mode.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Leave_LowPowerMode(void)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
|
||||
/* Set the device state to the correct state */
|
||||
if (pInfo->Current_Configuration != 0)
|
||||
{
|
||||
/* Device configured */
|
||||
bDeviceState = CONFIGURED;
|
||||
}
|
||||
else
|
||||
{
|
||||
bDeviceState = ATTACHED;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : USB_Cable_Config.
|
||||
* Description : Software Connection/Disconnection of USB Cable.
|
||||
* Input : NewState: new state.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void USB_Cable_Config (FunctionalState NewState)
|
||||
{
|
||||
#ifdef USE_STM3210C_EVAL
|
||||
if (NewState != DISABLE)
|
||||
{
|
||||
USB_DevConnect();
|
||||
}
|
||||
else
|
||||
{
|
||||
USB_DevDisconnect();
|
||||
}
|
||||
#else /* USE_STM3210B_EVAL or USE_STM3210E_EVAL */
|
||||
if (NewState != DISABLE)
|
||||
{
|
||||
GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
|
||||
}
|
||||
#endif /* USE_STM3210C_EVAL */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Button_Config.
|
||||
* Description : Configures the DFU selector Button to enter DFU Mode.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_Button_Config(void)
|
||||
{
|
||||
/* Configure "DFU enter" button */
|
||||
// STM_EVAL_PBInit(Button_KEY, Mode_GPIO);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Button_Read.
|
||||
* Description : Reads the DFU selector Button to enter DFU Mode.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : Status
|
||||
*******************************************************************************/
|
||||
uint8_t DFU_Button_Read (void)
|
||||
{
|
||||
return 0;//STM_EVAL_PBGetState(Button_KEY);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : USB_Interrupts_Config.
|
||||
* Description : Configures the USB interrupts.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void USB_Interrupts_Config(void)
|
||||
{
|
||||
NVIC_InitTypeDef NVIC_InitStructure;
|
||||
|
||||
#ifdef STM32F10X_CL
|
||||
/* Enable the USB Interrupts */
|
||||
NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
#else
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
#endif /* STM32F10X_CL */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Reset_Device.
|
||||
* Description : Reset the device.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Reset_Device(void)
|
||||
{
|
||||
USB_Cable_Config(DISABLE);
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Get_SerialNum.
|
||||
* Description : Create the serial number string descriptor.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Get_SerialNum(void)
|
||||
{
|
||||
uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
|
||||
|
||||
Device_Serial0 = *(__IO uint32_t*)(0x1FFFF7E8);
|
||||
Device_Serial1 = *(__IO uint32_t*)(0x1FFFF7EC);
|
||||
Device_Serial2 = *(__IO uint32_t*)(0x1FFFF7F0);
|
||||
|
||||
Device_Serial0 += Device_Serial2;
|
||||
|
||||
if (Device_Serial0 != 0)
|
||||
{
|
||||
IntToUnicode (Device_Serial0, &DFU_StringSerial[2] , 8);
|
||||
IntToUnicode (Device_Serial1, &DFU_StringSerial[18], 4);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : HexToChar.
|
||||
* Description : Convert Hex 32Bits value into char.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len)
|
||||
{
|
||||
uint8_t idx = 0;
|
||||
|
||||
for( idx = 0 ; idx < len ; idx ++)
|
||||
{
|
||||
if( ((value >> 28)) < 0xA )
|
||||
{
|
||||
pbuf[ 2* idx] = (value >> 28) + '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
pbuf[2* idx] = (value >> 28) + 'A' - 10;
|
||||
}
|
||||
|
||||
value = value << 4;
|
||||
|
||||
pbuf[ 2* idx + 1] = 0;
|
||||
}
|
||||
}
|
||||
#ifdef STM32F10X_CL
|
||||
/*******************************************************************************
|
||||
* Function Name : USB_OTG_BSP_uDelay.
|
||||
* Description : provide delay (usec).
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void USB_OTG_BSP_uDelay (const uint32_t usec)
|
||||
{
|
||||
RCC_ClocksTypeDef RCC_Clocks;
|
||||
|
||||
/* Configure HCLK clock as SysTick clock source */
|
||||
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
|
||||
|
||||
RCC_GetClocksFreq(&RCC_Clocks);
|
||||
|
||||
SysTick_Config(usec * (RCC_Clocks.HCLK_Frequency / 1000000));
|
||||
|
||||
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk ;
|
||||
|
||||
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
|
||||
}
|
||||
#endif
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
61
flight/Bootloaders/OpenPilot2/inc/dfu_mal.h
Normal file
61
flight/Bootloaders/OpenPilot2/inc/dfu_mal.h
Normal file
@ -0,0 +1,61 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : dfu_mal.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for dfu_mal.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __DFU_MAL_H
|
||||
#define __DFU_MAL_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
#include "dfu_mal.h"
|
||||
#include "usb_desc.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define MAL_OK 0
|
||||
#define MAL_FAIL 1
|
||||
#define MAX_USED_MEDIA 3
|
||||
#define MAL_MASK 0xFC000000
|
||||
|
||||
#define INTERNAL_FLASH_BASE 0x08000000
|
||||
#define SPI_FLASH_BASE 0x00000000
|
||||
#define NOR_FLASH_BASE 0x64000000
|
||||
|
||||
#define NOR_M29W128F 0x2212
|
||||
#define NOR_M29W128G 0x2221
|
||||
#define NOR_S29GL128 0x2221
|
||||
|
||||
/* utils macro ---------------------------------------------------------------*/
|
||||
#define _1st_BYTE(x) (uint8_t)((x)&0xFF) /* 1st addressing cycle */
|
||||
#define _2nd_BYTE(x) (uint8_t)(((x)&0xFF00)>>8) /* 2nd addressing cycle */
|
||||
#define _3rd_BYTE(x) (uint8_t)(((x)&0xFF0000)>>16) /* 3rd addressing cycle */
|
||||
#define _4th_BYTE(x) (uint8_t)(((x)&0xFF000000)>>24) /* 4th addressing cycle */
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#define SET_POLLING_TIMING(x) buffer[1] = _1st_BYTE(x);\
|
||||
buffer[2] = _2nd_BYTE(x);\
|
||||
buffer[3] = _3rd_BYTE(x);
|
||||
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
uint16_t MAL_Init (void);
|
||||
uint16_t MAL_Erase (uint32_t SectorAddress);
|
||||
uint16_t MAL_Write (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint8_t *MAL_Read (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint16_t MAL_GetStatus(uint32_t SectorAddress ,uint8_t Cmd, uint8_t *buffer);
|
||||
|
||||
extern uint8_t MAL_Buffer[wTransferSize]; /* RAM Buffer for Downloaded Data */
|
||||
#endif /* __DFU_MAL_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
34
flight/Bootloaders/OpenPilot2/inc/flash_if.h
Normal file
34
flight/Bootloaders/OpenPilot2/inc/flash_if.h
Normal file
@ -0,0 +1,34 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : flash_if.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for flash_if.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __FLASH_IF_MAL_H
|
||||
#define __FLASH_IF_MAL_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
uint16_t FLASH_If_Init(void);
|
||||
uint16_t FLASH_If_Erase (uint32_t SectorAddress);
|
||||
uint16_t FLASH_If_Write (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint8_t *FLASH_If_Read (uint32_t SectorAddress, uint32_t DataLength);
|
||||
|
||||
#endif /* __FLASH_IF_MAL_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
58
flight/Bootloaders/OpenPilot2/inc/fsmc_nor.h
Normal file
58
flight/Bootloaders/OpenPilot2/inc/fsmc_nor.h
Normal file
@ -0,0 +1,58 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : fsmc_nor.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for fsmc_nor.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __FSMC_NOR_H
|
||||
#define __FSMC_NOR_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
uint16_t Manufacturer_Code;
|
||||
uint16_t Device_Code1;
|
||||
uint16_t Device_Code2;
|
||||
uint16_t Device_Code3;
|
||||
}NOR_IDTypeDef;
|
||||
|
||||
/* NOR Status */
|
||||
typedef enum
|
||||
{
|
||||
NOR_SUCCESS = 0,
|
||||
NOR_ONGOING,
|
||||
NOR_ERROR,
|
||||
NOR_TIMEOUT
|
||||
}NOR_Status;
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void FSMC_NOR_Init(void);
|
||||
void FSMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID);
|
||||
NOR_Status FSMC_NOR_EraseBlock(uint32_t BlockAddr);
|
||||
NOR_Status FSMC_NOR_EraseChip(void);
|
||||
NOR_Status FSMC_NOR_WriteHalfWord(uint32_t WriteAddr, uint16_t Data);
|
||||
NOR_Status FSMC_NOR_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite);
|
||||
NOR_Status FSMC_NOR_ProgramBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite);
|
||||
uint16_t FSMC_NOR_ReadHalfWord(uint32_t ReadAddr);
|
||||
void FSMC_NOR_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead);
|
||||
NOR_Status FSMC_NOR_ReturnToReadMode(void);
|
||||
NOR_Status FSMC_NOR_Reset(void);
|
||||
NOR_Status FSMC_NOR_GetStatus(uint32_t Timeout);
|
||||
|
||||
#endif /* __FSMC_NOR_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
47
flight/Bootloaders/OpenPilot2/inc/hw_config.h
Normal file
47
flight/Bootloaders/OpenPilot2/inc/hw_config.h
Normal file
@ -0,0 +1,47 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : hw_config.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Hardware Configuration & Setup
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __HW_CONFIG_H
|
||||
#define __HW_CONFIG_H
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Flash memory address from where user application will be loaded */
|
||||
#define ApplicationAddress 0x08003000
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void Set_System(void);
|
||||
void Set_USBClock(void);
|
||||
void Enter_LowPowerMode(void);
|
||||
void Leave_LowPowerMode(void);
|
||||
void USB_Cable_Config (FunctionalState NewState);
|
||||
void USB_Interrupts_Config(void);
|
||||
|
||||
void DFU_Button_Config(void);
|
||||
uint8_t DFU_Button_Read(void);
|
||||
|
||||
void Reset_Device(void);
|
||||
void SMI_FLASH_Init(void);
|
||||
void SMI_FLASH_SectorErase(uint32_t Address);
|
||||
void SMI_FLASH_WordWrite(uint32_t Address, uint32_t Data);
|
||||
void SMI_FLASH_PageWrite(uint32_t Address, uint32_t* wBuffer);
|
||||
void Get_SerialNum(void);
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
#endif /*__HW_CONFIG_H*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
34
flight/Bootloaders/OpenPilot2/inc/nor_if.h
Normal file
34
flight/Bootloaders/OpenPilot2/inc/nor_if.h
Normal file
@ -0,0 +1,34 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : nor_if.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for nor_if.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __NOR_IF_MAL_H
|
||||
#define __NOR_IF_MAL_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
uint16_t NOR_If_Init(void);
|
||||
uint16_t NOR_If_Erase(uint32_t Address);
|
||||
uint16_t NOR_If_Write(uint32_t Address, uint32_t DataLength);
|
||||
uint8_t *NOR_If_Read(uint32_t Address, uint32_t DataLength);
|
||||
|
||||
#endif /* __NOR_IF_MAL_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
57
flight/Bootloaders/OpenPilot2/inc/platform_config.h
Normal file
57
flight/Bootloaders/OpenPilot2/inc/platform_config.h
Normal file
@ -0,0 +1,57 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : platform_config.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Evaluation board specific configuration file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __PLATFORM_CONFIG_H
|
||||
#define __PLATFORM_CONFIG_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Uncomment the line corresponding to the STMicroelectronics evaluation board
|
||||
used to run the example */
|
||||
#if !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL) && !defined (USE_STM3210C_EVAL)
|
||||
//#define USE_STM3210B_EVAL
|
||||
//#define USE_STM3210E_EVAL
|
||||
#define USE_STM3210C_EVAL
|
||||
#endif
|
||||
|
||||
|
||||
/* Define the STM32F10x hardware depending on the used evaluation board */
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
#define USB_DISCONNECT GPIOD
|
||||
#define USB_DISCONNECT_PIN GPIO_Pin_9
|
||||
#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOD
|
||||
|
||||
#elif defined (USE_STM3210E_EVAL)
|
||||
#define USB_DISCONNECT GPIOC
|
||||
#define USB_DISCONNECT_PIN GPIO_Pin_4
|
||||
#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOC
|
||||
|
||||
#elif defined (USE_STM3210C_EVAL)
|
||||
#define USB_DISCONNECT GPIOC
|
||||
#define USB_DISCONNECT_PIN GPIO_Pin_4
|
||||
#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOC
|
||||
|
||||
#endif /* USE_STM3210B_EVAL */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
#endif /* __PLATFORM_CONFIG_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
68
flight/Bootloaders/OpenPilot2/inc/spi_flash.h
Normal file
68
flight/Bootloaders/OpenPilot2/inc/spi_flash.h
Normal file
@ -0,0 +1,68 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : spi_flash.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for spi_flash.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SPI_FLASH_H
|
||||
#define __SPI_FLASH_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Uncomment the line corresponding to the STMicroelectronics evaluation board
|
||||
used to run the example */
|
||||
#if !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL) && !defined (USE_STM3210C_EVAL)
|
||||
//#define USE_STM3210B_EVAL
|
||||
#define USE_STM3210E_EVAL
|
||||
#endif
|
||||
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
#define GPIO_CS GPIOA
|
||||
#define RCC_APB2Periph_GPIO_CS RCC_APB2Periph_GPIOA
|
||||
#define GPIO_Pin_CS GPIO_Pin_4
|
||||
#else /* USE_STM3210E_EVAL */
|
||||
#define GPIO_CS GPIOB
|
||||
#define RCC_APB2Periph_GPIO_CS RCC_APB2Periph_GPIOB
|
||||
#define GPIO_Pin_CS GPIO_Pin_2
|
||||
#endif
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Select SPI FLASH: Chip Select pin low */
|
||||
#define SPI_FLASH_CS_LOW() GPIO_ResetBits(GPIO_CS, GPIO_Pin_CS)
|
||||
/* Deselect SPI FLASH: Chip Select pin high */
|
||||
#define SPI_FLASH_CS_HIGH() GPIO_SetBits(GPIO_CS, GPIO_Pin_CS)
|
||||
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
/*----- High layer function -----*/
|
||||
void SPI_FLASH_Init(void);
|
||||
void SPI_FLASH_SectorErase(uint32_t SectorAddr);
|
||||
void SPI_FLASH_BulkErase(void);
|
||||
void SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
|
||||
void SPI_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
|
||||
void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
|
||||
uint32_t SPI_FLASH_ReadID(void);
|
||||
void SPI_FLASH_StartReadSequence(uint32_t ReadAddr);
|
||||
|
||||
/*----- Low layer function -----*/
|
||||
uint8_t SPI_FLASH_ReadByte(void);
|
||||
uint8_t SPI_FLASH_SendByte(uint8_t byte);
|
||||
uint16_t SPI_FLASH_SendHalfWord(uint16_t HalfWord);
|
||||
void SPI_FLASH_WriteEnable(void);
|
||||
void SPI_FLASH_WaitForWriteEnd(void);
|
||||
|
||||
#endif /* __SPI_FLASH_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
34
flight/Bootloaders/OpenPilot2/inc/spi_if.h
Normal file
34
flight/Bootloaders/OpenPilot2/inc/spi_if.h
Normal file
@ -0,0 +1,34 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : dfu_mal.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Header for dfu_mal.c file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SPI_IF_MAL_H
|
||||
#define __SPI_IF_MAL_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
uint16_t SPI_If_Init(void);
|
||||
uint16_t SPI_If_Erase (uint32_t SectorAddress);
|
||||
uint16_t SPI_If_Write (uint32_t SectorAddress, uint32_t DataLength);
|
||||
uint8_t *SPI_If_Read (uint32_t SectorAddress, uint32_t DataLength);
|
||||
|
||||
#endif /* __SPI_IF_MAL_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
316
flight/Bootloaders/OpenPilot2/inc/stm3210e_eval.h
Normal file
316
flight/Bootloaders/OpenPilot2/inc/stm3210e_eval.h
Normal file
@ -0,0 +1,316 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm3210e_eval.h
|
||||
* @author MCD Application Team
|
||||
* @version V4.2.0
|
||||
* @date 04/16/2010
|
||||
* @brief This file contains definitions for STM3210E_EVAL's Leds, push-buttons
|
||||
* COM ports, sFLASH (on SPI) and Temperature Sensor LM75 (on I2C)
|
||||
* hardware resources.
|
||||
******************************************************************************
|
||||
* @copy
|
||||
*
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||||
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*
|
||||
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM3210E_EVAL_H
|
||||
#define __STM3210E_EVAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32_eval.h"
|
||||
|
||||
/** @addtogroup Utilities
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Types
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Constants
|
||||
* @{
|
||||
*/
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_LED
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_BUTTON
|
||||
* @{
|
||||
*/
|
||||
#define BUTTONn 8
|
||||
|
||||
/**
|
||||
* @brief Wakeup push-button
|
||||
*/
|
||||
#define WAKEUP_BUTTON_PIN GPIO_Pin_0
|
||||
#define WAKEUP_BUTTON_GPIO_PORT GPIOA
|
||||
#define WAKEUP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0
|
||||
#define WAKEUP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA
|
||||
#define WAKEUP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
|
||||
#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
|
||||
/**
|
||||
* @brief Tamper push-button
|
||||
*/
|
||||
#define TAMPER_BUTTON_PIN GPIO_Pin_13
|
||||
#define TAMPER_BUTTON_GPIO_PORT GPIOC
|
||||
#define TAMPER_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOC
|
||||
#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13
|
||||
#define TAMPER_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC
|
||||
#define TAMPER_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
|
||||
#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
|
||||
/**
|
||||
* @brief Key push-button
|
||||
*/
|
||||
#define KEY_BUTTON_PIN GPIO_Pin_8
|
||||
#define KEY_BUTTON_GPIO_PORT GPIOG
|
||||
#define KEY_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
|
||||
#define KEY_BUTTON_EXTI_LINE EXTI_Line8
|
||||
#define KEY_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
|
||||
#define KEY_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource8
|
||||
#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
|
||||
/**
|
||||
* @brief Joystick Right push-button
|
||||
*/
|
||||
#define RIGHT_BUTTON_PIN GPIO_Pin_13
|
||||
#define RIGHT_BUTTON_GPIO_PORT GPIOG
|
||||
#define RIGHT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
|
||||
#define RIGHT_BUTTON_EXTI_LINE EXTI_Line13
|
||||
#define RIGHT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
|
||||
#define RIGHT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
|
||||
#define RIGHT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
|
||||
/**
|
||||
* @brief Joystick Left push-button
|
||||
*/
|
||||
#define LEFT_BUTTON_PIN GPIO_Pin_14
|
||||
#define LEFT_BUTTON_GPIO_PORT GPIOG
|
||||
#define LEFT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
|
||||
#define LEFT_BUTTON_EXTI_LINE EXTI_Line14
|
||||
#define LEFT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
|
||||
#define LEFT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource14
|
||||
#define LEFT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
|
||||
/**
|
||||
* @brief Joystick Up push-button
|
||||
*/
|
||||
#define UP_BUTTON_PIN GPIO_Pin_15
|
||||
#define UP_BUTTON_GPIO_PORT GPIOG
|
||||
#define UP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
|
||||
#define UP_BUTTON_EXTI_LINE EXTI_Line15
|
||||
#define UP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
|
||||
#define UP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource15
|
||||
#define UP_BUTTON_EXTI_IRQn EXTI15_10_IRQn
|
||||
/**
|
||||
* @brief Joystick Down push-button
|
||||
*/
|
||||
#define DOWN_BUTTON_PIN GPIO_Pin_3
|
||||
#define DOWN_BUTTON_GPIO_PORT GPIOD
|
||||
#define DOWN_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOD
|
||||
#define DOWN_BUTTON_EXTI_LINE EXTI_Line3
|
||||
#define DOWN_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOD
|
||||
#define DOWN_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource3
|
||||
#define DOWN_BUTTON_EXTI_IRQn EXTI3_IRQn
|
||||
/**
|
||||
* @brief Joystick Sel push-button
|
||||
*/
|
||||
#define SEL_BUTTON_PIN GPIO_Pin_7
|
||||
#define SEL_BUTTON_GPIO_PORT GPIOG
|
||||
#define SEL_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
|
||||
#define SEL_BUTTON_EXTI_LINE EXTI_Line7
|
||||
#define SEL_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
|
||||
#define SEL_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource7
|
||||
#define SEL_BUTTON_EXTI_IRQn EXTI9_5_IRQn
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_COM
|
||||
* @{
|
||||
*/
|
||||
#define COMn 2
|
||||
|
||||
/**
|
||||
* @brief Definition for COM port1, connected to USART1
|
||||
*/
|
||||
#define EVAL_COM1 USART1
|
||||
#define EVAL_COM1_CLK RCC_APB2Periph_USART1
|
||||
#define EVAL_COM1_TX_PIN GPIO_Pin_9
|
||||
#define EVAL_COM1_TX_GPIO_PORT GPIOA
|
||||
#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define EVAL_COM1_RX_PIN GPIO_Pin_10
|
||||
#define EVAL_COM1_RX_GPIO_PORT GPIOA
|
||||
#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define EVAL_COM1_IRQn USART1_IRQn
|
||||
|
||||
/**
|
||||
* @brief Definition for COM port2, connected to USART2
|
||||
*/
|
||||
#define EVAL_COM2 USART2
|
||||
#define EVAL_COM2_CLK RCC_APB1Periph_USART2
|
||||
#define EVAL_COM2_TX_PIN GPIO_Pin_2
|
||||
#define EVAL_COM2_TX_GPIO_PORT GPIOA
|
||||
#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define EVAL_COM2_RX_PIN GPIO_Pin_3
|
||||
#define EVAL_COM2_RX_GPIO_PORT GPIOA
|
||||
#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define EVAL_COM2_IRQn USART2_IRQn
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_SD_FLASH
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief SD FLASH SDIO Interface
|
||||
*/
|
||||
|
||||
#define SD_DETECT_PIN GPIO_Pin_11 /* PF.11 */
|
||||
#define SD_DETECT_GPIO_PORT GPIOF /* GPIOF */
|
||||
#define SD_DETECT_GPIO_CLK RCC_APB2Periph_GPIOF
|
||||
|
||||
#define SDIO_FIFO_ADDRESS ((uint32_t)0x40018080)
|
||||
/**
|
||||
* @brief SDIO Intialization Frequency (400KHz max)
|
||||
*/
|
||||
#define SDIO_INIT_CLK_DIV ((uint8_t)0xB2)
|
||||
/**
|
||||
* @brief SDIO Data Transfer Frequency (25MHz max)
|
||||
*/
|
||||
#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x1)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_M25P_FLASH_SPI
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief M25P FLASH SPI Interface pins
|
||||
*/
|
||||
#define sFLASH_SPI SPI1
|
||||
#define sFLASH_SPI_CLK RCC_APB2Periph_SPI1
|
||||
#define sFLASH_SPI_SCK_PIN GPIO_Pin_5 /* PA.05 */
|
||||
#define sFLASH_SPI_SCK_GPIO_PORT GPIOA /* GPIOA */
|
||||
#define sFLASH_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define sFLASH_SPI_MISO_PIN GPIO_Pin_6 /* PA.06 */
|
||||
#define sFLASH_SPI_MISO_GPIO_PORT GPIOA /* GPIOA */
|
||||
#define sFLASH_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define sFLASH_SPI_MOSI_PIN GPIO_Pin_7 /* PA.07 */
|
||||
#define sFLASH_SPI_MOSI_GPIO_PORT GPIOA /* GPIOA */
|
||||
#define sFLASH_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA
|
||||
#define sFLASH_CS_PIN GPIO_Pin_2 /* PB.02 */
|
||||
#define sFLASH_CS_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define sFLASH_CS_GPIO_CLK RCC_APB2Periph_GPIOB
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM3210E_EVAL_LOW_LEVEL_TSENSOR_I2C
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief LM75 Temperature Sensor I2C Interface pins
|
||||
*/
|
||||
#define LM75_I2C I2C1
|
||||
#define LM75_I2C_CLK RCC_APB1Periph_I2C1
|
||||
#define LM75_I2C_SCL_PIN GPIO_Pin_6 /* PB.06 */
|
||||
#define LM75_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define LM75_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
|
||||
#define LM75_I2C_SDA_PIN GPIO_Pin_7 /* PB.07 */
|
||||
#define LM75_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define LM75_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
|
||||
#define LM75_I2C_SMBUSALERT_PIN GPIO_Pin_5 /* PB.05 */
|
||||
#define LM75_I2C_SMBUSALERT_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define LM75_I2C_SMBUSALERT_GPIO_CLK RCC_APB2Periph_GPIOB
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
|
||||
uint32_t STM_EVAL_PBGetState(Button_TypeDef Button);
|
||||
void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct);
|
||||
void SD_LowLevel_DeInit(void);
|
||||
void SD_LowLevel_Init(void);
|
||||
void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize);
|
||||
void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize);
|
||||
void SD_WaitForDMAEndOfTransfer(void);
|
||||
void sFLASH_LowLevel_DeInit(void);
|
||||
void sFLASH_LowLevel_Init(void);
|
||||
void LM75_LowLevel_DeInit(void);
|
||||
void LM75_LowLevel_Init(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM3210E_EVAL_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
347
flight/Bootloaders/OpenPilot2/inc/stm32_eval.h
Normal file
347
flight/Bootloaders/OpenPilot2/inc/stm32_eval.h
Normal file
@ -0,0 +1,347 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32_eval.h
|
||||
* @author MCD Application Team
|
||||
* @version V4.2.0
|
||||
* @date 04/16/2010
|
||||
* @brief Header file for stm32_eval.c module.
|
||||
******************************************************************************
|
||||
* @copy
|
||||
*
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||||
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*
|
||||
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32_EVAL_H
|
||||
#define __STM32_EVAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup Utilities
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_Abstraction_Layer
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_HARDWARE_RESOURCES
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
@code
|
||||
The table below gives an overview of the hardware resources supported by each
|
||||
STM32 EVAL board.
|
||||
- LCD: TFT Color LCD (Parallel (FSMC) and Serial (SPI))
|
||||
- IOE: IO Expander on I2C
|
||||
- sFLASH: serial SPI FLASH (M25Pxxx)
|
||||
- sEE: serial I2C EEPROM (M24C08, M24C32, M24C64)
|
||||
- TSENSOR: Temperature Sensor (LM75)
|
||||
- SD: SD Card memory (SPI and SDIO (SD Card MODE))
|
||||
=================================================================================================================+
|
||||
STM32 EVAL | LED | Buttons | Com Ports | LCD | IOE | sFLASH | sEE | TSENSOR | SD (SPI) | SD(SDIO) |
|
||||
=================================================================================================================+
|
||||
STM3210B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
|
||||
-----------------------------------------------------------------------------------------------------------------+
|
||||
STM3210E-EVAL | 4 | 8 | 2 | YES (FSMC)| NO | YES | NO | YES | NO | YES |
|
||||
-----------------------------------------------------------------------------------------------------------------+
|
||||
STM3210C-EVAL | 4 | 3 | 1 | YES (SPI) | YES | NO | YES | NO | YES | NO |
|
||||
-----------------------------------------------------------------------------------------------------------------+
|
||||
STM32100B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
|
||||
=================================================================================================================+
|
||||
@endcode
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_Exported_Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_WAKEUP = 0,
|
||||
BUTTON_TAMPER = 1,
|
||||
BUTTON_KEY = 2,
|
||||
BUTTON_RIGHT = 3,
|
||||
BUTTON_LEFT = 4,
|
||||
BUTTON_UP = 5,
|
||||
BUTTON_DOWN = 6,
|
||||
BUTTON_SEL = 7
|
||||
} Button_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_MODE_GPIO = 0,
|
||||
BUTTON_MODE_EXTI = 1
|
||||
} ButtonMode_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
JOY_NONE = 0,
|
||||
JOY_SEL = 1,
|
||||
JOY_DOWN = 2,
|
||||
JOY_LEFT = 3,
|
||||
JOY_RIGHT = 4,
|
||||
JOY_UP = 5
|
||||
} JOYState_TypeDef
|
||||
;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
COM1 = 0,
|
||||
COM2 = 1
|
||||
} COM_TypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_Exported_Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Uncomment the line corresponding to the STMicroelectronics evaluation
|
||||
* board used in your application.
|
||||
*
|
||||
* Tip: To avoid modifying this file each time you need to switch between these
|
||||
* boards, you can define the board in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_STM32100B_EVAL) && !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL) && !defined (USE_STM3210C_EVAL)
|
||||
//#define USE_STM32100B_EVAL
|
||||
//#define USE_STM3210B_EVAL
|
||||
//#define USE_STM3210E_EVAL
|
||||
//#define USE_STM3210C_EVAL
|
||||
#endif
|
||||
|
||||
#ifdef USE_STM32100B_EVAL
|
||||
#include "stm32f10x.h"
|
||||
#include "stm32100b_eval/stm32100b_eval.h"
|
||||
#elif defined USE_STM3210B_EVAL
|
||||
#include "stm32f10x.h"
|
||||
#include "stm3210b_eval/stm3210b_eval.h"
|
||||
#elif defined USE_STM3210E_EVAL
|
||||
#include "stm32f10x.h"
|
||||
#include "stm3210e_eval.h"
|
||||
#elif defined USE_STM3210C_EVAL
|
||||
#include "stm32f10x.h"
|
||||
#include "stm3210c_eval/stm3210c_eval.h"
|
||||
#else
|
||||
#error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* @brief STM32 Button Defines Legacy
|
||||
*/
|
||||
#define Button_WAKEUP BUTTON_WAKEUP
|
||||
#define Button_TAMPER BUTTON_TAMPER
|
||||
#define Button_KEY BUTTON_KEY
|
||||
#define Button_RIGHT BUTTON_RIGHT
|
||||
#define Button_LEFT BUTTON_LEFT
|
||||
#define Button_UP BUTTON_UP
|
||||
#define Button_DOWN BUTTON_DOWN
|
||||
#define Button_SEL BUTTON_SEL
|
||||
#define Mode_GPIO BUTTON_MODE_GPIO
|
||||
#define Mode_EXTI BUTTON_MODE_EXTI
|
||||
#define Button_Mode_TypeDef ButtonMode_TypeDef
|
||||
#define JOY_CENTER JOY_SEL
|
||||
#define JOY_State_TypeDef JOYState_TypeDef
|
||||
|
||||
/**
|
||||
* @brief LCD Defines Legacy
|
||||
*/
|
||||
#define LCD_RSNWR_GPIO_CLK LCD_NWR_GPIO_CLK
|
||||
#define LCD_SPI_GPIO_PORT LCD_SPI_SCK_GPIO_PORT
|
||||
#define LCD_SPI_GPIO_CLK LCD_SPI_SCK_GPIO_CLK
|
||||
#define R0 LCD_REG_0
|
||||
#define R1 LCD_REG_1
|
||||
#define R2 LCD_REG_2
|
||||
#define R3 LCD_REG_3
|
||||
#define R4 LCD_REG_4
|
||||
#define R5 LCD_REG_5
|
||||
#define R6 LCD_REG_6
|
||||
#define R7 LCD_REG_7
|
||||
#define R8 LCD_REG_8
|
||||
#define R9 LCD_REG_9
|
||||
#define R10 LCD_REG_10
|
||||
#define R12 LCD_REG_12
|
||||
#define R13 LCD_REG_13
|
||||
#define R14 LCD_REG_14
|
||||
#define R15 LCD_REG_15
|
||||
#define R16 LCD_REG_16
|
||||
#define R17 LCD_REG_17
|
||||
#define R18 LCD_REG_18
|
||||
#define R19 LCD_REG_19
|
||||
#define R20 LCD_REG_20
|
||||
#define R21 LCD_REG_21
|
||||
#define R22 LCD_REG_22
|
||||
#define R23 LCD_REG_23
|
||||
#define R24 LCD_REG_24
|
||||
#define R25 LCD_REG_25
|
||||
#define R26 LCD_REG_26
|
||||
#define R27 LCD_REG_27
|
||||
#define R28 LCD_REG_28
|
||||
#define R29 LCD_REG_29
|
||||
#define R30 LCD_REG_30
|
||||
#define R31 LCD_REG_31
|
||||
#define R32 LCD_REG_32
|
||||
#define R33 LCD_REG_33
|
||||
#define R34 LCD_REG_34
|
||||
#define R36 LCD_REG_36
|
||||
#define R37 LCD_REG_37
|
||||
#define R40 LCD_REG_40
|
||||
#define R41 LCD_REG_41
|
||||
#define R43 LCD_REG_43
|
||||
#define R45 LCD_REG_45
|
||||
#define R48 LCD_REG_48
|
||||
#define R49 LCD_REG_49
|
||||
#define R50 LCD_REG_50
|
||||
#define R51 LCD_REG_51
|
||||
#define R52 LCD_REG_52
|
||||
#define R53 LCD_REG_53
|
||||
#define R54 LCD_REG_54
|
||||
#define R55 LCD_REG_55
|
||||
#define R56 LCD_REG_56
|
||||
#define R57 LCD_REG_57
|
||||
#define R59 LCD_REG_59
|
||||
#define R60 LCD_REG_60
|
||||
#define R61 LCD_REG_61
|
||||
#define R62 LCD_REG_62
|
||||
#define R63 LCD_REG_63
|
||||
#define R64 LCD_REG_64
|
||||
#define R65 LCD_REG_65
|
||||
#define R66 LCD_REG_66
|
||||
#define R67 LCD_REG_67
|
||||
#define R68 LCD_REG_68
|
||||
#define R69 LCD_REG_69
|
||||
#define R70 LCD_REG_70
|
||||
#define R71 LCD_REG_71
|
||||
#define R72 LCD_REG_72
|
||||
#define R73 LCD_REG_73
|
||||
#define R74 LCD_REG_74
|
||||
#define R75 LCD_REG_75
|
||||
#define R76 LCD_REG_76
|
||||
#define R77 LCD_REG_77
|
||||
#define R78 LCD_REG_78
|
||||
#define R79 LCD_REG_79
|
||||
#define R80 LCD_REG_80
|
||||
#define R81 LCD_REG_81
|
||||
#define R82 LCD_REG_82
|
||||
#define R83 LCD_REG_83
|
||||
#define R96 LCD_REG_96
|
||||
#define R97 LCD_REG_97
|
||||
#define R106 LCD_REG_106
|
||||
#define R118 LCD_REG_118
|
||||
#define R128 LCD_REG_128
|
||||
#define R129 LCD_REG_129
|
||||
#define R130 LCD_REG_130
|
||||
#define R131 LCD_REG_131
|
||||
#define R132 LCD_REG_132
|
||||
#define R133 LCD_REG_133
|
||||
#define R134 LCD_REG_134
|
||||
#define R135 LCD_REG_135
|
||||
#define R136 LCD_REG_136
|
||||
#define R137 LCD_REG_137
|
||||
#define R139 LCD_REG_139
|
||||
#define R140 LCD_REG_140
|
||||
#define R141 LCD_REG_141
|
||||
#define R143 LCD_REG_143
|
||||
#define R144 LCD_REG_144
|
||||
#define R145 LCD_REG_145
|
||||
#define R146 LCD_REG_146
|
||||
#define R147 LCD_REG_147
|
||||
#define R148 LCD_REG_148
|
||||
#define R149 LCD_REG_149
|
||||
#define R150 LCD_REG_150
|
||||
#define R151 LCD_REG_151
|
||||
#define R152 LCD_REG_152
|
||||
#define R153 LCD_REG_153
|
||||
#define R154 LCD_REG_154
|
||||
#define R157 LCD_REG_157
|
||||
#define R192 LCD_REG_192
|
||||
#define R193 LCD_REG_193
|
||||
#define R227 LCD_REG_227
|
||||
#define R229 LCD_REG_229
|
||||
#define R231 LCD_REG_231
|
||||
#define R239 LCD_REG_239
|
||||
#define White LCD_COLOR_WHITE
|
||||
#define Black LCD_COLOR_BLACK
|
||||
#define Grey LCD_COLOR_GREY
|
||||
#define Blue LCD_COLOR_BLUE
|
||||
#define Blue2 LCD_COLOR_BLUE2
|
||||
#define Red LCD_COLOR_RED
|
||||
#define Magenta LCD_COLOR_MAGENTA
|
||||
#define Green LCD_COLOR_GREEN
|
||||
#define Cyan LCD_COLOR_CYAN
|
||||
#define Yellow LCD_COLOR_YELLOW
|
||||
#define Line0 LCD_LINE_0
|
||||
#define Line1 LCD_LINE_1
|
||||
#define Line2 LCD_LINE_2
|
||||
#define Line3 LCD_LINE_3
|
||||
#define Line4 LCD_LINE_4
|
||||
#define Line5 LCD_LINE_5
|
||||
#define Line6 LCD_LINE_6
|
||||
#define Line7 LCD_LINE_7
|
||||
#define Line8 LCD_LINE_8
|
||||
#define Line9 LCD_LINE_9
|
||||
#define Horizontal LCD_DIR_HORIZONTAL
|
||||
#define Vertical LCD_DIR_VERTICAL
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_Exported_Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32_EVAL_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __STM32_EVAL_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
72
flight/Bootloaders/OpenPilot2/inc/stm32f10x_conf.h
Normal file
72
flight/Bootloaders/OpenPilot2/inc/stm32f10x_conf.h
Normal file
@ -0,0 +1,72 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : stm32f10x_conf.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Library configuration file.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F10x_CONF_H
|
||||
#define __STM32F10x_CONF_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Uncomment the line below to enable peripheral header file inclusion */
|
||||
/* #include "stm32f10x_adc.h" */
|
||||
/* #include "stm32f10x_bkp.h" */
|
||||
/* #include "stm32f10x_can.h" */
|
||||
/* #include "stm32f10x_crc.h" */
|
||||
/* #include "stm32f10x_dac.h" */
|
||||
/* #include "stm32f10x_dbgmcu.h" */
|
||||
/* #include "stm32f10x_dma.h" */
|
||||
#include "stm32f10x_exti.h"
|
||||
#include "stm32f10x_flash.h"
|
||||
#include "stm32f10x_fsmc.h"
|
||||
#include "stm32f10x_gpio.h"
|
||||
/* #include "stm32f10x_i2c.h" */
|
||||
/* #include "stm32f10x_iwdg.h" */
|
||||
/* #include "stm32f10x_pwr.h" */
|
||||
#include "stm32f10x_rcc.h"
|
||||
/* #include "stm32f10x_rtc.h" */
|
||||
/* #include "stm32f10x_sdio.h" */
|
||||
#include "stm32f10x_spi.h"
|
||||
/* #include "stm32f10x_tim.h" */
|
||||
#include "stm32f10x_usart.h"
|
||||
/* #include "stm32f10x_wwdg.h" */
|
||||
#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Uncomment the line below to expanse the "assert_param" macro in the
|
||||
Standard Peripheral Library drivers code */
|
||||
/* #define USE_FULL_ASSERT 1 */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#ifdef USE_FULL_ASSERT
|
||||
|
||||
/*******************************************************************************
|
||||
* Macro Name : assert_param
|
||||
* Description : The assert_param macro is used for function's parameters check.
|
||||
* Input : - expr: If expr is false, it calls assert_failed function
|
||||
* which reports the name of the source file and the source
|
||||
* line number of the call that failed.
|
||||
* If expr is true, it returns no value.
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void assert_failed(uint8_t* file, uint32_t line);
|
||||
#else
|
||||
#define assert_param(expr) ((void)0)
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
|
||||
#endif /* __STM32F10x_CONF_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
49
flight/Bootloaders/OpenPilot2/inc/stm32f10x_it.h
Normal file
49
flight/Bootloaders/OpenPilot2/inc/stm32f10x_it.h
Normal file
@ -0,0 +1,49 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : stm32f10x_it.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : This file contains the headers of the interrupt handlers.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F10x_IT_H
|
||||
#define __STM32F10x_IT_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
void NMI_Handler(void);
|
||||
void HardFault_Handler(void);
|
||||
void MemManage_Handler(void);
|
||||
void BusFault_Handler(void);
|
||||
void UsageFault_Handler(void);
|
||||
void SVC_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
void USB_LP_CAN1_RX0_IRQHandler(void);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
#ifdef STM32F10X_CL
|
||||
void OTG_FS_IRQHandler(void);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
#endif /* __STM32F10x_IT_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||
|
192
flight/Bootloaders/OpenPilot2/inc/usb_conf.h
Normal file
192
flight/Bootloaders/OpenPilot2/inc/usb_conf.h
Normal file
@ -0,0 +1,192 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_conf.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Device Firmware Upgrade (DFU) configuration file
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USB_CONF_H
|
||||
#define __USB_CONF_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/*-------------------------------------------------------------*/
|
||||
/* EP_NUM */
|
||||
/* defines how many endpoints are used by the device */
|
||||
/*-------------------------------------------------------------*/
|
||||
#define EP_NUM (1)
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
/*-------------------------------------------------------------*/
|
||||
/* -------------- Buffer Description Table -----------------*/
|
||||
/*-------------------------------------------------------------*/
|
||||
/* buffer table base address */
|
||||
/* buffer table base address */
|
||||
#define BTABLE_ADDRESS (0x00)
|
||||
|
||||
/* EP0 */
|
||||
/* rx/tx buffer base address */
|
||||
#define ENDP0_RXADDR (0x10)
|
||||
#define ENDP0_TXADDR (0x50)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/* ------------------- ISTR events -------------------------*/
|
||||
/*-------------------------------------------------------------*/
|
||||
/* IMR_MSK */
|
||||
/* mask defining which events has to be handled */
|
||||
/* by the device application software */
|
||||
#define IMR_MSK (CNTR_CTRM | \
|
||||
CNTR_WKUPM | \
|
||||
CNTR_SUSPM | \
|
||||
CNTR_ERRM | \
|
||||
CNTR_SOFM | \
|
||||
CNTR_ESOFM | \
|
||||
CNTR_RESETM \
|
||||
)
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
|
||||
#ifdef STM32F10X_CL
|
||||
/*******************************************************************************
|
||||
* FIFO Size Configuration
|
||||
*
|
||||
* (i) Dedicated data FIFO SPRAM of 1.25 Kbytes = 1280 bytes = 320 32-bits words
|
||||
* available for the endpoints IN and OUT.
|
||||
* Device mode features:
|
||||
* -1 bidirectional CTRL EP 0
|
||||
* -3 IN EPs to support any kind of Bulk, Interrupt or Isochronous transfer
|
||||
* -3 OUT EPs to support any kind of Bulk, Interrupt or Isochronous transfer
|
||||
*
|
||||
* ii) Receive data FIFO size = RAM for setup packets +
|
||||
* OUT endpoint control information +
|
||||
* data OUT packets + miscellaneous
|
||||
* Space = ONE 32-bits words
|
||||
* --> RAM for setup packets = 4 * n + 6 space
|
||||
* (n is the nbr of CTRL EPs the device core supports)
|
||||
* --> OUT EP CTRL info = 1 space
|
||||
* (one space for status information written to the FIFO along with each
|
||||
* received packet)
|
||||
* --> data OUT packets = (Largest Packet Size / 4) + 1 spaces
|
||||
* (MINIMUM to receive packets)
|
||||
* --> OR data OUT packets = at least 2*(Largest Packet Size / 4) + 1 spaces
|
||||
* (if high-bandwidth EP is enabled or multiple isochronous EPs)
|
||||
* --> miscellaneous = 1 space per OUT EP
|
||||
* (one space for transfer complete status information also pushed to the
|
||||
* FIFO with each endpoint's last packet)
|
||||
*
|
||||
* (iii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
|
||||
* that particular IN EP. More space allocated in the IN EP Tx FIFO results
|
||||
* in a better performance on the USB and can hide latencies on the AHB.
|
||||
*
|
||||
* (iv) TXn min size = 16 words. (n : Transmit FIFO index)
|
||||
* (v) When a TxFIFO is not used, the Configuration should be as follows:
|
||||
* case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes)
|
||||
* --> Txm can use the space allocated for Txn.
|
||||
* case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes)
|
||||
* --> Txn should be configured with the minimum space of 16 words
|
||||
* (vi) The FIFO is used optimally when used TxFIFOs are allocated in the top
|
||||
* of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
|
||||
*******************************************************************************/
|
||||
|
||||
#define RX_FIFO_SIZE 128
|
||||
#define TX0_FIFO_SIZE 64
|
||||
#define TX1_FIFO_SIZE 64
|
||||
#define TX2_FIFO_SIZE 16
|
||||
#define TX3_FIFO_SIZE 16
|
||||
|
||||
|
||||
/* OTGD-FS-DEVICE IP interrupts Enable definitions */
|
||||
/* Uncomment the define to enable the selected interrupt */
|
||||
//#define INTR_MODEMISMATCH
|
||||
#define INTR_SOFINTR
|
||||
#define INTR_RXSTSQLVL /* Mandatory */
|
||||
//#define INTR_NPTXFEMPTY
|
||||
//#define INTR_GINNAKEFF
|
||||
//#define INTR_GOUTNAKEFF
|
||||
//#define INTR_ERLYSUSPEND
|
||||
#define INTR_USBSUSPEND /* Mandatory */
|
||||
#define INTR_USBRESET /* Mandatory */
|
||||
#define INTR_ENUMDONE /* Mandatory */
|
||||
//#define INTR_ISOOUTDROP
|
||||
//#define INTR_EOPFRAME
|
||||
//#define INTR_EPMISMATCH
|
||||
#define INTR_INEPINTR /* Mandatory */
|
||||
#define INTR_OUTEPINTR /* Mandatory */
|
||||
//#define INTR_INCOMPLISOIN
|
||||
//#define INTR_INCOMPLISOOUT
|
||||
#define INTR_WKUPINTR /* Mandatory */
|
||||
|
||||
/* OTGD-FS-DEVICE IP interrupts subroutines */
|
||||
/* Comment the define to enable the selected interrupt subroutine and replace it
|
||||
by user code */
|
||||
#define INTR_MODEMISMATCH_Callback NOP_Process
|
||||
#define INTR_SOFINTR_Callback NOP_Process
|
||||
#define INTR_RXSTSQLVL_Callback NOP_Process
|
||||
#define INTR_NPTXFEMPTY_Callback NOP_Process
|
||||
#define INTR_NPTXFEMPTY_Callback NOP_Process
|
||||
#define INTR_GINNAKEFF_Callback NOP_Process
|
||||
#define INTR_GOUTNAKEFF_Callback NOP_Process
|
||||
#define INTR_ERLYSUSPEND_Callback NOP_Process
|
||||
#define INTR_USBSUSPEND_Callback NOP_Process
|
||||
#define INTR_USBRESET_Callback NOP_Process
|
||||
#define INTR_ENUMDONE_Callback NOP_Process
|
||||
#define INTR_ISOOUTDROP_Callback NOP_Process
|
||||
#define INTR_EOPFRAME_Callback NOP_Process
|
||||
#define INTR_EPMISMATCH_Callback NOP_Process
|
||||
#define INTR_INEPINTR_Callback NOP_Process
|
||||
#define INTR_OUTEPINTR_Callback NOP_Process
|
||||
#define INTR_INCOMPLISOIN_Callback NOP_Process
|
||||
#define INTR_INCOMPLISOOUT_Callback NOP_Process
|
||||
#define INTR_WKUPINTR_Callback NOP_Process
|
||||
|
||||
/* Isochronous data update */
|
||||
#define INTR_RXSTSQLVL_ISODU_Callback NOP_Process
|
||||
|
||||
/* Isochronous transfer parameters */
|
||||
/* Size of a single Isochronous buffer (size of a single transfer) */
|
||||
#define ISOC_BUFFER_SZE 1
|
||||
/* Number of sub-buffers (number of single buffers/transfers), should be even */
|
||||
#define NUM_SUB_BUFFERS 2
|
||||
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* CTR service routines */
|
||||
/* associated to defined endpoints */
|
||||
#define EP1_IN_Callback NOP_Process
|
||||
#define EP2_IN_Callback NOP_Process
|
||||
#define EP3_IN_Callback NOP_Process
|
||||
#define EP4_IN_Callback NOP_Process
|
||||
#define EP5_IN_Callback NOP_Process
|
||||
#define EP6_IN_Callback NOP_Process
|
||||
#define EP7_IN_Callback NOP_Process
|
||||
|
||||
|
||||
#define EP1_OUT_Callback NOP_Process
|
||||
#define EP2_OUT_Callback NOP_Process
|
||||
#define EP3_OUT_Callback NOP_Process
|
||||
#define EP4_OUT_Callback NOP_Process
|
||||
#define EP5_OUT_Callback NOP_Process
|
||||
#define EP6_OUT_Callback NOP_Process
|
||||
#define EP7_OUT_Callback NOP_Process
|
||||
|
||||
#endif /*__USB_CONF_H*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||
|
||||
|
||||
|
||||
|
69
flight/Bootloaders/OpenPilot2/inc/usb_desc.h
Normal file
69
flight/Bootloaders/OpenPilot2/inc/usb_desc.h
Normal file
@ -0,0 +1,69 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_desc.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Descriptor Header for Device Firmware Upgrade (DFU)
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USB_DESC_H
|
||||
#define __USB_DESC_H
|
||||
#include "platform_config.h"
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define DFU_SIZ_DEVICE_DESC 18
|
||||
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
#define DFU_SIZ_CONFIG_DESC 36
|
||||
#elif defined(USE_STM3210C_EVAL)
|
||||
#define DFU_SIZ_CONFIG_DESC 27
|
||||
#elif defined(USE_STM3210E_EVAL)
|
||||
#define DFU_SIZ_CONFIG_DESC 45
|
||||
#endif /* USE_STM3210B_EVAL */
|
||||
|
||||
#define DFU_SIZ_STRING_LANGID 4
|
||||
#define DFU_SIZ_STRING_VENDOR 38
|
||||
#define DFU_SIZ_STRING_PRODUCT 20
|
||||
#define DFU_SIZ_STRING_SERIAL 26
|
||||
#define DFU_SIZ_STRING_INTERFACE0 96 /* Flash Bank 0 */
|
||||
|
||||
#define DFU_SIZ_STRING_INTERFACE1 98 /* SPI Flash : M25P64*/
|
||||
#define DFU_SIZ_STRING_INTERFACE2 106 /* NOR Flash : M26M128*/
|
||||
|
||||
extern uint8_t DFU_DeviceDescriptor[DFU_SIZ_DEVICE_DESC];
|
||||
extern uint8_t DFU_ConfigDescriptor[DFU_SIZ_CONFIG_DESC];
|
||||
extern uint8_t DFU_StringLangId [DFU_SIZ_STRING_LANGID];
|
||||
extern uint8_t DFU_StringVendor [DFU_SIZ_STRING_VENDOR];
|
||||
extern uint8_t DFU_StringProduct [DFU_SIZ_STRING_PRODUCT];
|
||||
extern uint8_t DFU_StringSerial [DFU_SIZ_STRING_SERIAL];
|
||||
extern uint8_t DFU_StringInterface0 [DFU_SIZ_STRING_INTERFACE0];
|
||||
extern uint8_t DFU_StringInterface1 [DFU_SIZ_STRING_INTERFACE1];
|
||||
extern uint8_t DFU_StringInterface2_1 [DFU_SIZ_STRING_INTERFACE2];
|
||||
extern uint8_t DFU_StringInterface2_2 [DFU_SIZ_STRING_INTERFACE2];
|
||||
extern uint8_t DFU_StringInterface2_3 [DFU_SIZ_STRING_INTERFACE2];
|
||||
|
||||
#define bMaxPacketSize0 0x40 /* bMaxPacketSize0 = 64 bytes */
|
||||
#define wTransferSize 0x0400 /* wTransferSize = 1024 bytes */
|
||||
/* bMaxPacketSize0 <= wTransferSize <= 32kbytes */
|
||||
#define wTransferSizeB0 0x00
|
||||
#define wTransferSizeB1 0x04
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
#endif /* __USB_DESC_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||
|
||||
|
||||
|
||||
|
121
flight/Bootloaders/OpenPilot2/inc/usb_istr.h
Normal file
121
flight/Bootloaders/OpenPilot2/inc/usb_istr.h
Normal file
@ -0,0 +1,121 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_istr.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : This file includes the peripherals header files in the
|
||||
* user application.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USB_ISTR_H
|
||||
#define __USB_ISTR_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usb_conf.h"
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
void USB_Istr(void);
|
||||
#else /* STM32F10X_CL */
|
||||
u32 STM32_PCD_OTG_ISR_Handler(void);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* function prototypes Automatically built defining related macros */
|
||||
|
||||
void EP1_IN_Callback(void);
|
||||
void EP2_IN_Callback(void);
|
||||
void EP3_IN_Callback(void);
|
||||
void EP4_IN_Callback(void);
|
||||
void EP5_IN_Callback(void);
|
||||
void EP6_IN_Callback(void);
|
||||
void EP7_IN_Callback(void);
|
||||
|
||||
void EP1_OUT_Callback(void);
|
||||
void EP2_OUT_Callback(void);
|
||||
void EP3_OUT_Callback(void);
|
||||
void EP4_OUT_Callback(void);
|
||||
void EP5_OUT_Callback(void);
|
||||
void EP6_OUT_Callback(void);
|
||||
void EP7_OUT_Callback(void);
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
|
||||
#ifdef CTR_CALLBACK
|
||||
void CTR_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef DOVR_CALLBACK
|
||||
void DOVR_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef ERR_CALLBACK
|
||||
void ERR_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef WKUP_CALLBACK
|
||||
void WKUP_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef SUSP_CALLBACK
|
||||
void SUSP_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef RESET_CALLBACK
|
||||
void RESET_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef SOF_CALLBACK
|
||||
void SOF_Callback(void);
|
||||
#endif
|
||||
|
||||
#ifdef ESOF_CALLBACK
|
||||
void ESOF_Callback(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/* Interrupt subroutines user callbacks prototypes.
|
||||
These callbacks are called into the respective interrupt sunroutine functinos
|
||||
and can be tailored for various user application purposes.
|
||||
Note: Make sure that the correspondant interrupt is enabled through the
|
||||
definition in usb_conf.h file */
|
||||
void INTR_MODEMISMATCH_Callback(void);
|
||||
void INTR_SOFINTR_Callback(void);
|
||||
void INTR_RXSTSQLVL_Callback(void);
|
||||
void INTR_NPTXFEMPTY_Callback(void);
|
||||
void INTR_GINNAKEFF_Callback(void);
|
||||
void INTR_GOUTNAKEFF_Callback(void);
|
||||
void INTR_ERLYSUSPEND_Callback(void);
|
||||
void INTR_USBSUSPEND_Callback(void);
|
||||
void INTR_USBRESET_Callback(void);
|
||||
void INTR_ENUMDONE_Callback(void);
|
||||
void INTR_ISOOUTDROP_Callback(void);
|
||||
void INTR_EOPFRAME_Callback(void);
|
||||
void INTR_EPMISMATCH_Callback(void);
|
||||
void INTR_INEPINTR_Callback(void);
|
||||
void INTR_OUTEPINTR_Callback(void);
|
||||
void INTR_INCOMPLISOIN_Callback(void);
|
||||
void INTR_INCOMPLISOOUT_Callback(void);
|
||||
void INTR_WKUPINTR_Callback(void);
|
||||
|
||||
/* Isochronous data update */
|
||||
void INTR_RXSTSQLVL_ISODU_Callback(void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*__USB_ISTR_H*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
128
flight/Bootloaders/OpenPilot2/inc/usb_prop.h
Normal file
128
flight/Bootloaders/OpenPilot2/inc/usb_prop.h
Normal file
@ -0,0 +1,128 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_prop.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : All processings related to DFU demo
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USB_PROP_H
|
||||
#define __USB_PROP_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void DFU_init(void);
|
||||
void DFU_Reset(void);
|
||||
void DFU_SetConfiguration(void);
|
||||
void DFU_SetDeviceAddress (void);
|
||||
void DFU_Status_In (void);
|
||||
void DFU_Status_Out (void);
|
||||
RESULT DFU_Data_Setup(uint8_t);
|
||||
RESULT DFU_NoData_Setup(uint8_t);
|
||||
RESULT DFU_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting);
|
||||
uint8_t *DFU_GetDeviceDescriptor(uint16_t );
|
||||
uint8_t *DFU_GetConfigDescriptor(uint16_t);
|
||||
uint8_t *DFU_GetStringDescriptor(uint16_t);
|
||||
uint8_t *UPLOAD(uint16_t Length);
|
||||
uint8_t *DNLOAD(uint16_t Length);
|
||||
uint8_t *GETSTATE(uint16_t Length);
|
||||
uint8_t *GETSTATUS(uint16_t Length);
|
||||
void DFU_write_crc (void);
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
#define DFU_GetConfiguration NOP_Process
|
||||
//#define DFU_SetConfiguration NOP_Process
|
||||
#define DFU_GetInterface NOP_Process
|
||||
#define DFU_SetInterface NOP_Process
|
||||
#define DFU_GetStatus NOP_Process
|
||||
#define DFU_ClearFeature NOP_Process
|
||||
#define DFU_SetEndPointFeature NOP_Process
|
||||
#define DFU_SetDeviceFeature NOP_Process
|
||||
//#define DFU_SetDeviceAddress NOP_Process
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* DFU definitions */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/**************************************************/
|
||||
/* DFU Requests */
|
||||
/**************************************************/
|
||||
|
||||
typedef enum _DFU_REQUESTS {
|
||||
DFU_DNLOAD = 1,
|
||||
DFU_UPLOAD,
|
||||
DFU_GETSTATUS,
|
||||
DFU_CLRSTATUS,
|
||||
DFU_GETSTATE,
|
||||
DFU_ABORT
|
||||
} DFU_REQUESTS;
|
||||
|
||||
/**************************************************/
|
||||
/* DFU Requests DFU states */
|
||||
/**************************************************/
|
||||
|
||||
|
||||
#define STATE_appIDLE 0
|
||||
#define STATE_appDETACH 1
|
||||
#define STATE_dfuIDLE 2
|
||||
#define STATE_dfuDNLOAD_SYNC 3
|
||||
#define STATE_dfuDNBUSY 4
|
||||
#define STATE_dfuDNLOAD_IDLE 5
|
||||
#define STATE_dfuMANIFEST_SYNC 6
|
||||
#define STATE_dfuMANIFEST 7
|
||||
#define STATE_dfuMANIFEST_WAIT_RESET 8
|
||||
#define STATE_dfuUPLOAD_IDLE 9
|
||||
#define STATE_dfuERROR 10
|
||||
|
||||
/**************************************************/
|
||||
/* DFU Requests DFU status */
|
||||
/**************************************************/
|
||||
|
||||
#define STATUS_OK 0x00
|
||||
#define STATUS_ERRTARGET 0x01
|
||||
#define STATUS_ERRFILE 0x02
|
||||
#define STATUS_ERRWRITE 0x03
|
||||
#define STATUS_ERRERASE 0x04
|
||||
#define STATUS_ERRCHECK_ERASED 0x05
|
||||
#define STATUS_ERRPROG 0x06
|
||||
#define STATUS_ERRVERIFY 0x07
|
||||
#define STATUS_ERRADDRESS 0x08
|
||||
#define STATUS_ERRNOTDONE 0x09
|
||||
#define STATUS_ERRFIRMWARE 0x0A
|
||||
#define STATUS_ERRVENDOR 0x0B
|
||||
#define STATUS_ERRUSBR 0x0C
|
||||
#define STATUS_ERRPOR 0x0D
|
||||
#define STATUS_ERRUNKNOWN 0x0E
|
||||
#define STATUS_ERRSTALLEDPKT 0x0F
|
||||
|
||||
/**************************************************/
|
||||
/* DFU Requests DFU states Manifestation State */
|
||||
/**************************************************/
|
||||
|
||||
#define Manifest_complete 0x00
|
||||
#define Manifest_In_Progress 0x01
|
||||
|
||||
|
||||
/**************************************************/
|
||||
/* Special Commands with Download Request */
|
||||
/**************************************************/
|
||||
|
||||
#define CMD_GETCOMMANDS 0x00
|
||||
#define CMD_SETADDRESSPOINTER 0x21
|
||||
#define CMD_ERASE 0x41
|
||||
|
||||
#endif /* __USB_PROP_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
55
flight/Bootloaders/OpenPilot2/inc/usb_pwr.h
Normal file
55
flight/Bootloaders/OpenPilot2/inc/usb_pwr.h
Normal file
@ -0,0 +1,55 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_pwr.h
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Connection/disconnection & power management header
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USB_PWR_H
|
||||
#define __USB_PWR_H
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
typedef enum _RESUME_STATE
|
||||
{
|
||||
RESUME_EXTERNAL,
|
||||
RESUME_INTERNAL,
|
||||
RESUME_LATER,
|
||||
RESUME_WAIT,
|
||||
RESUME_START,
|
||||
RESUME_ON,
|
||||
RESUME_OFF,
|
||||
RESUME_ESOF
|
||||
} RESUME_STATE;
|
||||
|
||||
typedef enum _DEVICE_STATE
|
||||
{
|
||||
UNCONNECTED,
|
||||
ATTACHED,
|
||||
POWERED,
|
||||
SUSPENDED,
|
||||
ADDRESSED,
|
||||
CONFIGURED
|
||||
} DEVICE_STATE;
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void Suspend(void);
|
||||
void Resume_Init(void);
|
||||
void Resume(RESUME_STATE eResumeSetVal);
|
||||
RESULT PowerOn(void);
|
||||
RESULT PowerOff(void);
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern __IO uint32_t bDeviceState; /* USB device status */
|
||||
extern __IO bool fSuspendEnabled; /* true when suspend is possible */
|
||||
|
||||
#endif /*__USB_PWR_H*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
101
flight/Bootloaders/OpenPilot2/main.c
Normal file
101
flight/Bootloaders/OpenPilot2/main.c
Normal file
@ -0,0 +1,101 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : main.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Device Firmware Upgrade(DFU) demo main file
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
#include "usb_lib.h"
|
||||
#include "usb_conf.h"
|
||||
#include "usb_prop.h"
|
||||
#include "usb_pwr.h"
|
||||
#include "dfu_mal.h"
|
||||
#include "hw_config.h"
|
||||
#include "platform_config.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
typedef void (*pFunction)(void);
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
uint8_t DeviceState;
|
||||
uint8_t DeviceStatus[6];
|
||||
pFunction Jump_To_Application;
|
||||
uint32_t JumpAddress;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : main.
|
||||
* Description : main routine.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
int main(void)
|
||||
{
|
||||
DFU_Button_Config();
|
||||
|
||||
/* Check if the Key push-button on STM3210x-EVAL Board is pressed */
|
||||
if (DFU_Button_Read() != 0x00)
|
||||
{ /* Test if user code is programmed starting from address 0x8003000 */
|
||||
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
|
||||
{ /* Jump to user application */
|
||||
|
||||
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
|
||||
Jump_To_Application = (pFunction) JumpAddress;
|
||||
/* Initialize user application's Stack Pointer */
|
||||
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
|
||||
Jump_To_Application();
|
||||
}
|
||||
} /* Otherwise enters DFU mode to allow user to program his application */
|
||||
|
||||
/* Enter DFU mode */
|
||||
DeviceState = STATE_dfuERROR;
|
||||
DeviceStatus[0] = STATUS_ERRFIRMWARE;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
|
||||
Set_System();
|
||||
Set_USBClock();
|
||||
USB_Init();
|
||||
|
||||
/* Main loop */
|
||||
while (1)
|
||||
{}
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/*******************************************************************************
|
||||
* Function Name : assert_failed
|
||||
* Description : Reports the name of the source file and the source line number
|
||||
* where the assert_param error has occurred.
|
||||
* Input : - file: pointer to the source file name
|
||||
* - line: assert_param error line source number
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void assert_failed(uint8_t* file, uint32_t line)
|
||||
{
|
||||
/* User can add his own implementation to report the file name and line number,
|
||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
|
||||
/* Infinite loop */
|
||||
while (1)
|
||||
{}
|
||||
}
|
||||
#endif
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
101
flight/Bootloaders/OpenPilot2/nor_if.c
Normal file
101
flight/Bootloaders/OpenPilot2/nor_if.c
Normal file
@ -0,0 +1,101 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : nor_if.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : specific media access Layer for NOR flash
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
#include "platform_config.h"
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "fsmc_nor.h"
|
||||
#include "nor_if.h"
|
||||
#include "dfu_mal.h"
|
||||
#include "stm32f10x_fsmc.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
extern NOR_IDTypeDef NOR_ID;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : NOR_If_Init
|
||||
* Description : Initializes the Media on the STM32
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t NOR_If_Init(void)
|
||||
{
|
||||
/* Configure FSMC Bank1 NOR/SRAM2 */
|
||||
FSMC_NOR_Init();
|
||||
|
||||
/* Enable FSMC Bank1 NOR/SRAM2 */
|
||||
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
|
||||
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : NOR_If_Erase
|
||||
* Description : Erase sector
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t NOR_If_Erase(uint32_t Address)
|
||||
{
|
||||
/* Erase the destination memory */
|
||||
FSMC_NOR_EraseBlock(Address & 0x00FFFFFF);
|
||||
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : NOR_If_Write
|
||||
* Description : Write sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t NOR_If_Write(uint32_t Address, uint32_t DataLength)
|
||||
{
|
||||
if ((DataLength & 1) == 1) /* Not an aligned data */
|
||||
{
|
||||
DataLength += 1;
|
||||
MAL_Buffer[DataLength-1] = 0xFF;
|
||||
}
|
||||
|
||||
FSMC_NOR_WriteBuffer((uint16_t *)MAL_Buffer, (Address&0x00FFFFFF), DataLength >> 1);
|
||||
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : NOR_If_Read
|
||||
* Description : Read sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : buffer address pointer
|
||||
*******************************************************************************/
|
||||
uint8_t *NOR_If_Read(uint32_t Address, uint32_t DataLength)
|
||||
{
|
||||
return (uint8_t*)(Address);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
482
flight/Bootloaders/OpenPilot2/spi_flash.c
Normal file
482
flight/Bootloaders/OpenPilot2/spi_flash.c
Normal file
@ -0,0 +1,482 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : spi_flash.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : This file provides a set of functions needed to manage the
|
||||
* communication between SPI peripheral and SPI M25P64 FLASH.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "spi_flash.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
#define SPI_FLASH_PageSize 0x100
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
#define WRITE 0x02 /* Write to Memory instruction */
|
||||
#define WRSR 0x01 /* Write Status Register instruction */
|
||||
#define WREN 0x06 /* Write enable instruction */
|
||||
|
||||
#define READ 0x03 /* Read from Memory instruction */
|
||||
#define RDSR 0x05 /* Read Status Register instruction */
|
||||
#define RDID 0x9F /* Read identification */
|
||||
#define SE 0xD8 /* Sector Erase instruction */
|
||||
#define BE 0xC7 /* Bulk Erase instruction */
|
||||
|
||||
#define WIP_Flag 0x01 /* Write In Progress (WIP) flag */
|
||||
|
||||
#define Dummy_Byte 0xA5
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_Init
|
||||
* Description : Initializes the peripherals used by the SPI FLASH driver.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_Init(void)
|
||||
{
|
||||
SPI_InitTypeDef SPI_InitStructure;
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
/* Enable SPI1 and GPIO clocks */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA |
|
||||
RCC_APB2Periph_GPIO_CS, ENABLE);
|
||||
|
||||
/* Configure SPI1 pins: SCK, MISO and MOSI */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||||
|
||||
/* Configure I/O for Flash Chip select */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CS;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
GPIO_Init(GPIO_CS, &GPIO_InitStructure);
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
|
||||
/* SPI1 configuration */
|
||||
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
||||
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
||||
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
||||
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
|
||||
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
|
||||
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
|
||||
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
||||
SPI_InitStructure.SPI_CRCPolynomial = 7;
|
||||
SPI_Init(SPI1, &SPI_InitStructure);
|
||||
|
||||
/* Enable SPI1 */
|
||||
SPI_Cmd(SPI1, ENABLE);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_SectorErase
|
||||
* Description : Erases the specified FLASH sector.
|
||||
* Input : SectorAddr: address of the sector to erase.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_SectorErase(uint32_t SectorAddr)
|
||||
{
|
||||
/* Send write enable instruction */
|
||||
SPI_FLASH_WriteEnable();
|
||||
|
||||
/* Sector Erase */
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
/* Send Sector Erase instruction */
|
||||
SPI_FLASH_SendByte(SE);
|
||||
/* Send SectorAddr high nibble address byte */
|
||||
SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
|
||||
/* Send SectorAddr medium nibble address byte */
|
||||
SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
|
||||
/* Send SectorAddr low nibble address byte */
|
||||
SPI_FLASH_SendByte(SectorAddr & 0xFF);
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
|
||||
/* Wait the end of Flash writing */
|
||||
SPI_FLASH_WaitForWriteEnd();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_BulkErase
|
||||
* Description : Erases the entire FLASH.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_BulkErase(void)
|
||||
{
|
||||
/* Send write enable instruction */
|
||||
SPI_FLASH_WriteEnable();
|
||||
|
||||
/* Bulk Erase */
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
/* Send Bulk Erase instruction */
|
||||
SPI_FLASH_SendByte(BE);
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
|
||||
/* Wait the end of Flash writing */
|
||||
SPI_FLASH_WaitForWriteEnd();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_PageWrite
|
||||
* Description : Writes more than one byte to the FLASH with a single WRITE
|
||||
* cycle(Page WRITE sequence). The number of byte can't exceed
|
||||
* the FLASH page size.
|
||||
* Input : - pBuffer : pointer to the buffer containing the data to be
|
||||
* written to the FLASH.
|
||||
* - WriteAddr : FLASH's internal address to write to.
|
||||
* - NumByteToWrite : number of bytes to write to the FLASH,
|
||||
* must be equal or less than "SPI_FLASH_PageSize" value.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
|
||||
{
|
||||
/* Enable the write access to the FLASH */
|
||||
SPI_FLASH_WriteEnable();
|
||||
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
/* Send "Write to Memory " instruction */
|
||||
SPI_FLASH_SendByte(WRITE);
|
||||
/* Send WriteAddr high nibble address byte to write to */
|
||||
SPI_FLASH_SendByte((WriteAddr & 0xFF0000) >> 16);
|
||||
/* Send WriteAddr medium nibble address byte to write to */
|
||||
SPI_FLASH_SendByte((WriteAddr & 0xFF00) >> 8);
|
||||
/* Send WriteAddr low nibble address byte to write to */
|
||||
SPI_FLASH_SendByte(WriteAddr & 0xFF);
|
||||
|
||||
/* while there is data to be written on the FLASH */
|
||||
while (NumByteToWrite--)
|
||||
{
|
||||
/* Send the current byte */
|
||||
SPI_FLASH_SendByte(*pBuffer);
|
||||
/* Point on the next byte to be written */
|
||||
pBuffer++;
|
||||
}
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
|
||||
/* Wait the end of Flash writing */
|
||||
SPI_FLASH_WaitForWriteEnd();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_BufferWrite
|
||||
* Description : Writes block of data to the FLASH. In this function, the
|
||||
* number of WRITE cycles are reduced, using Page WRITE sequence.
|
||||
* Input : - pBuffer : pointer to the buffer containing the data to be
|
||||
* written to the FLASH.
|
||||
* - WriteAddr : FLASH's internal address to write to.
|
||||
* - NumByteToWrite : number of bytes to write to the FLASH.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
|
||||
{
|
||||
uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
|
||||
|
||||
Addr = WriteAddr % SPI_FLASH_PageSize;
|
||||
count = SPI_FLASH_PageSize - Addr;
|
||||
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
|
||||
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
|
||||
|
||||
if (Addr == 0) /* WriteAddr is SPI_FLASH_PageSize aligned */
|
||||
{
|
||||
if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
|
||||
{
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
|
||||
}
|
||||
else /* NumByteToWrite > SPI_FLASH_PageSize */
|
||||
{
|
||||
while (NumOfPage--)
|
||||
{
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
|
||||
WriteAddr += SPI_FLASH_PageSize;
|
||||
pBuffer += SPI_FLASH_PageSize;
|
||||
}
|
||||
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
|
||||
}
|
||||
}
|
||||
else /* WriteAddr is not SPI_FLASH_PageSize aligned */
|
||||
{
|
||||
if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
|
||||
{
|
||||
if (NumOfSingle > count) /* (NumByteToWrite + WriteAddr) > SPI_FLASH_PageSize */
|
||||
{
|
||||
temp = NumOfSingle - count;
|
||||
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
|
||||
WriteAddr += count;
|
||||
pBuffer += count;
|
||||
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
|
||||
}
|
||||
}
|
||||
else /* NumByteToWrite > SPI_FLASH_PageSize */
|
||||
{
|
||||
NumByteToWrite -= count;
|
||||
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
|
||||
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
|
||||
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
|
||||
WriteAddr += count;
|
||||
pBuffer += count;
|
||||
|
||||
while (NumOfPage--)
|
||||
{
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
|
||||
WriteAddr += SPI_FLASH_PageSize;
|
||||
pBuffer += SPI_FLASH_PageSize;
|
||||
}
|
||||
|
||||
if (NumOfSingle != 0)
|
||||
{
|
||||
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_BufferRead
|
||||
* Description : Reads a block of data from the FLASH.
|
||||
* Input : - pBuffer : pointer to the buffer that receives the data read
|
||||
* from the FLASH.
|
||||
* - ReadAddr : FLASH's internal address to read from.
|
||||
* - NumByteToRead : number of bytes to read from the FLASH.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
|
||||
{
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
|
||||
/* Send "Read from Memory " instruction */
|
||||
SPI_FLASH_SendByte(READ);
|
||||
|
||||
/* Send ReadAddr high nibble address byte to read from */
|
||||
SPI_FLASH_SendByte((ReadAddr & 0xFF0000) >> 16);
|
||||
/* Send ReadAddr medium nibble address byte to read from */
|
||||
SPI_FLASH_SendByte((ReadAddr& 0xFF00) >> 8);
|
||||
/* Send ReadAddr low nibble address byte to read from */
|
||||
SPI_FLASH_SendByte(ReadAddr & 0xFF);
|
||||
|
||||
while (NumByteToRead--) /* while there is data to be read */
|
||||
{
|
||||
/* Read a byte from the FLASH */
|
||||
*pBuffer = SPI_FLASH_SendByte(Dummy_Byte);
|
||||
/* Point to the next location where the byte read will be saved */
|
||||
pBuffer++;
|
||||
}
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_ReadID
|
||||
* Description : Reads FLASH identification.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : FLASH identification
|
||||
*******************************************************************************/
|
||||
uint32_t SPI_FLASH_ReadID(void)
|
||||
{
|
||||
uint32_t Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;
|
||||
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
|
||||
/* Send "RDID " instruction */
|
||||
SPI_FLASH_SendByte(0x9F);
|
||||
|
||||
/* Read a byte from the FLASH */
|
||||
Temp0 = SPI_FLASH_SendByte(Dummy_Byte);
|
||||
|
||||
/* Read a byte from the FLASH */
|
||||
Temp1 = SPI_FLASH_SendByte(Dummy_Byte);
|
||||
|
||||
/* Read a byte from the FLASH */
|
||||
Temp2 = SPI_FLASH_SendByte(Dummy_Byte);
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
|
||||
Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2;
|
||||
|
||||
return Temp;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_StartReadSequence
|
||||
* Description : Initiates a read data byte (READ) sequence from the Flash.
|
||||
* This is done by driving the /CS line low to select the device,
|
||||
* then the READ instruction is transmitted followed by 3 bytes
|
||||
* address. This function exit and keep the /CS line low, so the
|
||||
* Flash still being selected. With this technique the whole
|
||||
* content of the Flash is read with a single READ instruction.
|
||||
* Input : - ReadAddr : FLASH's internal address to read from.
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_StartReadSequence(uint32_t ReadAddr)
|
||||
{
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
|
||||
/* Send "Read from Memory " instruction */
|
||||
SPI_FLASH_SendByte(READ);
|
||||
|
||||
/* Send the 24-bit address of the address to read from -----------------------*/
|
||||
/* Send ReadAddr high nibble address byte */
|
||||
SPI_FLASH_SendByte((ReadAddr & 0xFF0000) >> 16);
|
||||
/* Send ReadAddr medium nibble address byte */
|
||||
SPI_FLASH_SendByte((ReadAddr& 0xFF00) >> 8);
|
||||
/* Send ReadAddr low nibble address byte */
|
||||
SPI_FLASH_SendByte(ReadAddr & 0xFF);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_ReadByte
|
||||
* Description : Reads a byte from the SPI Flash.
|
||||
* This function must be used only if the Start_Read_Sequence
|
||||
* function has been previously called.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : Byte Read from the SPI Flash.
|
||||
*******************************************************************************/
|
||||
uint8_t SPI_FLASH_ReadByte(void)
|
||||
{
|
||||
return (SPI_FLASH_SendByte(Dummy_Byte));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_SendByte
|
||||
* Description : Sends a byte through the SPI interface and return the byte
|
||||
* received from the SPI bus.
|
||||
* Input : byte : byte to send.
|
||||
* Output : None
|
||||
* Return : The value of the received byte.
|
||||
*******************************************************************************/
|
||||
uint8_t SPI_FLASH_SendByte(uint8_t byte)
|
||||
{
|
||||
/* Loop while DR register in not emplty */
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
||||
|
||||
/* Send byte through the SPI1 peripheral */
|
||||
SPI_I2S_SendData(SPI1, byte);
|
||||
|
||||
/* Wait to receive a byte */
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
|
||||
|
||||
/* Return the byte read from the SPI bus */
|
||||
return SPI_I2S_ReceiveData(SPI1);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_SendHalfWord
|
||||
* Description : Sends a Half Word through the SPI interface and return the
|
||||
* Half Word received from the SPI bus.
|
||||
* Input : Half Word : Half Word to send.
|
||||
* Output : None
|
||||
* Return : The value of the received Half Word.
|
||||
*******************************************************************************/
|
||||
uint16_t SPI_FLASH_SendHalfWord(uint16_t HalfWord)
|
||||
{
|
||||
/* Loop while DR register in not emplty */
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
||||
|
||||
/* Send Half Word through the SPI1 peripheral */
|
||||
SPI_I2S_SendData(SPI1, HalfWord);
|
||||
|
||||
/* Wait to receive a Half Word */
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
|
||||
|
||||
/* Return the Half Word read from the SPI bus */
|
||||
return SPI_I2S_ReceiveData(SPI1);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_WriteEnable
|
||||
* Description : Enables the write access to the FLASH.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_WriteEnable(void)
|
||||
{
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
|
||||
/* Send "Write Enable" instruction */
|
||||
SPI_FLASH_SendByte(WREN);
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_FLASH_WaitForWriteEnd
|
||||
* Description : Polls the status of the Write In Progress (WIP) flag in the
|
||||
* FLASH's status register and loop until write opertaion
|
||||
* has completed.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SPI_FLASH_WaitForWriteEnd(void)
|
||||
{
|
||||
uint8_t FLASH_Status = 0;
|
||||
|
||||
/* Select the FLASH: Chip Select low */
|
||||
SPI_FLASH_CS_LOW();
|
||||
|
||||
/* Send "Read Status Register" instruction */
|
||||
SPI_FLASH_SendByte(RDSR);
|
||||
|
||||
/* Loop as long as the memory is busy with a write cycle */
|
||||
do
|
||||
{
|
||||
/* Send a dummy byte to generate the clock needed by the FLASH
|
||||
and put the value of the status register in FLASH_Status variable */
|
||||
FLASH_Status = SPI_FLASH_SendByte(Dummy_Byte);
|
||||
|
||||
}
|
||||
while ((FLASH_Status & WIP_Flag) == SET); /* Write in progress */
|
||||
|
||||
/* Deselect the FLASH: Chip Select high */
|
||||
SPI_FLASH_CS_HIGH();
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
97
flight/Bootloaders/OpenPilot2/spi_if.c
Normal file
97
flight/Bootloaders/OpenPilot2/spi_if.c
Normal file
@ -0,0 +1,97 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : spi_if.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : specific media access Layer for SPI flash
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "spi_flash.h"
|
||||
#include "spi_if.h"
|
||||
#include "dfu_mal.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_If_Init
|
||||
* Description : Initializes the Media on the STM32
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t SPI_If_Init(void)
|
||||
{
|
||||
SPI_FLASH_Init();
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_If_Erase
|
||||
* Description : Erase sector
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t SPI_If_Erase(uint32_t SectorAddress)
|
||||
{
|
||||
SPI_FLASH_SectorErase(SectorAddress);
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_If_Write
|
||||
* Description : Write sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
uint16_t SPI_If_Write(uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
uint32_t idx, pages;
|
||||
|
||||
pages = (((DataLength & 0xFF00)) >> 8);
|
||||
|
||||
if (DataLength & 0xFF) /* Not a 256 aligned data */
|
||||
{
|
||||
for ( idx = DataLength; idx < ((DataLength & 0xFF00) + 0x100) ; idx++)
|
||||
{
|
||||
MAL_Buffer[idx] = 0xFF;
|
||||
}
|
||||
pages = (((DataLength & 0xFF00)) >> 8 ) + 1;
|
||||
}
|
||||
|
||||
for (idx = 0; idx < pages; idx++)
|
||||
{
|
||||
SPI_FLASH_PageWrite(&MAL_Buffer[idx*256], SectorAddress, 256);
|
||||
SectorAddress += 0x100;
|
||||
}
|
||||
return MAL_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SPI_If_Read
|
||||
* Description : Read sectors
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : buffer address pointer
|
||||
*******************************************************************************/
|
||||
uint8_t *SPI_If_Read(uint32_t SectorAddress, uint32_t DataLength)
|
||||
{
|
||||
SPI_FLASH_BufferRead(MAL_Buffer, SectorAddress, (uint16_t)DataLength);
|
||||
return MAL_Buffer;
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
202
flight/Bootloaders/OpenPilot2/stm32f10x_it.c
Normal file
202
flight/Bootloaders/OpenPilot2/stm32f10x_it.c
Normal file
@ -0,0 +1,202 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : stm32f10x_it.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Main Interrupt Service Routines.
|
||||
* This file provides template for all exceptions handler
|
||||
* and peripherals interrupt service routine.
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x_it.h"
|
||||
#include "usb_lib.h"
|
||||
#include "usb_istr.h"
|
||||
#include "usb_prop.h"
|
||||
#include "usb_pwr.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M3 Processor Exceptions Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : NMI_Handler
|
||||
* Description : This function handles NMI exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : HardFault_Handler
|
||||
* Description : This function handles Hard Fault exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Hard Fault exception occurs */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MemManage_Handler
|
||||
* Description : This function handles Memory Manage exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Memory Manage exception occurs */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : BusFault_Handler
|
||||
* Description : This function handles Bus Fault exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Bus Fault exception occurs */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : UsageFault_Handler
|
||||
* Description : This function handles Usage Fault exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* Go to infinite loop when Usage Fault exception occurs */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SVC_Handler
|
||||
* Description : This function handles SVCall exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DebugMon_Handler
|
||||
* Description : This function handles Debug Monitor exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : PendSV_Handler
|
||||
* Description : This function handles PendSVC exception.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : SysTick_Handler
|
||||
* Description : This function handles SysTick Handler.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32F10x Peripherals Interrupt Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
/*******************************************************************************
|
||||
* Function Name : USB_LP_CAN1_RX0_IRQHandler
|
||||
* Description : This function handles USB Low Priority or CAN RX0 interrupts
|
||||
* requests.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void USB_LP_CAN1_RX0_IRQHandler(void)
|
||||
{
|
||||
USB_Istr();
|
||||
}
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
#ifdef STM32F10X_CL
|
||||
/*******************************************************************************
|
||||
* Function Name : OTG_FS_IRQHandler
|
||||
* Description : This function handles USB-On-The-Go FS global interrupt request.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
void OTG_FS_IRQHandler(void)
|
||||
{
|
||||
STM32_PCD_OTG_ISR_Handler();
|
||||
}
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32F10x Peripherals Interrupt Handlers */
|
||||
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
|
||||
/* available peripheral interrupt handler's name please refer to the startup */
|
||||
/* file (startup_stm32f10x_xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : PPP_IRQHandler
|
||||
* Description : This function handles PPP interrupt request.
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : None
|
||||
*******************************************************************************/
|
||||
/*void PPP_IRQHandler(void)
|
||||
{
|
||||
}*/
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
400
flight/Bootloaders/OpenPilot2/usb_desc.c
Normal file
400
flight/Bootloaders/OpenPilot2/usb_desc.c
Normal file
@ -0,0 +1,400 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_desc.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Descriptors for Device Firmware Upgrade (DFU)
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usb_desc.h"
|
||||
#include "platform_config.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
uint8_t DFU_DeviceDescriptor[DFU_SIZ_DEVICE_DESC] =
|
||||
{
|
||||
0x12, /* bLength */
|
||||
0x01, /* bDescriptorType */
|
||||
0x00, /* bcdUSB, version 1.00 */
|
||||
0x01,
|
||||
0x00, /* bDeviceClass : See interface */
|
||||
0x00, /* bDeviceSubClass : See interface*/
|
||||
0x00, /* bDeviceProtocol : See interface */
|
||||
bMaxPacketSize0, /* bMaxPacketSize0 0x40 = 64 */
|
||||
0x83, /* idVendor (0483) */
|
||||
0x04,
|
||||
0x11, /* idProduct (0xDF11) DFU PiD*/
|
||||
0xDF,
|
||||
0x00, /* bcdDevice*/
|
||||
0x02,
|
||||
|
||||
0x01, /* iManufacturer : index of string Manufacturer */
|
||||
0x02, /* iProduct : index of string descriptor of product*/
|
||||
0x03, /* iSerialNumber : index of string serial number*/
|
||||
|
||||
0x01 /*bNumConfigurations */
|
||||
};
|
||||
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
uint8_t DFU_ConfigDescriptor[DFU_SIZ_CONFIG_DESC] =
|
||||
{
|
||||
0x09, /* bLength: Configuation Descriptor size */
|
||||
0x02, /* bDescriptorType: Configuration */
|
||||
DFU_SIZ_CONFIG_DESC, /* wTotalLength: Bytes returned */
|
||||
0x00,
|
||||
0x01, /* bNumInterfaces: 1 interface */
|
||||
0x01, /* bConfigurationValue: */
|
||||
/* Configuration value */
|
||||
0x00, /* iConfiguration: */
|
||||
/* Index of string descriptor */
|
||||
/* describing the configuration */
|
||||
0xC0, /* bmAttributes: */
|
||||
/* bus powered */
|
||||
0x32, /* MaxPower 100 mA */
|
||||
/* 09 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 0 *********/
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x00, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x04, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 18 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 1 **********/
|
||||
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x01, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x05, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 27 */
|
||||
|
||||
/******************** DFU Functional Descriptor********************/
|
||||
0x09, /*blength = 9 Bytes*/
|
||||
0x21, /* DFU Functional Descriptor*/
|
||||
0x0B, /*bmAttribute
|
||||
|
||||
bitCanDnload = 1 (bit 0)
|
||||
bitCanUpload = 1 (bit 1)
|
||||
bitManifestationTolerant = 0 (bit 2)
|
||||
bitWillDetach = 1 (bit 3)
|
||||
Reserved (bit4-6)
|
||||
bitAcceleratedST = 0 (bit 7)*/
|
||||
0xFF, /*DetachTimeOut= 255 ms*/
|
||||
0x00,
|
||||
wTransferSizeB0,
|
||||
wTransferSizeB1, /* TransferSize = 1024 Byte*/
|
||||
0x1A, /* bcdDFUVersion*/
|
||||
0x01
|
||||
/***********************************************************/
|
||||
/*36*/
|
||||
|
||||
};
|
||||
|
||||
#elif defined (USE_STM3210C_EVAL)
|
||||
uint8_t DFU_ConfigDescriptor[DFU_SIZ_CONFIG_DESC] =
|
||||
{
|
||||
0x09, /* bLength: Configuation Descriptor size */
|
||||
0x02, /* bDescriptorType: Configuration */
|
||||
DFU_SIZ_CONFIG_DESC, /* wTotalLength: Bytes returned */
|
||||
0x00,
|
||||
0x01, /* bNumInterfaces: 1 interface */
|
||||
0x01, /* bConfigurationValue: */
|
||||
/* Configuration value */
|
||||
0x00, /* iConfiguration: */
|
||||
/* Index of string descriptor */
|
||||
/* describing the configuration */
|
||||
0xC0, /* bmAttributes: */
|
||||
/* bus powered */
|
||||
0x32, /* MaxPower 100 mA */
|
||||
/* 09 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 0 *********/
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x00, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x04, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 18 */
|
||||
|
||||
/******************** DFU Functional Descriptor********************/
|
||||
0x09, /*blength = 9 Bytes*/
|
||||
0x21, /* DFU Functional Descriptor*/
|
||||
0x0B, /*bmAttribute
|
||||
|
||||
bitCanDnload = 1 (bit 0)
|
||||
bitCanUpload = 1 (bit 1)
|
||||
bitManifestationTolerant = 0 (bit 2)
|
||||
bitWillDetach = 1 (bit 3)
|
||||
Reserved (bit4-6)
|
||||
bitAcceleratedST = 0 (bit 7)*/
|
||||
0xFF, /*DetachTimeOut= 255 ms*/
|
||||
0x00,
|
||||
wTransferSizeB0,
|
||||
wTransferSizeB1, /* TransferSize = 1024 Byte*/
|
||||
0x1A, /* bcdDFUVersion*/
|
||||
0x01
|
||||
/***********************************************************/
|
||||
/*27*/
|
||||
|
||||
};
|
||||
|
||||
#elif defined (USE_STM3210E_EVAL)
|
||||
uint8_t DFU_ConfigDescriptor[DFU_SIZ_CONFIG_DESC] =
|
||||
{
|
||||
0x09, /* bLength: Configuation Descriptor size */
|
||||
0x02, /* bDescriptorType: Configuration */
|
||||
DFU_SIZ_CONFIG_DESC, /* wTotalLength: Bytes returned */
|
||||
0x00,
|
||||
0x01, /* bNumInterfaces: 1 interface */
|
||||
0x01, /* bConfigurationValue: */
|
||||
/* Configuration value */
|
||||
0x00, /* iConfiguration: */
|
||||
/* Index of string descriptor */
|
||||
/* describing the configuration */
|
||||
0x80, /* bmAttributes: */
|
||||
/* bus powered */
|
||||
0x20, /* MaxPower 100 mA: this current is used for detecting Vbus */
|
||||
/* 09 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 0 *********/
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x00, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x04, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 18 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 1 **********/
|
||||
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x01, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x05, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 27 */
|
||||
|
||||
/************ Descriptor of DFU interface 0 Alternate setting 2 **********/
|
||||
|
||||
0x09, /* bLength: Interface Descriptor size */
|
||||
0x04, /* bDescriptorType: */
|
||||
/* Interface descriptor type */
|
||||
0x00, /* bInterfaceNumber: Number of Interface */
|
||||
0x02, /* bAlternateSetting: Alternate setting */
|
||||
0x00, /* bNumEndpoints*/
|
||||
0xFE, /* bInterfaceClass: Application Specific Class Code */
|
||||
0x01, /* bInterfaceSubClass : Device Firmware Upgrade Code */
|
||||
0x02, /* nInterfaceProtocol: DFU mode protocol */
|
||||
0x06, /* iInterface: */
|
||||
/* Index of string descriptor */
|
||||
/* 36 */
|
||||
|
||||
/******************** DFU Functional Descriptor********************/
|
||||
0x09, /*blength = 9 Bytes*/
|
||||
0x21, /* DFU Functional Descriptor*/
|
||||
0x0B, /*bmAttribute
|
||||
|
||||
bitCanDnload = 1 (bit 0)
|
||||
bitCanUpload = 1 (bit 1)
|
||||
bitManifestationTolerant = 0 (bit 2)
|
||||
bitWillDetach = 1 (bit 3)
|
||||
Reserved (bit4-6)
|
||||
bitAcceleratedST = 0 (bit 7)*/
|
||||
0xFF, /*DetachTimeOut= 255 ms*/
|
||||
0x00,
|
||||
wTransferSizeB0,
|
||||
wTransferSizeB1, /* TransferSize = 1024 Byte*/
|
||||
0x1A, /* bcdDFUVersion*/
|
||||
0x01
|
||||
/***********************************************************/
|
||||
/*45*/
|
||||
|
||||
};
|
||||
#endif /* USE_STM3210B_EVAL */
|
||||
|
||||
uint8_t DFU_StringLangId[DFU_SIZ_STRING_LANGID] =
|
||||
{
|
||||
DFU_SIZ_STRING_LANGID,
|
||||
0x03,
|
||||
0x09,
|
||||
0x04 /* LangID = 0x0409: U.S. English */
|
||||
};
|
||||
|
||||
|
||||
uint8_t DFU_StringVendor[DFU_SIZ_STRING_VENDOR] =
|
||||
{
|
||||
DFU_SIZ_STRING_VENDOR,
|
||||
0x03,
|
||||
/* Manufacturer: "STMicroelectronics" */
|
||||
'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
|
||||
'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
|
||||
'c', 0, 's', 0
|
||||
};
|
||||
|
||||
uint8_t DFU_StringProduct[DFU_SIZ_STRING_PRODUCT] =
|
||||
{
|
||||
DFU_SIZ_STRING_PRODUCT,
|
||||
0x03,
|
||||
/* Product name: "STM32 DFU" */
|
||||
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'D', 0, 'F', 0, 'U', 0
|
||||
};
|
||||
|
||||
uint8_t DFU_StringSerial[DFU_SIZ_STRING_SERIAL] =
|
||||
{
|
||||
DFU_SIZ_STRING_SERIAL,
|
||||
0x03,
|
||||
/* Serial number */
|
||||
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
|
||||
};
|
||||
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
uint8_t DFU_StringInterface0[DFU_SIZ_STRING_INTERFACE0] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE0,
|
||||
0x03,
|
||||
// Interface 0: "@Internal Flash /0x08000000/12*001Ka,116*001Kg"
|
||||
'@', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'n', 0, 'a', 0, 'l', 0, /* 18 */
|
||||
' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0, 'h', 0, ' ', 0, ' ', 0, /* 16 */
|
||||
|
||||
'/', 0, '0', 0, 'x', 0, '0', 0, '8', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, /* 22 */
|
||||
|
||||
'/', 0, '1', 0, '2', 0, '*', 0, '0', 0, '0', 0, '1', 0, 'K', 0, 'a', 0, /* 18 */
|
||||
',', 0, '1', 0, '1', 0, '6', 0, '*', 0, '0', 0, '0', 0, '1', 0, 'K', 0, 'g', 0, /* 20 */
|
||||
};
|
||||
#elif defined (USE_STM3210C_EVAL)
|
||||
uint8_t DFU_StringInterface0[DFU_SIZ_STRING_INTERFACE0] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE0,
|
||||
0x03,
|
||||
// Interface 0: "@Internal Flash /0x08000000/06*002Ka,122*002Kg"
|
||||
'@', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'n', 0, 'a', 0, 'l', 0, /* 18 */
|
||||
' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0, 'h', 0, ' ', 0, ' ', 0, /* 16 */
|
||||
|
||||
'/', 0, '0', 0, 'x', 0, '0', 0, '8', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, /* 22 */
|
||||
|
||||
'/', 0, '0', 0, '6', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'a', 0, /* 18 */
|
||||
',', 0, '1', 0, '2', 0, '2', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'g', 0, /* 20 */
|
||||
};
|
||||
#elif defined (USE_STM3210E_EVAL)
|
||||
#ifdef STM32F10X_XL
|
||||
uint8_t DFU_StringInterface0[DFU_SIZ_STRING_INTERFACE0] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE0,
|
||||
0x03,
|
||||
// Interface 0: "@Internal Flash /0x08000000/06*002Ka,506*002Kg"
|
||||
'@', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'n', 0, 'a', 0, 'l', 0, /* 18 */
|
||||
' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0, 'h', 0, ' ', 0, ' ', 0, /* 16 */
|
||||
|
||||
'/', 0, '0', 0, 'x', 0, '0', 0, '8', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, /* 22 */
|
||||
|
||||
'/', 0, '0', 0, '6', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'a', 0, /* 18 */
|
||||
',', 0, '5', 0, '0', 0, '6', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'g', 0, /* 20 */
|
||||
};
|
||||
#else
|
||||
uint8_t DFU_StringInterface0[DFU_SIZ_STRING_INTERFACE0] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE0,
|
||||
0x03,
|
||||
// Interface 0: "@Internal Flash /0x08000000/06*002Ka,250*002Kg"
|
||||
'@', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'n', 0, 'a', 0, 'l', 0, /* 18 */
|
||||
' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0, 'h', 0, ' ', 0, ' ', 0, /* 16 */
|
||||
|
||||
'/', 0, '0', 0, 'x', 0, '0', 0, '8', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, /* 22 */
|
||||
|
||||
'/', 0, '0', 0, '6', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'a', 0, /* 18 */
|
||||
',', 0, '2', 0, '5', 0, '0', 0, '*', 0, '0', 0, '0', 0, '2', 0, 'K', 0, 'g', 0, /* 20 */
|
||||
};
|
||||
#endif /* STM32F10X_XL */
|
||||
#endif /* USE_STM3210B_EVAL */
|
||||
|
||||
#if defined(USE_STM3210B_EVAL) || defined(USE_STM3210E_EVAL)
|
||||
uint8_t DFU_StringInterface1[DFU_SIZ_STRING_INTERFACE1] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE1,
|
||||
0x03,
|
||||
// Interface 1: "@ SPI Flash: M25P64 /0x00000000/128*064Kg"
|
||||
'@', 0, 'S', 0, 'P', 0, 'I', 0, ' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0,
|
||||
'h', 0, ' ', 0, ':', 0, ' ', 0, 'M', 0, '2', 0, '5', 0, 'P', 0, '6', 0, '4', 0,
|
||||
'/', 0, '0', 0, 'x', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0,
|
||||
'/', 0, '1', 0, '2', 0, '8', 0, '*', 0, '6', 0, '4', 0, 'K', 0, 'g', 0
|
||||
};
|
||||
#endif /* USE_STM3210B_EVAL or USE_STM3210E_EVAL */
|
||||
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
uint8_t DFU_StringInterface2_1[DFU_SIZ_STRING_INTERFACE2] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE2,
|
||||
0x03,
|
||||
// Interface 1: "@ NOR Flash: M29W128 /0x64000000/256*064Kg"
|
||||
'@', 0, 'N', 0, 'O', 0, 'R', 0, ' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0,
|
||||
'h', 0, ' ', 0, ':', 0, ' ', 0, 'M', 0, '2', 0, '9', 0, 'W', 0, '1', 0, '2', 0, '8', 0, 'F', 0,
|
||||
'/', 0, '0', 0, 'x', 0, '6', 0, '4', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0,
|
||||
'/', 0, '0', 0, '2', 0, '5', 0, '6', 0, '*', 0, '6', 0, '4', 0, 'K', 0, 'g', 0
|
||||
};
|
||||
uint8_t DFU_StringInterface2_2[DFU_SIZ_STRING_INTERFACE2] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE2,
|
||||
0x03,
|
||||
// Interface 1: "@ NOR Flash: M29W128 /0x64000000/128*128Kg"
|
||||
'@', 0, 'N', 0, 'O', 0, 'R', 0, ' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0,
|
||||
'h', 0, ' ', 0, ':', 0, ' ', 0, 'M', 0, '2', 0, '9', 0, 'W', 0, '1', 0, '2', 0, '8', 0, 'G', 0,
|
||||
'/', 0, '0', 0, 'x', 0, '6', 0, '4', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0,
|
||||
'/', 0, '1', 0, '2', 0, '8', 0, '*', 0, '1', 0, '2', 0, '8', 0, 'K', 0, 'g', 0
|
||||
};
|
||||
|
||||
uint8_t DFU_StringInterface2_3[DFU_SIZ_STRING_INTERFACE2] =
|
||||
{
|
||||
DFU_SIZ_STRING_INTERFACE2,
|
||||
0x03,
|
||||
// Interface 1: "@ NOR Flash:S29GL128 /0x64000000/128*128Kg"
|
||||
'@', 0, 'N', 0, 'O', 0, 'R', 0, ' ', 0, 'F', 0, 'l', 0, 'a', 0, 's', 0,
|
||||
'h', 0, ' ', 0, ':', 0, ' ', 0, 'S', 0, '2', 0, '9', 0, 'G', 0, 'L', 0 , '1', 0, '2', 0, '8', 0,
|
||||
'/', 0, '0', 0, 'x', 0, '6', 0, '4', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0,
|
||||
'/', 0, '1', 0, '2', 0, '8', 0, '*', 0, '1', 0, '2', 0, '8', 0, 'K', 0, 'g', 0
|
||||
};
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
383
flight/Bootloaders/OpenPilot2/usb_istr.c
Normal file
383
flight/Bootloaders/OpenPilot2/usb_istr.c
Normal file
@ -0,0 +1,383 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_istr.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : ISTR events interrupt service routines
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usb_lib.h"
|
||||
#include "usb_prop.h"
|
||||
#include "usb_pwr.h"
|
||||
#include "usb_istr.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
__IO uint16_t wIstr; /* ISTR register last read value */
|
||||
__IO uint8_t bIntPackSOF = 0; /* SOFs received between 2 consecutive packets */
|
||||
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/* function pointers to non-control endpoints service routines */
|
||||
void (*pEpInt_IN[7])(void) =
|
||||
{
|
||||
EP1_IN_Callback,
|
||||
EP2_IN_Callback,
|
||||
EP3_IN_Callback,
|
||||
EP4_IN_Callback,
|
||||
EP5_IN_Callback,
|
||||
EP6_IN_Callback,
|
||||
EP7_IN_Callback,
|
||||
};
|
||||
|
||||
void (*pEpInt_OUT[7])(void) =
|
||||
{
|
||||
EP1_OUT_Callback,
|
||||
EP2_OUT_Callback,
|
||||
EP3_OUT_Callback,
|
||||
EP4_OUT_Callback,
|
||||
EP5_OUT_Callback,
|
||||
EP6_OUT_Callback,
|
||||
EP7_OUT_Callback,
|
||||
};
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : USB_Istr
|
||||
* Description : STR events interrupt service routine
|
||||
* Input :
|
||||
* Output :
|
||||
* Return :
|
||||
*******************************************************************************/
|
||||
void USB_Istr(void)
|
||||
{
|
||||
|
||||
wIstr = _GetISTR();
|
||||
|
||||
#if (IMR_MSK & ISTR_CTR)
|
||||
if (wIstr & ISTR_CTR & wInterrupt_Mask)
|
||||
{
|
||||
/* servicing of the endpoint correct transfer interrupt */
|
||||
/* clear of the CTR flag into the sub */
|
||||
CTR_LP();
|
||||
#ifdef CTR_CALLBACK
|
||||
CTR_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_RESET)
|
||||
if (wIstr & ISTR_RESET & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_RESET);
|
||||
Device_Property.Reset();
|
||||
#ifdef RESET_CALLBACK
|
||||
RESET_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_DOVR)
|
||||
if (wIstr & ISTR_DOVR & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_DOVR);
|
||||
#ifdef DOVR_CALLBACK
|
||||
DOVR_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_ERR)
|
||||
if (wIstr & ISTR_ERR & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_ERR);
|
||||
#ifdef ERR_CALLBACK
|
||||
ERR_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_WKUP)
|
||||
if (wIstr & ISTR_WKUP & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_WKUP);
|
||||
Resume(RESUME_EXTERNAL);
|
||||
#ifdef WKUP_CALLBACK
|
||||
WKUP_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_SUSP)
|
||||
if (wIstr & ISTR_SUSP & wInterrupt_Mask)
|
||||
{
|
||||
|
||||
/* check if SUSPEND is possible */
|
||||
if (fSuspendEnabled)
|
||||
{
|
||||
Suspend();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* if not possible then resume after xx ms */
|
||||
Resume(RESUME_LATER);
|
||||
}
|
||||
/* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
|
||||
_SetISTR((uint16_t)CLR_SUSP);
|
||||
#ifdef SUSP_CALLBACK
|
||||
SUSP_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_SOF)
|
||||
if (wIstr & ISTR_SOF & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_SOF);
|
||||
bIntPackSOF++;
|
||||
|
||||
#ifdef SOF_CALLBACK
|
||||
SOF_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#if (IMR_MSK & ISTR_ESOF)
|
||||
if (wIstr & ISTR_ESOF & wInterrupt_Mask)
|
||||
{
|
||||
_SetISTR((uint16_t)CLR_ESOF);
|
||||
/* resume handling timing is made with ESOFs */
|
||||
Resume(RESUME_ESOF); /* request without change of the machine state */
|
||||
|
||||
#ifdef ESOF_CALLBACK
|
||||
ESOF_Callback();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
} /* USB_Istr */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
#else /* STM32F10X_CL */
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : STM32_PCD_OTG_ISR_Handler
|
||||
* Description : Handles all USB Device Interrupts
|
||||
* Input : None
|
||||
* Output : None
|
||||
* Return : status
|
||||
*******************************************************************************/
|
||||
u32 STM32_PCD_OTG_ISR_Handler (void)
|
||||
{
|
||||
USB_OTG_GINTSTS_TypeDef gintr_status;
|
||||
u32 retval = 0;
|
||||
|
||||
if (USBD_FS_IsDeviceMode()) /* ensure that we are in device mode */
|
||||
{
|
||||
gintr_status.d32 = OTGD_FS_ReadCoreItr();
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
|
||||
/* If there is no interrupt pending exit the interrupt routine */
|
||||
if (!gintr_status.d32)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Early Suspend interrupt */
|
||||
#ifdef INTR_ERLYSUSPEND
|
||||
if (gintr_status.b.erlysuspend)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_EarlySuspend_ISR();
|
||||
}
|
||||
#endif /* INTR_ERLYSUSPEND */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* End of Periodic Frame interrupt */
|
||||
#ifdef INTR_EOPFRAME
|
||||
if (gintr_status.b.eopframe)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_EOPF_ISR();
|
||||
}
|
||||
#endif /* INTR_EOPFRAME */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Non Periodic Tx FIFO Emty interrupt */
|
||||
#ifdef INTR_NPTXFEMPTY
|
||||
if (gintr_status.b.nptxfempty)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_NPTxFE_ISR();
|
||||
}
|
||||
#endif /* INTR_NPTXFEMPTY */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Wakeup or RemoteWakeup interrupt */
|
||||
#ifdef INTR_WKUPINTR
|
||||
if (gintr_status.b.wkupintr)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_Wakeup_ISR();
|
||||
}
|
||||
#endif /* INTR_WKUPINTR */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Suspend interrupt */
|
||||
#ifdef INTR_USBSUSPEND
|
||||
if (gintr_status.b.usbsuspend)
|
||||
{
|
||||
/* check if SUSPEND is possible */
|
||||
if (fSuspendEnabled)
|
||||
{
|
||||
Suspend();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* if not possible then resume after xx ms */
|
||||
Resume(RESUME_LATER); /* This case shouldn't happen in OTG Device mode because
|
||||
there's no ESOF interrupt to increment the ResumeS.bESOFcnt in the Resume state machine */
|
||||
}
|
||||
|
||||
retval |= OTGD_FS_Handle_USBSuspend_ISR();
|
||||
}
|
||||
#endif /* INTR_USBSUSPEND */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Start of Frame interrupt */
|
||||
#ifdef INTR_SOFINTR
|
||||
if (gintr_status.b.sofintr)
|
||||
{
|
||||
/* Update the frame number variable */
|
||||
bIntPackSOF++;
|
||||
|
||||
retval |= OTGD_FS_Handle_Sof_ISR();
|
||||
}
|
||||
#endif /* INTR_SOFINTR */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Receive FIFO Queue Status Level interrupt */
|
||||
#ifdef INTR_RXSTSQLVL
|
||||
if (gintr_status.b.rxstsqlvl)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_RxStatusQueueLevel_ISR();
|
||||
}
|
||||
#endif /* INTR_RXSTSQLVL */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Enumeration Done interrupt */
|
||||
#ifdef INTR_ENUMDONE
|
||||
if (gintr_status.b.enumdone)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_EnumDone_ISR();
|
||||
}
|
||||
#endif /* INTR_ENUMDONE */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Reset interrutp */
|
||||
#ifdef INTR_USBRESET
|
||||
if (gintr_status.b.usbreset)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_UsbReset_ISR();
|
||||
}
|
||||
#endif /* INTR_USBRESET */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* IN Endpoint interrupt */
|
||||
#ifdef INTR_INEPINTR
|
||||
if (gintr_status.b.inepint)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_InEP_ISR();
|
||||
}
|
||||
#endif /* INTR_INEPINTR */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* OUT Endpoint interrupt */
|
||||
#ifdef INTR_OUTEPINTR
|
||||
if (gintr_status.b.outepintr)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_OutEP_ISR();
|
||||
}
|
||||
#endif /* INTR_OUTEPINTR */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Mode Mismatch interrupt */
|
||||
#ifdef INTR_MODEMISMATCH
|
||||
if (gintr_status.b.modemismatch)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_ModeMismatch_ISR();
|
||||
}
|
||||
#endif /* INTR_MODEMISMATCH */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Global IN Endpoints NAK Effective interrupt */
|
||||
#ifdef INTR_GINNAKEFF
|
||||
if (gintr_status.b.ginnakeff)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_GInNakEff_ISR();
|
||||
}
|
||||
#endif /* INTR_GINNAKEFF */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Global OUT Endpoints NAK effective interrupt */
|
||||
#ifdef INTR_GOUTNAKEFF
|
||||
if (gintr_status.b.goutnakeff)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_GOutNakEff_ISR();
|
||||
}
|
||||
#endif /* INTR_GOUTNAKEFF */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Isochrounous Out packet Dropped interrupt */
|
||||
#ifdef INTR_ISOOUTDROP
|
||||
if (gintr_status.b.isooutdrop)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_IsoOutDrop_ISR();
|
||||
}
|
||||
#endif /* INTR_ISOOUTDROP */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Endpoint Mismatch error interrupt */
|
||||
#ifdef INTR_EPMISMATCH
|
||||
if (gintr_status.b.epmismatch)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_EPMismatch_ISR();
|
||||
}
|
||||
#endif /* INTR_EPMISMATCH */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Incomplete Isochrous IN tranfer error interrupt */
|
||||
#ifdef INTR_INCOMPLISOIN
|
||||
if (gintr_status.b.incomplisoin)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_IncomplIsoIn_ISR();
|
||||
}
|
||||
#endif /* INTR_INCOMPLISOIN */
|
||||
|
||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
||||
/* Incomplete Isochrous OUT tranfer error interrupt */
|
||||
#ifdef INTR_INCOMPLISOOUT
|
||||
if (gintr_status.b.outepintr)
|
||||
{
|
||||
retval |= OTGD_FS_Handle_IncomplIsoOut_ISR();
|
||||
}
|
||||
#endif /* INTR_INCOMPLISOOUT */
|
||||
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||
|
738
flight/Bootloaders/OpenPilot2/usb_prop.c
Normal file
738
flight/Bootloaders/OpenPilot2/usb_prop.c
Normal file
@ -0,0 +1,738 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_prop.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : All processings related to DFU demo
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "spi_flash.h"
|
||||
#include "usb_lib.h"
|
||||
#include "hw_config.h"
|
||||
#include "usb_conf.h"
|
||||
#include "usb_prop.h"
|
||||
#include "usb_desc.h"
|
||||
#include "usb_pwr.h"
|
||||
#include "dfu_mal.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
uint32_t wBlockNum = 0, wlength = 0;
|
||||
uint32_t Manifest_State = Manifest_complete;
|
||||
uint32_t Pointer = ApplicationAddress; /* Base Address to Erase, Program or Read */
|
||||
|
||||
DEVICE Device_Table =
|
||||
{
|
||||
EP_NUM,
|
||||
1
|
||||
};
|
||||
|
||||
DEVICE_PROP Device_Property =
|
||||
{
|
||||
DFU_init,
|
||||
DFU_Reset,
|
||||
DFU_Status_In,
|
||||
DFU_Status_Out,
|
||||
DFU_Data_Setup,
|
||||
DFU_NoData_Setup,
|
||||
DFU_Get_Interface_Setting,
|
||||
DFU_GetDeviceDescriptor,
|
||||
DFU_GetConfigDescriptor,
|
||||
DFU_GetStringDescriptor,
|
||||
0, /*DFU_EP0Buffer*/
|
||||
bMaxPacketSize0 /*Max Packet size*/
|
||||
};
|
||||
|
||||
USER_STANDARD_REQUESTS User_Standard_Requests =
|
||||
{
|
||||
DFU_GetConfiguration,
|
||||
DFU_SetConfiguration,
|
||||
DFU_GetInterface,
|
||||
DFU_SetInterface,
|
||||
DFU_GetStatus,
|
||||
DFU_ClearFeature,
|
||||
DFU_SetEndPointFeature,
|
||||
DFU_SetDeviceFeature,
|
||||
DFU_SetDeviceAddress
|
||||
};
|
||||
|
||||
ONE_DESCRIPTOR Device_Descriptor =
|
||||
{
|
||||
(uint8_t*)DFU_DeviceDescriptor,
|
||||
DFU_SIZ_DEVICE_DESC
|
||||
};
|
||||
|
||||
ONE_DESCRIPTOR Config_Descriptor =
|
||||
{
|
||||
(uint8_t*)DFU_ConfigDescriptor,
|
||||
DFU_SIZ_CONFIG_DESC
|
||||
};
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
ONE_DESCRIPTOR DFU_String_Descriptor[7] =
|
||||
#elif defined(USE_STM3210B_EVAL)
|
||||
ONE_DESCRIPTOR DFU_String_Descriptor[6] =
|
||||
#elif defined(USE_STM3210C_EVAL)
|
||||
ONE_DESCRIPTOR DFU_String_Descriptor[5] =
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
{
|
||||
{ (u8*)DFU_StringLangId, DFU_SIZ_STRING_LANGID },
|
||||
{ (u8*)DFU_StringVendor, DFU_SIZ_STRING_VENDOR },
|
||||
{ (u8*)DFU_StringProduct, DFU_SIZ_STRING_PRODUCT },
|
||||
{ (u8*)DFU_StringSerial, DFU_SIZ_STRING_SERIAL },
|
||||
{ (u8*)DFU_StringInterface0, DFU_SIZ_STRING_INTERFACE0 }
|
||||
#ifdef USE_STM3210B_EVAL
|
||||
,
|
||||
{ (u8*)DFU_StringInterface1, DFU_SIZ_STRING_INTERFACE1 }
|
||||
#endif /* USE_STM3210B_EVAL */
|
||||
#ifdef USE_STM3210E_EVAL
|
||||
,
|
||||
{ (u8*)DFU_StringInterface1, DFU_SIZ_STRING_INTERFACE1 },
|
||||
{ (u8*)DFU_StringInterface2_1, DFU_SIZ_STRING_INTERFACE2 }
|
||||
#endif /* USE_STM3210E_EVAL */
|
||||
};
|
||||
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
extern uint8_t DeviceState ;
|
||||
extern uint8_t DeviceStatus[6];
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_init.
|
||||
* Description : DFU init routine.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_init(void)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
|
||||
/* Update the serial number string descriptor with the data from the unique ID*/
|
||||
Get_SerialNum();
|
||||
|
||||
pInfo->Current_Configuration = 0;
|
||||
|
||||
/* Connect the device */
|
||||
PowerOn();
|
||||
|
||||
/* Perform basic device initialization operations */
|
||||
USB_SIL_Init();
|
||||
|
||||
/* Enable USB interrupts */
|
||||
USB_Interrupts_Config();
|
||||
|
||||
bDeviceState = UNCONNECTED;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Reset.
|
||||
* Description : DFU reset routine
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_Reset(void)
|
||||
{
|
||||
/* Set DFU_DEVICE as not configured */
|
||||
Device_Info.Current_Configuration = 0;
|
||||
|
||||
/* Current Feature initialization */
|
||||
pInformation->Current_Feature = DFU_ConfigDescriptor[7];
|
||||
|
||||
#ifdef STM32F10X_CL
|
||||
/* EP0 is already configured in DFU_Init by OTG_DEV_Init() function
|
||||
No Other endpoints needed for this firmware */
|
||||
#else
|
||||
_SetBTABLE(BTABLE_ADDRESS);
|
||||
|
||||
/* Initialize Endpoint 0 */
|
||||
_SetEPType(ENDP0, EP_CONTROL);
|
||||
_SetEPTxStatus(ENDP0, EP_TX_NAK);
|
||||
_SetEPRxAddr(ENDP0, ENDP0_RXADDR);
|
||||
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
|
||||
_SetEPTxAddr(ENDP0, ENDP0_TXADDR);
|
||||
SetEPTxCount(ENDP0, Device_Property.MaxPacketSize);
|
||||
Clear_Status_Out(ENDP0);
|
||||
SetEPRxValid(ENDP0);
|
||||
|
||||
/* Set this device to response on default address */
|
||||
SetDeviceAddress(0);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* Set the new control state of the device to Attached */
|
||||
bDeviceState = ATTACHED;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_SetConfiguration.
|
||||
* Description : Udpade the device state to configured.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_SetConfiguration(void)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
|
||||
if (pInfo->Current_Configuration != 0)
|
||||
{
|
||||
/* Device configured */
|
||||
bDeviceState = CONFIGURED;
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_SetConfiguration.
|
||||
* Description : Udpade the device state to addressed.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_SetDeviceAddress (void)
|
||||
{
|
||||
bDeviceState = ADDRESSED;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Status_In.
|
||||
* Description : DFU status IN routine.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_Status_In(void)
|
||||
{}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Status_Out.
|
||||
* Description : DFU status OUT routine.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_Status_Out (void)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
uint32_t Addr;
|
||||
|
||||
if (pInfo->USBbRequest == DFU_GETSTATUS)
|
||||
{
|
||||
if (DeviceState == STATE_dfuDNBUSY)
|
||||
{
|
||||
if (wBlockNum == 0) /* Decode the Special Command*/
|
||||
{
|
||||
if ((MAL_Buffer[0] == CMD_GETCOMMANDS) && (wlength == 1))
|
||||
{}
|
||||
else if (( MAL_Buffer[0] == CMD_SETADDRESSPOINTER ) && (wlength == 5))
|
||||
{
|
||||
Pointer = MAL_Buffer[1];
|
||||
Pointer += MAL_Buffer[2] << 8;
|
||||
Pointer += MAL_Buffer[3] << 16;
|
||||
Pointer += MAL_Buffer[4] << 24;
|
||||
}
|
||||
else if (( MAL_Buffer[0] == CMD_ERASE ) && (wlength == 5))
|
||||
{
|
||||
Pointer = MAL_Buffer[1];
|
||||
Pointer += MAL_Buffer[2] << 8;
|
||||
Pointer += MAL_Buffer[3] << 16;
|
||||
Pointer += MAL_Buffer[4] << 24;
|
||||
MAL_Erase(Pointer);
|
||||
}
|
||||
}
|
||||
|
||||
else if (wBlockNum > 1) // Download Command
|
||||
{
|
||||
Addr = ((wBlockNum - 2) * wTransferSize) + Pointer;
|
||||
MAL_Write(Addr, wlength);
|
||||
}
|
||||
wlength = 0;
|
||||
wBlockNum = 0;
|
||||
|
||||
DeviceState = STATE_dfuDNLOAD_SYNC;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
return;
|
||||
}
|
||||
else if (DeviceState == STATE_dfuMANIFEST)/* Manifestation in progress*/
|
||||
{
|
||||
DFU_write_crc();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Data_Setup.
|
||||
* Description : Handle the data class specific requests.
|
||||
* Input : RequestNb.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS or USB_UNSUPPORT.
|
||||
*******************************************************************************/
|
||||
RESULT DFU_Data_Setup(uint8_t RequestNo)
|
||||
{
|
||||
uint8_t *(*CopyRoutine)(uint16_t);
|
||||
CopyRoutine = NULL;
|
||||
|
||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
|
||||
{
|
||||
if (RequestNo == DFU_UPLOAD && (DeviceState == STATE_dfuIDLE
|
||||
|| DeviceState == STATE_dfuUPLOAD_IDLE ))
|
||||
{
|
||||
CopyRoutine = UPLOAD;
|
||||
}
|
||||
else if (RequestNo == DFU_DNLOAD && (DeviceState == STATE_dfuIDLE
|
||||
|| DeviceState == STATE_dfuDNLOAD_IDLE))
|
||||
{
|
||||
DeviceState = STATE_dfuDNLOAD_SYNC;
|
||||
CopyRoutine = DNLOAD;
|
||||
}
|
||||
else if (RequestNo == DFU_GETSTATE)
|
||||
{
|
||||
CopyRoutine = GETSTATE;
|
||||
}
|
||||
else if (RequestNo == DFU_GETSTATUS)
|
||||
{
|
||||
CopyRoutine = GETSTATUS;
|
||||
}
|
||||
else
|
||||
{
|
||||
return USB_UNSUPPORT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return USB_UNSUPPORT;
|
||||
}
|
||||
|
||||
if (CopyRoutine == NULL)
|
||||
{
|
||||
return USB_UNSUPPORT;
|
||||
}
|
||||
|
||||
pInformation->Ctrl_Info.CopyData = CopyRoutine;
|
||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
||||
(*CopyRoutine)(0);
|
||||
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_NoData_Setup.
|
||||
* Description : Handle the No data class specific requests.
|
||||
* Input : Request Nb.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS or USB_UNSUPPORT.
|
||||
*******************************************************************************/
|
||||
RESULT DFU_NoData_Setup(uint8_t RequestNo)
|
||||
{
|
||||
|
||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
|
||||
{
|
||||
/*DFU_NDLOAD*/
|
||||
if (RequestNo == DFU_DNLOAD)
|
||||
{
|
||||
/* End of DNLOAD operation*/
|
||||
if (DeviceState == STATE_dfuDNLOAD_IDLE || DeviceState == STATE_dfuIDLE )
|
||||
{
|
||||
Manifest_State = Manifest_In_Progress;
|
||||
DeviceState = STATE_dfuMANIFEST_SYNC;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
}
|
||||
/*DFU_UPLOAD*/
|
||||
else if (RequestNo == DFU_UPLOAD)
|
||||
{
|
||||
DeviceState = STATE_dfuIDLE;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
|
||||
/*DFU_CLRSTATUS*/
|
||||
else if (RequestNo == DFU_CLRSTATUS)
|
||||
{
|
||||
|
||||
if (DeviceState == STATE_dfuERROR)
|
||||
{
|
||||
DeviceState = STATE_dfuIDLE;
|
||||
DeviceStatus[0] = STATUS_OK;/*bStatus*/
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0; /*bwPollTimeout=0ms*/
|
||||
DeviceStatus[4] = DeviceState;/*bState*/
|
||||
DeviceStatus[5] = 0;/*iString*/
|
||||
}
|
||||
else
|
||||
{ /*State Error*/
|
||||
DeviceState = STATE_dfuERROR;
|
||||
DeviceStatus[0] = STATUS_ERRUNKNOWN;/*bStatus*/
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0; /*bwPollTimeout=0ms*/
|
||||
DeviceStatus[4] = DeviceState;/*bState*/
|
||||
DeviceStatus[5] = 0;/*iString*/
|
||||
}
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
/*DFU_ABORT*/
|
||||
else if (RequestNo == DFU_ABORT)
|
||||
{
|
||||
if (DeviceState == STATE_dfuIDLE || DeviceState == STATE_dfuDNLOAD_SYNC
|
||||
|| DeviceState == STATE_dfuDNLOAD_IDLE || DeviceState == STATE_dfuMANIFEST_SYNC
|
||||
|| DeviceState == STATE_dfuUPLOAD_IDLE )
|
||||
{
|
||||
DeviceState = STATE_dfuIDLE;
|
||||
DeviceStatus[0] = STATUS_OK;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0; /*bwPollTimeout=0ms*/
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[5] = 0; /*iString*/
|
||||
wBlockNum = 0;
|
||||
wlength = 0;
|
||||
}
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return USB_UNSUPPORT;
|
||||
|
||||
} /* End of DFU_NoData_Setup */
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_GetDeviceDescriptor.
|
||||
* Description : Gets the device descriptor.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : The address of the device descriptor.
|
||||
*******************************************************************************/
|
||||
uint8_t *DFU_GetDeviceDescriptor(uint16_t Length)
|
||||
{
|
||||
return Standard_GetDescriptorData(Length, &Device_Descriptor);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_GetConfigDescriptor.
|
||||
* Description : Gets the configuration descriptor.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : The address of the configuration discriptor.
|
||||
*******************************************************************************/
|
||||
uint8_t *DFU_GetConfigDescriptor(uint16_t Length)
|
||||
{
|
||||
return Standard_GetDescriptorData (Length, &Config_Descriptor);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_GetStringDescriptor.
|
||||
* Description : Gets the string descriptors according to the needed index.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : The address of the string descriptors.
|
||||
*******************************************************************************/
|
||||
uint8_t *DFU_GetStringDescriptor(uint16_t Length)
|
||||
{
|
||||
uint8_t wValue0 = pInformation->USBwValue0;
|
||||
|
||||
if (wValue0 > 8)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Standard_GetDescriptorData(Length, &DFU_String_Descriptor[wValue0]);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_Get_Interface_Setting.
|
||||
* Description : tests the interface and the alternate setting according to the
|
||||
* supported one.
|
||||
* Input : - Interface : interface number.
|
||||
* - AlternateSetting : Alternate Setting number.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS or USB_UNSUPPORT.
|
||||
*******************************************************************************/
|
||||
RESULT DFU_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting)
|
||||
{
|
||||
if (AlternateSetting > 3)
|
||||
{
|
||||
return USB_UNSUPPORT; /* In this application we don't have more than 3 AlternateSettings */
|
||||
}
|
||||
else if (Interface > 2)
|
||||
{
|
||||
return USB_UNSUPPORT; /* In this application we have only 1 interfaces */
|
||||
}
|
||||
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : UPLOAD
|
||||
* Description : Upload routine.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : Pointer to data.
|
||||
*******************************************************************************/
|
||||
uint8_t *UPLOAD(uint16_t Length)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
uint8_t B1, B0;
|
||||
uint16_t offset, returned;
|
||||
uint8_t *Phy_Addr = NULL;
|
||||
uint32_t Addr = 0;
|
||||
|
||||
B0 = pInfo->USBwValues.bw.bb0;
|
||||
B1 = pInfo->USBwValues.bw.bb1;
|
||||
wBlockNum = (uint16_t)B1;
|
||||
wBlockNum = wBlockNum * 0x100;
|
||||
wBlockNum += (uint16_t)B0; /* wBlockNum value updated*/
|
||||
|
||||
B0 = pInfo->USBwLengths.bw.bb0;
|
||||
B1 = pInfo->USBwLengths.bw.bb1;
|
||||
wlength = (uint16_t)B0;
|
||||
wlength = wlength * 0x100;
|
||||
wlength += (uint16_t)B1; /* wlength value updated*/
|
||||
|
||||
offset = pInformation->Ctrl_Info.Usb_wOffset;
|
||||
|
||||
if (wBlockNum == 0) /* Get Command */
|
||||
{
|
||||
if (wlength > 3)
|
||||
{
|
||||
DeviceState = STATE_dfuIDLE ;
|
||||
}
|
||||
else
|
||||
{
|
||||
DeviceState = STATE_dfuUPLOAD_IDLE;
|
||||
}
|
||||
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
|
||||
MAL_Buffer[0] = CMD_GETCOMMANDS;
|
||||
MAL_Buffer[1] = CMD_SETADDRESSPOINTER;
|
||||
MAL_Buffer[2] = CMD_ERASE;
|
||||
|
||||
if (Length == 0)
|
||||
{
|
||||
pInformation->Ctrl_Info.Usb_wLength = 3 ;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return(&MAL_Buffer[0]);
|
||||
}
|
||||
else if (wBlockNum > 1)
|
||||
{
|
||||
DeviceState = STATE_dfuUPLOAD_IDLE ;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
Addr = ((wBlockNum - 2) * wTransferSize) + Pointer; /* Change is Accelerated*/
|
||||
|
||||
Phy_Addr = MAL_Read(Addr, wlength);
|
||||
returned = wlength - offset;
|
||||
|
||||
if (Length == 0)
|
||||
{
|
||||
pInformation->Ctrl_Info.Usb_wLength = returned ;
|
||||
return NULL;
|
||||
}
|
||||
return(Phy_Addr + offset);
|
||||
}
|
||||
else /* unsupported wBlockNum */
|
||||
{
|
||||
DeviceState = STATUS_ERRSTALLEDPKT;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DNLOAD
|
||||
* Description : Download routine.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : Pointer to data.
|
||||
*******************************************************************************/
|
||||
uint8_t *DNLOAD (uint16_t Length)
|
||||
{
|
||||
DEVICE_INFO *pInfo = &Device_Info;
|
||||
uint8_t B1, B0;
|
||||
uint16_t offset, returned;
|
||||
|
||||
B0 = pInfo->USBwValues.bw.bb0;
|
||||
B1 = pInfo->USBwValues.bw.bb1;
|
||||
wBlockNum = (uint16_t)B1;
|
||||
wBlockNum = wBlockNum * 0x100;
|
||||
wBlockNum += (uint16_t)B0;
|
||||
B0 = pInfo->USBwLengths.bw.bb0;
|
||||
B1 = pInfo->USBwLengths.bw.bb1;
|
||||
wlength = (uint16_t)B0;
|
||||
wlength = wlength * 0x100;
|
||||
wlength += (uint16_t)B1;
|
||||
|
||||
offset = pInfo->Ctrl_Info.Usb_wOffset;
|
||||
|
||||
DeviceState = STATE_dfuDNLOAD_SYNC;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
|
||||
returned = wlength - offset;
|
||||
|
||||
if (Length == 0)
|
||||
{
|
||||
pInformation->Ctrl_Info.Usb_wLength = returned ;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return((uint8_t*)MAL_Buffer + offset);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : GETSTATE.
|
||||
* Description : Get State request routine.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : Pointer to data.
|
||||
*******************************************************************************/
|
||||
uint8_t *GETSTATE(uint16_t Length)
|
||||
{
|
||||
if (Length == 0)
|
||||
{
|
||||
pInformation->Ctrl_Info.Usb_wLength = 1 ;
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
return(&DeviceState);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : GETSTATUS.
|
||||
* Description : Get Status request routine.
|
||||
* Input : Length.
|
||||
* Output : None.
|
||||
* Return : Pointer to data.
|
||||
*******************************************************************************/
|
||||
uint8_t *GETSTATUS(uint16_t Length)
|
||||
{
|
||||
switch (DeviceState)
|
||||
{
|
||||
case STATE_dfuDNLOAD_SYNC:
|
||||
if (wlength != 0)
|
||||
{
|
||||
DeviceState = STATE_dfuDNBUSY;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
if ((wBlockNum == 0) && (MAL_Buffer[0] == CMD_ERASE))
|
||||
{
|
||||
MAL_GetStatus(Pointer, 0, DeviceStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
MAL_GetStatus(Pointer, 1, DeviceStatus);
|
||||
}
|
||||
}
|
||||
else /* (wlength==0)*/
|
||||
{
|
||||
DeviceState = STATE_dfuDNLOAD_IDLE;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
|
||||
}
|
||||
break;
|
||||
case STATE_dfuMANIFEST_SYNC :
|
||||
if (Manifest_State == Manifest_In_Progress)
|
||||
{
|
||||
DeviceState = STATE_dfuMANIFEST;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 1; /*bwPollTimeout = 1ms*/
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
//break;
|
||||
}
|
||||
else if (Manifest_State == Manifest_complete && Config_Descriptor.Descriptor[20]
|
||||
& 0x04)
|
||||
{
|
||||
DeviceState = STATE_dfuIDLE;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
//break;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
||||
if (Length == 0)
|
||||
{
|
||||
pInformation->Ctrl_Info.Usb_wLength = 6 ;
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
return(&(DeviceStatus[0]));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DFU_write_crc.
|
||||
* Description : DFU Write CRC routine.
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void DFU_write_crc(void)
|
||||
{
|
||||
Manifest_State = Manifest_complete;
|
||||
|
||||
if (Config_Descriptor.Descriptor[20] & 0x04)
|
||||
{
|
||||
DeviceState = STATE_dfuMANIFEST_SYNC;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
DeviceState = STATE_dfuMANIFEST_WAIT_RESET;
|
||||
DeviceStatus[4] = DeviceState;
|
||||
DeviceStatus[1] = 0;
|
||||
DeviceStatus[2] = 0;
|
||||
DeviceStatus[3] = 0;
|
||||
|
||||
Reset_Device();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
251
flight/Bootloaders/OpenPilot2/usb_pwr.c
Normal file
251
flight/Bootloaders/OpenPilot2/usb_pwr.c
Normal file
@ -0,0 +1,251 @@
|
||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
||||
* File Name : usb_pwr.c
|
||||
* Author : MCD Application Team
|
||||
* Version : V3.2.1
|
||||
* Date : 07/05/2010
|
||||
* Description : Connection/disconnection & power management
|
||||
********************************************************************************
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
*******************************************************************************/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f10x.h"
|
||||
#include "usb_lib.h"
|
||||
#include "usb_conf.h"
|
||||
#include "usb_pwr.h"
|
||||
#include "hw_config.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
__IO uint32_t bDeviceState = UNCONNECTED; /* USB device status */
|
||||
__IO bool fSuspendEnabled = TRUE; /* true when suspend is possible */
|
||||
|
||||
struct
|
||||
{
|
||||
__IO RESUME_STATE eState;
|
||||
__IO uint8_t bESOFcnt;
|
||||
}ResumeS;
|
||||
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Extern function prototypes ------------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : PowerOn
|
||||
* Description :
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS.
|
||||
*******************************************************************************/
|
||||
RESULT PowerOn(void)
|
||||
{
|
||||
#ifndef STM32F10X_CL
|
||||
uint16_t wRegVal;
|
||||
|
||||
/*** cable plugged-in ? ***/
|
||||
USB_Cable_Config(ENABLE);
|
||||
|
||||
/*** CNTR_PWDN = 0 ***/
|
||||
wRegVal = CNTR_FRES;
|
||||
_SetCNTR(wRegVal);
|
||||
|
||||
/*** CNTR_FRES = 0 ***/
|
||||
wInterrupt_Mask = 0;
|
||||
_SetCNTR(wInterrupt_Mask);
|
||||
/*** Clear pending interrupts ***/
|
||||
_SetISTR(0);
|
||||
/*** Set interrupt mask ***/
|
||||
wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
|
||||
_SetCNTR(wInterrupt_Mask);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : PowerOff
|
||||
* Description : handles switch-off conditions
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS.
|
||||
*******************************************************************************/
|
||||
RESULT PowerOff()
|
||||
{
|
||||
#ifndef STM32F10X_CL
|
||||
/* disable all ints and force USB reset */
|
||||
_SetCNTR(CNTR_FRES);
|
||||
/* clear interrupt status register */
|
||||
_SetISTR(0);
|
||||
/* Disable the Pull-Up*/
|
||||
USB_Cable_Config(DISABLE);
|
||||
/* switch-off device */
|
||||
_SetCNTR(CNTR_FRES + CNTR_PDWN);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* sw variables reset */
|
||||
/* ... */
|
||||
|
||||
return USB_SUCCESS;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Suspend
|
||||
* Description : sets suspend mode operating conditions
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS.
|
||||
*******************************************************************************/
|
||||
void Suspend(void)
|
||||
{
|
||||
#ifndef STM32F10X_CL
|
||||
uint16_t wCNTR;
|
||||
/* suspend preparation */
|
||||
/* ... */
|
||||
|
||||
/* macrocell enters suspend mode */
|
||||
wCNTR = _GetCNTR();
|
||||
wCNTR |= CNTR_FSUSP;
|
||||
_SetCNTR(wCNTR);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
|
||||
/* power reduction */
|
||||
/* ... on connected devices */
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
/* force low-power mode in the macrocell */
|
||||
wCNTR = _GetCNTR();
|
||||
wCNTR |= CNTR_LPMODE;
|
||||
_SetCNTR(wCNTR);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* switch-off the clocks */
|
||||
/* ... */
|
||||
Enter_LowPowerMode();
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Resume_Init
|
||||
* Description : Handles wake-up restoring normal operations
|
||||
* Input : None.
|
||||
* Output : None.
|
||||
* Return : USB_SUCCESS.
|
||||
*******************************************************************************/
|
||||
void Resume_Init(void)
|
||||
{
|
||||
#ifndef STM32F10X_CL
|
||||
uint16_t wCNTR;
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
|
||||
/* restart the clocks */
|
||||
/* ... */
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
/* CNTR_LPMODE = 0 */
|
||||
wCNTR = _GetCNTR();
|
||||
wCNTR &= (~CNTR_LPMODE);
|
||||
_SetCNTR(wCNTR);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* restore full power */
|
||||
/* ... on connected devices */
|
||||
Leave_LowPowerMode();
|
||||
|
||||
#ifndef STM32F10X_CL
|
||||
/* reset FSUSP bit */
|
||||
_SetCNTR(IMR_MSK);
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
/* reverse suspend preparation */
|
||||
/* ... */
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : Resume
|
||||
* Description : This is the state machine handling resume operations and
|
||||
* timing sequence. The control is based on the Resume structure
|
||||
* variables and on the ESOF interrupt calling this subroutine
|
||||
* without changing machine state.
|
||||
* Input : a state machine value (RESUME_STATE)
|
||||
* RESUME_ESOF doesn't change ResumeS.eState allowing
|
||||
* decrementing of the ESOF counter in different states.
|
||||
* Output : None.
|
||||
* Return : None.
|
||||
*******************************************************************************/
|
||||
void Resume(RESUME_STATE eResumeSetVal)
|
||||
{
|
||||
#ifndef STM32F10X_CL
|
||||
uint16_t wCNTR;
|
||||
#endif /* STM32F10X_CL */
|
||||
|
||||
if (eResumeSetVal != RESUME_ESOF)
|
||||
ResumeS.eState = eResumeSetVal;
|
||||
|
||||
switch (ResumeS.eState)
|
||||
{
|
||||
case RESUME_EXTERNAL:
|
||||
Resume_Init();
|
||||
ResumeS.eState = RESUME_OFF;
|
||||
break;
|
||||
case RESUME_INTERNAL:
|
||||
Resume_Init();
|
||||
ResumeS.eState = RESUME_START;
|
||||
break;
|
||||
case RESUME_LATER:
|
||||
ResumeS.bESOFcnt = 2;
|
||||
ResumeS.eState = RESUME_WAIT;
|
||||
break;
|
||||
case RESUME_WAIT:
|
||||
ResumeS.bESOFcnt--;
|
||||
if (ResumeS.bESOFcnt == 0)
|
||||
ResumeS.eState = RESUME_START;
|
||||
break;
|
||||
case RESUME_START:
|
||||
#ifdef STM32F10X_CL
|
||||
OTGD_FS_SetRemoteWakeup();
|
||||
#else
|
||||
wCNTR = _GetCNTR();
|
||||
wCNTR |= CNTR_RESUME;
|
||||
_SetCNTR(wCNTR);
|
||||
#endif /* STM32F10X_CL */
|
||||
ResumeS.eState = RESUME_ON;
|
||||
ResumeS.bESOFcnt = 10;
|
||||
break;
|
||||
case RESUME_ON:
|
||||
#ifndef STM32F10X_CL
|
||||
ResumeS.bESOFcnt--;
|
||||
if (ResumeS.bESOFcnt == 0)
|
||||
{
|
||||
#endif /* STM32F10X_CL */
|
||||
#ifdef STM32F10X_CL
|
||||
OTGD_FS_ResetRemoteWakeup();
|
||||
#else
|
||||
wCNTR = _GetCNTR();
|
||||
wCNTR &= (~CNTR_RESUME);
|
||||
_SetCNTR(wCNTR);
|
||||
#endif /* STM32F10X_CL */
|
||||
ResumeS.eState = RESUME_OFF;
|
||||
#ifndef STM32F10X_CL
|
||||
}
|
||||
#endif /* STM32F10X_CL */
|
||||
break;
|
||||
case RESUME_OFF:
|
||||
case RESUME_ESOF:
|
||||
default:
|
||||
ResumeS.eState = RESUME_OFF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
Loading…
x
Reference in New Issue
Block a user