Commit ef79ca3b authored by mntmn's avatar mntmn
Browse files

WIP add reform2-lpc-fw based on microbuilder

parent b5ec1ddf
......@@ -16,4 +16,5 @@ build
_autosave*
.DS_Store
a.out
bin
This diff is collapsed.
bin
*.o
tests_host
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>LPC11U_LPC13U_Codebase</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildLocation</key>
<value>${workspace_loc:/LPC11U_LPC13U_Codebase/Debug}</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<filteredResources>
<filter>
<id>1352877696259</id>
<name>src/drivers/rf/bluetooth/nrf8001</name>
<type>6</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-data_queue.*</arguments>
</matcher>
</filter>
<filter>
<id>1352877696283</id>
<name>src/drivers/rf/bluetooth/nrf8001</name>
<type>6</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-hid_application.*</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
language: c
compiler:
- gcc
script: cd tests_host/ && rake test:all
\ No newline at end of file
Software License Agreement (BSD License)
Unless otherwise noted, Copyright (c) 2013 Kevin Townsend (microBuilder.eu)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
##########################################################################
# User configuration and firmware specific object files
##########################################################################
FILENAME=firmware
# See projectconfig.h for a list of valid BOARD options!
BOARD=CFG_BRD_REFORM2
# Set TARGET to 'lpc11u' or 'lpc13u' depending on the target MCU
TARGET = lpc11u
ifeq (lpc11u,$(TARGET))
CORE = cortex-m0
LDSCRIPT = cmsis/lpc11u24.ld
# LDSCRIPT = cmsis/lpc11u37.ld
else
CORE = cortex-m3
LDSCRIPT = cmsis/lpc1347.ld
endif
# Set OPTIMIZATION to '0', '1', '2', '3' or 's'
OPTIMIZATION = s
##########################################################################
# Output directories
##########################################################################
BIN_PATH = bin
OBJ_PATH = bin/obj
##########################################################################
# Source Files
##########################################################################
VPATH = cmsis
ifeq (lpc11u,$(TARGET))
OBJS = $(OBJ_PATH)/startup_lpc11u_gnumake.o
OBJS += $(OBJ_PATH)/system_LPC11Uxx.o
else
OBJS = $(OBJ_PATH)/startup_lpc13u_gnumake.o
OBJS += $(OBJ_PATH)/system_LPC13Uxx.o
endif
OBJS += $(OBJ_PATH)/math_helper.o
OBJS += $(OBJ_PATH)/RTX_hook.o
VPATH += src
OBJS += $(OBJ_PATH)/printf-retarget.o
VPATH += src/boards/lpcnfc
OBJS += $(OBJ_PATH)/board_lpcnfc.o
VPATH += src/boards/reform2
OBJS += $(OBJ_PATH)/board_reform2.o
VPATH += src/boards/rf1ghzusb
OBJS += $(OBJ_PATH)/board_rf1ghzusb.o
VPATH += src/boards/rf1ghznode
OBJS += $(OBJ_PATH)/board_rf1ghznode.o
VPATH += src/cli
OBJS += $(OBJ_PATH)/cli.o
OBJS += $(OBJ_PATH)/commands.o
VPATH += src/cli/commands
OBJS += $(OBJ_PATH)/cmd_chibi_addr.o
OBJS += $(OBJ_PATH)/cmd_chibi_tx.o
OBJS += $(OBJ_PATH)/cmd_dbg_memrd.o
OBJS += $(OBJ_PATH)/cmd_eeprom_read.o
OBJS += $(OBJ_PATH)/cmd_eeprom_write.o
OBJS += $(OBJ_PATH)/cmd_i2c_read.o
OBJS += $(OBJ_PATH)/cmd_i2c_scan.o
OBJS += $(OBJ_PATH)/cmd_i2c_write.o
OBJS += $(OBJ_PATH)/cmd_nfc_mfc_ndef.o
OBJS += $(OBJ_PATH)/cmd_nfc_mifareclassic_memdump.o
OBJS += $(OBJ_PATH)/cmd_nfc_mifareclassic_valueblock.o
OBJS += $(OBJ_PATH)/cmd_nfc_mifareultralight_memdump.o
OBJS += $(OBJ_PATH)/cmd_rtc_read.o
OBJS += $(OBJ_PATH)/cmd_rtc_write.o
OBJS += $(OBJ_PATH)/cmd_sd_dir.o
OBJS += $(OBJ_PATH)/cmd_sysinfo.o
OBJS += $(OBJ_PATH)/cmd_wifi.o
VPATH += src/core/adc
OBJS += $(OBJ_PATH)/adc.o
VPATH += src/core/delay
OBJS += $(OBJ_PATH)/delay.o
VPATH += src/core/debug
OBJS += $(OBJ_PATH)/debug.o
VPATH += src/core/eeprom
OBJS += $(OBJ_PATH)/eeprom.o
VPATH += src/core/fifo
OBJS += $(OBJ_PATH)/fifo.o
VPATH += src/core/gpio
OBJS += $(OBJ_PATH)/gpio.o
VPATH += src/core/i2c
OBJS += $(OBJ_PATH)/i2c.o
VPATH += src/core/iap
OBJS += $(OBJ_PATH)/iap.o
VPATH += src/core/libc
OBJS += $(OBJ_PATH)/stdio.o
OBJS += $(OBJ_PATH)/string.o
VPATH += src/core/pmu
OBJS += $(OBJ_PATH)/pmu.o
VPATH += src/core/ssp0
OBJS += $(OBJ_PATH)/ssp0.o
VPATH += src/core/ssp1
OBJS += $(OBJ_PATH)/ssp1.o
VPATH += src/core/timer16
OBJS += $(OBJ_PATH)/timer16.o
VPATH += src/core/timer32
OBJS += $(OBJ_PATH)/timer32.o
VPATH += src/core/uart
OBJS += $(OBJ_PATH)/uart.o
OBJS += $(OBJ_PATH)/uart_buf.o
VPATH += src/core/usb
OBJS += $(OBJ_PATH)/descriptors.o
OBJS += $(OBJ_PATH)/usb_cdc.o
OBJS += $(OBJ_PATH)/usb_custom_class.o
OBJS += $(OBJ_PATH)/usb_hid.o
OBJS += $(OBJ_PATH)/usb_msc.o
OBJS += $(OBJ_PATH)/usbd.o
VPATH += src/drivers
OBJS += $(OBJ_PATH)/timespan.o
VPATH += src/drivers/displays
OBJS += $(OBJ_PATH)/smallfonts.o
VPATH += src/drivers/displays/bitmap/ssd1306
OBJS += $(OBJ_PATH)/ssd1306_i2c.o
VPATH += src/drivers/displays/graphic
OBJS += $(OBJ_PATH)/aafonts.o
OBJS += $(OBJ_PATH)/colors.o
OBJS += $(OBJ_PATH)/drawing.o
OBJS += $(OBJ_PATH)/fonts.o
OBJS += $(OBJ_PATH)/theme.o
VPATH += src/drivers/displays/graphic/aafonts/aa2
OBJS += $(OBJ_PATH)/DejaVuSansCondensed14_AA2.o
OBJS += $(OBJ_PATH)/DejaVuSansCondensedBold14_AA2.o
OBJS += $(OBJ_PATH)/DejaVuSansMono10_AA2.o
OBJS += $(OBJ_PATH)/DejaVuSansMono13_AA2.o
OBJS += $(OBJ_PATH)/DejaVuSansMono14_AA2.o
OBJS += $(OBJ_PATH)/FontCalibri18_AA2.o
OBJS += $(OBJ_PATH)/FontCalibriBold18_AA2.o
OBJS += $(OBJ_PATH)/FontCalibriItalic18_AA2.o
OBJS += $(OBJ_PATH)/FontFranklinGothicBold99_Numbers_AA2.o
VPATH += src/drivers/displays/graphic/aafonts/aa4
OBJS += $(OBJ_PATH)/FontCalibri18_AA4.o
VPATH += src/drivers/displays/graphic/fonts
OBJS += $(OBJ_PATH)/dejavusans9.o
OBJS += $(OBJ_PATH)/dejavusansbold9.o
OBJS += $(OBJ_PATH)/dejavusanscondensed9.o
OBJS += $(OBJ_PATH)/dejavusansmono8.o
OBJS += $(OBJ_PATH)/dejavusansmonobold8.o
OBJS += $(OBJ_PATH)/veramono9.o
OBJS += $(OBJ_PATH)/veramono11.o
OBJS += $(OBJ_PATH)/veramonobold9.o
OBJS += $(OBJ_PATH)/veramonobold11.o
OBJS += $(OBJ_PATH)/verdana9.o
OBJS += $(OBJ_PATH)/verdana14.o
OBJS += $(OBJ_PATH)/verdanabold14.o
VPATH += src/drivers/displays/graphic/hw
OBJS += $(OBJ_PATH)/hx8340b.o
# OBJS += $(OBJ_PATH)/hx8347g.o
VPATH += src/drivers/displays/segment/ht16k33
OBJS += $(OBJ_PATH)/ht16k33.o
VPATH += src/drivers/filters/iir
OBJS += $(OBJ_PATH)/iir_f.o
OBJS += $(OBJ_PATH)/iir_i.o
OBJS += $(OBJ_PATH)/iir_u16.o
VPATH += src/drivers/filters/ma
OBJS += $(OBJ_PATH)/sma_f.o
OBJS += $(OBJ_PATH)/sma_i.o
OBJS += $(OBJ_PATH)/sma_u16.o
OBJS += $(OBJ_PATH)/wma_f.o
OBJS += $(OBJ_PATH)/wma_i.o
OBJS += $(OBJ_PATH)/wma_u16.o
VPATH += src/drivers/motor/stepper
OBJS += $(OBJ_PATH)/stepper.o
VPATH += src/drivers/pwm/pca9685
OBJS += $(OBJ_PATH)/pca9685.o
VPATH += src/drivers/rf/802.15.4/chibi
OBJS += $(OBJ_PATH)/chb.o
OBJS += $(OBJ_PATH)/chb_buf.o
OBJS += $(OBJ_PATH)/chb_drvr.o
OBJS += $(OBJ_PATH)/chb_eeprom.o
OBJS += $(OBJ_PATH)/chb_spi.o
OBJS += $(OBJ_PATH)/messages.o
VPATH += src/drivers/rf/nfc/pn532
OBJS += $(OBJ_PATH)/pn532.o
OBJS += $(OBJ_PATH)/pn532_bus_i2c.o
OBJS += $(OBJ_PATH)/pn532_bus_uart.o
VPATH += src/drivers/rf/nfc/pn532/helpers
OBJS += $(OBJ_PATH)/pn532_config.o
OBJS += $(OBJ_PATH)/pn532_gpio.o
OBJS += $(OBJ_PATH)/pn532_mifare_classic.o
OBJS += $(OBJ_PATH)/pn532_mifare_ultralight.o
OBJS += $(OBJ_PATH)/pn532_ndef.o
OBJS += $(OBJ_PATH)/pn532_ndef_cards.o
VPATH += src/drivers/rf/wifi/cc3000
OBJS += $(OBJ_PATH)/spi.o
OBJS += $(OBJ_PATH)/wifi.o
VPATH += src/drivers/rf/wifi/cc3000/hostdriver
OBJS += $(OBJ_PATH)/cc3000_common.o
OBJS += $(OBJ_PATH)/evnt_handler.o
OBJS += $(OBJ_PATH)/hci.o
OBJS += $(OBJ_PATH)/netapp.o
OBJS += $(OBJ_PATH)/nvmem.o
OBJS += $(OBJ_PATH)/security.o
OBJS += $(OBJ_PATH)/socket.o
OBJS += $(OBJ_PATH)/wlan.o
VPATH += src/drivers/rf/nfc/pn532/mem_allocator
OBJS += $(OBJ_PATH)/bget.o
OBJS += $(OBJ_PATH)/pn532_mem.o
VPATH += src/drivers/rtc
OBJS += $(OBJ_PATH)/rtc.o
VPATH += src/drivers/rtc/pcf2129
OBJS += $(OBJ_PATH)/pcf2129.o
VPATH += src/drivers/sensors
OBJS += $(OBJ_PATH)/sensors.o
OBJS += $(OBJ_PATH)/sensorpoll.o
VPATH += src/drivers/sensors/accelerometers
OBJS += $(OBJ_PATH)/accelerometers.o
OBJS += $(OBJ_PATH)/adxl345.o
OBJS += $(OBJ_PATH)/lis3dh.o
OBJS += $(OBJ_PATH)/lsm303accel.o
VPATH += src/drivers/sensors/gyroscopes
OBJS += $(OBJ_PATH)/l3gd20.o
VPATH += src/drivers/sensors/light
OBJS += $(OBJ_PATH)/tsl2561.o
VPATH += src/drivers/sensors/magnetometers
OBJS += $(OBJ_PATH)/magnetometers.o
OBJS += $(OBJ_PATH)/lsm303mag.o
VPATH += src/drivers/sensors/pressure
OBJS += $(OBJ_PATH)/pressure.o
OBJS += $(OBJ_PATH)/bmp085.o
OBJS += $(OBJ_PATH)/mpl115a2.o
VPATH += src/drivers/sensors/temperature
OBJS += $(OBJ_PATH)/lm75b.o
VPATH += src/drivers/storage
OBJS += $(OBJ_PATH)/logger.o
VPATH += src/drivers/storage/fatfs
OBJS += $(OBJ_PATH)/ff.o
OBJS += $(OBJ_PATH)/mmc.o
VPATH += src/localisation
OBJS += $(OBJ_PATH)/localisation.o
VPATH += src/protocol
OBJS += $(OBJ_PATH)/protocol.o
VPATH += src/protocol/commands
OBJS += $(OBJ_PATH)/protocol_cmd_led.o
OBJS += $(OBJ_PATH)/protocol_cmd_sysinfo.o
##########################################################################
# Include paths
##########################################################################
ROOT_PATH = src
INCLUDE_PATHS = -I$(ROOT_PATH) -Icmsis
##########################################################################
# GNU GCC compiler prefix
##########################################################################
# Use the default toolchain (based on the PATH variable, etc.)
CROSS_COMPILE ?= arm-none-eabi-
# OR ... use a toolchain at a specific location
# CROSS_COMPILE = C:/code_red/RedSuiteNXP_5.0.12_1048/redsuite/tools/bin/arm-none-eabi-
# CROSS_COMPILE = C:/arm/gnu4.7.2012.q4/bin/arm-none-eabi-
AS = $(CROSS_COMPILE)gcc
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)gcc
SIZE = $(CROSS_COMPILE)size
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
OUTFILE = $(BIN_PATH)/$(FILENAME)
LPCRC ?= tools/lpcrc/lpcrc
REMOVE = rm -f
MOUNT_POINT ?= /media/CRP DISABLD
##########################################################################
# Compiler settings, parameters and flags
##########################################################################
# Compiler Options
GCFLAGS = -c
GCFLAGS += -std=gnu99
GCFLAGS += -g
GCFLAGS += -O$(OPTIMIZATION)
GCFLAGS += $(INCLUDE_PATHS)
GCFLAGS += -Wall
GCFLAGS += -mthumb
GCFLAGS += -ffunction-sections
GCFLAGS += -fdata-sections
GCFLAGS += -fmessage-length=0
GCFLAGS += -fno-builtin
GCFLAGS += -mcpu=$(CORE)
GCFLAGS += -DTARGET=$(TARGET)
GCFLAGS += -D$(BOARD)
# CMSIS DSP Flags
ifeq (lpc11u,$(TARGET))
GCFLAGS += -DARM_MATH_CM0
else
GCFLAGS += -DARM_MATH_CM3
endif
# For use with the GCC ARM Embedded toolchain
# GCFLAGS += --specs=nano.specs
# For use with the LPCXpresso toolchain
# GCFLAGS += -D__REDLIB__ -D__CODE_RED
# Assembler Options
ASFLAGS = -c
ASFLAGS += -g
ASFLAGS += -O$(OPTIMIZATION)
ASFLAGS += $(INCLUDE_PATHS)
ASFLAGS += -Wall
ASFLAGS += -mthumb
ASFLAGS += -ffunction-sections
ASFLAGS += -fdata-sections
ASFLAGS += -fmessage-length=0
ASFLAGS += -mcpu=$(CORE)
ASFLAGS += -D__ASSEMBLY__
ASFLAGS += -x assembler-with-cpp
# Linker Options
LDFLAGS = -nostartfiles
LDFLAGS += -mcpu=$(CORE)
LDFLAGS += -mthumb
LDFLAGS += -O$(OPTIMIZATION)
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -T $(LDSCRIPT)
LDFLAGS += -Xlinker -Map=bin/firmware.map
# CMSIS Libraries
LDFLAGS += -L./cmsis/libs
ifeq (lpc11u,$(TARGET))
LDLIBS = -larm_cortexM0l_math -lRTX_CM0
else
LDLIBS = -larm_cortexM3l_math -lRTX_CM3
endif
# External Libraries
LDLIBS += -lm
# The following libraries are required with the LPCXpresso toolchain
# LDLIBS += -lcr_c -lcr_eabihelpers
OCFLAGS = --strip-unneeded
##########################################################################
# Rules
##########################################################################
all: firmware
$(OBJ_PATH)/%.o : %.c
@mkdir -p $(dir $@)
-@echo "COMPILING $(@F)"
@$(CC) $(GCFLAGS) -o $@ $<
$(OBJ_PATH)/%.o : %.s
@mkdir -p $(dir $@)
-@echo "ASSEMBLING $(@F)"
@$(AS) $(ASFLAGS) -o $@ $<
firmware: $(OBJS) $(SYS_OBJS)
@mkdir -p $(BIN_PATH)
-@echo ""
-@echo "LINKING $(OUTFILE).elf ($(CORE) -O$(OPTIMIZATION) $(BOARD))"
@$(LD) $(LDFLAGS) -o $(OUTFILE).elf $(LDLIBS) $(OBJS) $(LDLIBS)
-@echo ""
@$(SIZE) $(OUTFILE).elf
-@echo ""
-@echo "Generating $(OUTFILE).hex"
@$(OBJCOPY) $(OCFLAGS) -O ihex $(OUTFILE).elf $(OUTFILE).hex
-@echo "Generating $(OUTFILE).bin"
@$(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin
-@echo ""
@$(LPCRC) $(OUTFILE).bin
flash: firmware
-@echo ""
-@echo "Flashing device ..."
-@[ -e "$(MOUNT_POINT)/firmware.bin" ] && dd if=bin/firmware.bin of="$(MOUNT_POINT)/firmware.bin" conv=nocreat,notrunc && umount "$(MOUNT_POINT)" || echo "Error, no device?!"
lpcrc:
-@echo ""
-@echo "Building lpcrc (checksum tool) ..."
@make -C tools/lpcrc
clean:
@$(REMOVE) $(OBJS) $(OUTFILE).elf $(OUTFILE).bin $(OUTFILE).hex
#########################################################################
# LPC11U/LPC13U Code Base #
This code base is an attempt at providing a reasonably well-organized, open-source starting point for projects based on the LPC11Uxx and LPC13Uxx family of MCUs.
## Key Features ##
It includes the following key features, which can be easily enabled or disabled via a single board-specific config file:
- [USB CDC, HID and MSC support](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/src/core/usb), including HID Keyboard and HID Mouse emulation, with any combination of devices possible up to the number of end points available on the MCU
- Easy to extend [command-line interface](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/src/cli) (CLI) with USB CDC and UART support
- [Sensor abstraction layer](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/src/drivers/sensors) where all sensors return a common descriptor and data type using standardized SI units
- Basic [localisation support](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/src/localisation), allowing multiple languages to be used in the same application
- Graphics sub-system including support for multiple font types (bitmap or anti-aliased), basic drawing functions, and a simple HW abstraction mechanism
- FAT16/32 file system support for SD cards including the option to use long names (via FatFS)
- Numerous wireless stacks, including NFC (based on the PN532) and 802.15.4 (based on the AT86RF212).
- A basic [unit testing framework](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/tests_host) suitable for embedded systems (Unity)
## Supported MCUs ##
This code base is designed to work transparently with the following MCUs, allowing you to select the MCU with the right price/performance/size ratio for your project without having to rewrite any underlying code:
- **LPC1347** - ARM Cortex M3, 72MHz, 64KB Flash, 8+2+2KB SRAM, 4KB EEPROM
- **LPC11U37** - ARM Cortex M0, 50MHz, 128KB Flash, 8+2KB SRAM, 4KB EEPROM
- **LPC11U24** - ARM Cortex M0, 50MHa, 32KB Flash, 8+2KB SRAM, 4KB EEPROM
## Multiple Board Support ##
In an attempt to make the code base relevant in a variety of situations, there is a basic [board abstraction layer](https://github.com/microbuilder/LPC11U_LPC13U_Codebase/tree/master/src/boards), and all config settings are board-specific.
The target board in indicated in the shared **projectconfig.h** file, which in turn references the board-specific config and initialization code in the **'boards/'** subfolder.
## Supported IDEs/Toolchains ##
The code base contains a few dependencies on GCC extensions (notably in the localisation system), and has not been tested with any non-GCC toolchain.
At the moment the following IDEs are supported by the code base, and this list may be extended in the future:
**GCC/Makefile ('Makefile')**
The codebase includes startup code, linker scripts and a makefile to build this codebase with the cross-platform, open-source GNU/GCC toolset. This gives you the most control over how your project is built, and allows you to build your project on any platform with support for GCC and make (*NIX, Mac OSX, Windows, etc.). [(more)](doc/toolchain_make.md)