very simple demo for other board

using efm32lib and hacked-together makefiles
This commit is contained in:
chrysn 2012-04-17 00:07:26 +02:00
parent 0e62b15125
commit fac680ecf4
8 changed files with 171 additions and 0 deletions

View File

@ -0,0 +1,49 @@
##
## This file is part of the libopencm3 project.
##
## Copyright (C) 2012 chrysn <chrysn@fsfe.org>
##
## This library 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 3 of the License, or
## (at your option) any later version.
##
## This library 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 library. If not, see <http://www.gnu.org/licenses/>.
##
MCU = EFM32TG840F32
FAMILY = GECKO
include $(dir $(lastword $(MAKEFILE_LIST)))../Makefile.include
# FIXME: i'd much rather have this in a heredoc, but heredocs are not that easy
# in makefiles. furthermore, this isn't caught by the clean target. actually,
# i'd very much prefer using openocd anyway, this would also get rid of the
# Default.ini and JLink.log files jlink.sh drops.
# just the next hack: jlink, as shipped in energy micro's
# energyAwareToolsBeta_30082011.tgz, needs its LD_LIBRARY_PATH explicitly set.
# it provides a wrapper script, but that fails to pass on arguments. set this
# path to the energymicro folder extracted from the tools, and we'll take care
# of the test
JLINKDIR = ${HOME}/energymicro/energymicro
$(BINARY)-upload.sh:
rm -f "$@"
echo "exec device = EFM32G880G128" >> "$@"
echo "exec EnableFlashDL" >> "$@"
echo "h" >> "$@"
echo "loadbin ${BINARY}.bin 0" >> "$@"
echo "r" >> "$@"
echo "go" >> "$@"
echo "q" >> "$@"
chmod +x "$@"
upload: $(BINARY)-upload.sh $(BINARY).bin
LD_LIBRARY_PATH=$(JLINKDIR)/lib/ $(JLINKDIR)/bin/JLinkExe "$<" || echo "JLink exited with non-zero exit status, but that's normal."

View File

@ -0,0 +1,14 @@
========================
EM-32G880F128-H Examples
========================
Examples in this directory are designed to be run on the OlimexEM-32G880F128-H
header breakout board, which is based on the EFM32G880F128 MCU.
The board is equipped with two user LEDs, a user button, reset button, power
supply, 20 pin debug connector and 10 pin UEXT connector (Olimex' open
versatile microcontroller connector).
The build system is designed to upload programs using the EFM32-TG-STK3300
board's external Segger debugger, which has to be configured for external
operation beforehand.

View File

@ -0,0 +1,26 @@
##
## This file is part of the libopencm3 project.
##
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
## Copyright (C) 2012 chrysn <chrysn@fsfe.org>
##
## This library 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 3 of the License, or
## (at your option) any later version.
##
## This library 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 library. If not, see <http://www.gnu.org/licenses/>.
##
BINARY = miniblink
OBJS += efm32_gpio.o efm32_cmu.o
CFLAGS += -I/tmp/EFM32_CMSIS_2.4.1/efm32lib/inc/ -I /tmp/EFM32_CMSIS_2.4.1/CMSIS/CM3/DeviceSupport/EnergyMicro/EFM32/ -DEFM32G880F128 -I.
include ../Makefile.include

View File

@ -0,0 +1,9 @@
====================================================
EM32-32G880F128-H Examples miniblink-efm32lib README
====================================================
This is a port of the miniblink example to the efm32lib library.
It's intended for the EM32-32G880F128-H eval board. It should blink LED1 on the
board, just as the original miniblink example does.

View File

@ -0,0 +1 @@
../../efm32-tg-stk3300/miniblink-efm32lib/core_cm3.h

View File

@ -0,0 +1 @@
/tmp/EFM32_CMSIS_2.4.1/efm32lib/src/efm32_cmu.c

View File

@ -0,0 +1 @@
/tmp/EFM32_CMSIS_2.4.1/efm32lib/src/efm32_gpio.c

View File

@ -0,0 +1,70 @@
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
* Copyright (C) 2012 chrysn <chrysn@fsfe.org>
*
* This library 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 3 of the License, or
* (at your option) any later version.
*
* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
*/
#include <efm32_cmu.h>
#include <efm32_gpio.h>
void led_setup(void);
void led_toggle(void);
/** @file
* Minimal example for making the User LED of the olimex EM32-32G880F128-H eval
* board blink.
*/
/**
* Toggle the User LED in an infinite loop, with time between the toggling
* determined by a busy loop stupidly counting up.
*/
int main(void)
{
int x;
led_setup();
while(1) {
for(x = 0; x < 200000; ++x) asm("mov r0,r0"); /* no-op, prevent compiler from optimizing this away */
led_toggle();
};
}
/**
* Enable GPIO, and set up port E1 as an output pin, and inverted.
*/
void led_setup(void)
{
// Before GPIO works, according to d0034_efm32tg_reference_manual.pdf
// note in section 28.3.7, we'll have to enable GPIO in CMU_HFPERCLKEN0
CMU->HFPERCLKEN0 |= _CMU_HFPERCLKEN0_GPIO_MASK;
// The User LED is connected to PD7 to the plus side of the LED
// according to t0011_efm32_tiny_gecko_stk_user_manual.pdf figures 16.2
// and 16.3 (called UIF_LED0)
GPIO_PinModeSet(gpioPortE, 1, gpioModePushPull, 0);
}
void led_toggle(void)
{
GPIO_PinOutToggle(gpioPortE, 1);
}