Software License Agreement (BSD License)
- Copyright (c) 2010, microBuilder SARL
+ Copyright (c) 2011, microBuilder SARL
All rights reserved.
Redistribution and use in source and binary forms, with or without
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**************************************************************************/
+#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include "projectconfig.h"
#include "sysinit.h"
-#include "drivers/sensors/pn532/pn532.h"
-#include "drivers/sensors/pn532/pn532_drvr.h"
+#include "core/gpio/gpio.h"
+#include "core/systick/systick.h"
+
+#ifdef CFG_INTERFACE
+ #include "core/cmd/cmd.h"
+#endif
/**************************************************************************/
/*!
- Main program entry point. After reset, normal code execution will
- begin here.
+ Approximates a 1 millisecond delay using "nop". This is less
+ accurate than a dedicated timer, but is useful in certain situations.
- Note: CFG_INTERFACE is normally enabled by default. If you wish to
- enable the blinking LED code in main, you will need to open
- projectconfig.h, comment out "#define CFG_INTERFACE" and
- rebuild the project.
+ The number of ticks to delay depends on the optimisation level set
+ when compiling (-O). Depending on the compiler settings, one of the
+ two defined values for 'delay' should be used.
*/
/**************************************************************************/
-int main (void)
+void delayms(uint32_t ms)
{
- #ifdef CFG_INTERFACE
- //#error "CFG_INTERFACE must be disabled in projectconfig.h for this demo"
- #endif
- #if !defined CFG_PRINTF_USBCDC
- #error "CFG_PRINTF_USBCDC must be enabled in projectconfig.h for this demo"
- #endif
+ uint32_t delay = ms * ((CFG_CPU_CCLK / 100) / 45); // Release Mode (-Os)
+ // uint32_t delay = ms * ((CFG_CPU_CCLK / 100) / 120); // Debug Mode (No optimisations)
+
+ while (delay > 0)
+ {
+ __asm volatile ("nop");
+ delay--;
+ }
+}
+/**************************************************************************/
+/*!
+ Main program entry point. After reset, normal code execution will
+ begin here.
+*/
+/**************************************************************************/
+int main(void)
+{
// Configure cpu and mandatory peripherals
systemInit();
-
- // Wait 5 second for someone to open the USB connection for printf
- systickDelay(5000);
-
- // Initialise the PN532
- pn532Init();
- byte_t response[256];
- size_t responseLen;
- pn532_error_t error;
-
- // Setup command to initialise a single ISO14443A target at 106kbps
- byte_t abtCommand[] = { PN532_COMMAND_INLISTPASSIVETARGET, 0x01, PN532_MODULATION_ISO14443A_106KBPS };
+ uint32_t currentSecond, lastSecond;
+ currentSecond = lastSecond = 0;
while (1)
{
- printf("%s", CFG_PRINTF_NEWLINE);
- printf("Wait for an ISO14443A card (Mifare Classic, etc.)%s", CFG_PRINTF_NEWLINE);
-
- // Send the command
- error = pn532Write(abtCommand, sizeof(abtCommand));
-
- // Wait until we get a response or an unexpected error message
- do
- {
- error = pn532Read(response, &responseLen);
- systickDelay(25);
- }
- #ifdef PN532_UART
- while (error == PN532_ERROR_RESPONSEBUFFEREMPTY);
- #endif
- #ifdef PN532_SPI
- while ((error == PN532_ERROR_RESPONSEBUFFEREMPTY) || (error = PN532_ERROR_SPIREADYSTATUSTIMEOUT));
- #endif
-
- // Print the card details if possible
- if (!error)
+ // Toggle LED once per second ... rollover = 136 years :)
+ currentSecond = systickGetSecondsActive();
+ if (currentSecond != lastSecond)
{
- /* Response for ISO14443A 106KBPS (Mifare Classic, etc.)
- See UM0701-02 section 7.3.5 for more information
-
- byte Description
- ------------- ------------------------------------------
- b7 Tags Found
- b8 Tag Number (only one used in this example)
- b9..10 SENS_RES
- b11 SEL_RES
- b12 NFCID Length
- b13..NFCIDLen NFCID
-
- SENS_RES SEL_RES Manufacturer/Card Type NFCID Len
- -------- ------- ----------------------- ---------
- 00 04 08 NXP Mifare Classic 1K 4 bytes */
-
- printf("%s", CFG_PRINTF_NEWLINE);
- printf("%-12s: %d %s", "Tags Found", response[7], CFG_PRINTF_NEWLINE);
- printf("%-12s: %02X %02X %s", "SENS_RES", response[9], response[10], CFG_PRINTF_NEWLINE);
- printf("%-12s: %02X %s", "SEL_RES", response[11], CFG_PRINTF_NEWLINE);
- printf("%-12s: ", "NFCID");
- size_t pos;
- for (pos=0; pos < response[12]; pos++)
+ lastSecond = currentSecond;
+ if (gpioGetValue(CFG_LED_PORT, CFG_LED_PIN) == CFG_LED_OFF)
{
- printf("%02x ", response[13 + pos]);
+ gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_ON);
+ }
+ else
+ {
+ gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_OFF);
}
- printf(CFG_PRINTF_NEWLINE);
- }
- else
- {
- // Oops .... something bad happened. Check 'error'
- printf("Ooops! Error %02X %s", error, CFG_PRINTF_NEWLINE);
}
- // Wait at least one second before trying again
- systickDelay(1000);
+ // Poll for CLI input if CFG_INTERFACE is enabled in projectconfig.h
+ #ifdef CFG_INTERFACE
+ cmdPoll();
+ #endif
}
+
+ return 0;
}
are using by enabling one of the following definitions. The code base
will then try to configure itself accordingly for that board.
-----------------------------------------------------------------------*/
- // #define CFG_BRD_LPC1343_REFDESIGN
- #define CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #define CFG_BRD_LPC1343_REFDESIGN
+ // #define CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
+ // #define CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
// #define CFG_BRD_LPC1343_802154USBSTICK
/*=========================================================================*/
other peripherals to determine timing.
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- #define CFG_CPU_CCLK (72000000) // 1 tick = 13.88nS
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- #define CFG_CPU_CCLK (72000000) // 1 tick = 13.88nS
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- #define CFG_CPU_CCLK (72000000) // 1 tick = 13.88nS
- #endif
+ #define CFG_CPU_CCLK (72000000) // 1 tick = 13.88nS
/*=========================================================================*/
of the systick timer.
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- #define CFG_SYSTICK_DELAY_IN_MS (1)
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- #define CFG_SYSTICK_DELAY_IN_MS (1)
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- #define CFG_SYSTICK_DELAY_IN_MS (1)
- #endif
+ #define CFG_SYSTICK_DELAY_IN_MS (1)
/*=========================================================================*/
#define CFG_UART_BUFSIZE (512)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
#define CFG_UART_BAUDRATE (115200)
#define CFG_UART_BUFSIZE (512)
#endif
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
+ #define CFG_UART_BAUDRATE (9600)
+ #define CFG_UART_BUFSIZE (512)
+ #endif
+
#ifdef CFG_BRD_LPC1343_802154USBSTICK
#define CFG_UART_BAUDRATE (115200)
#define CFG_UART_BUFSIZE (512)
// #define CFG_SSP0_SCKPIN_0_6
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
#define CFG_SSP0_SCKPIN_2_11
// #define CFG_SSP0_SCKPIN_0_6
#endif
#define CFG_LED_OFF (1)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
#define CFG_LED_PORT (2)
#define CFG_LED_PIN (10)
#define CFG_LED_ON (0)
#define CFG_SDCARD_CDPIN (0)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
#define CFG_SDCARD
#define CFG_SDCARD_READONLY (1) // Must be 0 or 1
#define CFG_SDCARD_CDPORT (3)
#define CFG_USBCDC_BUFFERSIZE (256)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
// #define CFG_USBHID
#define CFG_USBCDC
#define CFG_USBCDC_BAUDRATE (115200)
#define CFG_USBCDC_BUFFERSIZE (256)
#endif
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
+ // #define CFG_USBHID
+ // #define CFG_USBCDC
+ #define CFG_USBCDC_BAUDRATE (115200)
+ #define CFG_USBCDC_INITTIMEOUT (5000)
+ #define CFG_USBCDC_BUFFERSIZE (256)
+ #endif
+
#ifdef CFG_BRD_LPC1343_802154USBSTICK
// #define CFG_USBHID
#define CFG_USBCDC
redirected to UART
CFG_PRINTF_USBCDC Will cause all printf statements to be
redirect to USB Serial
- CFG_PRINTF_NEWLINE This should be either "\r\n" for Windows or
+ CFG_PRINTF_NEWLINE This is typically "\r\n" for Windows or
"\n" for *nix
Note: If no printf redirection definitions are present, all printf
#ifdef CFG_BRD_LPC1343_REFDESIGN
// #define CFG_PRINTF_UART
#define CFG_PRINTF_USBCDC
- #define CFG_PRINTF_NEWLINE "\r\n"
+ #define CFG_PRINTF_NEWLINE "\n"
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
// #define CFG_PRINTF_UART
#define CFG_PRINTF_USBCDC
- #define CFG_PRINTF_NEWLINE "\r\n"
+ #define CFG_PRINTF_NEWLINE "\n"
+ #endif
+
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
+ #define CFG_PRINTF_UART
+ // #define CFG_PRINTF_USBCDC
+ #define CFG_PRINTF_NEWLINE "\n"
#endif
#ifdef CFG_BRD_LPC1343_802154USBSTICK
// #define CFG_PRINTF_UART
#define CFG_PRINTF_USBCDC
- #define CFG_PRINTF_NEWLINE "\r\n"
+ #define CFG_PRINTF_NEWLINE "\n"
#endif
/*=========================================================================*/
is normally only desirable in a situation
where another MCU is communicating with
the LPC1343.
+ CFG_INTERFACE_DROPCR If this is set to 1 all incoming \r
+ characters will be dropped
CFG_INTERFACE_ENABLEIRQ If this is set to 1 the IRQ pin will be
set high when a command starts executing
and will go low when the command has
new command can safely be sent.
CFG_INTERFACE_IRQPORT The gpio port for the IRQ/busy pin
CFG_INTERFACE_IRQPIN The gpio pin number for the IRQ/busy pin
+ CFG_INTERFACE_SHORTERRORS If this is enabled only short 1 character
+ error messages will be returned (followed
+ by CFG_PRINTF_NEWLINE), rather than more
+ verbose error messages. The specific
+ characters used are defined below.
+ CFG_INTERFACE_CONFIRMREADY If this is set to 1 a text confirmation
+ will be sent when the command prompt is
+ ready for a new command. This is in
+ addition to CFG_INTERFACE_ENABLEIRQ if
+ this is also enabled. The character used
+ is defined below.
NOTE: The command-line interface will use either
USB-CDC or UART depending on whether
#define CFG_INTERFACE_MAXMSGSIZE (256)
#define CFG_INTERFACE_PROMPT "LPC1343 >> "
#define CFG_INTERFACE_SILENTMODE (0)
+ #define CFG_INTERFACE_DROPCR (1)
#define CFG_INTERFACE_ENABLEIRQ (0)
#define CFG_INTERFACE_IRQPORT (2)
#define CFG_INTERFACE_IRQPIN (0)
+ #define CFG_INTERFACE_SHORTERRORS (0)
+ #define CFG_INTERFACE_CONFIRMREADY (0)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
#define CFG_INTERFACE
#define CFG_INTERFACE_MAXMSGSIZE (256)
#define CFG_INTERFACE_PROMPT "LCD >> "
#define CFG_INTERFACE_SILENTMODE (0)
+ #define CFG_INTERFACE_DROPCR (1)
+ #define CFG_INTERFACE_ENABLEIRQ (0)
+ #define CFG_INTERFACE_IRQPORT (2)
+ #define CFG_INTERFACE_IRQPIN (0)
+ #define CFG_INTERFACE_SHORTERRORS (0)
+ #define CFG_INTERFACE_CONFIRMREADY (0)
+ #define CFG_INTERFACE_SHORTERRORS_UNKNOWNCOMMAND "?"
+ #define CFG_INTERFACE_SHORTERRORS_TOOMANYARGS ">"
+ #define CFG_INTERFACE_SHORTERRORS_TOOFEWARGS "<"
+ #define CFG_INTERFACE_CONFIRMREADY_TEXT "."
+ #endif
+
+ #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
+ #define CFG_INTERFACE
+ #define CFG_INTERFACE_MAXMSGSIZE (256)
+ #define CFG_INTERFACE_PROMPT "LCD >> "
+ #define CFG_INTERFACE_SILENTMODE (1)
+ #define CFG_INTERFACE_DROPCR (1)
#define CFG_INTERFACE_ENABLEIRQ (1)
#define CFG_INTERFACE_IRQPORT (2)
#define CFG_INTERFACE_IRQPIN (0)
+ #define CFG_INTERFACE_SHORTERRORS (1)
+ #define CFG_INTERFACE_CONFIRMREADY (1)
+ #define CFG_INTERFACE_SHORTERRORS_UNKNOWNCOMMAND "?"
+ #define CFG_INTERFACE_SHORTERRORS_TOOMANYARGS ">"
+ #define CFG_INTERFACE_SHORTERRORS_TOOFEWARGS "<"
+ #define CFG_INTERFACE_CONFIRMREADY_TEXT "."
#endif
#ifdef CFG_BRD_LPC1343_802154USBSTICK
#define CFG_INTERFACE_MAXMSGSIZE (256)
#define CFG_INTERFACE_PROMPT "CMD >> "
#define CFG_INTERFACE_SILENTMODE (0)
+ #define CFG_INTERFACE_DROPCR (1)
#define CFG_INTERFACE_ENABLEIRQ (0)
#define CFG_INTERFACE_IRQPORT (2)
#define CFG_INTERFACE_IRQPIN (0)
+ #define CFG_INTERFACE_SHORTERRORS (0)
+ #define CFG_INTERFACE_CONFIRMREADY (0)
#endif
/*=========================================================================*/
DEPENDENCIES: PWM output requires the use of 16-bit
timer 1 and pin 1.9 (CT16B1_MAT0).
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- // #define CFG_PWM
- #define CFG_PWM_DEFAULT_PULSEWIDTH (CFG_CPU_CCLK / 1000)
- #define CFG_PWM_DEFAULT_DUTYCYCLE (50)
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- // #define CFG_PWM
- #define CFG_PWM_DEFAULT_PULSEWIDTH (CFG_CPU_CCLK / 1000)
- #define CFG_PWM_DEFAULT_DUTYCYCLE (50)
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- // #define CFG_PWM
- #define CFG_PWM_DEFAULT_PULSEWIDTH (CFG_CPU_CCLK / 1000)
- #define CFG_PWM_DEFAULT_DUTYCYCLE (50)
- #endif
+ // #define CFG_PWM
+ #define CFG_PWM_DEFAULT_PULSEWIDTH (CFG_CPU_CCLK / 1000)
+ #define CFG_PWM_DEFAULT_DUTYCYCLE (50)
/*=========================================================================*/
DEPENDENCIES: STEPPER requires the use of pins 3.0-3 and
32-bit Timer 0.
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- // #define CFG_STEPPER
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- // #define CFG_STEPPER
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- // #define CFG_STEPPER
- #endif
+ // #define CFG_STEPPER
/*=========================================================================*/
#define CFG_I2CEEPROM_SIZE (3072)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
#define CFG_I2CEEPROM
- #define CFG_I2CEEPROM_SIZE (3072)
+ #define CFG_I2CEEPROM_SIZE (4096)
#endif
#ifdef CFG_BRD_LPC1343_802154USBSTICK
build (requires external HW)
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- // #define CFG_LM75B
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- // #define CFG_LM75B
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- // #define CFG_LM75B
- #endif
+ // #define CFG_LM75B
/*=========================================================================*/
#define CFG_CHIBI_BUFFERSIZE (128)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
// #define CFG_CHIBI
#define CFG_CHIBI_MODE (0) // OQPSK_868MHZ
#define CFG_CHIBI_POWER (0xE9) // CHB_PWR_EU2_3DBM
#define CFG_TFTLCD_TS_KEYPADDELAY (100)
#endif
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
+ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
#define CFG_TFTLCD
#define CFG_TFTLCD_INCLUDESMALLFONTS (0)
#define CFG_TFTLCD_TS_DEFAULTTHRESHOLD (50)
DEPENDENCIES: ST7565 requires the use of pins 2.1-6.
DEPENDENCIES: SSD1306 requires the use of pins 2.1-6.
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- // #define CFG_ST7565
- // #define CFG_SSD1306
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- // #define CFG_ST7565
- // #define CFG_SSD1306
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- // #define CFG_ST7565
- // #define CFG_SSD1306
- #endif
+ // #define CFG_ST7565
+ // #define CFG_SSD1306
/*=========================================================================*/
NOTE: Please note that Printf can not be
used to display 64-bit values (%lld)!
-----------------------------------------------------------------------*/
- #ifdef CFG_BRD_LPC1343_REFDESIGN
- // #define CFG_RSA
- #define CFG_RSA_BITS (32)
- #endif
-
- #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE
- // #define CFG_RSA
- #define CFG_RSA_BITS (32)
- #endif
-
- #ifdef CFG_BRD_LPC1343_802154USBSTICK
- // #define CFG_RSA
- #define CFG_RSA_BITS (32)
- #endif
+ // #define CFG_RSA
+ #define CFG_RSA_BITS (32)
/*=========================================================================*/
=========================================================================*/
-#if !defined CFG_BRD_LPC1343_REFDESIGN && !defined CFG_BRD_LPC1343_TFTLCDSTANDALONE && !defined CFG_BRD_LPC1343_802154USBSTICK
- #error "You must defined a target board (CFG_BRD_LPC1343_REFDESIGN or CFG_BRD_LPC1343_TFTLCDSTANDALONE or CFG_BRD_LPC1343_802154USBSTICK)"
-#endif
-#if (defined CFG_BRD_LPC1343_REFDESIGN && defined CFG_BRD_LPC1343_TFTLCDSTANDALONE) || (defined CFG_BRD_LPC1343_TFTLCDSTANDALONE && defined CFG_BRD_LPC1343_802154USBSTICK) || (defined CFG_BRD_LPC1343_REFDESIGN && defined CFG_BRD_LPC1343_802154USBSTICK)
- #error "Only one target board can be defined at a time"
+#if !defined CFG_BRD_LPC1343_REFDESIGN && !defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB && !defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART && !defined CFG_BRD_LPC1343_802154USBSTICK
+ #error "You must defined a target board (CFG_BRD_LPC1343_REFDESIGN or CFG_BRD_LPC1343_TFTLCDSTANDALONE or CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART or CFG_BRD_LPC1343_802154USBSTICK)"
#endif
#if defined CFG_PRINTF_USBCDC && defined CFG_PRINTF_UART