/Modules/Sensors/ALTIMET01A/SW/MPL115A1/AVR/ATmega328/MPL115A1.h |
---|
0,0 → 1,17 |
#define PRESH 0x00 // 80 |
#define PRESL 0x02 // 82 |
#define TEMPH 0x04 // 84 |
#define TEMPL 0x06 // 86 |
#define A0MSB 0x08 // 88 |
#define A0LSB 0x0A // 8A |
#define B1MSB 0x0C // 8C |
#define B1LSB 0x0E // 8E |
#define B2MSB 0x10 // 90 |
#define B2LSB 0x12 // 92 |
#define C12MSB 0x14 // 94 |
#define C12LSB 0x16 // 96 |
#define C11MSB 0x18 // 98 |
#define C11LSB 0x1A // 9A |
#define C22MSB 0x1C // 9C |
#define C22LSB 0x1E // 9E |
/Modules/Sensors/ALTIMET01A/SW/MPL115A1/AVR/ATmega328/Makefile |
---|
0,0 → 1,667 |
# Hey Emacs, this is a -*- makefile -*- |
#---------------------------------------------------------------------------- |
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. |
# |
# Released to the Public Domain |
# |
# Additional material for this makefile was written by: |
# Peter Fleury |
# Tim Henigan |
# Colin O'Flynn |
# Reiner Patommel |
# Markus Pfaff |
# Sander Pool |
# Frederik Rouleau |
# Carlos Lamas |
# |
#---------------------------------------------------------------------------- |
# On command line: |
# |
# make all = Make software. |
# |
# make clean = Clean out built project files. |
# |
# make coff = Convert ELF to AVR COFF. |
# |
# make extcoff = Convert ELF to AVR Extended COFF. |
# |
# make program = Download the hex file to the device, using avrdude. |
# Please customize the avrdude settings below first! |
# |
# make debug = Start either simulavr or avarice as specified for debugging, |
# with avr-gdb or avr-insight as the front end for debugging. |
# |
# make filename.s = Just compile filename.c into the assembler code only. |
# |
# make filename.i = Create a preprocessed source file for use in submitting |
# bug reports to the GCC project. |
# |
# To rebuild project do "make clean" then "make all". |
#---------------------------------------------------------------------------- |
# MCU name |
MCU = atmega328p |
# Processor frequency. |
# This will define a symbol, F_CPU, in all source code files equal to the |
# processor frequency. You can then use this symbol in your source code to |
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done |
# automatically to create a 32-bit value in your source code. |
# Typical values are: |
# F_CPU = 1000000 |
# F_CPU = 1843200 |
# F_CPU = 2000000 |
# F_CPU = 3686400 |
# F_CPU = 4000000 |
# F_CPU = 7372800 |
# F_CPU = 8000000 |
# F_CPU = 11059200 |
# F_CPU = 14745600 |
# F_CPU = 16000000 |
# F_CPU = 18432000 |
# F_CPU = 20000000 |
F_CPU = 8000000 |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
TARGET = main |
# Object files directory |
# To put object files in current directory, use a dot (.), do NOT make |
# this an empty or blank macro! |
OBJDIR = . |
# List C source files here. (C dependencies are automatically generated.) |
SRC = $(TARGET).c |
#SRC += LCD_driver.c |
# List C++ source files here. (C dependencies are automatically generated.) |
CPPSRC = |
# 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 = |
# 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.) |
OPT = s |
# Debugging format. |
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. |
# AVR Studio 4.10 requires dwarf-2. |
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. |
DEBUG = dwarf-2 |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
# Use forward slashes for directory separators. |
# For a directory that has spaces, enclose it in quotes. |
EXTRAINCDIRS = |
# 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 |
# Place -D or -U options here for C sources |
CDEFS = -DF_CPU=$(F_CPU)UL |
# Place -D or -U options here for ASM sources |
ADEFS = -DF_CPU=$(F_CPU) |
# Place -D or -U options here for C++ sources |
CPPDEFS = -DF_CPU=$(F_CPU)UL |
#CPPDEFS += -D__STDC_LIMIT_MACROS |
#CPPDEFS += -D__STDC_CONSTANT_MACROS |
#---------------- Compiler Options C ---------------- |
# -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 |
CFLAGS = -g$(DEBUG) |
CFLAGS += $(CDEFS) |
CFLAGS += -O$(OPT) |
CFLAGS += -funsigned-char |
CFLAGS += -funsigned-bitfields |
CFLAGS += -fpack-struct |
CFLAGS += -fshort-enums |
CFLAGS += -Wall |
CFLAGS += -Wstrict-prototypes |
#CFLAGS += -mshort-calls |
#CFLAGS += -fno-unit-at-a-time |
#CFLAGS += -Wundef |
#CFLAGS += -Wunreachable-code |
#CFLAGS += -Wsign-compare |
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) |
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
CFLAGS += $(CSTANDARD) |
#---------------- Compiler Options C++ ---------------- |
# -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 |
CPPFLAGS = -g$(DEBUG) |
CPPFLAGS += $(CPPDEFS) |
CPPFLAGS += -O$(OPT) |
CPPFLAGS += -funsigned-char |
CPPFLAGS += -funsigned-bitfields |
CPPFLAGS += -fpack-struct |
CPPFLAGS += -fshort-enums |
CPPFLAGS += -fno-exceptions |
CPPFLAGS += -Wall |
CFLAGS += -Wundef |
#CPPFLAGS += -mshort-calls |
#CPPFLAGS += -fno-unit-at-a-time |
#CPPFLAGS += -Wstrict-prototypes |
#CPPFLAGS += -Wunreachable-code |
#CPPFLAGS += -Wsign-compare |
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) |
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
#CPPFLAGS += $(CSTANDARD) |
#---------------- Assembler Options ---------------- |
# -Wa,...: tell GCC to pass this to the assembler. |
# -adhlns: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
# -listing-cont-lines: Sets the maximum number of continuation lines of hex |
# dump that will be displayed for a given single line of source input. |
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 |
#---------------- Library Options ---------------- |
# Minimalistic printf version |
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires MATH_LIB = -lm below) |
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt |
# If this is left blank, then it will use the Standard printf version. |
#PRINTF_LIB = |
#PRINTF_LIB = $(PRINTF_LIB_MIN) |
PRINTF_LIB = $(PRINTF_LIB_FLOAT) |
# Minimalistic scanf version |
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min |
# Floating point + %[ scanf version (requires MATH_LIB = -lm below) |
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt |
# If this is left blank, then it will use the Standard scanf version. |
SCANF_LIB = |
#SCANF_LIB = $(SCANF_LIB_MIN) |
#SCANF_LIB = $(SCANF_LIB_FLOAT) |
MATH_LIB = -lm |
# List any extra directories to look for libraries here. |
# Each directory must be seperated by a space. |
# Use forward slashes for directory separators. |
# For a directory that has spaces, enclose it in quotes. |
EXTRALIBDIRS = |
#---------------- External Memory Options ---------------- |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# used for variables (.data/.bss) and heap (malloc()). |
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# only used for heap (malloc()). |
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff |
EXTMEMOPTS = |
#---------------- Linker Options ---------------- |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
LDFLAGS += $(EXTMEMOPTS) |
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) |
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) |
#LDFLAGS += -T linker_script.x |
#---------------- Programming Options (avrdude) ---------------- |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = stk200 |
AVRDUDE_PROGRAMMER = ponyser |
# com1 = serial port. Use lpt1 to connect to parallel port. |
#AVRDUDE_PORT = lpt1 |
AVRDUDE_PORT = com1 |
# programmer connected to serial device |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE_COUNTER = -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
#AVRDUDE_NO_VERIFY = -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_VERBOSE = -v -v |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) |
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) |
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) |
#---------------- Programming Options (STK500) ---------------- |
# Programming hardware: stk500 |
STK500 = stk500 |
# Location of STK500.exe - no trailing '\' |
STK500_PATH = C:\Program Files\Atmel\AVR Tools\STK500 |
# The STK500 AVR ISP MKII is USB. The USB drivers must already be installed. |
# Do this normally by installing AVR Studio. |
STK500_PORT = USB |
#-erase chip -Program Flash -Verify Flash -File name -Serial programing(ISP) |
STK500_WRITE_FLASH = -e -pf -vf -if$(TARGET).hex -ms |
STK500_WRITE_FLASH += -s |
#Program the Fuse Bytes |
#STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) -fFF79 -FFF79 |
#Skip the Fuse Bytes |
STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) |
#-Set ISP frequency to 250kHz. Limit is 1/4 of internal osc which is default 1MHz |
STK500_FLAGS += -I250kHz |
#---------------- Programming Options (avrdude serial bootloader) ---------------- |
#"C:\arduino\hardware\tools\avr\bin\avrdude" -PCOM28 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -C"C:\arduino\hardware\tools\avr\etc\avrdude.conf" |
SERIAL_AVRDUDE = "C:\Program Files\arduino-0018\arduino-0018\hardware\tools\avr\bin\avrdude" |
SERIAL_AVRDUDE_CONFIG = "C:\Program Files\arduino-0018\arduino-0018\hardware\tools\avr\etc\avrdude.conf" |
SERIAL_AVRDUDE_PORT = COM6 |
SERIAL_AVRDUDE_SPEED = 57600 |
SERIAL_AVRDUDE_PROGRAMMER = stk500v1 |
SERIAL_AVRDUDE_FLAGS = -p $(MCU) -P $(SERIAL_AVRDUDE_PORT) -c $(SERIAL_AVRDUDE_PROGRAMMER) -b $(SERIAL_AVRDUDE_SPEED) |
SERIAL_AVRDUDE_FLAGS += -C$(SERIAL_AVRDUDE_CONFIG) |
SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) |
SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) |
SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) |
#---------------- Debugging Options ---------------- |
# For simulavr only - target MCU frequency. |
DEBUG_MFREQ = $(F_CPU) |
# Set the DEBUG_UI to either gdb or insight. |
# DEBUG_UI = gdb |
DEBUG_UI = insight |
# Set the debugging back-end to either avarice, simulavr. |
DEBUG_BACKEND = avarice |
#DEBUG_BACKEND = simulavr |
# GDB Init Filename. |
GDBINIT_FILE = __avr_gdbinit |
# When using avarice settings for the JTAG |
JTAG_DEV = /dev/com1 |
# Debugging port used to communicate between GDB / avarice / simulavr. |
DEBUG_PORT = 4242 |
# Debugging host used to communicate between GDB / avarice / simulavr, normally |
# just set to localhost unless doing some sort of crazy debugging when |
# avarice is running on a different computer. |
DEBUG_HOST = localhost |
#============================================================================ |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
AR = avr-ar rcs |
NM = avr-nm |
AVRDUDE = avrdude |
REMOVE = rm -f |
REMOVEDIR = rm -rf |
COPY = cp |
WINSHELL = cmd |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling C: |
MSG_COMPILING_CPP = Compiling C++: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
MSG_CREATING_LIBRARY = Creating library: |
# Define all object files. |
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) |
# Define all listing files. |
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) |
# Compiler flags to generate dependency files. |
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) |
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore build sizeafter end |
# Change the build target to build a HEX file or a library. |
build: elf hex eep lss sym |
#build: lib |
elf: $(TARGET).elf |
hex: $(TARGET).hex |
eep: $(TARGET).eep |
lss: $(TARGET).lss |
sym: $(TARGET).sym |
LIBNAME=lib$(TARGET).a |
lib: $(LIBNAME) |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf |
sizebefore: |
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ |
2>/dev/null; echo; fi |
sizeafter: |
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ |
2>/dev/null; echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
program_stk500: $(TARGET).hex $(TARGET).eep |
$(STK500_PATH)\$(STK500) $(STK500_FLAGS) $(STK500_WRITE_FLASH) |
program_serial: $(TARGET).hex $(TARGET).eep |
$(SERIAL_AVRDUDE) $(SERIAL_AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) |
# Generate avr-gdb config/init file which does the following: |
# define the reset signal, load the target file, connect to target, and set |
# a breakpoint at main(). |
gdb-config: |
@$(REMOVE) $(GDBINIT_FILE) |
@echo define reset >> $(GDBINIT_FILE) |
@echo SIGNAL SIGHUP >> $(GDBINIT_FILE) |
@echo end >> $(GDBINIT_FILE) |
@echo file $(TARGET).elf >> $(GDBINIT_FILE) |
@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) |
ifeq ($(DEBUG_BACKEND),simulavr) |
@echo load >> $(GDBINIT_FILE) |
endif |
@echo break main >> $(GDBINIT_FILE) |
debug: gdb-config $(TARGET).elf |
ifeq ($(DEBUG_BACKEND), avarice) |
@echo Starting AVaRICE - Press enter when "waiting to connect" message displays. |
@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ |
$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) |
@$(WINSHELL) /c pause |
else |
@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ |
$(DEBUG_MFREQ) --port $(DEBUG_PORT) |
endif |
@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) |
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. |
COFFCONVERT = $(OBJCOPY) --debugging |
COFFCONVERT += --change-section-address .data-0x800000 |
COFFCONVERT += --change-section-address .bss-0x800000 |
COFFCONVERT += --change-section-address .noinit-0x800000 |
COFFCONVERT += --change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
$(NM) -n $< > $@ |
# Create library from object files. |
.SECONDARY : $(TARGET).a |
.PRECIOUS : $(OBJ) |
%.a: $(OBJ) |
@echo |
@echo $(MSG_CREATING_LIBRARY) $@ |
$(AR) $@ $(OBJ) |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
$(OBJDIR)/%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create object files from C++ source files. |
$(OBJDIR)/%.o : %.cpp |
@echo |
@echo $(MSG_COMPILING_CPP) $< |
$(CC) -c $(ALL_CPPFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C++ source files. |
%.s : %.cpp |
$(CC) -S $(ALL_CPPFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
$(OBJDIR)/%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Create preprocessed source for use in sending a bug report. |
%.i : %.c |
$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) |
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.i) |
$(REMOVEDIR) .dep |
# Create object files directory |
$(shell mkdir $(OBJDIR) 2>/dev/null) |
# Include the dependency files. |
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion \ |
build elf hex eep lss sym coff extcoff \ |
clean clean_list program debug gdb-config |
/Modules/Sensors/ALTIMET01A/SW/MPL115A1/AVR/ATmega328/main.c |
---|
0,0 → 1,355 |
/* |
MPL115A1 SPI Digital Barometer Test Code |
Created on: April 20, 2010 |
By: Jim Lindblom - jim at sparkfun.com |
This is a simple test program for the MPL115A1 Pressure Sensor (SPI version). |
UBRR0 is set to 51 and U2X0 is not set, so the baud rate will be 9600@8MHz and 19200@16MHz. |
Press the spacebar to get the pressure measurement. |
Hardware: ATmega328 (I used the Arduino Pro platform) |
Powered at 3.3V, running at 8MHz. |
The sensor is 5V tolerant, and this code should also work on 5V/16MHz Arduinos. |
MPL115A1 Breakout ------------- Arduino |
----------------- ------- |
SDN ------------------- D9 (PB1) |
CSN ------------------- D8 (PB0) |
SDO ------------------- D12 (PB4) |
SDI ------------------- D11 (PB3) |
SCK ------------------- D13 (PB5) |
GND --------------------- GND |
VDD ------------------- VCC (3.3V) |
License: CCAv3.0 Attribution-ShareAlike (http://creativecommons.org/licenses/by-sa/3.0/) |
You're free to use this code for any venture, but I'd love to hear about what you do with it, |
and any awesome changes you make to it. Attribution is greatly appreciated. |
*/ |
//======================// |
// Includes // |
//======================// |
#include <avr/io.h> |
#include <stdio.h> |
#include "MPL115A1.h" |
//======================// |
// Macros // |
//======================// |
#define sbi(var, mask) ((var) |= (uint8_t)(1 << mask)) |
#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask)) |
//======================// |
// MPL115A1 Defines // |
//======================// |
#define CS 0 //pin for chip select |
#define SDN 1 // pin for interrupt |
//======================// |
// General Functions // |
//======================// |
void ioinit(void); |
void delay_ms(uint16_t x); |
void delay_us(uint16_t x); |
static int uart_putchar(char c, FILE *stream); |
uint8_t uart_getchar(void); |
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); |
//======================// |
// MPL115A1 Functions // |
//======================// |
void init_SPI(void); |
void txdata(char data); |
char rxdata(void); |
char read(uint8_t address); |
void write(uint8_t address, char data); |
float calculatePressure(void); |
//======================// |
// Global Variables // |
//======================// |
signed char sia0MSB, sia0LSB; |
signed char sib1MSB, sib1LSB; |
signed char sib2MSB, sib2LSB; |
signed char sic12MSB, sic12LSB; |
signed char sic11MSB, sic11LSB; |
signed char sic22MSB, sic22LSB; |
signed int sia0, sib1, sib2, sic12, sic11, sic22, siPcomp; |
float decPcomp; |
signed long lt1, lt2, lt3, si_c11x1, si_a11, si_c12x2; |
signed long si_a1, si_c22x2, si_a2, si_a1x1, si_y1, si_a2x2; |
unsigned int uiPadc, uiTadc; |
unsigned char uiPH, uiPL, uiTH, uiTL; |
int main(void) |
{ |
ioinit(); |
init_SPI(); |
sbi(PORTB,CS); // CS Idle High |
sbi(PORTB,SDN); // SDN high turns sensor on |
printf("\n***************MPR115A1 Test****************\n\n"); |
// main program loop |
while(1){ |
printf("\nPress space to print pressure\n"); |
while( !(UCSR0A & (1<<RXC0)) ) |
; |
if (UDR0 == ' ') |
printf("Pressure = %f\n", calculatePressure()); |
} |
} |
float calculatePressure() |
{ |
write(0x24, 0x00); // Start Both Conversions |
// write(0x20, 0x00); // Start Pressure Conversion |
// write(0x22, 0x00); // Start temperature conversion |
delay_ms(10); // Typical wait time is 3ms |
// Read pressure |
uiPH = read(PRESH); |
uiPL = read(PRESL); |
uiTH = read(TEMPH); |
uiTL = read(TEMPL); |
uiPadc = (unsigned int) uiPH << 8; |
uiPadc += (unsigned int) uiPL & 0x00FF; |
uiTadc = (unsigned int) uiTH << 8; |
uiTadc += (unsigned int) uiTL & 0x00FF; |
// Placing Coefficients into 16-bit Variables |
// a0 |
sia0MSB = read(A0MSB); |
sia0LSB = read(A0LSB); |
sia0 = (signed int) sia0MSB << 8; |
sia0 += (signed int) sia0LSB & 0x00FF; |
// b1 |
sib1MSB = read(B1MSB); |
sib1LSB = read(B1LSB); |
sib1 = (signed int) sib1MSB << 8; |
sib1 += (signed int) sib1LSB & 0x00FF; |
// b2 |
sib2MSB = read(B2MSB); |
sib2LSB = read(B2LSB); |
sib2 = (signed int) sib2MSB << 8; |
sib2 += (signed int) sib2LSB & 0x00FF; |
// c12 |
sic12MSB = read(C12MSB); |
sic12LSB = read(C12LSB); |
sic12 = (signed int) sic12MSB << 8; |
sic12 += (signed int) sic12LSB & 0x00FF; |
// c11 |
sic11MSB = read(C11MSB); |
sic11LSB = read(C11LSB); |
sic11 = (signed int) sic11MSB << 8; |
sic11 += (signed int) sic11LSB & 0x00FF; |
// c22 |
sic22MSB = read(C22MSB); |
sic22LSB = read(C22LSB); |
sic22 = (signed int) sic22MSB << 8; |
sic22 += (signed int) sic22LSB & 0x00FF; |
// Coefficient 9 equation compensation |
uiPadc = uiPadc >> 6; |
uiTadc = uiTadc >> 6; |
// Step 1 c11x1 = c11 * Padc |
lt1 = (signed long) sic11; |
lt2 = (signed long) uiPadc; |
lt3 = lt1*lt2; |
si_c11x1 = (signed long) lt3; |
// Step 2 a11 = b1 + c11x1 |
lt1 = ((signed long)sib1)<<14; |
lt2 = (signed long) si_c11x1; |
lt3 = lt1 + lt2; |
si_a11 = (signed long)(lt3>>14); |
// Step 3 c12x2 = c12 * Tadc |
lt1 = (signed long) sic12; |
lt2 = (signed long) uiTadc; |
lt3 = lt1*lt2; |
si_c12x2 = (signed long)lt3; |
// Step 4 a1 = a11 + c12x2 |
lt1 = ((signed long)si_a11<<11); |
lt2 = (signed long)si_c12x2; |
lt3 = lt1 + lt2; |
si_a1 = (signed long) lt3>>11; |
// Step 5 c22x2 = c22*Tadc |
lt1 = (signed long)sic22; |
lt2 = (signed long)uiTadc; |
lt3 = lt1 * lt2; |
si_c22x2 = (signed long)(lt3); |
// Step 6 a2 = b2 + c22x2 |
lt1 = ((signed long)sib2<<15); |
lt2 = ((signed long)si_c22x2>1); |
lt3 = lt1+lt2; |
si_a2 = ((signed long)lt3>>16); |
// Step 7 a1x1 = a1 * Padc |
lt1 = (signed long)si_a1; |
lt2 = (signed long)uiPadc; |
lt3 = lt1*lt2; |
si_a1x1 = (signed long)(lt3); |
// Step 8 y1 = a0 + a1x1 |
lt1 = ((signed long)sia0<<10); |
lt2 = (signed long)si_a1x1; |
lt3 = lt1+lt2; |
si_y1 = ((signed long)lt3>>10); |
// Step 9 a2x2 = a2 * Tadc |
lt1 = (signed long)si_a2; |
lt2 = (signed long)uiTadc; |
lt3 = lt1*lt2; |
si_a2x2 = (signed long)(lt3); |
// Step 10 pComp = y1 + a2x2 |
lt1 = ((signed long)si_y1<<10); |
lt2 = (signed long)si_a2x2; |
lt3 = lt1+lt2; |
// Fixed point result with rounding |
//siPcomp = ((signed int)lt3>>13); |
siPcomp = lt3/8192; |
// decPcomp is defined as a floating point number |
// Conversion to decimal value from 1023 ADC count value |
// ADC counts are 0 to 1023, pressure is 50 to 115kPa respectively |
decPcomp = ((65.0/1023.0)*siPcomp)+50; |
return decPcomp; |
} |
void write(uint8_t address, char data) |
{ |
//write any data byte to any single address |
//adds a 0 to the MSB of the address byte (WRITE mode) |
address &= 0x7F; |
//printf("\nWriting 0x%x to 0x%x\n", data, address); |
cbi(PORTB,CS); |
delay_ms(1); |
txdata(address); |
delay_ms(1); |
txdata(data); |
delay_ms(1); |
sbi(PORTB,CS); |
} |
char read(uint8_t address) |
{ |
//returns the contents of any 1 byte register from any address |
//sets the MSB for every address byte (READ mode) |
char byte; |
address |= 0x80; |
cbi(PORTB,CS); |
txdata(address); |
byte = rxdata(); |
sbi(PORTB,CS); |
return byte; |
} |
char rxdata(void) |
{ |
SPDR = 0x55; |
while((SPSR&0x80) == 0x00) |
; |
return SPDR; |
} |
void txdata(char data) |
{ |
SPDR = data; |
while((SPSR&0x80) == 0x00) |
; |
} |
void init_SPI(void) |
{ |
sbi(SPCR,MSTR); //make SPI master |
cbi(SPCR,CPOL); cbi(SPCR,CPHA); //SCL idle low, sample data on rising edge |
cbi(SPCR,SPR1); cbi(SPCR,SPR0); sbi(SPSR,SPI2X); //Fosc/4 is SPI frequency |
sbi(SPCR,SPE); //enable SPI |
} |
static int uart_putchar(char c, FILE *stream) |
{ |
if (c == '\n') uart_putchar('\r', stream); |
loop_until_bit_is_set(UCSR0A, UDRE0); |
UDR0 = c; |
return 0; |
} |
uint8_t uart_getchar(void) |
{ |
while( !(UCSR0A & (1<<RXC0)) ) |
; |
return(UDR0); |
} |
void ioinit (void) |
{ |
int MYUBRR = 51; // Results in 9600bps@8MHz or 19200bps@16MHz |
//1 = output, 0 = input |
//DDRA = 0b00000000; //ADC inputs |
DDRB = 0b11101111; //MISO input |
DDRC = 0b11111111; //All outputs |
DDRD = 0b11111110; //PORTD (RX on PD0) |
stdout = &mystdout; //Required for printf init |
UBRR0H = (MYUBRR) >> 8; |
UBRR0L = MYUBRR; |
UCSR0B = (1<<RXEN0)|(1<<TXEN0); |
UCSR0C = (3<<UCSZ00); |
TCCR2B = (1<<CS21); |
} |
//General short delays |
void delay_ms(uint16_t x) |
{ |
for (; x > 0 ; x--) |
delay_us(1000); |
} |
//General short delays |
void delay_us(uint16_t x) |
{ |
while(x > 256) |
{ |
TIFR2 = (1<<TOV2); //Clear any interrupt flags on Timer2 |
TCNT2 = 0; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click |
while( (TIFR2 & (1<<TOV2)) == 0); |
x -= 256; |
} |
TIFR2 = (1<<TOV2); //Clear any interrupt flags on Timer2 |
TCNT2= 256 - x; //256 - 125 = 131 : Preload timer 2 for x clicks. Should be 1us per click |
while( (TIFR2 & (1<<TOV2)) == 0); |
} |
/Modules/Sensors/ALTIMET01A/SW/MPL115A1/AVR/ATmega328/main.hex |
---|
0,0 → 1,368 |
:100000000C94B5000C94D2000C94D2000C94D20045 |
:100010000C94D2000C94D2000C94D2000C94D20018 |
:100020000C94D2000C94D2000C94D2000C94D20008 |
:100030000C94D2000C94D2000C94D2000C94D200F8 |
:100040000C94D2000C94D2000C94D2000C94D200E8 |
:100050000C94D2000C94D2000C94D2000C94D200D8 |
:100060000C94D2000C94D2006E616E00696E660032 |
:1000700000407A10F35A00A0724E18090010A5D45F |
:10008000E80000E87648170000E40B54020000CABC |
:100090009A3B000000E1F505000080969800000002 |
:1000A00040420F000000A086010000001027000061 |
:1000B0000000E803000000006400000000000A00E7 |
:1000C000000000000100000000002C76D888DC67EA |
:1000D0004F0823DFC1DFAE59E1B1B796E5E3E45342 |
:1000E000C63AE651997696E8E6C28426EB898C9B5F |
:1000F00062ED407C6FFCEFBC9C9F40F2BAA56FA5FF |
:10010000F490055A2AF75C936B6CF9676DC11BFC80 |
:10011000E0E40D47FEF520E6B500D0ED902E03009B |
:10012000943577050080841E080000204E0A0000E8 |
:1001300000C80C333333330F986E12831141EF8DA7 |
:100140002114893BE65516CFFEE6DB18D1844B38E7 |
:100150001BF77C1D901DA4BBE424203284725E2218 |
:100160008100C9F124ECA1E53D2711241FBECFEF8A |
:10017000D8E0DEBFCDBF11E0A0E0B1E0E2E6F6E1FD |
:1001800002C005900D92A837B107D9F711E0A8E792 |
:10019000B1E001C01D92A43DB107E1F70E94C40384 |
:1001A0000C942F0B0C940000806828988EBD0DB421 |
:1001B00007FEFDCF85E58EBD0DB407FEFDCF8EB5E4 |
:1001C000289A089585E58EBD0DB407FEFDCF8EB546 |
:1001D00008958EBD0DB407FEFDCF08958CB58061E6 |
:1001E0008CBD8CB5877F8CBD8CB58B7F8CBD8CB561 |
:1001F0008D7F8CBD8CB58E7F8CBD8DB581608DBDA6 |
:100200008CB580648CBD08951F93182F8A3019F423 |
:100210008DE00E9404018091C00085FFFCCF109307 |
:10022000C60080E090E01F9108958091C00087FF94 |
:10023000FCCF8091C60008958FEE84B98FEF87B907 |
:100240008EEF8AB989E691E09093D1018093D00135 |
:100250001092C50083E38093C40088E18093C100BD |
:1002600086E08093C20082E08093B10008959C01F3 |
:1002700081E007C087BB1092B200B89BFECF205030 |
:10028000314091E021303907A8F781E087BB822F08 |
:1002900081958093B200B89BFECF0895CF93DF93F2 |
:1002A000EC0105C088EE93E00E943701219720976A |
:1002B000C9F7DF91CF9108950F931F93062F182F41 |
:1002C0001F77289881E090E00E944E011EBD0DB47A |
:1002D00007FEFDCF81E090E00E944E010EBD0DB4FF |
:1002E00007FEFDCF81E090E00E944E01289A1F9109 |
:1002F0000F9108952F923F924F925F926F927F924B |
:100300008F929F92AF92BF92CF92DF92EF92FF9225 |
:100310000F931F9384E260E00E945C018AE090E00A |
:100320000E944E0180E00E94D4008093A20182E0EE |
:100330000E94D4008093B50184E00E94D400809391 |
:10034000B40186E00E94D4008093BF013091A201E5 |
:1003500020E09091B501290F311D3093CD012093FC |
:10036000CC013091B40120E0280F311D30938D0174 |
:1003700020938C0188E00E94D400809398018AE049 |
:100380000E94D4008093B20120919801332727FD69 |
:100390003095322F2227280F311D3093CA01209328 |
:1003A000C9018CE00E94D4008093B3018EE00E94CA |
:1003B000D4008093C8012091B301332727FD3095E5 |
:1003C000322F2227280F311D3093B9012093B80115 |
:1003D00080E10E94D4008093A80182E10E94D400B1 |
:1003E0008093BA012091A801332727FD3095322F41 |
:1003F0002227280F311D3093B1012093B00184E1F1 |
:100400000E94D40080939F0186E10E94D4008093D3 |
:10041000A10120919F01332727FD3095322F2227FC |
:10042000280F311D3093B7012093B60188E10E9457 |
:10043000D4008093CB018AE10E94D4008093A00174 |
:100440002091CB01332727FD3095322F2227280F0B |
:10045000311D3093AF012093AE018CE10E94D40096 |
:100460008093A9018EE10E94D4008093A701A090FF |
:10047000A901BB24A7FCB094BA2CAA24A80EB11CD5 |
:10048000B0929301A09292018091CC019091CD0104 |
:1004900006E0969587950A95E1F79093CD018093B4 |
:1004A000CC0180908C0190908D0116E096948794F9 |
:1004B0001A95E1F790928D0180928C011C014424E1 |
:1004C00055242091AE013091AF01442737FD40956E |
:1004D000542FC201B1010E94D3086093C4017093EC |
:1004E000C5018093C6019093C701E090B801F090D8 |
:1004F000B9010027F7FC0095102FBEE0EE0CFF1CA1 |
:10050000001F111FBA95D1F7E60EF71E081F191F1D |
:10051000AEE015950795F794E794AA95D1F7E09288 |
:100520008E01F0928F01009390011093910134019C |
:10053000882499242091B6013091B701442737FDD2 |
:100540004095542FC401B3010E94D3086093AA01BF |
:100550007093AB018093AC019093AD01FBE0EE0C86 |
:10056000FF1C001F111FFA95D1F76E0D7F1D801F14 |
:10057000911FEBE09595879577956795EA95D1F76B |
:1005800060937C0170937D0180937E0190937F0145 |
:10059000CC24B7FCC094DC2CC601B501A4019301A6 |
:1005A0000E94D3086093A3017093A4018093A501D6 |
:1005B0009093A601A090B001B090B101CC24B7FCFB |
:1005C000C094DC2CD594C794B794A794A0928801CA |
:1005D000B0928901C0928A01D0928B0120917C0156 |
:1005E00030917D0140917E0150917F01C201B101A6 |
:1005F0000E94D30860939B0170939C0180939D019E |
:1006000090939E01E090C901F090CA010027F7FC89 |
:100610000095102F4AE0EE0CFF1C001F111F4A9599 |
:10062000D1F7E60EF71E081F191F3AE0159507953A |
:10063000F794E7943A95D1F7E0928001F092810126 |
:100640000093820110938301C601B501A4019301B7 |
:100650000E94D30860939401709395018093960152 |
:10066000909397012AE0EE0CFF1C001F111F2A95A2 |
:10067000D1F7E092BB01F092BC010093BD01109351 |
:10068000BE01609378017093790180937A01909311 |
:100690007B016E0D7F1D801F911F609384017093FD |
:1006A0008501809386019093870120E030E240E04D |
:1006B00050E00E94F20830939A0120939901442758 |
:1006C00037FD4095542FCA01B9010E94E40728E87C |
:1006D00030E242E85DE30E94700820E030E048E448 |
:1006E00052E40E947E079B01AC012093C00130932D |
:1006F000C1014093C2015093C3011F910F91FF901C |
:10070000EF90DF90CF90BF90AF909F908F907F90B1 |
:100710006F905F904F903F902F900895FF920F93AE |
:100720001F93CF93DF938AE090E00E94950AFF2405 |
:10073000C0E0D1E00F2D10E08F2D0E94D40000D03A |
:1007400000D000D0EDB7FEB73196ADB7BEB7129668 |
:10075000DC93CE93119713830283848315820E94C6 |
:10076000800A077010708DB79EB706960FB6F89482 |
:100770009EBF0FBE8DBF0730110521F48AE090E0C7 |
:100780000E94950AF394D6CFCF93DF930E941C0169 |
:100790000E94EE00289A299A8CE091E00E949C0A1F |
:1007A000CAE5D1E08BE391E00E949C0A8091C000F1 |
:1007B00087FFFCCF8091C6008032A1F70E947A01AA |
:1007C00000D000D000D0EDB7FEB7D283C1836383E1 |
:1007D0007483858396830E94800A8DB79EB70696A0 |
:1007E0000FB6F8949EBF0FBE8DBFDCCFA1E1B0E085 |
:1007F000ECEFF3E00C940D093C017F876E876A01F2 |
:10080000FC0117821682838181FD03C06FEF7FEFA9 |
:100810006FC39E012F5F3F4F398B288BF3012381DC |
:10082000EE85FF8523FD859123FF8191FF87EE876C |
:10083000882309F45AC3853251F4EE85FF8523FDE0 |
:10084000859123FF8191FF87EE87853229F490E01F |
:10085000B3010E94540AE2CF982F10E08824992413 |
:100860001032B0F49B3269F09C3228F4903251F08F |
:10087000933271F40BC09D3239F0903349F411601A |
:1008800028C01260146025C0186023C0106121C008 |
:1008900017FD2AC0892F80538A3078F416FF06C0CE |
:1008A000FAE09F9E902C1124980E13C03AE0839E8C |
:1008B000802C1124880E10620CC09E3221F416FD8B |
:1008C00014C3106406C09C3611F4106802C0983638 |
:1008D00059F4EE85FF8523FD959123FF9191FF87C4 |
:1008E000EE87992309F0BCCF892F8554833020F4FB |
:1008F000812F8061905E07C0892F8556833008F074 |
:100900009FC1812F8F7E86FD02C076E0972E6FE318 |
:10091000F62EF822953619F4F0E4FF2A07C0963631 |
:1009200019F420E8F22A02C091109A94F7FE0AC046 |
:100930003BE3391518F45CE3B52E02C0B92CB3942F |
:1009400027E009C047E0491520F4BB2447E0942E76 |
:10095000F7CF292DBB24C60104969D878C87F6010D |
:100960006081718182819381AE014F5F5F4F0B2D5A |
:100970000E9466096C010981202E332400FF04C007 |
:1009800003FD02C01DE209C0F1FE02C01BE205C06A |
:10099000F2FC02C010E001C010E2C1018C70907046 |
:1009A000892BB9F1112311F483E001C084E088158B |
:1009B00010F088240AC0881AF3FC07C080E290E097 |
:1009C000B3010E94540A8A94C9F7112329F0812F98 |
:1009D00090E0B3010E94540A23FE03C008E610E031 |
:1009E0000EC00CE610E00BC0E114F10409F08052D7 |
:1009F00090E0B3010E94540A0F5F1F4F05C0EF2C17 |
:100A0000FF24F0E1EF22FF24F8018491882361F7AD |
:100A100014C1F7FE12C0BC0C24FE04C08A818133CD |
:100A200009F4BA941B141CF0BB24B3942DC0F8E055 |
:100A3000FB1550F538E0B32E27C0F6FC25C0892DF4 |
:100A400090E08C159D054CF02CEFC2162FEFD206CE |
:100A500024F030E8F32A01C09A94992049F0E2E0AA |
:100A6000F0E0EC0FFD1FE90DF11D80818033A1F353 |
:100A7000F7FE0AC0B92CB394892D90E0C816D906A8 |
:100A800014F0992401C09C18F7FC03C025E030E065 |
:100A900009C01C141D041CF021E030E003C09601C5 |
:100AA0002F5F3F4F112311F02F5F3F4F992029F007 |
:100AB000892D90E00196280F391F882D90E0281786 |
:100AC000390714F0882401C0821A4F2C5524C20122 |
:100AD00089709070892B39F008C080E290E0B301F2 |
:100AE0000E94540A8A948820C1F7112329F0812F8B |
:100AF00090E0B3010E94540A43FE07C008C080E39F |
:100B000090E0B3010E94540A8A948820C1F7F7FE4E |
:100B100046C08601D7FE02C000E010E076010894CE |
:100B2000E11CF11CE01AF10A41E050E04C0F5D1F9E |
:100B3000E40EF51E26014B185108892D90E0AA24D9 |
:100B4000BB24A81AB90A5FEF0F3F150729F48EE2FC |
:100B500090E0B3010E94540AC016D10634F040164A |
:100B600051061CF4F701808101C080E30150104060 |
:100B70000894E11CF11C0A151B052CF090E0B30150 |
:100B80000E94540AE0CF0C151D0539F49A81963362 |
:100B900018F4953311F424FE81E390E04BC08A8170 |
:100BA000813309F00F7E90E0B3010E94540A99202E |
:100BB000A1F08EE290E0B3010E94540A12E0E1E05D |
:100BC000F0E0EC0FFD1FE10FF11D1F5F808190E051 |
:100BD000B3010E94540A9A9491F744FC03C085E63D |
:100BE00090E002C085E490E0B3010E94540AD7FC73 |
:100BF00005C0C114D10441F404FF06C0D094C194CF |
:100C0000D108D3948DE201C08BE290E0B3010E9441 |
:100C1000540A80E305C08F5F26EF3FEFC20ED31E5C |
:100C20003AE0C316D104BCF790E0B3010E94540A25 |
:100C3000C601C096B3010E94540ACC84DD8452C11F |
:100C4000933631F0933799F0933509F059C023C0AA |
:100C5000F601808189835E010894A11CB11C22E009 |
:100C600030E0C20ED31E21E0E22EF12C12C0F601BC |
:100C7000A080B18016FD03C06FEF7FEF02C0692D29 |
:100C800070E022E030E0C20ED31EC5010E94490A86 |
:100C90007C011F7713C0F601A080B18016FD03C050 |
:100CA0006FEF7FEF02C0692D70E022E030E0C20EEE |
:100CB000D31EC5010E943E0A7C01106813FF07C0C5 |
:100CC0001BC080E290E0B3010E94540A8A94882DF0 |
:100CD00090E0E816F906A8F30FC0F50117FD85911D |
:100CE00017FF81915F0190E0B3010E94540A8110C7 |
:100CF0008A940894E108F108E114F10471F7F2C054 |
:100D0000943611F0993689F517FF08C0F601208155 |
:100D100031814281538184E090E00AC0F6018081F4 |
:100D200091819C01442737FD4095542F82E090E04B |
:100D3000C80ED91E9FE6F92EF12257FF09C0509523 |
:100D40004095309521953F4F4F4F5F4F90E8F92ADE |
:100D5000CA01B901AE014F5F5F4F2AE030E00E9447 |
:100D6000D10AE82EE889EE1A41C0953721F41F7E9A |
:100D70002AE030E01CC0197F9F3661F0903720F4E4 |
:100D8000983509F0B2C00FC0903739F0983709F0A4 |
:100D9000ACC004C028E030E00AC0106114FD14604B |
:100DA00020E130E004C014FD166020E132E017FFBE |
:100DB00008C0F601608171818281938144E050E036 |
:100DC00008C0F60180819181BC0180E090E042E0A2 |
:100DD00050E0C40ED51EAE014F5F5F4F0E94D10A96 |
:100DE000E82E5889E51A8FE7F82EF122F6FE0BC09F |
:100DF0008EEFF822E91438F4F4FE07C0F2FC05C0C7 |
:100E00009FEEF92202C01E2D01C0192DF4FE0DC067 |
:100E1000FE01EE0DF11D8081803319F4E9EEFE2212 |
:100E200008C01F5FF2FE05C003C08F2D867809F051 |
:100E30001F5F0F2DF3FC14C0F0FE0FC0181510F04B |
:100E40009E2C0BC09E2C980C911A182D06C080E287 |
:100E500090E0B3010E94540A1F5F1815C0F304C04C |
:100E6000181510F4811A01C0882404FF0FC080E314 |
:100E700090E0B3010E94540A02FF1DC001FD03C0AF |
:100E800088E790E00EC088E590E00BC0802F867860 |
:100E900091F001FF02C08BE201C080E2F7FC8DE21D |
:100EA00090E0B3010E94540A06C080E390E0B301D1 |
:100EB0000E94540A9A94E914C0F3EA94E1E0F0E045 |
:100EC000EC0FFD1FEE0DF11D808190E0B3010E943B |
:100ED000540AEE2091F706C080E290E0B3010E9430 |
:100EE000540A8A948820C1F799CCF30166817781EE |
:100EF000CB016196E2E10C9429095058BB27AA273F |
:100F00000ED0B4C0A5D030F0AAD020F031F49F3F6D |
:100F100011F41EF49AC00EF4E095E7FB90C0E92F9F |
:100F2000B6D080F3BA17620773078407950718F0E5 |
:100F300071F49EF5CEC00EF4E0950B2EBA2FA02DC5 |
:100F40000B01B90190010C01CA01A0011124FF2776 |
:100F5000591B99F0593F50F4503E68F11A16F04071 |
:100F6000A22F232F342F4427585FF3CF4695379570 |
:100F70002795A795F0405395C9F77EF41F16BA0B35 |
:100F8000620B730B840BBAF09150A1F0FF0FBB1FE3 |
:100F9000661F771F881FC2F70EC0BA0F621F731F2C |
:100FA000841F48F4879577956795B795F7959E3F89 |
:100FB00008F0B3CF9395880F08F09927EE0F979517 |
:100FC00087950895E89409C097FB3EF49095809525 |
:100FD000709561957F4F8F4F9F4F9923A9F0F92FFF |
:100FE00096E9BB279395F695879577956795B7957D |
:100FF000F111F8CFFAF4BB0F11F460FF1BC06F5F63 |
:101000007F4F8F4F9F4F16C0882311F096E911C074 |
:10101000772321F09EE8872F762F05C0662371F095 |
:1010200096E8862F70E060E02AF09A95660F771FA9 |
:10103000881FDAF7880F9695879597F9089597F99D |
:101040009F6780E870E060E008959FEF80EC08956E |
:1010500000240A9416161706180609060895002497 |
:101060000A9412161306140605060895092E039411 |
:10107000000C11F4882352F0BB0F40F4BF2B11F485 |
:1010800060FF04C06F5F7F4F8F4F9F4F089557FDE4 |
:101090009058440F551F59F05F3F71F04795880FE6 |
:1010A00097FB991F61F09F3F79F08795089512167D |
:1010B00013061406551FF2CF4695F1DF08C0161629 |
:1010C00017061806991FF1CF8695710561050894DA |
:1010D0000895E894BB2766277727CB0197F90895F1 |
:1010E0000BD0C4CFB5DF28F0BADF18F0952309F094 |
:1010F000A6CFABCF1124EECFCADFA0F3959FD1F3DB |
:10110000950F50E0551F629FF001729FBB27F00DB5 |
:10111000B11D639FAA27F00DB11DAA1F649F66270A |
:10112000B00DA11D661F829F2227B00DA11D621F59 |
:10113000739FB00DA11D621F839FA00D611D221F13 |
:10114000749F3327A00D611D231F849F600D211DF7 |
:10115000822F762F6A2F11249F5750408AF0E1F09A |
:1011600088234AF0EE0FFF1FBB1F661F771F881FE3 |
:1011700091505040A9F79E3F510570F060CFAACF23 |
:101180005F3FECF3983EDCF3869577956795B795CE |
:10119000F795E7959F5FC1F7FE2B880F911D9695F8 |
:1011A000879597F90895629FD001739FF001829F00 |
:1011B000E00DF11D649FE00DF11D929FF00D839FE6 |
:1011C000F00D749FF00D659FF00D9927729FB00D83 |
:1011D000E11DF91F639FB00DE11DF91FBD01CF0196 |
:1011E0001124089597FB092E05260ED057FD04D033 |
:1011F0004BD00AD0001C38F450954095309521957D |
:101200003F4F4F4F5F4F0895F6F79095809570953B |
:1012100061957F4F8F4F9F4F08952F923F924F922E |
:101220005F926F927F928F929F92AF92BF92CF9276 |
:10123000DF92EF92FF920F931F93CF93DF93CDB77F |
:10124000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFF7 |
:1012500009942A88398848885F846E847D848C84C8 |
:101260009B84AA84B984C884DF80EE80FD800C81D1 |
:101270001B81AA81B981CE0FD11D0FB6F894DEBFB4 |
:101280000FBECDBFED010895A1E21A2EAA1BBB1B14 |
:10129000FD010DC0AA1FBB1FEE1FFF1FA217B30742 |
:1012A000E407F50720F0A21BB30BE40BF50B661F58 |
:1012B000771F881F991F1A9469F76095709580951C |
:1012C00090959B01AC01BD01CF010895283008F035 |
:1012D00027E03327DA01990F311D87FD91600096D1 |
:1012E0006105710539F432602E5F3D9330E32A9534 |
:1012F000E1F708959F3F30F080387105610509F0EE |
:101300003C5F3C5F3D93913008F08068911DDF9316 |
:10131000CF931F930F93FF92EF92192F987F96957B |
:10132000E92F96959695E90FFF27E653FF4F9927EA |
:101330003327EE24FF24A701E701059008940794C2 |
:1013400028F4360FE71EF81E491F511D660F771F40 |
:10135000881F991F0694A1F70590079428F4E70EBB |
:10136000F81E491F561FC11D770F881F991F661F42 |
:101370000694A1F70590079428F4F80E491F561F0C |
:10138000C71FD11D880F991F661F771F0694A1F7ED |
:101390000590079420F4490F561FC71FD81F990FB7 |
:1013A000661F771F881F0694A9F784911095177000 |
:1013B00041F0D695C79557954795F794E7941A95B8 |
:1013C000C1F7E0E7F0E068941590159135916591CB |
:1013D000959105907FE27395E118F10A430B560B46 |
:1013E000C90BD009C0F7E10CF11E431F561FC91FDE |
:1013F000D01D7EF4703311F48A95E6CFE894015045 |
:1014000030F0080F0AF40027021708F4202F239564 |
:10141000022F7A3328F079E37D932A95E9F710C0FB |
:101420007D932A9589F60694979567953795179534 |
:101430001794E118F10A430B560BC90BD00998F029 |
:1014400023957E9173957A3308F070E37C93201393 |
:10145000B8F77E9170617D9330F0839571E37D9351 |
:1014600070E32A95E1F71124EF90FF900F911F91FF |
:10147000CF91DF91992787FD90950895FC01059004 |
:10148000615070400110D8F7809590958E0F9F1F86 |
:101490000895FC016150704001900110D8F78095CB |
:1014A00090958E0F9F1F08950F931F93CF93DF93F7 |
:1014B0008C01EB018B8181FF1BC082FF0DC02E814F |
:1014C0003F818C819D812817390764F4E881F98177 |
:1014D0000193F983E88306C0E885F985802F099593 |
:1014E000892B31F48E819F8101969F838E8302C068 |
:1014F0000FEF1FEFC801DF91CF911F910F9108955A |
:10150000A0E0B0E0E6E8FAE00C941D09FE01359693 |
:10151000619171918091D0019091D101AF010E94B0 |
:10152000F6032096E2E00C9439096091D0017091A5 |
:10153000D1010E94540A08950F931F93CF93DF9314 |
:101540008C01E091D001F091D101838181FF21C014 |
:10155000C0E0D0E00DC0E091D001F091D101208534 |
:101560003185BF01F9010995892B11F0CFEFDFEF2C |
:10157000F80181918F01882371F7E091D001F091FA |
:10158000D101208531858AE0BF01F9010995892BB8 |
:1015900011F0CFEFDFEFCE01DF91CF911F910F91CF |
:1015A0000895FA01AA27283051F1203181F1E894F9 |
:1015B0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E046 |
:1015C0003ED0B4E03CD0670F781F891F9A1FA11D41 |
:1015D000680F791F8A1F911DA11D6A0F711D811D42 |
:1015E000911DA11D20D009F468943F912AE0269F07 |
:1015F00011243019305D3193DEF6CF010895462F66 |
:101600004770405D4193B3E00FD0C9F7F6CF462F46 |
:101610004F70405D4A3318F0495D31FD40524193AF |
:1016200002D0A9F7EACFB4E0A6959795879577956C |
:101630006795BA95C9F700976105710508959B01F3 |
:10164000AC010A2E06945795479537952795BA957C |
:10165000C9F7620F731F841F951FA01D0895F8948A |
:02166000FFCFBA |
:10166200307825783A203078257809000A2A2A2A03 |
:101672002A2A2A2A2A2A2A2A2A2A2A2A4D50523150 |
:101682003135413120546573742A2A2A2A2A2A2A9A |
:101692002A2A2A2A2A2A2A2A2A0A000A5072657320 |
:1016A2007320737061636520746F207072696E7449 |
:1016B200207072657373757265005072657373750D |
:1016C2007265203D2025660A00000000020000002D |
:0816D20000040100000000000B |
:00000001FF |