Go to file
2023-02-06 14:40:08 +01:00
apps Improve README content 2022-11-08 17:43:45 +01:00
core Use fixed version of IRQ priority helpers 2022-11-08 17:03:05 +01:00
drivers Small timer support fix Adding useful define in timer support. 2022-11-08 17:03:05 +01:00
extdrv Simplify the data structure to get SD/MMC to SPI mode, and use SPI 2022-11-10 12:16:39 +01:00
extlib/wolfssl Add WolfSSL Library as an external library 2023-02-06 14:40:08 +01:00
include Add WolfSSL Library as an external library 2023-02-06 14:40:08 +01:00
lib Add reverse_byte() 2022-11-08 17:03:05 +01:00
.gitignore also keep an untracked dev directory for host code 2022-11-08 17:03:05 +01:00
LICENCE Adding GPLv3 licence text and Readme file. 2022-11-08 17:03:03 +01:00
lpc_link_lpc1224.ld Improve Makefile - Add comments - Use LDFLAGS instead of LINKOPTS - Use $(DEBUG) var Fixes on Linker script - Removed info page size and offset as they are accessible only "in app" - Remove duplicate hardcoded values - Fix for recent GCC versions - Fix system_init Update Readme 2022-11-08 17:03:04 +01:00
Makefile Add WolfSSL Library as an external library 2023-02-06 14:40:08 +01:00
README Update main README file according to changes introduced by the modules 2022-11-08 17:41:54 +01:00
update_version.sh Adding script to update (increment) firmware version number used for scialys app, may be used by any app. 2022-11-08 17:03:05 +01:00

********************
Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
 -- Martin Fowler, 2008.
********************


********************
INTRO

This repository provides support for the LPC122x microcontroller from NXP

It has support for the core LPC122x functions, as used on the development
modules made by Techno-Innov, and for the peripherals we use on various
boards for our projects (user led, eeprom, temperature sensor, CC1101 RF
transceiver, ...).
Support for various other cool stuff is added when we need it.

Example applications have been exported to a separate git repository, which
must be cloned under "apps" directory.
You can create your own app/[module name] directories for the boards or
projects you create, with one sub-directory for each application. These can
(and should) be git repositories.
These are (and must stay) independent.
Each module has it's own directory under apps/.

More usefull stuff is up to you. Creating an app is *very* simple. Copy
an example from apps/[module name]/ to the name you want and start coding.
** Please, no spaces (or special characters) in the directory names ! **

The examples git repository can be cloned from our server by using the
following command when in the "app" directory :
 git clone git://git.techno-innov.fr/lpc122x_examples examples


********************
BUID and FLASH

Build has been tested using gcc, and only gcc, in the version provided by
Devuan GNU/Linux distribution, and a few other binary versions available for
download on the Internet, but any ARM gcc toolchain should do.

In order to get the debian ARM gcc cross-toolchain you should install the
following packaages : gcc-arm-none-eabi, binutils-arm-none-eabi

There's no need for the related libc package here, the libc does not fit
in our micro-controller memory. Instead have a look at the content of the
lib/ directory, and add stuff there.

Once done you should build using the provided makefile by running the
simple "make" command in the base directory, which will build all apps, or
run "make <module_name>/<app_name>" to build a specific application.
You can also run the simple "make" command in the specific app subdirectory
to compile this application alone.
The build includes all C files from the app directory, and the resulting binary
gets the app name (directory name).
The provided Makefiles display some information about the size and memory
usage of the generated binary.

To flash the binary (the file ending with ".bin") to the embedded LPC Flash you
will need the lpctool package, now packaged for Debian (starting with Jessie),
or available in our git repository : http://git.techno-innov.fr/lpctools (Clone
using : git clone http://gitclone.techno-innov.fr/lpctools and then build
(make) and use :)
Usual command lines :
   lpcprog -d /dev/ttyUSB0 -c id
   lpcprog -d /dev/ttyUSB0 -c flash app_name.bin
See lpctools readme and lpcprog or isp help (-h) or manpages for more
information.
For easier use of lpcprog in the usual case it is possible to define an alias
such as the following one, which you can add to your shell ressources file :
   alias prog='lpcprog -d /dev/ttyUSB0 -c flash $(basename $PWD).bin'
This alias will call lpcprog on the most commonly used tty device (for me at
least) and try to flash the file ending in ".bin" which has the same name as
the current directory (which is what the apps Makefiles produces).


********************
SUPPORTED FEATURES and INTERFACES

- LPC122x micro-controller definitions
   - Cortex-M0 specific definitions
   - Cortex-M0 and LPC122x Registers
   - Interrupts
   - ROM based division routines
   - Utility functions to replace ctz and clz instructions (not present in Cortex M0)
   - IAP ROM based functions (tested for user flash access only)

- Bootstrap
   - vector table
   - reset handler

- System
   - flash accelerator configuration
   - watchdog (stop)
   - clock / PLL config
   - systick
   - precise msleep and usleep functions (using systick)
   - pio configuration
   - deep power down

- Simple C Library
   - memcpy and memset
   - strcpy, strncpy, strcmp, strncmp, strchr, strrchr, strlen, strnlen
   - snprintf, vsnprintf

- Integrated Interface drivers
   - UART (as UART or RS485)
   - I²C
   - ADC
   - GPIO
   - GPIO interrupts
   - Counter / Timers
   - SPI (SSP)
   - PWM
   - RTC (partial)
   - Watchdog

- External Device drivers
   - I²C EEPROM
   - TMP101 I²C temperature sensor
   - CC1101 Sub 1GHz RF Transceiver
   - Status led
   - Epaper display
   - WS2812 chainable leds
   - LCD Character displays
   - Maxim Max31855 thermocouple to digital converters
   - On semiconductor NCN5120 KNX bus interface (under test)
   - VEML6070 I²C UV sensor
   - TSL256x ambiant and IR light sensor (obsolete)
   - BME280 triple sensor (temperature, pressure and humidity)
   - BQ769x0 multi-cell BMS (Battery management)
   - PCF85363 RTC
   - SD/MMC cards
   - SSD130x Oled displays
   - ST7735 TFT displays

- Other
   - CRC-CITT
   - 8x8 font for use with Epaper display
   - DTPlug (or any host) communication protocol
   - MQTT communication protocol


********************
TODO :

- Test all the GPIO in different modes
- Complete RTC Support
- Comparator support
- CRC engine support
- Test UART IrDA mode
- DTPlug communication protocol tests + continue development of other functionalities.
- Continue tests for NCN5120 support
- More external drivers !
- Fix DHT11 temperatur and Humidity sensor support