Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
fwatch
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
8
Issues
8
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
fwatch
Commits
bc9d1d27
Commit
bc9d1d27
authored
Aug 14, 2014
by
Theodor-Adrian Stana
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Re-) started work on GPS
parent
ab5c1654
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
352 additions
and
0 deletions
+352
-0
Makefile
sw/gps/Makefile
+221
-0
main.c
sw/gps/main.c
+131
-0
No files found.
sw/gps/Makefile
0 → 100644
View file @
bc9d1d27
####################################################################
# Makefile #
####################################################################
.SUFFIXES
:
#
ignore builtin rules
.PHONY
:
all debug release clean
####################################################################
# Definitions #
####################################################################
# uniq is a function which remove duplicate elements from a list
uniq
=
$
(
strip
$
(
if
$1
,
$
(
firstword
$1
)
\
$
(
call
uniq
,
$
(
filter-out
$
(
firstword
$1
)
,
$1
))))
DEVICE
=
EFM32GG330F1024
PROJECTNAME
=
gps
OOCD_IFACE
?=
stlink-v2-1
OBJ_DIR
=
build
EXE_DIR
=
exe
LST_DIR
=
lst
####################################################################
# Definitions of toolchain. #
# You might need to do changes to match your system setup #
####################################################################
# Change path to the tools according to your system configuration
# DO NOT add trailing whitespace chars, they do matter !
WINDOWSCS
?=
GNU Tools ARM Embedded
\4
.8 2013q4
LINUXCS
?=
/opt/gcc-arm-none-eabi-4_8-2014q1
RMDIRS
:=
rm
-rf
RMFILES
:=
rm
-rf
ALLFILES
:=
/
*
.
*
NULLDEVICE
:=
/dev/null
SHELLNAMES
:=
$(ComSpec)$(COMSPEC)
# Try autodetecting the environment
ifeq
($(SHELLNAMES),)
# Assume we are making on a Linux platform
TOOLDIR
:=
$(LINUXCS)
else
QUOTE
:=
"
ifneq
($(COMSPEC),)
# Assume we are making on a mingw/msys/cygwin platform running on Windows
# This is a convenient place to override TOOLDIR, DO NOT add trailing
# whitespace chars, they do matter !
TOOLDIR
:=
$(PROGRAMFILES)
/
$(WINDOWSCS)
ifeq
($(findstring
cygdrive,$(shell
set)),)
# We were not on a cygwin platform
NULLDEVICE
:=
NUL
endif
else
# Assume we are making on a Windows platform
# This is a convenient place to override TOOLDIR, DO NOT add trailing
# whitespace chars, they do matter !
SHELL
:=
$(SHELLNAMES)
TOOLDIR
:=
$(ProgramFiles)
/
$(WINDOWSCS)
RMDIRS
:=
rd /s /q
RMFILES
:=
del /s /q
ALLFILES
:=
\*
.*
NULLDEVICE
:=
NUL
endif
endif
# Create directories and do a clean which is compatible with parallell make
$(shell
mkdir
$(OBJ_DIR)>$(NULLDEVICE)
2>&1)
$(shell
mkdir
$(EXE_DIR)>$(NULLDEVICE)
2>&1)
$(shell
mkdir
$(LST_DIR)>$(NULLDEVICE)
2>&1)
ifeq
(clean,$(findstring
clean,
$(MAKECMDGOALS)))
ifneq
($(filter
$(MAKECMDGOALS),all
debug
release),)
$(shell
$(RMFILES)
$(OBJ_DIR)$(ALLFILES)>$(NULLDEVICE)
2>&1)
$(shell
$(RMFILES)
$(EXE_DIR)$(ALLFILES)>$(NULLDEVICE)
2>&1)
$(shell
$(RMFILES)
$(LST_DIR)$(ALLFILES)>$(NULLDEVICE)
2>&1)
endif
endif
CC
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-gcc
$(QUOTE)
LD
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-ld
$(QUOTE)
AR
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-ar
$(QUOTE)
OBJCOPY
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-objcopy
$(QUOTE)
DUMP
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-objdump
$(QUOTE)
SIZE
=
$(QUOTE)$(TOOLDIR)
/bin/arm-none-eabi-size
$(QUOTE)
####################################################################
# Flags #
####################################################################
# -MMD : Don't generate dependencies on system header files.
# -MP : Add phony targets, useful when a h-file is removed from a project.
# -MF : Specify a file to write the dependencies to.
DEPFLAGS
=
-MMD -MP -MF
$
(@:.o=.d)
#
# Add -Wa,-ahld=$(LST_DIR)/$(@F:.o=.lst) to CFLAGS to produce assembly list files
#
override
CFLAGS
+=
-D
$(DEVICE)
-Wall -Wextra -mcpu=cortex-m3 -mthumb
\
-mfix-cortex-m3-ldrd -ffunction-sections
\
-fdata-sections -fomit-frame-pointer -DDEBUG_EFM_USER
\
$(DEPFLAGS)
override
ASMFLAGS
+=
-x assembler-with-cpp -D
$(DEVICE)
-Wall -Wextra -mcpu=cortex-m3 -mthumb -DDEBUG_EFM_USER
#
# NOTE: The -Wl,--gc-sections flag may interfere with debugging using gdb.
#
override
LDFLAGS
+=
-Xlinker -Map=
$(LST_DIR)
/
$(PROJECTNAME)
.map -mcpu=cortex-m3
\
-mthumb -T../common/Device/EnergyMicro/EFM32GG/Source/GCC/efm32gg.ld
\
-Wl,--gc-sections
LIBS
=
-Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
INCLUDEPATHS
+=
\
-I../src
\
-I../src
\
-I../common/CMSIS/Include
\
-I../common/Device/EnergyMicro/EFM32GG/Include
\
-I../common/emlib/inc
\
-I../common/usb
\
-I../common/usb/inc
\
-I../usb/inc
####################################################################
# Files #
####################################################################
C_SRC
+=
\
../common/Device/EnergyMicro/EFM32GG/Source/system_efm32gg.c
\
../common/emlib/src/em_assert.c
\
../common/emlib/src/em_cmu.c
\
../common/emlib/src/em_dma.c
\
../common/emlib/src/em_ebi.c
\
../common/emlib/src/em_emu.c
\
../common/emlib/src/em_gpio.c
\
../common/emlib/src/em_int.c
\
../common/emlib/src/em_system.c
\
../common/emlib/src/em_timer.c
\
../common/emlib/src/em_leuart.c
\
../common/usb/usbdesc.c
\
../common/usb/src/em_usbd.c
\
../common/usb/src/em_usbdch9.c
\
../common/usb/src/em_usbhal.c
\
../common/usb/src/em_usbdep.c
\
../common/usb/src/em_usbdint.c
\
../common/usb/src/em_usbtimer.c
\
../src/main.c
s_SRC
+=
S_SRC
+=
../common/Device/EnergyMicro/EFM32GG/Source/GCC/startup_efm32gg.S
####################################################################
# Rules #
####################################################################
C_FILES
=
$
(notdir
$(C_SRC)
)
S_FILES
=
$
(notdir
$(S_SRC)
$(s_SRC)
)
#make list of source paths, uniq removes duplicate paths
C_PATHS
=
$
(call uniq,
$
(dir
$(C_SRC)
) )
S_PATHS
=
$
(call uniq,
$
(dir
$(S_SRC)
$(s_SRC)
) )
C_OBJS
=
$
(addprefix
$(OBJ_DIR)
/,
$
(C_FILES:.c=.o))
S_OBJS
=
$
(if
$(S_SRC)
,
$
(addprefix
$(OBJ_DIR)
/,
$
(S_FILES:.S=.o)))
s_OBJS
=
$
(if
$(s_SRC)
,
$
(addprefix
$(OBJ_DIR)
/,
$
(S_FILES:.s=.o)))
C_DEPS
=
$
(addprefix
$(OBJ_DIR)
/,
$
(C_FILES:.c=.d))
OBJS
=
$(C_OBJS)
$(S_OBJS)
$(s_OBJS)
vpath
%.c
$(C_PATHS)
vpath
%.s
$(S_PATHS)
vpath
%.S
$(S_PATHS)
# Default build is debug build
all
:
debug
debug
:
CFLAGS += -DDEBUG -O0 -g
debug
:
$(EXE_DIR)/$(PROJECTNAME).bin
release
:
CFLAGS += -DNDEBUG -O0 -g
release
:
$(EXE_DIR)/$(PROJECTNAME).bin
# Create objects from C SRC files
$(OBJ_DIR)/%.o
:
%.c
@
echo
"Building file:
$<
"
$(CC)
$(CFLAGS)
$(INCLUDEPATHS)
-c
-o
$@
$<
# Assemble .s/.S files
$(OBJ_DIR)/%.o
:
%.s
@
echo
"Assembling
$<
"
$(CC)
$(ASMFLAGS)
$(INCLUDEPATHS)
-c
-o
$@
$<
$(OBJ_DIR)/%.o
:
%.S
@
echo
"Assembling
$<
"
$(CC)
$(ASMFLAGS)
$(INCLUDEPATHS)
-c
-o
$@
$<
# Link
$(EXE_DIR)/$(PROJECTNAME).out
:
$(OBJS)
@
echo
"Linking target:
$@
"
$(CC)
$(LDFLAGS)
$(OBJS)
$(LIBS)
-o
$(EXE_DIR)
/
$(PROJECTNAME)
.out
# Create binary file
$(EXE_DIR)/$(PROJECTNAME).bin
:
$(EXE_DIR)/$(PROJECTNAME).out
@
echo
"Creating binary file"
$(OBJCOPY)
-O
binary
$(EXE_DIR)
/
$(PROJECTNAME)
.out
$(EXE_DIR)
/
$(PROJECTNAME)
.bin
# Uncomment next line to produce assembly listing of entire program
# $(DUMP) -h -S -C $(EXE_DIR)/$(PROJECTNAME).out>$(LST_DIR)/$(PROJECTNAME)out.lst
$(SIZE)
$<
clean
:
ifeq
($(filter
$(MAKECMDGOALS),all
debug
release),)
$(RMDIRS)
$(OBJ_DIR)
$(LST_DIR)
$(EXE_DIR)
endif
flash
:
$(EXE_DIR)/$(PROJECTNAME).bin
openocd
-s
../common/openocd
-f
interface/
$(OOCD_IFACE)
.cfg
-f
init.cfg
-c
"program
$(EXE_DIR)
/
$(PROJECTNAME)
.bin 0 verify reset"
# include auto-generated dependency files (explicit rules)
ifneq
(clean,$(findstring
clean,
$(MAKECMDGOALS)))
-include
$(C_DEPS)
endif
sw/gps/main.c
0 → 100644
View file @
bc9d1d27
/*
*==============================================================================
* CERN (BE-CO-HT)
* Source file for Main
*==============================================================================
*
* author: Theodor Stana (t.stana@cern.ch)
*
* date of creation: 2014-08-14
*
* version: 1.0
*
* description:
*
* dependencies:
*
* references:
*
*==============================================================================
* GNU LESSER GENERAL PUBLIC LICENSE
*==============================================================================
* This source file is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version. This source 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 Lesser General Public License for more details. You should have
* received a copy of the GNU Lesser General Public License along with this
* source; if not, download it from http://www.gnu.org/licenses/lgpl-2.1.html
*==============================================================================
* last changes:
* 2014-08-14 Theodor Stana File created
*==============================================================================
* TODO: -
*==============================================================================
*/
#include "em_device.h"
#include "em_cmu.h"
#include "em_usb.h"
#include "em_leuart.h"
#include "em_gpio.h"
#include "usbdesc.h"
#define RXBUFSIZE 8
volatile
char
rxbuf
[
RXBUFSIZE
]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
};
volatile
char
idx
=
0
;
static
void
gps_init
();
void
LEUART0_IRQHandler
()
{
if
(
LEUART0
->
IF
&
LEUART_IF_RXDATAV
)
{
rxbuf
[
idx
++
]
=
LEUART_Rx
(
LEUART0
);
if
(
idx
==
RXBUFSIZE
)
{
idx
=
0
;
USBD_Write
(
USBDESC_EP_DATA_OUT
,
rxbuf
,
RXBUFSIZE
,
NULL
);
}
}
}
int
main
()
{
CMU_ClockSelectSet
(
cmuClock_HF
,
cmuSelect_HFXO
);
CMU_ClockEnable
(
cmuClock_HFPER
,
true
);
CMU_ClockEnable
(
cmuClock_GPIO
,
true
);
USBD_Init
(
&
initstruct
);
gps_init
();
int
i
;
for
(;;)
{
}
return
0
;
}
static
void
gps_init
()
{
int
i
;
GPIO_PinModeSet
(
gpioPortE
,
11
,
gpioModePushPull
,
0
);
GPIO_PinModeSet
(
gpioPortE
,
12
,
gpioModePushPull
,
0
);
/*-------------------------------------------------*
* ON_OFF pulse
*-------------------------------------------------*/
GPIO_PinModeSet
(
gpioPortE
,
13
,
gpioModePushPull
,
0
);
GPIO_PinOutSet
(
gpioPortE
,
13
);
GPIO_PinOutSet
(
gpioPortE
,
12
);
for
(
i
=
0
;
i
<
100000
;
i
++
)
;
GPIO_PinOutClear
(
gpioPortE
,
13
);
GPIO_PinOutClear
(
gpioPortE
,
12
);
/*-------------------------------------------------*
* LEUART0 config
*-------------------------------------------------*/
LEUART_TypeDef
*
leuart
=
LEUART0
;
LEUART_Init_TypeDef
init
=
LEUART_INIT_DEFAULT
;
/* To avoid false start, configure output as high */
GPIO_PinModeSet
(
gpioPortE
,
14
,
gpioModePushPull
,
1
);
GPIO_PinModeSet
(
gpioPortE
,
15
,
gpioModeInput
,
0
);
CMU_ClockEnable
(
cmuClock_CORELE
,
true
);
CMU_ClockSelectSet
(
cmuClock_LFB
,
cmuSelect_LFXO
);
CMU_ClockEnable
(
cmuClock_LEUART0
,
true
);
CMU_ClockDivSet
(
cmuClock_LEUART0
,
cmuClkDiv_1
);
init
.
enable
=
leuartDisable
;
init
.
baudrate
=
4800
;
init
.
databits
=
leuartDatabits8
;
init
.
stopbits
=
leuartStopbits2
;
LEUART_Init
(
leuart
,
&
init
);
leuart
->
ROUTE
=
LEUART_ROUTE_RXPEN
|
LEUART_ROUTE_TXPEN
|
LEUART_ROUTE_LOCATION_LOC2
;
LEUART_IntClear
(
leuart
,
LEUART_IF_RXDATAV
);
NVIC_ClearPendingIRQ
(
LEUART0_IRQn
);
LEUART_IntEnable
(
leuart
,
LEUART_IF_RXDATAV
);
NVIC_EnableIRQ
(
LEUART0_IRQn
);
LEUART_Enable
(
leuart
,
leuartEnable
);
GPIO_PinOutSet
(
gpioPortE
,
11
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment