summaryrefslogtreecommitdiff
path: root/bsp/lpc408x/Libraries
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2024-03-10 15:11:54 -0400
committerMeco Man <[email protected]>2024-03-10 23:19:22 -0400
commitf71d4f33ea615b94763a23eca4674e39e08eb489 (patch)
treecbc654f43d3717273bff93d3a457121bdfe9ef0f /bsp/lpc408x/Libraries
parent46967ef56fd3a3c564ff8119524ef0f1ce500a82 (diff)
[bsp][nxp][lpc] move lpc BSPs into nxp/lpc folders
Diffstat (limited to 'bsp/lpc408x/Libraries')
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/arm_common_tables.h35
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/arm_math.h7062
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cm0.h665
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cm3.h1240
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cm4.h1378
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cm4_simd.h701
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cmFunc.h609
-rw-r--r--bsp/lpc408x/Libraries/CMSIS/Include/core_cmInstr.h586
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC177x_8x.h1442
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC407x_8x_177x_8x.h1514
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC177x_8x.h89
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC407x_8x_177x_8x.h89
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC177x_8x.s301
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s302
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC177x_8x.s279
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC407x_8x_177x_8x.s281
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC177x_8x.s396
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC407x_8x_177x_8x.s419
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC177x_8x.c507
-rw-r--r--bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c571
-rw-r--r--bsp/lpc408x/Libraries/Device/SConscript23
-rw-r--r--bsp/lpc408x/Libraries/Drivers/SConscript39
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/debug_frmwrk.h114
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc177x_8x_libcfg_default.h156
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_adc.h303
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_bod.h98
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_can.h1014
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_clkpwr.h248
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_crc.h110
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_dac.h165
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_eeprom.h152
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_emac.h616
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_emc.h549
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_exti.h158
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_gpdma.h418
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_gpio.h188
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_i2c.h420
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_i2s.h351
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_iap.h153
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_lcd.h232
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_libcfg_default.h158
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_mci.h463
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_mcpwm.h348
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_nvic.h77
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_pinsel.h199
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_pwm.h357
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_qei.h547
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_rtc.h465
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_spifi_rom_api.h248
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_ssp.h422
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_systick.h119
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_timer.h321
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_types.h211
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_uart.h710
-rw-r--r--bsp/lpc408x/Libraries/Drivers/include/lpc_wwdt.h188
-rw-r--r--bsp/lpc408x/Libraries/Drivers/lib/spifi_drv_M4.libbin35468 -> 0 bytes
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_adc.c326
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_bod.c119
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_can.c2197
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_clkpwr.c326
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_crc.c171
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_dac.c196
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_eeprom.c267
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_emac.c1043
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_emc.c1398
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_exti.c162
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_gpdma.c453
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_gpio.c905
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_i2c.c1416
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_i2s.c589
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_iap.c317
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_lcd.c856
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_mci.c2508
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_mcpwm.c573
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_nvic.c156
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_pinsel.c540
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_pwm.c579
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_qei.c599
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_rtc.c998
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_ssp.c644
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_systick.c192
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_timer.c582
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_uart.c1778
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/lpc_wwdt.c484
-rw-r--r--bsp/lpc408x/Libraries/Drivers/source/makefile91
-rw-r--r--bsp/lpc408x/Libraries/SConscript15
86 files changed, 0 insertions, 49286 deletions
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/arm_common_tables.h b/bsp/lpc408x/Libraries/CMSIS/Include/arm_common_tables.h
deleted file mode 100644
index 7245c4f12b..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/arm_common_tables.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ----------------------------------------------------------------------
-* Copyright (C) 2010 ARM Limited. All rights reserved.
-*
-* $Date: 11. November 2010
-* $Revision: V1.0.2
-*
-* Project: CMSIS DSP Library
-* Title: arm_common_tables.h
-*
-* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions
-*
-* Target Processor: Cortex-M4/Cortex-M3
-*
-* Version 1.0.2 2010/11/11
-* Documentation updated.
-*
-* Version 1.0.1 2010/10/05
-* Production release and review comments incorporated.
-*
-* Version 1.0.0 2010/09/20
-* Production release and review comments incorporated.
-* -------------------------------------------------------------------- */
-
-#ifndef _ARM_COMMON_TABLES_H
-#define _ARM_COMMON_TABLES_H
-
-#include "arm_math.h"
-
-extern uint16_t armBitRevTable[256];
-extern q15_t armRecipTableQ15[64];
-extern q31_t armRecipTableQ31[64];
-extern const q31_t realCoefAQ31[1024];
-extern const q31_t realCoefBQ31[1024];
-
-#endif /* ARM_COMMON_TABLES_H */
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/arm_math.h b/bsp/lpc408x/Libraries/CMSIS/Include/arm_math.h
deleted file mode 100644
index b33ae19370..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/arm_math.h
+++ /dev/null
@@ -1,7062 +0,0 @@
-/* ----------------------------------------------------------------------
- * Copyright (C) 2010 ARM Limited. All rights reserved.
- *
- * $Date: 15. July 2011
- * $Revision: V1.0.10
- *
- * Project: CMSIS DSP Library
- * Title: arm_math.h
- *
- * Description: Public header file for CMSIS DSP Library
- *
- * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
- *
- * Version 1.0.10 2011/7/15
- * Big Endian support added and Merged M0 and M3/M4 Source code.
- *
- * Version 1.0.3 2010/11/29
- * Re-organized the CMSIS folders and updated documentation.
- *
- * Version 1.0.2 2010/11/11
- * Documentation updated.
- *
- * Version 1.0.1 2010/10/05
- * Production release and review comments incorporated.
- *
- * Version 1.0.0 2010/09/20
- * Production release and review comments incorporated.
- * -------------------------------------------------------------------- */
-
-/**
- \mainpage CMSIS DSP Software Library
- *
- * <b>Introduction</b>
- *
- * This user manual describes the CMSIS DSP software library,
- * a suite of common signal processing functions for use on Cortex-M processor based devices.
- *
- * The library is divided into a number of modules each covering a specific category:
- * - Basic math functions
- * - Fast math functions
- * - Complex math functions
- * - Filters
- * - Matrix functions
- * - Transforms
- * - Motor control functions
- * - Statistical functions
- * - Support functions
- * - Interpolation functions
- *
- * The library has separate functions for operating on 8-bit integers, 16-bit integers,
- * 32-bit integer and 32-bit floating-point values.
- *
- * <b>Processor Support</b>
- *
- * The library is completely written in C and is fully CMSIS compliant.
- * High performance is achieved through maximum use of Cortex-M4 intrinsics.
- *
- * The supplied library source code also builds and runs on the Cortex-M3 and Cortex-M0 processor,
- * with the DSP intrinsics being emulated through software.
- *
- *
- * <b>Toolchain Support</b>
- *
- * The library has been developed and tested with MDK-ARM version 4.21.
- * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly.
- *
- * <b>Using the Library</b>
- *
- * The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder.
- * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)
- * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)
- * - arm_cortexM4l_math.lib (Little endian on Cortex-M4)
- * - arm_cortexM4b_math.lib (Big endian on Cortex-M4)
- * - arm_cortexM3l_math.lib (Little endian on Cortex-M3)
- * - arm_cortexM3b_math.lib (Big endian on Cortex-M3)
- * - arm_cortexM0l_math.lib (Little endian on Cortex-M0)
- * - arm_cortexM0b_math.lib (Big endian on Cortex-M3)
- *
- * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder.
- * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single
- * public header file <code> arm_math.h</code> for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants.
- * Define the appropriate pre processor MACRO ARM_MATH_CM4 or ARM_MATH_CM3 or
- * ARM_MATH_CM0 depending on the target processor in the application.
- *
- * <b>Examples</b>
- *
- * The library ships with a number of examples which demonstrate how to use the library functions.
- *
- * <b>Building the Library</b>
- *
- * The library installer contains project files to re build libraries on MDK Tool chain in the <code>CMSIS\DSP_Lib\Source\ARM</code> folder.
- * - arm_cortexM0b_math.uvproj
- * - arm_cortexM0l_math.uvproj
- * - arm_cortexM3b_math.uvproj
- * - arm_cortexM3l_math.uvproj
- * - arm_cortexM4b_math.uvproj
- * - arm_cortexM4l_math.uvproj
- * - arm_cortexM4bf_math.uvproj
- * - arm_cortexM4lf_math.uvproj
- *
- * Each library project have differant pre-processor macros.
- *
- * <b>ARM_MATH_CMx:</b>
- * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target
- * and ARM_MATH_CM0 for building library on cortex-M0 target.
- *
- * <b>ARM_MATH_BIG_ENDIAN:</b>
- * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.
- *
- * <b>ARM_MATH_MATRIX_CHECK:</b>
- * Define macro for checking on the input and output sizes of matrices
- *
- * <b>ARM_MATH_ROUNDING:</b>
- * Define macro for rounding on support functions
- *
- * <b>__FPU_PRESENT:</b>
- * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries
- *
- *
- * The project can be built by opening the appropriate project in MDK-ARM 4.21 chain and defining the optional pre processor MACROs detailed above.
- *
- * <b>Copyright Notice</b>
- *
- * Copyright (C) 2010 ARM Limited. All rights reserved.
- */
-
-
-/**
- * @defgroup groupMath Basic Math Functions
- * @ingroup DSP_Functions
- */
-
-/**
- * @defgroup groupFastMath Fast Math Functions
- * @ingroup DSP_Functions
- * This set of functions provides a fast approximation to sine, cosine, and square root.
- * As compared to most of the other functions in the CMSIS math library, the fast math functions
- * operate on individual values and not arrays.
- * There are separate functions for Q15, Q31, and floating-point data.
- *
- */
-
-/**
- * @defgroup groupCmplxMath Complex Math Functions
- * @ingroup DSP_Functions
- * This set of functions operates on complex data vectors.
- * The data in the complex arrays is stored in an interleaved fashion
- * (real, imag, real, imag, ...).
- * In the API functions, the number of samples in a complex array refers
- * to the number of complex values; the array contains twice this number of
- * real values.
- */
-
-/**
- * @defgroup groupFilters Filtering Functions
- * @ingroup DSP_Functions
- */
-
-/**
- * @defgroup groupMatrix Matrix Functions
- * @ingroup DSP_Functions
- *
- * This set of functions provides basic matrix math operations.
- * The functions operate on matrix data structures. For example,
- * the type
- * definition for the floating-point matrix structure is shown
- * below:
- * <pre>
- * typedef struct
- * {
- * uint16_t numRows; // number of rows of the matrix.
- * uint16_t numCols; // number of columns of the matrix.
- * float32_t *pData; // points to the data of the matrix.
- * } arm_matrix_instance_f32;
- * </pre>
- * There are similar definitions for Q15 and Q31 data types.
- *
- * The structure specifies the size of the matrix and then points to
- * an array of data. The array is of size <code>numRows X numCols</code>
- * and the values are arranged in row order. That is, the
- * matrix element (i, j) is stored at:
- * <pre>
- * pData[i*numCols + j]
- * </pre>
- *
- * \par Init Functions
- * There is an associated initialization function for each type of matrix
- * data structure.
- * The initialization function sets the values of the internal structure fields.
- * Refer to the function <code>arm_mat_init_f32()</code>, <code>arm_mat_init_q31()</code>
- * and <code>arm_mat_init_q15()</code> for floating-point, Q31 and Q15 types, respectively.
- *
- * \par
- * Use of the initialization function is optional. However, if initialization function is used
- * then the instance structure cannot be placed into a const data section.
- * To place the instance structure in a const data
- * section, manually initialize the data structure. For example:
- * <pre>
- * <code>arm_matrix_instance_f32 S = {nRows, nColumns, pData};</code>
- * <code>arm_matrix_instance_q31 S = {nRows, nColumns, pData};</code>
- * <code>arm_matrix_instance_q15 S = {nRows, nColumns, pData};</code>
- * </pre>
- * where <code>nRows</code> specifies the number of rows, <code>nColumns</code>
- * specifies the number of columns, and <code>pData</code> points to the
- * data array.
- *
- * \par Size Checking
- * By default all of the matrix functions perform size checking on the input and
- * output matrices. For example, the matrix addition function verifies that the
- * two input matrices and the output matrix all have the same number of rows and
- * columns. If the size check fails the functions return:
- * <pre>
- * ARM_MATH_SIZE_MISMATCH
- * </pre>
- * Otherwise the functions return
- * <pre>
- * ARM_MATH_SUCCESS
- * </pre>
- * There is some overhead associated with this matrix size checking.
- * The matrix size checking is enabled via the #define
- * <pre>
- * ARM_MATH_MATRIX_CHECK
- * </pre>
- * within the library project settings. By default this macro is defined
- * and size checking is enabled. By changing the project settings and
- * undefining this macro size checking is eliminated and the functions
- * run a bit faster. With size checking disabled the functions always
- * return <code>ARM_MATH_SUCCESS</code>.
- */
-
-/**
- * @defgroup groupTransforms Transform Functions
- * @ingroup DSP_Functions
- */
-
-/**
- * @defgroup groupController Controller Functions
- * @ingroup DSP_Functions
- */
-
-/**
- * @defgroup groupStats Statistics Functions
- * @ingroup DSP_Functions
- */
-/**
- * @defgroup groupSupport Support Functions
- * @ingroup DSP_Functions
- */
-
-/**
- * @defgroup groupInterpolation Interpolation Functions
- * @ingroup DSP_Functions
- * These functions perform 1- and 2-dimensional interpolation of data.
- * Linear interpolation is used for 1-dimensional data and
- * bilinear interpolation is used for 2-dimensional data.
- */
-
-/**
- * @defgroup groupExamples Examples
- * @ingroup DSP_Lib
- */
-#ifndef _ARM_MATH_H
-#define _ARM_MATH_H
-
-#define __CMSIS_GENERIC /* disable NVIC and Systick functions */
-
-#if defined (ARM_MATH_CM4)
- #include "core_cm4.h"
-#elif defined (ARM_MATH_CM3)
- #include "core_cm3.h"
-#elif defined (ARM_MATH_CM0)
- #include "core_cm0.h"
-#else
-#include "ARMCM4.h"
-#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....."
-#endif
-
-#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */
-#include "string.h"
- #include "math.h"
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
- /**
- * @brief Macros required for reciprocal calculation in Normalized LMS
- */
-
-#define DELTA_Q31 (0x100)
-#define DELTA_Q15 0x5
-#define INDEX_MASK 0x0000003F
-#define PI 3.14159265358979f
-
- /**
- * @brief Macros required for SINE and COSINE Fast math approximations
- */
-
-#define TABLE_SIZE 256
-#define TABLE_SPACING_Q31 0x800000
-#define TABLE_SPACING_Q15 0x80
-
- /**
- * @brief Macros required for SINE and COSINE Controller functions
- */
- /* 1.31(q31) Fixed value of 2/360 */
- /* -1 to +1 is divided into 360 values so total spacing is (2/360) */
-#define INPUT_SPACING 0xB60B61
-
-
- /**
- * @brief Error status returned by some functions in the library.
- */
-
- typedef enum
- {
- ARM_MATH_SUCCESS = 0, /**< No error */
- ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */
- ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */
- ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */
- ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */
- ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */
- ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */
- } arm_status;
-
- /**
- * @brief 8-bit fractional data type in 1.7 format.
- */
- typedef int8_t q7_t;
-
- /**
- * @brief 16-bit fractional data type in 1.15 format.
- */
- typedef int16_t q15_t;
-
- /**
- * @brief 32-bit fractional data type in 1.31 format.
- */
- typedef int32_t q31_t;
-
- /**
- * @brief 64-bit fractional data type in 1.63 format.
- */
- typedef int64_t q63_t;
-
- /**
- * @brief 32-bit floating-point type definition.
- */
- typedef float float32_t;
-
- /**
- * @brief 64-bit floating-point type definition.
- */
- typedef double float64_t;
-
- /**
- * @brief definition to read/write two 16 bit values.
- */
-#define __SIMD32(addr) (*(int32_t **) & (addr))
-
-#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)
- /**
- * @brief definition to pack two 16 bit values.
- */
-#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \
- (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) )
-
-#endif
-
-
- /**
- * @brief definition to pack four 8 bit values.
- */
-#ifndef ARM_MATH_BIG_ENDIAN
-
-#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \
- (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \
- (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \
- (((int32_t)(v3) << 24) & (int32_t)0xFF000000) )
-#else
-
-#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \
- (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \
- (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \
- (((int32_t)(v0) << 24) & (int32_t)0xFF000000) )
-
-#endif
-
-
- /**
- * @brief Clips Q63 to Q31 values.
- */
- static __INLINE q31_t clip_q63_to_q31(
- q63_t x)
- {
- return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?
- ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x;
- }
-
- /**
- * @brief Clips Q63 to Q15 values.
- */
- static __INLINE q15_t clip_q63_to_q15(
- q63_t x)
- {
- return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?
- ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15);
- }
-
- /**
- * @brief Clips Q31 to Q7 values.
- */
- static __INLINE q7_t clip_q31_to_q7(
- q31_t x)
- {
- return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ?
- ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x;
- }
-
- /**
- * @brief Clips Q31 to Q15 values.
- */
- static __INLINE q15_t clip_q31_to_q15(
- q31_t x)
- {
- return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ?
- ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x;
- }
-
- /**
- * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format.
- */
-
- static __INLINE q63_t mult32x64(
- q63_t x,
- q31_t y)
- {
- return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) +
- (((q63_t) (x >> 32) * y)));
- }
-
-
-#if defined (ARM_MATH_CM0) && defined ( __CC_ARM )
-#define __CLZ __clz
-#endif
-
-#if defined (ARM_MATH_CM0) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) )
-
- static __INLINE uint32_t __CLZ(q31_t data);
-
-
- static __INLINE uint32_t __CLZ(q31_t data)
- {
- uint32_t count = 0;
- uint32_t mask = 0x80000000;
-
- while((data & mask) == 0)
- {
- count += 1u;
- mask = mask >> 1u;
- }
-
- return(count);
-
- }
-
-#endif
-
- /**
- * @brief Function to Calculates 1/in(reciprocal) value of Q31 Data type.
- */
-
- static __INLINE uint32_t arm_recip_q31(
- q31_t in,
- q31_t * dst,
- q31_t * pRecipTable)
- {
-
- uint32_t out, tempVal;
- uint32_t index, i;
- uint32_t signBits;
-
- if(in > 0)
- {
- signBits = __CLZ(in) - 1;
- }
- else
- {
- signBits = __CLZ(-in) - 1;
- }
-
- /* Convert input sample to 1.31 format */
- in = in << signBits;
-
- /* calculation of index for initial approximated Val */
- index = (uint32_t) (in >> 24u);
- index = (index & INDEX_MASK);
-
- /* 1.31 with exp 1 */
- out = pRecipTable[index];
-
- /* calculation of reciprocal value */
- /* running approximation for two iterations */
- for (i = 0u; i < 2u; i++)
- {
- tempVal = (q31_t) (((q63_t) in * out) >> 31u);
- tempVal = 0x7FFFFFFF - tempVal;
- /* 1.31 with exp 1 */
- //out = (q31_t) (((q63_t) out * tempVal) >> 30u);
- out = (q31_t) clip_q63_to_q31(((q63_t) out * tempVal) >> 30u);
- }
-
- /* write output */
- *dst = out;
-
- /* return num of signbits of out = 1/in value */
- return (signBits + 1u);
-
- }
-
- /**
- * @brief Function to Calculates 1/in(reciprocal) value of Q15 Data type.
- */
- static __INLINE uint32_t arm_recip_q15(
- q15_t in,
- q15_t * dst,
- q15_t * pRecipTable)
- {
-
- uint32_t out = 0, tempVal = 0;
- uint32_t index = 0, i = 0;
- uint32_t signBits = 0;
-
- if(in > 0)
- {
- signBits = __CLZ(in) - 17;
- }
- else
- {
- signBits = __CLZ(-in) - 17;
- }
-
- /* Convert input sample to 1.15 format */
- in = in << signBits;
-
- /* calculation of index for initial approximated Val */
- index = in >> 8;
- index = (index & INDEX_MASK);
-
- /* 1.15 with exp 1 */
- out = pRecipTable[index];
-
- /* calculation of reciprocal value */
- /* running approximation for two iterations */
- for (i = 0; i < 2; i++)
- {
- tempVal = (q15_t) (((q31_t) in * out) >> 15);
- tempVal = 0x7FFF - tempVal;
- /* 1.15 with exp 1 */
- out = (q15_t) (((q31_t) out * tempVal) >> 14);
- }
-
- /* write output */
- *dst = out;
-
- /* return num of signbits of out = 1/in value */
- return (signBits + 1);
-
- }
-
-
- /*
- * @brief C custom defined intrinisic function for only M0 processors
- */
-#if defined(ARM_MATH_CM0)
-
- static __INLINE q31_t __SSAT(
- q31_t x,
- uint32_t y)
- {
- int32_t posMax, negMin;
- uint32_t i;
-
- posMax = 1;
- for (i = 0; i < (y - 1); i++)
- {
- posMax = posMax * 2;
- }
-
- if(x > 0)
- {
- posMax = (posMax - 1);
-
- if(x > posMax)
- {
- x = posMax;
- }
- }
- else
- {
- negMin = -posMax;
-
- if(x < negMin)
- {
- x = negMin;
- }
- }
- return (x);
-
-
- }
-
-#endif /* end of ARM_MATH_CM0 */
-
-
-
- /*
- * @brief C custom defined intrinsic function for M3 and M0 processors
- */
-#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)
-
- /*
- * @brief C custom defined QADD8 for M3 and M0 processors
- */
- static __INLINE q31_t __QADD8(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q7_t r, s, t, u;
-
- r = (char) x;
- s = (char) y;
-
- r = __SSAT((q31_t) (r + s), 8);
- s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8);
- t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8);
- u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8);
-
- sum = (((q31_t) u << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) |
- (((q31_t) s << 8) & 0x0000FF00) | (r & 0x000000FF);
-
- return sum;
-
- }
-
- /*
- * @brief C custom defined QSUB8 for M3 and M0 processors
- */
- static __INLINE q31_t __QSUB8(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s, t, u;
-
- r = (char) x;
- s = (char) y;
-
- r = __SSAT((r - s), 8);
- s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8;
- t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16;
- u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24;
-
- sum =
- (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & 0x000000FF);
-
- return sum;
- }
-
- /*
- * @brief C custom defined QADD16 for M3 and M0 processors
- */
-
- /*
- * @brief C custom defined QADD16 for M3 and M0 processors
- */
- static __INLINE q31_t __QADD16(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = __SSAT(r + s, 16);
- s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16;
-
- sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return sum;
-
- }
-
- /*
- * @brief C custom defined SHADD16 for M3 and M0 processors
- */
- static __INLINE q31_t __SHADD16(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = ((r >> 1) + (s >> 1));
- s = ((q31_t) ((x >> 17) + (y >> 17))) << 16;
-
- sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return sum;
-
- }
-
- /*
- * @brief C custom defined QSUB16 for M3 and M0 processors
- */
- static __INLINE q31_t __QSUB16(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = __SSAT(r - s, 16);
- s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16;
-
- sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return sum;
- }
-
- /*
- * @brief C custom defined SHSUB16 for M3 and M0 processors
- */
- static __INLINE q31_t __SHSUB16(
- q31_t x,
- q31_t y)
- {
-
- q31_t diff;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = ((r >> 1) - (s >> 1));
- s = (((x >> 17) - (y >> 17)) << 16);
-
- diff = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return diff;
- }
-
- /*
- * @brief C custom defined QASX for M3 and M0 processors
- */
- static __INLINE q31_t __QASX(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum = 0;
-
- sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) + (short) y))) << 16) +
- clip_q31_to_q15((q31_t) ((short) x - (short) (y >> 16)));
-
- return sum;
- }
-
- /*
- * @brief C custom defined SHASX for M3 and M0 processors
- */
- static __INLINE q31_t __SHASX(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = ((r >> 1) - (y >> 17));
- s = (((x >> 17) + (s >> 1)) << 16);
-
- sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return sum;
- }
-
-
- /*
- * @brief C custom defined QSAX for M3 and M0 processors
- */
- static __INLINE q31_t __QSAX(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum = 0;
-
- sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) - (short) y))) << 16) +
- clip_q31_to_q15((q31_t) ((short) x + (short) (y >> 16)));
-
- return sum;
- }
-
- /*
- * @brief C custom defined SHSAX for M3 and M0 processors
- */
- static __INLINE q31_t __SHSAX(
- q31_t x,
- q31_t y)
- {
-
- q31_t sum;
- q31_t r, s;
-
- r = (short) x;
- s = (short) y;
-
- r = ((r >> 1) + (y >> 17));
- s = (((x >> 17) - (s >> 1)) << 16);
-
- sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
-
- return sum;
- }
-
- /*
- * @brief C custom defined SMUSDX for M3 and M0 processors
- */
- static __INLINE q31_t __SMUSDX(
- q31_t x,
- q31_t y)
- {
-
- return ((q31_t)(((short) x * (short) (y >> 16)) -
- ((short) (x >> 16) * (short) y)));
- }
-
- /*
- * @brief C custom defined SMUADX for M3 and M0 processors
- */
- static __INLINE q31_t __SMUADX(
- q31_t x,
- q31_t y)
- {
-
- return ((q31_t)(((short) x * (short) (y >> 16)) +
- ((short) (x >> 16) * (short) y)));
- }
-
- /*
- * @brief C custom defined QADD for M3 and M0 processors
- */
- static __INLINE q31_t __QADD(
- q31_t x,
- q31_t y)
- {
- return clip_q63_to_q31((q63_t) x + y);
- }
-
- /*
- * @brief C custom defined QSUB for M3 and M0 processors
- */
- static __INLINE q31_t __QSUB(
- q31_t x,
- q31_t y)
- {
- return clip_q63_to_q31((q63_t) x - y);
- }
-
- /*
- * @brief C custom defined SMLAD for M3 and M0 processors
- */
- static __INLINE q31_t __SMLAD(
- q31_t x,
- q31_t y,
- q31_t sum)
- {
-
- return (sum + ((short) (x >> 16) * (short) (y >> 16)) +
- ((short) x * (short) y));
- }
-
- /*
- * @brief C custom defined SMLADX for M3 and M0 processors
- */
- static __INLINE q31_t __SMLADX(
- q31_t x,
- q31_t y,
- q31_t sum)
- {
-
- return (sum + ((short) (x >> 16) * (short) (y)) +
- ((short) x * (short) (y >> 16)));
- }
-
- /*
- * @brief C custom defined SMLSDX for M3 and M0 processors
- */
- static __INLINE q31_t __SMLSDX(
- q31_t x,
- q31_t y,
- q31_t sum)
- {
-
- return (sum - ((short) (x >> 16) * (short) (y)) +
- ((short) x * (short) (y >> 16)));
- }
-
- /*
- * @brief C custom defined SMLALD for M3 and M0 processors
- */
- static __INLINE q63_t __SMLALD(
- q31_t x,
- q31_t y,
- q63_t sum)
- {
-
- return (sum + ((short) (x >> 16) * (short) (y >> 16)) +
- ((short) x * (short) y));
- }
-
- /*
- * @brief C custom defined SMLALDX for M3 and M0 processors
- */
- static __INLINE q63_t __SMLALDX(
- q31_t x,
- q31_t y,
- q63_t sum)
- {
-
- return (sum + ((short) (x >> 16) * (short) y)) +
- ((short) x * (short) (y >> 16));
- }
-
- /*
- * @brief C custom defined SMUAD for M3 and M0 processors
- */
- static __INLINE q31_t __SMUAD(
- q31_t x,
- q31_t y)
- {
-
- return (((x >> 16) * (y >> 16)) +
- (((x << 16) >> 16) * ((y << 16) >> 16)));
- }
-
- /*
- * @brief C custom defined SMUSD for M3 and M0 processors
- */
- static __INLINE q31_t __SMUSD(
- q31_t x,
- q31_t y)
- {
-
- return (-((x >> 16) * (y >> 16)) +
- (((x << 16) >> 16) * ((y << 16) >> 16)));
- }
-
-
-
-
-#endif /* (ARM_MATH_CM3) || defined (ARM_MATH_CM0) */
-
-
- /**
- * @brief Instance structure for the Q7 FIR filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of filter coefficients in the filter. */
- q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- } arm_fir_instance_q7;
-
- /**
- * @brief Instance structure for the Q15 FIR filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of filter coefficients in the filter. */
- q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- } arm_fir_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 FIR filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of filter coefficients in the filter. */
- q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- } arm_fir_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point FIR filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of filter coefficients in the filter. */
- float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- } arm_fir_instance_f32;
-
-
- /**
- * @brief Processing function for the Q7 FIR filter.
- * @param[in] *S points to an instance of the Q7 FIR filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_q7(
- const arm_fir_instance_q7 * S,
- q7_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the Q7 FIR filter.
- * @param[in,out] *S points to an instance of the Q7 FIR structure.
- * @param[in] numTaps Number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of samples that are processed.
- * @return none
- */
- void arm_fir_init_q7(
- arm_fir_instance_q7 * S,
- uint16_t numTaps,
- q7_t * pCoeffs,
- q7_t * pState,
- uint32_t blockSize);
-
-
- /**
- * @brief Processing function for the Q15 FIR filter.
- * @param[in] *S points to an instance of the Q15 FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_q15(
- const arm_fir_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q15 FIR filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_fast_q15(
- const arm_fir_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q15 FIR filter.
- * @param[in,out] *S points to an instance of the Q15 FIR filter structure.
- * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of samples that are processed at a time.
- * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if
- * <code>numTaps</code> is not a supported value.
- */
-
- arm_status arm_fir_init_q15(
- arm_fir_instance_q15 * S,
- uint16_t numTaps,
- q15_t * pCoeffs,
- q15_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q31 FIR filter.
- * @param[in] *S points to an instance of the Q31 FIR filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_q31(
- const arm_fir_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q31 FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_fast_q31(
- const arm_fir_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q31 FIR filter.
- * @param[in,out] *S points to an instance of the Q31 FIR structure.
- * @param[in] numTaps Number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of samples that are processed at a time.
- * @return none.
- */
- void arm_fir_init_q31(
- arm_fir_instance_q31 * S,
- uint16_t numTaps,
- q31_t * pCoeffs,
- q31_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the floating-point FIR filter.
- * @param[in] *S points to an instance of the floating-point FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_f32(
- const arm_fir_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the floating-point FIR filter.
- * @param[in,out] *S points to an instance of the floating-point FIR filter structure.
- * @param[in] numTaps Number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of samples that are processed at a time.
- * @return none.
- */
- void arm_fir_init_f32(
- arm_fir_instance_f32 * S,
- uint16_t numTaps,
- float32_t * pCoeffs,
- float32_t * pState,
- uint32_t blockSize);
-
-
- /**
- * @brief Instance structure for the Q15 Biquad cascade filter.
- */
- typedef struct
- {
- int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
- q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
- q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
- int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */
-
- } arm_biquad_casd_df1_inst_q15;
-
-
- /**
- * @brief Instance structure for the Q31 Biquad cascade filter.
- */
- typedef struct
- {
- uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
- q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
- q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
- uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */
-
- } arm_biquad_casd_df1_inst_q31;
-
- /**
- * @brief Instance structure for the floating-point Biquad cascade filter.
- */
- typedef struct
- {
- uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
- float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
- float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
-
-
- } arm_biquad_casd_df1_inst_f32;
-
-
-
- /**
- * @brief Processing function for the Q15 Biquad cascade filter.
- * @param[in] *S points to an instance of the Q15 Biquad cascade structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df1_q15(
- const arm_biquad_casd_df1_inst_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q15 Biquad cascade filter.
- * @param[in,out] *S points to an instance of the Q15 Biquad cascade structure.
- * @param[in] numStages number of 2nd order stages in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format
- * @return none
- */
-
- void arm_biquad_cascade_df1_init_q15(
- arm_biquad_casd_df1_inst_q15 * S,
- uint8_t numStages,
- q15_t * pCoeffs,
- q15_t * pState,
- int8_t postShift);
-
-
- /**
- * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q15 Biquad cascade structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df1_fast_q15(
- const arm_biquad_casd_df1_inst_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Processing function for the Q31 Biquad cascade filter
- * @param[in] *S points to an instance of the Q31 Biquad cascade structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df1_q31(
- const arm_biquad_casd_df1_inst_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q31 Biquad cascade structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df1_fast_q31(
- const arm_biquad_casd_df1_inst_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q31 Biquad cascade filter.
- * @param[in,out] *S points to an instance of the Q31 Biquad cascade structure.
- * @param[in] numStages number of 2nd order stages in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format
- * @return none
- */
-
- void arm_biquad_cascade_df1_init_q31(
- arm_biquad_casd_df1_inst_q31 * S,
- uint8_t numStages,
- q31_t * pCoeffs,
- q31_t * pState,
- int8_t postShift);
-
- /**
- * @brief Processing function for the floating-point Biquad cascade filter.
- * @param[in] *S points to an instance of the floating-point Biquad cascade structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df1_f32(
- const arm_biquad_casd_df1_inst_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the floating-point Biquad cascade filter.
- * @param[in,out] *S points to an instance of the floating-point Biquad cascade structure.
- * @param[in] numStages number of 2nd order stages in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @return none
- */
-
- void arm_biquad_cascade_df1_init_f32(
- arm_biquad_casd_df1_inst_f32 * S,
- uint8_t numStages,
- float32_t * pCoeffs,
- float32_t * pState);
-
-
- /**
- * @brief Instance structure for the floating-point matrix structure.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows of the matrix. */
- uint16_t numCols; /**< number of columns of the matrix. */
- float32_t *pData; /**< points to the data of the matrix. */
- } arm_matrix_instance_f32;
-
- /**
- * @brief Instance structure for the Q15 matrix structure.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows of the matrix. */
- uint16_t numCols; /**< number of columns of the matrix. */
- q15_t *pData; /**< points to the data of the matrix. */
-
- } arm_matrix_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 matrix structure.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows of the matrix. */
- uint16_t numCols; /**< number of columns of the matrix. */
- q31_t *pData; /**< points to the data of the matrix. */
-
- } arm_matrix_instance_q31;
-
-
-
- /**
- * @brief Floating-point matrix addition.
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_add_f32(
- const arm_matrix_instance_f32 * pSrcA,
- const arm_matrix_instance_f32 * pSrcB,
- arm_matrix_instance_f32 * pDst);
-
- /**
- * @brief Q15 matrix addition.
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_add_q15(
- const arm_matrix_instance_q15 * pSrcA,
- const arm_matrix_instance_q15 * pSrcB,
- arm_matrix_instance_q15 * pDst);
-
- /**
- * @brief Q31 matrix addition.
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_add_q31(
- const arm_matrix_instance_q31 * pSrcA,
- const arm_matrix_instance_q31 * pSrcB,
- arm_matrix_instance_q31 * pDst);
-
-
- /**
- * @brief Floating-point matrix transpose.
- * @param[in] *pSrc points to the input matrix
- * @param[out] *pDst points to the output matrix
- * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code>
- * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_trans_f32(
- const arm_matrix_instance_f32 * pSrc,
- arm_matrix_instance_f32 * pDst);
-
-
- /**
- * @brief Q15 matrix transpose.
- * @param[in] *pSrc points to the input matrix
- * @param[out] *pDst points to the output matrix
- * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code>
- * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_trans_q15(
- const arm_matrix_instance_q15 * pSrc,
- arm_matrix_instance_q15 * pDst);
-
- /**
- * @brief Q31 matrix transpose.
- * @param[in] *pSrc points to the input matrix
- * @param[out] *pDst points to the output matrix
- * @return The function returns either <code>ARM_MATH_SIZE_MISMATCH</code>
- * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_trans_q31(
- const arm_matrix_instance_q31 * pSrc,
- arm_matrix_instance_q31 * pDst);
-
-
- /**
- * @brief Floating-point matrix multiplication
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_mult_f32(
- const arm_matrix_instance_f32 * pSrcA,
- const arm_matrix_instance_f32 * pSrcB,
- arm_matrix_instance_f32 * pDst);
-
- /**
- * @brief Q15 matrix multiplication
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_mult_q15(
- const arm_matrix_instance_q15 * pSrcA,
- const arm_matrix_instance_q15 * pSrcB,
- arm_matrix_instance_q15 * pDst,
- q15_t * pState);
-
- /**
- * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @param[in] *pState points to the array for storing intermediate results
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_mult_fast_q15(
- const arm_matrix_instance_q15 * pSrcA,
- const arm_matrix_instance_q15 * pSrcB,
- arm_matrix_instance_q15 * pDst,
- q15_t * pState);
-
- /**
- * @brief Q31 matrix multiplication
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_mult_q31(
- const arm_matrix_instance_q31 * pSrcA,
- const arm_matrix_instance_q31 * pSrcB,
- arm_matrix_instance_q31 * pDst);
-
- /**
- * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_mult_fast_q31(
- const arm_matrix_instance_q31 * pSrcA,
- const arm_matrix_instance_q31 * pSrcB,
- arm_matrix_instance_q31 * pDst);
-
-
- /**
- * @brief Floating-point matrix subtraction
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_sub_f32(
- const arm_matrix_instance_f32 * pSrcA,
- const arm_matrix_instance_f32 * pSrcB,
- arm_matrix_instance_f32 * pDst);
-
- /**
- * @brief Q15 matrix subtraction
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_sub_q15(
- const arm_matrix_instance_q15 * pSrcA,
- const arm_matrix_instance_q15 * pSrcB,
- arm_matrix_instance_q15 * pDst);
-
- /**
- * @brief Q31 matrix subtraction
- * @param[in] *pSrcA points to the first input matrix structure
- * @param[in] *pSrcB points to the second input matrix structure
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_sub_q31(
- const arm_matrix_instance_q31 * pSrcA,
- const arm_matrix_instance_q31 * pSrcB,
- arm_matrix_instance_q31 * pDst);
-
- /**
- * @brief Floating-point matrix scaling.
- * @param[in] *pSrc points to the input matrix
- * @param[in] scale scale factor
- * @param[out] *pDst points to the output matrix
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_scale_f32(
- const arm_matrix_instance_f32 * pSrc,
- float32_t scale,
- arm_matrix_instance_f32 * pDst);
-
- /**
- * @brief Q15 matrix scaling.
- * @param[in] *pSrc points to input matrix
- * @param[in] scaleFract fractional portion of the scale factor
- * @param[in] shift number of bits to shift the result by
- * @param[out] *pDst points to output matrix
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_scale_q15(
- const arm_matrix_instance_q15 * pSrc,
- q15_t scaleFract,
- int32_t shift,
- arm_matrix_instance_q15 * pDst);
-
- /**
- * @brief Q31 matrix scaling.
- * @param[in] *pSrc points to input matrix
- * @param[in] scaleFract fractional portion of the scale factor
- * @param[in] shift number of bits to shift the result by
- * @param[out] *pDst points to output matrix structure
- * @return The function returns either
- * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.
- */
-
- arm_status arm_mat_scale_q31(
- const arm_matrix_instance_q31 * pSrc,
- q31_t scaleFract,
- int32_t shift,
- arm_matrix_instance_q31 * pDst);
-
-
- /**
- * @brief Q31 matrix initialization.
- * @param[in,out] *S points to an instance of the floating-point matrix structure.
- * @param[in] nRows number of rows in the matrix.
- * @param[in] nColumns number of columns in the matrix.
- * @param[in] *pData points to the matrix data array.
- * @return none
- */
-
- void arm_mat_init_q31(
- arm_matrix_instance_q31 * S,
- uint16_t nRows,
- uint16_t nColumns,
- q31_t *pData);
-
- /**
- * @brief Q15 matrix initialization.
- * @param[in,out] *S points to an instance of the floating-point matrix structure.
- * @param[in] nRows number of rows in the matrix.
- * @param[in] nColumns number of columns in the matrix.
- * @param[in] *pData points to the matrix data array.
- * @return none
- */
-
- void arm_mat_init_q15(
- arm_matrix_instance_q15 * S,
- uint16_t nRows,
- uint16_t nColumns,
- q15_t *pData);
-
- /**
- * @brief Floating-point matrix initialization.
- * @param[in,out] *S points to an instance of the floating-point matrix structure.
- * @param[in] nRows number of rows in the matrix.
- * @param[in] nColumns number of columns in the matrix.
- * @param[in] *pData points to the matrix data array.
- * @return none
- */
-
- void arm_mat_init_f32(
- arm_matrix_instance_f32 * S,
- uint16_t nRows,
- uint16_t nColumns,
- float32_t *pData);
-
-
-
- /**
- * @brief Instance structure for the Q15 PID Control.
- */
- typedef struct
- {
- q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */
- #ifdef ARM_MATH_CM0
- q15_t A1;
- q15_t A2;
- #else
- q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/
- #endif
- q15_t state[3]; /**< The state array of length 3. */
- q15_t Kp; /**< The proportional gain. */
- q15_t Ki; /**< The integral gain. */
- q15_t Kd; /**< The derivative gain. */
- } arm_pid_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 PID Control.
- */
- typedef struct
- {
- q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */
- q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */
- q31_t A2; /**< The derived gain, A2 = Kd . */
- q31_t state[3]; /**< The state array of length 3. */
- q31_t Kp; /**< The proportional gain. */
- q31_t Ki; /**< The integral gain. */
- q31_t Kd; /**< The derivative gain. */
-
- } arm_pid_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point PID Control.
- */
- typedef struct
- {
- float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */
- float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */
- float32_t A2; /**< The derived gain, A2 = Kd . */
- float32_t state[3]; /**< The state array of length 3. */
- float32_t Kp; /**< The proportional gain. */
- float32_t Ki; /**< The integral gain. */
- float32_t Kd; /**< The derivative gain. */
- } arm_pid_instance_f32;
-
-
-
- /**
- * @brief Initialization function for the floating-point PID Control.
- * @param[in,out] *S points to an instance of the PID structure.
- * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state.
- * @return none.
- */
- void arm_pid_init_f32(
- arm_pid_instance_f32 * S,
- int32_t resetStateFlag);
-
- /**
- * @brief Reset function for the floating-point PID Control.
- * @param[in,out] *S is an instance of the floating-point PID Control structure
- * @return none
- */
- void arm_pid_reset_f32(
- arm_pid_instance_f32 * S);
-
-
- /**
- * @brief Initialization function for the Q31 PID Control.
- * @param[in,out] *S points to an instance of the Q15 PID structure.
- * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state.
- * @return none.
- */
- void arm_pid_init_q31(
- arm_pid_instance_q31 * S,
- int32_t resetStateFlag);
-
-
- /**
- * @brief Reset function for the Q31 PID Control.
- * @param[in,out] *S points to an instance of the Q31 PID Control structure
- * @return none
- */
-
- void arm_pid_reset_q31(
- arm_pid_instance_q31 * S);
-
- /**
- * @brief Initialization function for the Q15 PID Control.
- * @param[in,out] *S points to an instance of the Q15 PID structure.
- * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state.
- * @return none.
- */
- void arm_pid_init_q15(
- arm_pid_instance_q15 * S,
- int32_t resetStateFlag);
-
- /**
- * @brief Reset function for the Q15 PID Control.
- * @param[in,out] *S points to an instance of the q15 PID Control structure
- * @return none
- */
- void arm_pid_reset_q15(
- arm_pid_instance_q15 * S);
-
-
- /**
- * @brief Instance structure for the floating-point Linear Interpolate function.
- */
- typedef struct
- {
- uint32_t nValues;
- float32_t x1;
- float32_t xSpacing;
- float32_t *pYData; /**< pointer to the table of Y values */
- } arm_linear_interp_instance_f32;
-
- /**
- * @brief Instance structure for the floating-point bilinear interpolation function.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows in the data table. */
- uint16_t numCols; /**< number of columns in the data table. */
- float32_t *pData; /**< points to the data table. */
- } arm_bilinear_interp_instance_f32;
-
- /**
- * @brief Instance structure for the Q31 bilinear interpolation function.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows in the data table. */
- uint16_t numCols; /**< number of columns in the data table. */
- q31_t *pData; /**< points to the data table. */
- } arm_bilinear_interp_instance_q31;
-
- /**
- * @brief Instance structure for the Q15 bilinear interpolation function.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows in the data table. */
- uint16_t numCols; /**< number of columns in the data table. */
- q15_t *pData; /**< points to the data table. */
- } arm_bilinear_interp_instance_q15;
-
- /**
- * @brief Instance structure for the Q15 bilinear interpolation function.
- */
-
- typedef struct
- {
- uint16_t numRows; /**< number of rows in the data table. */
- uint16_t numCols; /**< number of columns in the data table. */
- q7_t *pData; /**< points to the data table. */
- } arm_bilinear_interp_instance_q7;
-
-
- /**
- * @brief Q7 vector multiplication.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_mult_q7(
- q7_t * pSrcA,
- q7_t * pSrcB,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q15 vector multiplication.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_mult_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q31 vector multiplication.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_mult_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Floating-point vector multiplication.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_mult_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- float32_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Instance structure for the Q15 CFFT/CIFFT function.
- */
-
- typedef struct
- {
- uint16_t fftLen; /**< length of the FFT. */
- uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
- uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
- q15_t *pTwiddle; /**< points to the twiddle factor table. */
- uint16_t *pBitRevTable; /**< points to the bit reversal table. */
- uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
- } arm_cfft_radix4_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 CFFT/CIFFT function.
- */
-
- typedef struct
- {
- uint16_t fftLen; /**< length of the FFT. */
- uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
- uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
- q31_t *pTwiddle; /**< points to the twiddle factor table. */
- uint16_t *pBitRevTable; /**< points to the bit reversal table. */
- uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
- } arm_cfft_radix4_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point CFFT/CIFFT function.
- */
-
- typedef struct
- {
- uint16_t fftLen; /**< length of the FFT. */
- uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
- uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
- float32_t *pTwiddle; /**< points to the twiddle factor table. */
- uint16_t *pBitRevTable; /**< points to the bit reversal table. */
- uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
- float32_t onebyfftLen; /**< value of 1/fftLen. */
- } arm_cfft_radix4_instance_f32;
-
- /**
- * @brief Processing function for the Q15 CFFT/CIFFT.
- * @param[in] *S points to an instance of the Q15 CFFT/CIFFT structure.
- * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.
- * @return none.
- */
-
- void arm_cfft_radix4_q15(
- const arm_cfft_radix4_instance_q15 * S,
- q15_t * pSrc);
-
- /**
- * @brief Initialization function for the Q15 CFFT/CIFFT.
- * @param[in,out] *S points to an instance of the Q15 CFFT/CIFFT structure.
- * @param[in] fftLen length of the FFT.
- * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.
- */
-
- arm_status arm_cfft_radix4_init_q15(
- arm_cfft_radix4_instance_q15 * S,
- uint16_t fftLen,
- uint8_t ifftFlag,
- uint8_t bitReverseFlag);
-
- /**
- * @brief Processing function for the Q31 CFFT/CIFFT.
- * @param[in] *S points to an instance of the Q31 CFFT/CIFFT structure.
- * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.
- * @return none.
- */
-
- void arm_cfft_radix4_q31(
- const arm_cfft_radix4_instance_q31 * S,
- q31_t * pSrc);
-
- /**
- * @brief Initialization function for the Q31 CFFT/CIFFT.
- * @param[in,out] *S points to an instance of the Q31 CFFT/CIFFT structure.
- * @param[in] fftLen length of the FFT.
- * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.
- */
-
- arm_status arm_cfft_radix4_init_q31(
- arm_cfft_radix4_instance_q31 * S,
- uint16_t fftLen,
- uint8_t ifftFlag,
- uint8_t bitReverseFlag);
-
- /**
- * @brief Processing function for the floating-point CFFT/CIFFT.
- * @param[in] *S points to an instance of the floating-point CFFT/CIFFT structure.
- * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.
- * @return none.
- */
-
- void arm_cfft_radix4_f32(
- const arm_cfft_radix4_instance_f32 * S,
- float32_t * pSrc);
-
- /**
- * @brief Initialization function for the floating-point CFFT/CIFFT.
- * @param[in,out] *S points to an instance of the floating-point CFFT/CIFFT structure.
- * @param[in] fftLen length of the FFT.
- * @param[in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.
- */
-
- arm_status arm_cfft_radix4_init_f32(
- arm_cfft_radix4_instance_f32 * S,
- uint16_t fftLen,
- uint8_t ifftFlag,
- uint8_t bitReverseFlag);
-
-
-
- /*----------------------------------------------------------------------
- * Internal functions prototypes FFT function
- ----------------------------------------------------------------------*/
-
- /**
- * @brief Core function for the floating-point CFFT butterfly process.
- * @param[in, out] *pSrc points to the in-place buffer of floating-point data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef points to the twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @return none.
- */
-
- void arm_radix4_butterfly_f32(
- float32_t * pSrc,
- uint16_t fftLen,
- float32_t * pCoef,
- uint16_t twidCoefModifier);
-
- /**
- * @brief Core function for the floating-point CIFFT butterfly process.
- * @param[in, out] *pSrc points to the in-place buffer of floating-point data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef points to twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @param[in] onebyfftLen value of 1/fftLen.
- * @return none.
- */
-
- void arm_radix4_butterfly_inverse_f32(
- float32_t * pSrc,
- uint16_t fftLen,
- float32_t * pCoef,
- uint16_t twidCoefModifier,
- float32_t onebyfftLen);
-
- /**
- * @brief In-place bit reversal function.
- * @param[in, out] *pSrc points to the in-place buffer of floating-point data type.
- * @param[in] fftSize length of the FFT.
- * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table.
- * @param[in] *pBitRevTab points to the bit reversal table.
- * @return none.
- */
-
- void arm_bitreversal_f32(
- float32_t *pSrc,
- uint16_t fftSize,
- uint16_t bitRevFactor,
- uint16_t *pBitRevTab);
-
- /**
- * @brief Core function for the Q31 CFFT butterfly process.
- * @param[in, out] *pSrc points to the in-place buffer of Q31 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef points to twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @return none.
- */
-
- void arm_radix4_butterfly_q31(
- q31_t *pSrc,
- uint32_t fftLen,
- q31_t *pCoef,
- uint32_t twidCoefModifier);
-
- /**
- * @brief Core function for the Q31 CIFFT butterfly process.
- * @param[in, out] *pSrc points to the in-place buffer of Q31 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef points to twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @return none.
- */
-
- void arm_radix4_butterfly_inverse_q31(
- q31_t * pSrc,
- uint32_t fftLen,
- q31_t * pCoef,
- uint32_t twidCoefModifier);
-
- /**
- * @brief In-place bit reversal function.
- * @param[in, out] *pSrc points to the in-place buffer of Q31 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table
- * @param[in] *pBitRevTab points to bit reversal table.
- * @return none.
- */
-
- void arm_bitreversal_q31(
- q31_t * pSrc,
- uint32_t fftLen,
- uint16_t bitRevFactor,
- uint16_t *pBitRevTab);
-
- /**
- * @brief Core function for the Q15 CFFT butterfly process.
- * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef16 points to twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @return none.
- */
-
- void arm_radix4_butterfly_q15(
- q15_t *pSrc16,
- uint32_t fftLen,
- q15_t *pCoef16,
- uint32_t twidCoefModifier);
-
- /**
- * @brief Core function for the Q15 CIFFT butterfly process.
- * @param[in, out] *pSrc16 points to the in-place buffer of Q15 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] *pCoef16 points to twiddle coefficient buffer.
- * @param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.
- * @return none.
- */
-
- void arm_radix4_butterfly_inverse_q15(
- q15_t *pSrc16,
- uint32_t fftLen,
- q15_t *pCoef16,
- uint32_t twidCoefModifier);
-
- /**
- * @brief In-place bit reversal function.
- * @param[in, out] *pSrc points to the in-place buffer of Q15 data type.
- * @param[in] fftLen length of the FFT.
- * @param[in] bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table
- * @param[in] *pBitRevTab points to bit reversal table.
- * @return none.
- */
-
- void arm_bitreversal_q15(
- q15_t * pSrc,
- uint32_t fftLen,
- uint16_t bitRevFactor,
- uint16_t *pBitRevTab);
-
- /**
- * @brief Instance structure for the Q15 RFFT/RIFFT function.
- */
-
- typedef struct
- {
- uint32_t fftLenReal; /**< length of the real FFT. */
- uint32_t fftLenBy2; /**< length of the complex FFT. */
- uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
- uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
- uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
- q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */
- arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */
- } arm_rfft_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 RFFT/RIFFT function.
- */
-
- typedef struct
- {
- uint32_t fftLenReal; /**< length of the real FFT. */
- uint32_t fftLenBy2; /**< length of the complex FFT. */
- uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
- uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
- uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
- q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */
- arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */
- } arm_rfft_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point RFFT/RIFFT function.
- */
-
- typedef struct
- {
- uint32_t fftLenReal; /**< length of the real FFT. */
- uint16_t fftLenBy2; /**< length of the complex FFT. */
- uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
- uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
- uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
- float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
- float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */
- arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */
- } arm_rfft_instance_f32;
-
- /**
- * @brief Processing function for the Q15 RFFT/RIFFT.
- * @param[in] *S points to an instance of the Q15 RFFT/RIFFT structure.
- * @param[in] *pSrc points to the input buffer.
- * @param[out] *pDst points to the output buffer.
- * @return none.
- */
-
- void arm_rfft_q15(
- const arm_rfft_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst);
-
- /**
- * @brief Initialization function for the Q15 RFFT/RIFFT.
- * @param[in, out] *S points to an instance of the Q15 RFFT/RIFFT structure.
- * @param[in] *S_CFFT points to an instance of the Q15 CFFT/CIFFT structure.
- * @param[in] fftLenReal length of the FFT.
- * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.
- */
-
- arm_status arm_rfft_init_q15(
- arm_rfft_instance_q15 * S,
- arm_cfft_radix4_instance_q15 * S_CFFT,
- uint32_t fftLenReal,
- uint32_t ifftFlagR,
- uint32_t bitReverseFlag);
-
- /**
- * @brief Processing function for the Q31 RFFT/RIFFT.
- * @param[in] *S points to an instance of the Q31 RFFT/RIFFT structure.
- * @param[in] *pSrc points to the input buffer.
- * @param[out] *pDst points to the output buffer.
- * @return none.
- */
-
- void arm_rfft_q31(
- const arm_rfft_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst);
-
- /**
- * @brief Initialization function for the Q31 RFFT/RIFFT.
- * @param[in, out] *S points to an instance of the Q31 RFFT/RIFFT structure.
- * @param[in, out] *S_CFFT points to an instance of the Q31 CFFT/CIFFT structure.
- * @param[in] fftLenReal length of the FFT.
- * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.
- */
-
- arm_status arm_rfft_init_q31(
- arm_rfft_instance_q31 * S,
- arm_cfft_radix4_instance_q31 * S_CFFT,
- uint32_t fftLenReal,
- uint32_t ifftFlagR,
- uint32_t bitReverseFlag);
-
- /**
- * @brief Initialization function for the floating-point RFFT/RIFFT.
- * @param[in,out] *S points to an instance of the floating-point RFFT/RIFFT structure.
- * @param[in,out] *S_CFFT points to an instance of the floating-point CFFT/CIFFT structure.
- * @param[in] fftLenReal length of the FFT.
- * @param[in] ifftFlagR flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.
- * @param[in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.
- */
-
- arm_status arm_rfft_init_f32(
- arm_rfft_instance_f32 * S,
- arm_cfft_radix4_instance_f32 * S_CFFT,
- uint32_t fftLenReal,
- uint32_t ifftFlagR,
- uint32_t bitReverseFlag);
-
- /**
- * @brief Processing function for the floating-point RFFT/RIFFT.
- * @param[in] *S points to an instance of the floating-point RFFT/RIFFT structure.
- * @param[in] *pSrc points to the input buffer.
- * @param[out] *pDst points to the output buffer.
- * @return none.
- */
-
- void arm_rfft_f32(
- const arm_rfft_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst);
-
- /**
- * @brief Instance structure for the floating-point DCT4/IDCT4 function.
- */
-
- typedef struct
- {
- uint16_t N; /**< length of the DCT4. */
- uint16_t Nby2; /**< half of the length of the DCT4. */
- float32_t normalize; /**< normalizing factor. */
- float32_t *pTwiddle; /**< points to the twiddle factor table. */
- float32_t *pCosFactor; /**< points to the cosFactor table. */
- arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */
- arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */
- } arm_dct4_instance_f32;
-
- /**
- * @brief Initialization function for the floating-point DCT4/IDCT4.
- * @param[in,out] *S points to an instance of floating-point DCT4/IDCT4 structure.
- * @param[in] *S_RFFT points to an instance of floating-point RFFT/RIFFT structure.
- * @param[in] *S_CFFT points to an instance of floating-point CFFT/CIFFT structure.
- * @param[in] N length of the DCT4.
- * @param[in] Nby2 half of the length of the DCT4.
- * @param[in] normalize normalizing factor.
- * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length.
- */
-
- arm_status arm_dct4_init_f32(
- arm_dct4_instance_f32 * S,
- arm_rfft_instance_f32 * S_RFFT,
- arm_cfft_radix4_instance_f32 * S_CFFT,
- uint16_t N,
- uint16_t Nby2,
- float32_t normalize);
-
- /**
- * @brief Processing function for the floating-point DCT4/IDCT4.
- * @param[in] *S points to an instance of the floating-point DCT4/IDCT4 structure.
- * @param[in] *pState points to state buffer.
- * @param[in,out] *pInlineBuffer points to the in-place input and output buffer.
- * @return none.
- */
-
- void arm_dct4_f32(
- const arm_dct4_instance_f32 * S,
- float32_t * pState,
- float32_t * pInlineBuffer);
-
- /**
- * @brief Instance structure for the Q31 DCT4/IDCT4 function.
- */
-
- typedef struct
- {
- uint16_t N; /**< length of the DCT4. */
- uint16_t Nby2; /**< half of the length of the DCT4. */
- q31_t normalize; /**< normalizing factor. */
- q31_t *pTwiddle; /**< points to the twiddle factor table. */
- q31_t *pCosFactor; /**< points to the cosFactor table. */
- arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */
- arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */
- } arm_dct4_instance_q31;
-
- /**
- * @brief Initialization function for the Q31 DCT4/IDCT4.
- * @param[in,out] *S points to an instance of Q31 DCT4/IDCT4 structure.
- * @param[in] *S_RFFT points to an instance of Q31 RFFT/RIFFT structure
- * @param[in] *S_CFFT points to an instance of Q31 CFFT/CIFFT structure
- * @param[in] N length of the DCT4.
- * @param[in] Nby2 half of the length of the DCT4.
- * @param[in] normalize normalizing factor.
- * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.
- */
-
- arm_status arm_dct4_init_q31(
- arm_dct4_instance_q31 * S,
- arm_rfft_instance_q31 * S_RFFT,
- arm_cfft_radix4_instance_q31 * S_CFFT,
- uint16_t N,
- uint16_t Nby2,
- q31_t normalize);
-
- /**
- * @brief Processing function for the Q31 DCT4/IDCT4.
- * @param[in] *S points to an instance of the Q31 DCT4 structure.
- * @param[in] *pState points to state buffer.
- * @param[in,out] *pInlineBuffer points to the in-place input and output buffer.
- * @return none.
- */
-
- void arm_dct4_q31(
- const arm_dct4_instance_q31 * S,
- q31_t * pState,
- q31_t * pInlineBuffer);
-
- /**
- * @brief Instance structure for the Q15 DCT4/IDCT4 function.
- */
-
- typedef struct
- {
- uint16_t N; /**< length of the DCT4. */
- uint16_t Nby2; /**< half of the length of the DCT4. */
- q15_t normalize; /**< normalizing factor. */
- q15_t *pTwiddle; /**< points to the twiddle factor table. */
- q15_t *pCosFactor; /**< points to the cosFactor table. */
- arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */
- arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */
- } arm_dct4_instance_q15;
-
- /**
- * @brief Initialization function for the Q15 DCT4/IDCT4.
- * @param[in,out] *S points to an instance of Q15 DCT4/IDCT4 structure.
- * @param[in] *S_RFFT points to an instance of Q15 RFFT/RIFFT structure.
- * @param[in] *S_CFFT points to an instance of Q15 CFFT/CIFFT structure.
- * @param[in] N length of the DCT4.
- * @param[in] Nby2 half of the length of the DCT4.
- * @param[in] normalize normalizing factor.
- * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.
- */
-
- arm_status arm_dct4_init_q15(
- arm_dct4_instance_q15 * S,
- arm_rfft_instance_q15 * S_RFFT,
- arm_cfft_radix4_instance_q15 * S_CFFT,
- uint16_t N,
- uint16_t Nby2,
- q15_t normalize);
-
- /**
- * @brief Processing function for the Q15 DCT4/IDCT4.
- * @param[in] *S points to an instance of the Q15 DCT4 structure.
- * @param[in] *pState points to state buffer.
- * @param[in,out] *pInlineBuffer points to the in-place input and output buffer.
- * @return none.
- */
-
- void arm_dct4_q15(
- const arm_dct4_instance_q15 * S,
- q15_t * pState,
- q15_t * pInlineBuffer);
-
- /**
- * @brief Floating-point vector addition.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_add_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q7 vector addition.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_add_q7(
- q7_t * pSrcA,
- q7_t * pSrcB,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q15 vector addition.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_add_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q31 vector addition.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_add_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Floating-point vector subtraction.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_sub_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q7 vector subtraction.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_sub_q7(
- q7_t * pSrcA,
- q7_t * pSrcB,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q15 vector subtraction.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_sub_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q31 vector subtraction.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_sub_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Multiplies a floating-point vector by a scalar.
- * @param[in] *pSrc points to the input vector
- * @param[in] scale scale factor to be applied
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_scale_f32(
- float32_t * pSrc,
- float32_t scale,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Multiplies a Q7 vector by a scalar.
- * @param[in] *pSrc points to the input vector
- * @param[in] scaleFract fractional portion of the scale value
- * @param[in] shift number of bits to shift the result by
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_scale_q7(
- q7_t * pSrc,
- q7_t scaleFract,
- int8_t shift,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Multiplies a Q15 vector by a scalar.
- * @param[in] *pSrc points to the input vector
- * @param[in] scaleFract fractional portion of the scale value
- * @param[in] shift number of bits to shift the result by
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_scale_q15(
- q15_t * pSrc,
- q15_t scaleFract,
- int8_t shift,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Multiplies a Q31 vector by a scalar.
- * @param[in] *pSrc points to the input vector
- * @param[in] scaleFract fractional portion of the scale value
- * @param[in] shift number of bits to shift the result by
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_scale_q31(
- q31_t * pSrc,
- q31_t scaleFract,
- int8_t shift,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q7 vector absolute value.
- * @param[in] *pSrc points to the input buffer
- * @param[out] *pDst points to the output buffer
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_abs_q7(
- q7_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Floating-point vector absolute value.
- * @param[in] *pSrc points to the input buffer
- * @param[out] *pDst points to the output buffer
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_abs_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q15 vector absolute value.
- * @param[in] *pSrc points to the input buffer
- * @param[out] *pDst points to the output buffer
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_abs_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Q31 vector absolute value.
- * @param[in] *pSrc points to the input buffer
- * @param[out] *pDst points to the output buffer
- * @param[in] blockSize number of samples in each vector
- * @return none.
- */
-
- void arm_abs_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Dot product of floating-point vectors.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] blockSize number of samples in each vector
- * @param[out] *result output result returned here
- * @return none.
- */
-
- void arm_dot_prod_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- uint32_t blockSize,
- float32_t * result);
-
- /**
- * @brief Dot product of Q7 vectors.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] blockSize number of samples in each vector
- * @param[out] *result output result returned here
- * @return none.
- */
-
- void arm_dot_prod_q7(
- q7_t * pSrcA,
- q7_t * pSrcB,
- uint32_t blockSize,
- q31_t * result);
-
- /**
- * @brief Dot product of Q15 vectors.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] blockSize number of samples in each vector
- * @param[out] *result output result returned here
- * @return none.
- */
-
- void arm_dot_prod_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- uint32_t blockSize,
- q63_t * result);
-
- /**
- * @brief Dot product of Q31 vectors.
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] blockSize number of samples in each vector
- * @param[out] *result output result returned here
- * @return none.
- */
-
- void arm_dot_prod_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- uint32_t blockSize,
- q63_t * result);
-
- /**
- * @brief Shifts the elements of a Q7 vector a specified number of bits.
- * @param[in] *pSrc points to the input vector
- * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right.
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_shift_q7(
- q7_t * pSrc,
- int8_t shiftBits,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Shifts the elements of a Q15 vector a specified number of bits.
- * @param[in] *pSrc points to the input vector
- * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right.
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_shift_q15(
- q15_t * pSrc,
- int8_t shiftBits,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Shifts the elements of a Q31 vector a specified number of bits.
- * @param[in] *pSrc points to the input vector
- * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right.
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_shift_q31(
- q31_t * pSrc,
- int8_t shiftBits,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Adds a constant offset to a floating-point vector.
- * @param[in] *pSrc points to the input vector
- * @param[in] offset is the offset to be added
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_offset_f32(
- float32_t * pSrc,
- float32_t offset,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Adds a constant offset to a Q7 vector.
- * @param[in] *pSrc points to the input vector
- * @param[in] offset is the offset to be added
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_offset_q7(
- q7_t * pSrc,
- q7_t offset,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Adds a constant offset to a Q15 vector.
- * @param[in] *pSrc points to the input vector
- * @param[in] offset is the offset to be added
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_offset_q15(
- q15_t * pSrc,
- q15_t offset,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Adds a constant offset to a Q31 vector.
- * @param[in] *pSrc points to the input vector
- * @param[in] offset is the offset to be added
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_offset_q31(
- q31_t * pSrc,
- q31_t offset,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Negates the elements of a floating-point vector.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_negate_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Negates the elements of a Q7 vector.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_negate_q7(
- q7_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Negates the elements of a Q15 vector.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_negate_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Negates the elements of a Q31 vector.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] blockSize number of samples in the vector
- * @return none.
- */
-
- void arm_negate_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
- /**
- * @brief Copies the elements of a floating-point vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_copy_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Copies the elements of a Q7 vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_copy_q7(
- q7_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Copies the elements of a Q15 vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_copy_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Copies the elements of a Q31 vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_copy_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
- /**
- * @brief Fills a constant value into a floating-point vector.
- * @param[in] value input value to be filled
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_fill_f32(
- float32_t value,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Fills a constant value into a Q7 vector.
- * @param[in] value input value to be filled
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_fill_q7(
- q7_t value,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Fills a constant value into a Q15 vector.
- * @param[in] value input value to be filled
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_fill_q15(
- q15_t value,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Fills a constant value into a Q31 vector.
- * @param[in] value input value to be filled
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_fill_q31(
- q31_t value,
- q31_t * pDst,
- uint32_t blockSize);
-
-/**
- * @brief Convolution of floating-point sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_f32(
- float32_t * pSrcA,
- uint32_t srcALen,
- float32_t * pSrcB,
- uint32_t srcBLen,
- float32_t * pDst);
-
-/**
- * @brief Convolution of Q15 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst);
-
- /**
- * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_fast_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst);
-
- /**
- * @brief Convolution of Q31 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst);
-
- /**
- * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_fast_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst);
-
- /**
- * @brief Convolution of Q7 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1.
- * @return none.
- */
-
- void arm_conv_q7(
- q7_t * pSrcA,
- uint32_t srcALen,
- q7_t * pSrcB,
- uint32_t srcBLen,
- q7_t * pDst);
-
- /**
- * @brief Partial convolution of floating-point sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_f32(
- float32_t * pSrcA,
- uint32_t srcALen,
- float32_t * pSrcB,
- uint32_t srcBLen,
- float32_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
- /**
- * @brief Partial convolution of Q15 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
- /**
- * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_fast_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
- /**
- * @brief Partial convolution of Q31 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
-
- /**
- * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_fast_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
- /**
- * @brief Partial convolution of Q7 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data
- * @param[in] firstIndex is the first output sample to start with.
- * @param[in] numPoints is the number of output points to be computed.
- * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].
- */
-
- arm_status arm_conv_partial_q7(
- q7_t * pSrcA,
- uint32_t srcALen,
- q7_t * pSrcB,
- uint32_t srcBLen,
- q7_t * pDst,
- uint32_t firstIndex,
- uint32_t numPoints);
-
-
- /**
- * @brief Instance structure for the Q15 FIR decimator.
- */
-
- typedef struct
- {
- uint8_t M; /**< decimation factor. */
- uint16_t numTaps; /**< number of coefficients in the filter. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- } arm_fir_decimate_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 FIR decimator.
- */
-
- typedef struct
- {
- uint8_t M; /**< decimation factor. */
- uint16_t numTaps; /**< number of coefficients in the filter. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
-
- } arm_fir_decimate_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point FIR decimator.
- */
-
- typedef struct
- {
- uint8_t M; /**< decimation factor. */
- uint16_t numTaps; /**< number of coefficients in the filter. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
-
- } arm_fir_decimate_instance_f32;
-
-
-
- /**
- * @brief Processing function for the floating-point FIR decimator.
- * @param[in] *S points to an instance of the floating-point FIR decimator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of input samples to process per call.
- * @return none
- */
-
- void arm_fir_decimate_f32(
- const arm_fir_decimate_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the floating-point FIR decimator.
- * @param[in,out] *S points to an instance of the floating-point FIR decimator structure.
- * @param[in] numTaps number of coefficients in the filter.
- * @param[in] M decimation factor.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * <code>blockSize</code> is not a multiple of <code>M</code>.
- */
-
- arm_status arm_fir_decimate_init_f32(
- arm_fir_decimate_instance_f32 * S,
- uint16_t numTaps,
- uint8_t M,
- float32_t * pCoeffs,
- float32_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q15 FIR decimator.
- * @param[in] *S points to an instance of the Q15 FIR decimator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of input samples to process per call.
- * @return none
- */
-
- void arm_fir_decimate_q15(
- const arm_fir_decimate_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q15 FIR decimator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of input samples to process per call.
- * @return none
- */
-
- void arm_fir_decimate_fast_q15(
- const arm_fir_decimate_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
-
-
- /**
- * @brief Initialization function for the Q15 FIR decimator.
- * @param[in,out] *S points to an instance of the Q15 FIR decimator structure.
- * @param[in] numTaps number of coefficients in the filter.
- * @param[in] M decimation factor.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * <code>blockSize</code> is not a multiple of <code>M</code>.
- */
-
- arm_status arm_fir_decimate_init_q15(
- arm_fir_decimate_instance_q15 * S,
- uint16_t numTaps,
- uint8_t M,
- q15_t * pCoeffs,
- q15_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q31 FIR decimator.
- * @param[in] *S points to an instance of the Q31 FIR decimator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of input samples to process per call.
- * @return none
- */
-
- void arm_fir_decimate_q31(
- const arm_fir_decimate_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.
- * @param[in] *S points to an instance of the Q31 FIR decimator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of input samples to process per call.
- * @return none
- */
-
- void arm_fir_decimate_fast_q31(
- arm_fir_decimate_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the Q31 FIR decimator.
- * @param[in,out] *S points to an instance of the Q31 FIR decimator structure.
- * @param[in] numTaps number of coefficients in the filter.
- * @param[in] M decimation factor.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * <code>blockSize</code> is not a multiple of <code>M</code>.
- */
-
- arm_status arm_fir_decimate_init_q31(
- arm_fir_decimate_instance_q31 * S,
- uint16_t numTaps,
- uint8_t M,
- q31_t * pCoeffs,
- q31_t * pState,
- uint32_t blockSize);
-
-
-
- /**
- * @brief Instance structure for the Q15 FIR interpolator.
- */
-
- typedef struct
- {
- uint8_t L; /**< upsample factor. */
- uint16_t phaseLength; /**< length of each polyphase filter component. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
- q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */
- } arm_fir_interpolate_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 FIR interpolator.
- */
-
- typedef struct
- {
- uint8_t L; /**< upsample factor. */
- uint16_t phaseLength; /**< length of each polyphase filter component. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
- q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */
- } arm_fir_interpolate_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point FIR interpolator.
- */
-
- typedef struct
- {
- uint8_t L; /**< upsample factor. */
- uint16_t phaseLength; /**< length of each polyphase filter component. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
- float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */
- } arm_fir_interpolate_instance_f32;
-
-
- /**
- * @brief Processing function for the Q15 FIR interpolator.
- * @param[in] *S points to an instance of the Q15 FIR interpolator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_interpolate_q15(
- const arm_fir_interpolate_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the Q15 FIR interpolator.
- * @param[in,out] *S points to an instance of the Q15 FIR interpolator structure.
- * @param[in] L upsample factor.
- * @param[in] numTaps number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficient buffer.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.
- */
-
- arm_status arm_fir_interpolate_init_q15(
- arm_fir_interpolate_instance_q15 * S,
- uint8_t L,
- uint16_t numTaps,
- q15_t * pCoeffs,
- q15_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q31 FIR interpolator.
- * @param[in] *S points to an instance of the Q15 FIR interpolator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_interpolate_q31(
- const arm_fir_interpolate_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q31 FIR interpolator.
- * @param[in,out] *S points to an instance of the Q31 FIR interpolator structure.
- * @param[in] L upsample factor.
- * @param[in] numTaps number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficient buffer.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.
- */
-
- arm_status arm_fir_interpolate_init_q31(
- arm_fir_interpolate_instance_q31 * S,
- uint8_t L,
- uint16_t numTaps,
- q31_t * pCoeffs,
- q31_t * pState,
- uint32_t blockSize);
-
-
- /**
- * @brief Processing function for the floating-point FIR interpolator.
- * @param[in] *S points to an instance of the floating-point FIR interpolator structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_interpolate_f32(
- const arm_fir_interpolate_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the floating-point FIR interpolator.
- * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure.
- * @param[in] L upsample factor.
- * @param[in] numTaps number of filter coefficients in the filter.
- * @param[in] *pCoeffs points to the filter coefficient buffer.
- * @param[in] *pState points to the state buffer.
- * @param[in] blockSize number of input samples to process per call.
- * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if
- * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.
- */
-
- arm_status arm_fir_interpolate_init_f32(
- arm_fir_interpolate_instance_f32 * S,
- uint8_t L,
- uint16_t numTaps,
- float32_t * pCoeffs,
- float32_t * pState,
- uint32_t blockSize);
-
- /**
- * @brief Instance structure for the high precision Q31 Biquad cascade filter.
- */
-
- typedef struct
- {
- uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
- q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */
- q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */
- uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */
-
- } arm_biquad_cas_df1_32x64_ins_q31;
-
-
- /**
- * @param[in] *S points to an instance of the high precision Q31 Biquad cascade filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cas_df1_32x64_q31(
- const arm_biquad_cas_df1_32x64_ins_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @param[in,out] *S points to an instance of the high precision Q31 Biquad cascade filter structure.
- * @param[in] numStages number of 2nd order stages in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format
- * @return none
- */
-
- void arm_biquad_cas_df1_32x64_init_q31(
- arm_biquad_cas_df1_32x64_ins_q31 * S,
- uint8_t numStages,
- q31_t * pCoeffs,
- q63_t * pState,
- uint8_t postShift);
-
-
-
- /**
- * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.
- */
-
- typedef struct
- {
- uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
- float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */
- float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */
- } arm_biquad_cascade_df2T_instance_f32;
-
-
- /**
- * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.
- * @param[in] *S points to an instance of the filter data structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_biquad_cascade_df2T_f32(
- const arm_biquad_cascade_df2T_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter.
- * @param[in,out] *S points to an instance of the filter data structure.
- * @param[in] numStages number of 2nd order stages in the filter.
- * @param[in] *pCoeffs points to the filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @return none
- */
-
- void arm_biquad_cascade_df2T_init_f32(
- arm_biquad_cascade_df2T_instance_f32 * S,
- uint8_t numStages,
- float32_t * pCoeffs,
- float32_t * pState);
-
-
-
- /**
- * @brief Instance structure for the Q15 FIR lattice filter.
- */
-
- typedef struct
- {
- uint16_t numStages; /**< number of filter stages. */
- q15_t *pState; /**< points to the state variable array. The array is of length numStages. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
- } arm_fir_lattice_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 FIR lattice filter.
- */
-
- typedef struct
- {
- uint16_t numStages; /**< number of filter stages. */
- q31_t *pState; /**< points to the state variable array. The array is of length numStages. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
- } arm_fir_lattice_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point FIR lattice filter.
- */
-
- typedef struct
- {
- uint16_t numStages; /**< number of filter stages. */
- float32_t *pState; /**< points to the state variable array. The array is of length numStages. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
- } arm_fir_lattice_instance_f32;
-
- /**
- * @brief Initialization function for the Q15 FIR lattice filter.
- * @param[in] *S points to an instance of the Q15 FIR lattice structure.
- * @param[in] numStages number of filter stages.
- * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages.
- * @param[in] *pState points to the state buffer. The array is of length numStages.
- * @return none.
- */
-
- void arm_fir_lattice_init_q15(
- arm_fir_lattice_instance_q15 * S,
- uint16_t numStages,
- q15_t * pCoeffs,
- q15_t * pState);
-
-
- /**
- * @brief Processing function for the Q15 FIR lattice filter.
- * @param[in] *S points to an instance of the Q15 FIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
- void arm_fir_lattice_q15(
- const arm_fir_lattice_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q31 FIR lattice filter.
- * @param[in] *S points to an instance of the Q31 FIR lattice structure.
- * @param[in] numStages number of filter stages.
- * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages.
- * @param[in] *pState points to the state buffer. The array is of length numStages.
- * @return none.
- */
-
- void arm_fir_lattice_init_q31(
- arm_fir_lattice_instance_q31 * S,
- uint16_t numStages,
- q31_t * pCoeffs,
- q31_t * pState);
-
-
- /**
- * @brief Processing function for the Q31 FIR lattice filter.
- * @param[in] *S points to an instance of the Q31 FIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_fir_lattice_q31(
- const arm_fir_lattice_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-/**
- * @brief Initialization function for the floating-point FIR lattice filter.
- * @param[in] *S points to an instance of the floating-point FIR lattice structure.
- * @param[in] numStages number of filter stages.
- * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages.
- * @param[in] *pState points to the state buffer. The array is of length numStages.
- * @return none.
- */
-
- void arm_fir_lattice_init_f32(
- arm_fir_lattice_instance_f32 * S,
- uint16_t numStages,
- float32_t * pCoeffs,
- float32_t * pState);
-
- /**
- * @brief Processing function for the floating-point FIR lattice filter.
- * @param[in] *S points to an instance of the floating-point FIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_fir_lattice_f32(
- const arm_fir_lattice_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Instance structure for the Q15 IIR lattice filter.
- */
- typedef struct
- {
- uint16_t numStages; /**< number of stages in the filter. */
- q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
- q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
- q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
- } arm_iir_lattice_instance_q15;
-
- /**
- * @brief Instance structure for the Q31 IIR lattice filter.
- */
- typedef struct
- {
- uint16_t numStages; /**< number of stages in the filter. */
- q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
- q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
- q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
- } arm_iir_lattice_instance_q31;
-
- /**
- * @brief Instance structure for the floating-point IIR lattice filter.
- */
- typedef struct
- {
- uint16_t numStages; /**< number of stages in the filter. */
- float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
- float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
- float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
- } arm_iir_lattice_instance_f32;
-
- /**
- * @brief Processing function for the floating-point IIR lattice filter.
- * @param[in] *S points to an instance of the floating-point IIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_iir_lattice_f32(
- const arm_iir_lattice_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the floating-point IIR lattice filter.
- * @param[in] *S points to an instance of the floating-point IIR lattice structure.
- * @param[in] numStages number of stages in the filter.
- * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages.
- * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1.
- * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize-1.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_iir_lattice_init_f32(
- arm_iir_lattice_instance_f32 * S,
- uint16_t numStages,
- float32_t *pkCoeffs,
- float32_t *pvCoeffs,
- float32_t *pState,
- uint32_t blockSize);
-
-
- /**
- * @brief Processing function for the Q31 IIR lattice filter.
- * @param[in] *S points to an instance of the Q31 IIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_iir_lattice_q31(
- const arm_iir_lattice_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the Q31 IIR lattice filter.
- * @param[in] *S points to an instance of the Q31 IIR lattice structure.
- * @param[in] numStages number of stages in the filter.
- * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages.
- * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1.
- * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_iir_lattice_init_q31(
- arm_iir_lattice_instance_q31 * S,
- uint16_t numStages,
- q31_t *pkCoeffs,
- q31_t *pvCoeffs,
- q31_t *pState,
- uint32_t blockSize);
-
-
- /**
- * @brief Processing function for the Q15 IIR lattice filter.
- * @param[in] *S points to an instance of the Q15 IIR lattice structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_iir_lattice_q15(
- const arm_iir_lattice_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
-
-/**
- * @brief Initialization function for the Q15 IIR lattice filter.
- * @param[in] *S points to an instance of the fixed-point Q15 IIR lattice structure.
- * @param[in] numStages number of stages in the filter.
- * @param[in] *pkCoeffs points to reflection coefficient buffer. The array is of length numStages.
- * @param[in] *pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1.
- * @param[in] *pState points to state buffer. The array is of length numStages+blockSize.
- * @param[in] blockSize number of samples to process per call.
- * @return none.
- */
-
- void arm_iir_lattice_init_q15(
- arm_iir_lattice_instance_q15 * S,
- uint16_t numStages,
- q15_t *pkCoeffs,
- q15_t *pvCoeffs,
- q15_t *pState,
- uint32_t blockSize);
-
- /**
- * @brief Instance structure for the floating-point LMS filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- float32_t mu; /**< step size that controls filter coefficient updates. */
- } arm_lms_instance_f32;
-
- /**
- * @brief Processing function for floating-point LMS filter.
- * @param[in] *S points to an instance of the floating-point LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_f32(
- const arm_lms_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pRef,
- float32_t * pOut,
- float32_t * pErr,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for floating-point LMS filter.
- * @param[in] *S points to an instance of the floating-point LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to the coefficient buffer.
- * @param[in] *pState points to state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_init_f32(
- arm_lms_instance_f32 * S,
- uint16_t numTaps,
- float32_t * pCoeffs,
- float32_t * pState,
- float32_t mu,
- uint32_t blockSize);
-
- /**
- * @brief Instance structure for the Q15 LMS filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- q15_t mu; /**< step size that controls filter coefficient updates. */
- uint32_t postShift; /**< bit shift applied to coefficients. */
- } arm_lms_instance_q15;
-
-
- /**
- * @brief Initialization function for the Q15 LMS filter.
- * @param[in] *S points to an instance of the Q15 LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to the coefficient buffer.
- * @param[in] *pState points to the state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @param[in] postShift bit shift applied to coefficients.
- * @return none.
- */
-
- void arm_lms_init_q15(
- arm_lms_instance_q15 * S,
- uint16_t numTaps,
- q15_t * pCoeffs,
- q15_t * pState,
- q15_t mu,
- uint32_t blockSize,
- uint32_t postShift);
-
- /**
- * @brief Processing function for Q15 LMS filter.
- * @param[in] *S points to an instance of the Q15 LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_q15(
- const arm_lms_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pRef,
- q15_t * pOut,
- q15_t * pErr,
- uint32_t blockSize);
-
-
- /**
- * @brief Instance structure for the Q31 LMS filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- q31_t mu; /**< step size that controls filter coefficient updates. */
- uint32_t postShift; /**< bit shift applied to coefficients. */
-
- } arm_lms_instance_q31;
-
- /**
- * @brief Processing function for Q31 LMS filter.
- * @param[in] *S points to an instance of the Q15 LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_q31(
- const arm_lms_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pRef,
- q31_t * pOut,
- q31_t * pErr,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for Q31 LMS filter.
- * @param[in] *S points to an instance of the Q31 LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to coefficient buffer.
- * @param[in] *pState points to state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @param[in] postShift bit shift applied to coefficients.
- * @return none.
- */
-
- void arm_lms_init_q31(
- arm_lms_instance_q31 * S,
- uint16_t numTaps,
- q31_t *pCoeffs,
- q31_t *pState,
- q31_t mu,
- uint32_t blockSize,
- uint32_t postShift);
-
- /**
- * @brief Instance structure for the floating-point normalized LMS filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- float32_t mu; /**< step size that control filter coefficient updates. */
- float32_t energy; /**< saves previous frame energy. */
- float32_t x0; /**< saves previous input sample. */
- } arm_lms_norm_instance_f32;
-
- /**
- * @brief Processing function for floating-point normalized LMS filter.
- * @param[in] *S points to an instance of the floating-point normalized LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_norm_f32(
- arm_lms_norm_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pRef,
- float32_t * pOut,
- float32_t * pErr,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for floating-point normalized LMS filter.
- * @param[in] *S points to an instance of the floating-point LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to coefficient buffer.
- * @param[in] *pState points to state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_norm_init_f32(
- arm_lms_norm_instance_f32 * S,
- uint16_t numTaps,
- float32_t * pCoeffs,
- float32_t * pState,
- float32_t mu,
- uint32_t blockSize);
-
-
- /**
- * @brief Instance structure for the Q31 normalized LMS filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- q31_t mu; /**< step size that controls filter coefficient updates. */
- uint8_t postShift; /**< bit shift applied to coefficients. */
- q31_t *recipTable; /**< points to the reciprocal initial value table. */
- q31_t energy; /**< saves previous frame energy. */
- q31_t x0; /**< saves previous input sample. */
- } arm_lms_norm_instance_q31;
-
- /**
- * @brief Processing function for Q31 normalized LMS filter.
- * @param[in] *S points to an instance of the Q31 normalized LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_norm_q31(
- arm_lms_norm_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pRef,
- q31_t * pOut,
- q31_t * pErr,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for Q31 normalized LMS filter.
- * @param[in] *S points to an instance of the Q31 normalized LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to coefficient buffer.
- * @param[in] *pState points to state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @param[in] postShift bit shift applied to coefficients.
- * @return none.
- */
-
- void arm_lms_norm_init_q31(
- arm_lms_norm_instance_q31 * S,
- uint16_t numTaps,
- q31_t * pCoeffs,
- q31_t * pState,
- q31_t mu,
- uint32_t blockSize,
- uint8_t postShift);
-
- /**
- * @brief Instance structure for the Q15 normalized LMS filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< Number of coefficients in the filter. */
- q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
- q15_t mu; /**< step size that controls filter coefficient updates. */
- uint8_t postShift; /**< bit shift applied to coefficients. */
- q15_t *recipTable; /**< Points to the reciprocal initial value table. */
- q15_t energy; /**< saves previous frame energy. */
- q15_t x0; /**< saves previous input sample. */
- } arm_lms_norm_instance_q15;
-
- /**
- * @brief Processing function for Q15 normalized LMS filter.
- * @param[in] *S points to an instance of the Q15 normalized LMS filter structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[in] *pRef points to the block of reference data.
- * @param[out] *pOut points to the block of output data.
- * @param[out] *pErr points to the block of error data.
- * @param[in] blockSize number of samples to process.
- * @return none.
- */
-
- void arm_lms_norm_q15(
- arm_lms_norm_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pRef,
- q15_t * pOut,
- q15_t * pErr,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for Q15 normalized LMS filter.
- * @param[in] *S points to an instance of the Q15 normalized LMS filter structure.
- * @param[in] numTaps number of filter coefficients.
- * @param[in] *pCoeffs points to coefficient buffer.
- * @param[in] *pState points to state buffer.
- * @param[in] mu step size that controls filter coefficient updates.
- * @param[in] blockSize number of samples to process.
- * @param[in] postShift bit shift applied to coefficients.
- * @return none.
- */
-
- void arm_lms_norm_init_q15(
- arm_lms_norm_instance_q15 * S,
- uint16_t numTaps,
- q15_t * pCoeffs,
- q15_t * pState,
- q15_t mu,
- uint32_t blockSize,
- uint8_t postShift);
-
- /**
- * @brief Correlation of floating-point sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_f32(
- float32_t * pSrcA,
- uint32_t srcALen,
- float32_t * pSrcB,
- uint32_t srcBLen,
- float32_t * pDst);
-
- /**
- * @brief Correlation of Q15 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst);
-
- /**
- * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_fast_q15(
- q15_t * pSrcA,
- uint32_t srcALen,
- q15_t * pSrcB,
- uint32_t srcBLen,
- q15_t * pDst);
-
- /**
- * @brief Correlation of Q31 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst);
-
- /**
- * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_fast_q31(
- q31_t * pSrcA,
- uint32_t srcALen,
- q31_t * pSrcB,
- uint32_t srcBLen,
- q31_t * pDst);
-
- /**
- * @brief Correlation of Q7 sequences.
- * @param[in] *pSrcA points to the first input sequence.
- * @param[in] srcALen length of the first input sequence.
- * @param[in] *pSrcB points to the second input sequence.
- * @param[in] srcBLen length of the second input sequence.
- * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1.
- * @return none.
- */
-
- void arm_correlate_q7(
- q7_t * pSrcA,
- uint32_t srcALen,
- q7_t * pSrcB,
- uint32_t srcBLen,
- q7_t * pDst);
-
- /**
- * @brief Instance structure for the floating-point sparse FIR filter.
- */
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
- float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
- float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
- int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
- } arm_fir_sparse_instance_f32;
-
- /**
- * @brief Instance structure for the Q31 sparse FIR filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
- q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
- q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
- int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
- } arm_fir_sparse_instance_q31;
-
- /**
- * @brief Instance structure for the Q15 sparse FIR filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
- q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
- q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
- int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
- } arm_fir_sparse_instance_q15;
-
- /**
- * @brief Instance structure for the Q7 sparse FIR filter.
- */
-
- typedef struct
- {
- uint16_t numTaps; /**< number of coefficients in the filter. */
- uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
- q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
- q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
- uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
- int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
- } arm_fir_sparse_instance_q7;
-
- /**
- * @brief Processing function for the floating-point sparse FIR filter.
- * @param[in] *S points to an instance of the floating-point sparse FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] *pScratchIn points to a temporary buffer of size blockSize.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_sparse_f32(
- arm_fir_sparse_instance_f32 * S,
- float32_t * pSrc,
- float32_t * pDst,
- float32_t * pScratchIn,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the floating-point sparse FIR filter.
- * @param[in,out] *S points to an instance of the floating-point sparse FIR structure.
- * @param[in] numTaps number of nonzero coefficients in the filter.
- * @param[in] *pCoeffs points to the array of filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] *pTapDelay points to the array of offset times.
- * @param[in] maxDelay maximum offset time supported.
- * @param[in] blockSize number of samples that will be processed per block.
- * @return none
- */
-
- void arm_fir_sparse_init_f32(
- arm_fir_sparse_instance_f32 * S,
- uint16_t numTaps,
- float32_t * pCoeffs,
- float32_t * pState,
- int32_t * pTapDelay,
- uint16_t maxDelay,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q31 sparse FIR filter.
- * @param[in] *S points to an instance of the Q31 sparse FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] *pScratchIn points to a temporary buffer of size blockSize.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_sparse_q31(
- arm_fir_sparse_instance_q31 * S,
- q31_t * pSrc,
- q31_t * pDst,
- q31_t * pScratchIn,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q31 sparse FIR filter.
- * @param[in,out] *S points to an instance of the Q31 sparse FIR structure.
- * @param[in] numTaps number of nonzero coefficients in the filter.
- * @param[in] *pCoeffs points to the array of filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] *pTapDelay points to the array of offset times.
- * @param[in] maxDelay maximum offset time supported.
- * @param[in] blockSize number of samples that will be processed per block.
- * @return none
- */
-
- void arm_fir_sparse_init_q31(
- arm_fir_sparse_instance_q31 * S,
- uint16_t numTaps,
- q31_t * pCoeffs,
- q31_t * pState,
- int32_t * pTapDelay,
- uint16_t maxDelay,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q15 sparse FIR filter.
- * @param[in] *S points to an instance of the Q15 sparse FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] *pScratchIn points to a temporary buffer of size blockSize.
- * @param[in] *pScratchOut points to a temporary buffer of size blockSize.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_sparse_q15(
- arm_fir_sparse_instance_q15 * S,
- q15_t * pSrc,
- q15_t * pDst,
- q15_t * pScratchIn,
- q31_t * pScratchOut,
- uint32_t blockSize);
-
-
- /**
- * @brief Initialization function for the Q15 sparse FIR filter.
- * @param[in,out] *S points to an instance of the Q15 sparse FIR structure.
- * @param[in] numTaps number of nonzero coefficients in the filter.
- * @param[in] *pCoeffs points to the array of filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] *pTapDelay points to the array of offset times.
- * @param[in] maxDelay maximum offset time supported.
- * @param[in] blockSize number of samples that will be processed per block.
- * @return none
- */
-
- void arm_fir_sparse_init_q15(
- arm_fir_sparse_instance_q15 * S,
- uint16_t numTaps,
- q15_t * pCoeffs,
- q15_t * pState,
- int32_t * pTapDelay,
- uint16_t maxDelay,
- uint32_t blockSize);
-
- /**
- * @brief Processing function for the Q7 sparse FIR filter.
- * @param[in] *S points to an instance of the Q7 sparse FIR structure.
- * @param[in] *pSrc points to the block of input data.
- * @param[out] *pDst points to the block of output data
- * @param[in] *pScratchIn points to a temporary buffer of size blockSize.
- * @param[in] *pScratchOut points to a temporary buffer of size blockSize.
- * @param[in] blockSize number of input samples to process per call.
- * @return none.
- */
-
- void arm_fir_sparse_q7(
- arm_fir_sparse_instance_q7 * S,
- q7_t * pSrc,
- q7_t * pDst,
- q7_t * pScratchIn,
- q31_t * pScratchOut,
- uint32_t blockSize);
-
- /**
- * @brief Initialization function for the Q7 sparse FIR filter.
- * @param[in,out] *S points to an instance of the Q7 sparse FIR structure.
- * @param[in] numTaps number of nonzero coefficients in the filter.
- * @param[in] *pCoeffs points to the array of filter coefficients.
- * @param[in] *pState points to the state buffer.
- * @param[in] *pTapDelay points to the array of offset times.
- * @param[in] maxDelay maximum offset time supported.
- * @param[in] blockSize number of samples that will be processed per block.
- * @return none
- */
-
- void arm_fir_sparse_init_q7(
- arm_fir_sparse_instance_q7 * S,
- uint16_t numTaps,
- q7_t * pCoeffs,
- q7_t * pState,
- int32_t *pTapDelay,
- uint16_t maxDelay,
- uint32_t blockSize);
-
-
- /*
- * @brief Floating-point sin_cos function.
- * @param[in] theta input value in degrees
- * @param[out] *pSinVal points to the processed sine output.
- * @param[out] *pCosVal points to the processed cos output.
- * @return none.
- */
-
- void arm_sin_cos_f32(
- float32_t theta,
- float32_t *pSinVal,
- float32_t *pCcosVal);
-
- /*
- * @brief Q31 sin_cos function.
- * @param[in] theta scaled input value in degrees
- * @param[out] *pSinVal points to the processed sine output.
- * @param[out] *pCosVal points to the processed cosine output.
- * @return none.
- */
-
- void arm_sin_cos_q31(
- q31_t theta,
- q31_t *pSinVal,
- q31_t *pCosVal);
-
-
- /**
- * @brief Floating-point complex conjugate.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_conj_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q31 complex conjugate.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_conj_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q15 complex conjugate.
- * @param[in] *pSrc points to the input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_conj_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t numSamples);
-
-
-
- /**
- * @brief Floating-point complex magnitude squared
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_squared_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q31 complex magnitude squared
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_squared_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q15 complex magnitude squared
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_squared_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t numSamples);
-
-
- /**
- * @ingroup groupController
- */
-
- /**
- * @defgroup PID PID Motor Control
- *
- * A Proportional Integral Derivative (PID) controller is a generic feedback control
- * loop mechanism widely used in industrial control systems.
- * A PID controller is the most commonly used type of feedback controller.
- *
- * This set of functions implements (PID) controllers
- * for Q15, Q31, and floating-point data types. The functions operate on a single sample
- * of data and each call to the function returns a single processed value.
- * <code>S</code> points to an instance of the PID control data structure. <code>in</code>
- * is the input sample value. The functions return the output value.
- *
- * \par Algorithm:
- * <pre>
- * y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
- * A0 = Kp + Ki + Kd
- * A1 = (-Kp ) - (2 * Kd )
- * A2 = Kd </pre>
- *
- * \par
- * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant
- *
- * \par
- * \image html PID.gif "Proportional Integral Derivative Controller"
- *
- * \par
- * The PID controller calculates an "error" value as the difference between
- * the measured output and the reference input.
- * The controller attempts to minimize the error by adjusting the process control inputs.
- * The proportional value determines the reaction to the current error,
- * the integral value determines the reaction based on the sum of recent errors,
- * and the derivative value determines the reaction based on the rate at which the error has been changing.
- *
- * \par Instance Structure
- * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure.
- * A separate instance structure must be defined for each PID Controller.
- * There are separate instance structure declarations for each of the 3 supported data types.
- *
- * \par Reset Functions
- * There is also an associated reset function for each data type which clears the state array.
- *
- * \par Initialization Functions
- * There is also an associated initialization function for each data type.
- * The initialization function performs the following operations:
- * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains.
- * - Zeros out the values in the state buffer.
- *
- * \par
- * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function.
- *
- * \par Fixed-Point Behavior
- * Care must be taken when using the fixed-point versions of the PID Controller functions.
- * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered.
- * Refer to the function specific documentation below for usage guidelines.
- */
-
- /**
- * @addtogroup PID
- * @{
- */
-
- /**
- * @brief Process function for the floating-point PID Control.
- * @param[in,out] *S is an instance of the floating-point PID Control structure
- * @param[in] in input sample to process
- * @return out processed output sample.
- */
-
-
- static __INLINE float32_t arm_pid_f32(
- arm_pid_instance_f32 * S,
- float32_t in)
- {
- float32_t out;
-
- /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */
- out = (S->A0 * in) +
- (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]);
-
- /* Update state */
- S->state[1] = S->state[0];
- S->state[0] = in;
- S->state[2] = out;
-
- /* return to application */
- return (out);
-
- }
-
- /**
- * @brief Process function for the Q31 PID Control.
- * @param[in,out] *S points to an instance of the Q31 PID Control structure
- * @param[in] in input sample to process
- * @return out processed output sample.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using an internal 64-bit accumulator.
- * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit.
- * Thus, if the accumulator result overflows it wraps around rather than clip.
- * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions.
- * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format.
- */
-
- static __INLINE q31_t arm_pid_q31(
- arm_pid_instance_q31 * S,
- q31_t in)
- {
- q63_t acc;
- q31_t out;
-
- /* acc = A0 * x[n] */
- acc = (q63_t) S->A0 * in;
-
- /* acc += A1 * x[n-1] */
- acc += (q63_t) S->A1 * S->state[0];
-
- /* acc += A2 * x[n-2] */
- acc += (q63_t) S->A2 * S->state[1];
-
- /* convert output to 1.31 format to add y[n-1] */
- out = (q31_t) (acc >> 31u);
-
- /* out += y[n-1] */
- out += S->state[2];
-
- /* Update state */
- S->state[1] = S->state[0];
- S->state[0] = in;
- S->state[2] = out;
-
- /* return to application */
- return (out);
-
- }
-
- /**
- * @brief Process function for the Q15 PID Control.
- * @param[in,out] *S points to an instance of the Q15 PID Control structure
- * @param[in] in input sample to process
- * @return out processed output sample.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using a 64-bit internal accumulator.
- * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result.
- * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format.
- * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved.
- * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits.
- * Lastly, the accumulator is saturated to yield a result in 1.15 format.
- */
-
- static __INLINE q15_t arm_pid_q15(
- arm_pid_instance_q15 * S,
- q15_t in)
- {
- q63_t acc;
- q15_t out;
-
- /* Implementation of PID controller */
-
- #ifdef ARM_MATH_CM0
-
- /* acc = A0 * x[n] */
- acc = ((q31_t) S->A0 )* in ;
-
- #else
-
- /* acc = A0 * x[n] */
- acc = (q31_t) __SMUAD(S->A0, in);
-
- #endif
-
- #ifdef ARM_MATH_CM0
-
- /* acc += A1 * x[n-1] + A2 * x[n-2] */
- acc += (q31_t) S->A1 * S->state[0] ;
- acc += (q31_t) S->A2 * S->state[1] ;
-
- #else
-
- /* acc += A1 * x[n-1] + A2 * x[n-2] */
- acc = __SMLALD(S->A1, (q31_t)__SIMD32(S->state), acc);
-
- #endif
-
- /* acc += y[n-1] */
- acc += (q31_t) S->state[2] << 15;
-
- /* saturate the output */
- out = (q15_t) (__SSAT((acc >> 15), 16));
-
- /* Update state */
- S->state[1] = S->state[0];
- S->state[0] = in;
- S->state[2] = out;
-
- /* return to application */
- return (out);
-
- }
-
- /**
- * @} end of PID group
- */
-
-
- /**
- * @brief Floating-point matrix inverse.
- * @param[in] *src points to the instance of the input floating-point matrix structure.
- * @param[out] *dst points to the instance of the output floating-point matrix structure.
- * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.
- * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.
- */
-
- arm_status arm_mat_inverse_f32(
- const arm_matrix_instance_f32 * src,
- arm_matrix_instance_f32 * dst);
-
-
-
- /**
- * @ingroup groupController
- */
-
-
- /**
- * @defgroup clarke Vector Clarke Transform
- * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector.
- * Generally the Clarke transform uses three-phase currents <code>Ia, Ib and Ic</code> to calculate currents
- * in the two-phase orthogonal stator axis <code>Ialpha</code> and <code>Ibeta</code>.
- * When <code>Ialpha</code> is superposed with <code>Ia</code> as shown in the figure below
- * \image html clarke.gif Stator current space vector and its components in (a,b).
- * and <code>Ia + Ib + Ic = 0</code>, in this condition <code>Ialpha</code> and <code>Ibeta</code>
- * can be calculated using only <code>Ia</code> and <code>Ib</code>.
- *
- * The function operates on a single sample of data and each call to the function returns the processed output.
- * The library provides separate functions for Q31 and floating-point data types.
- * \par Algorithm
- * \image html clarkeFormula.gif
- * where <code>Ia</code> and <code>Ib</code> are the instantaneous stator phases and
- * <code>pIalpha</code> and <code>pIbeta</code> are the two coordinates of time invariant vector.
- * \par Fixed-Point Behavior
- * Care must be taken when using the Q31 version of the Clarke transform.
- * In particular, the overflow and saturation behavior of the accumulator used must be considered.
- * Refer to the function specific documentation below for usage guidelines.
- */
-
- /**
- * @addtogroup clarke
- * @{
- */
-
- /**
- *
- * @brief Floating-point Clarke transform
- * @param[in] Ia input three-phase coordinate <code>a</code>
- * @param[in] Ib input three-phase coordinate <code>b</code>
- * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha
- * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta
- * @return none.
- */
-
- static __INLINE void arm_clarke_f32(
- float32_t Ia,
- float32_t Ib,
- float32_t * pIalpha,
- float32_t * pIbeta)
- {
- /* Calculate pIalpha using the equation, pIalpha = Ia */
- *pIalpha = Ia;
-
- /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */
- *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib);
-
- }
-
- /**
- * @brief Clarke transform for Q31 version
- * @param[in] Ia input three-phase coordinate <code>a</code>
- * @param[in] Ib input three-phase coordinate <code>b</code>
- * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha
- * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta
- * @return none.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using an internal 32-bit accumulator.
- * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.
- * There is saturation on the addition, hence there is no risk of overflow.
- */
-
- static __INLINE void arm_clarke_q31(
- q31_t Ia,
- q31_t Ib,
- q31_t * pIalpha,
- q31_t * pIbeta)
- {
- q31_t product1, product2; /* Temporary variables used to store intermediate results */
-
- /* Calculating pIalpha from Ia by equation pIalpha = Ia */
- *pIalpha = Ia;
-
- /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */
- product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30);
-
- /* Intermediate product is calculated by (2/sqrt(3) * Ib) */
- product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30);
-
- /* pIbeta is calculated by adding the intermediate products */
- *pIbeta = __QADD(product1, product2);
- }
-
- /**
- * @} end of clarke group
- */
-
- /**
- * @brief Converts the elements of the Q7 vector to Q31 vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_q7_to_q31(
- q7_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-
-
-
- /**
- * @ingroup groupController
- */
-
- /**
- * @defgroup inv_clarke Vector Inverse Clarke Transform
- * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases.
- *
- * The function operates on a single sample of data and each call to the function returns the processed output.
- * The library provides separate functions for Q31 and floating-point data types.
- * \par Algorithm
- * \image html clarkeInvFormula.gif
- * where <code>pIa</code> and <code>pIb</code> are the instantaneous stator phases and
- * <code>Ialpha</code> and <code>Ibeta</code> are the two coordinates of time invariant vector.
- * \par Fixed-Point Behavior
- * Care must be taken when using the Q31 version of the Clarke transform.
- * In particular, the overflow and saturation behavior of the accumulator used must be considered.
- * Refer to the function specific documentation below for usage guidelines.
- */
-
- /**
- * @addtogroup inv_clarke
- * @{
- */
-
- /**
- * @brief Floating-point Inverse Clarke transform
- * @param[in] Ialpha input two-phase orthogonal vector axis alpha
- * @param[in] Ibeta input two-phase orthogonal vector axis beta
- * @param[out] *pIa points to output three-phase coordinate <code>a</code>
- * @param[out] *pIb points to output three-phase coordinate <code>b</code>
- * @return none.
- */
-
-
- static __INLINE void arm_inv_clarke_f32(
- float32_t Ialpha,
- float32_t Ibeta,
- float32_t * pIa,
- float32_t * pIb)
- {
- /* Calculating pIa from Ialpha by equation pIa = Ialpha */
- *pIa = Ialpha;
-
- /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */
- *pIb = -0.5 * Ialpha + (float32_t) 0.8660254039 *Ibeta;
-
- }
-
- /**
- * @brief Inverse Clarke transform for Q31 version
- * @param[in] Ialpha input two-phase orthogonal vector axis alpha
- * @param[in] Ibeta input two-phase orthogonal vector axis beta
- * @param[out] *pIa points to output three-phase coordinate <code>a</code>
- * @param[out] *pIb points to output three-phase coordinate <code>b</code>
- * @return none.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using an internal 32-bit accumulator.
- * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.
- * There is saturation on the subtraction, hence there is no risk of overflow.
- */
-
- static __INLINE void arm_inv_clarke_q31(
- q31_t Ialpha,
- q31_t Ibeta,
- q31_t * pIa,
- q31_t * pIb)
- {
- q31_t product1, product2; /* Temporary variables used to store intermediate results */
-
- /* Calculating pIa from Ialpha by equation pIa = Ialpha */
- *pIa = Ialpha;
-
- /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */
- product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31);
-
- /* Intermediate product is calculated by (1/sqrt(3) * pIb) */
- product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31);
-
- /* pIb is calculated by subtracting the products */
- *pIb = __QSUB(product2, product1);
-
- }
-
- /**
- * @} end of inv_clarke group
- */
-
- /**
- * @brief Converts the elements of the Q7 vector to Q15 vector.
- * @param[in] *pSrc input pointer
- * @param[out] *pDst output pointer
- * @param[in] blockSize number of samples to process
- * @return none.
- */
- void arm_q7_to_q15(
- q7_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
-
-
- /**
- * @ingroup groupController
- */
-
- /**
- * @defgroup park Vector Park Transform
- *
- * Forward Park transform converts the input two-coordinate vector to flux and torque components.
- * The Park transform can be used to realize the transformation of the <code>Ialpha</code> and the <code>Ibeta</code> currents
- * from the stationary to the moving reference frame and control the spatial relationship between
- * the stator vector current and rotor flux vector.
- * If we consider the d axis aligned with the rotor flux, the diagram below shows the
- * current vector and the relationship from the two reference frames:
- * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame"
- *
- * The function operates on a single sample of data and each call to the function returns the processed output.
- * The library provides separate functions for Q31 and floating-point data types.
- * \par Algorithm
- * \image html parkFormula.gif
- * where <code>Ialpha</code> and <code>Ibeta</code> are the stator vector components,
- * <code>pId</code> and <code>pIq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the
- * cosine and sine values of theta (rotor flux position).
- * \par Fixed-Point Behavior
- * Care must be taken when using the Q31 version of the Park transform.
- * In particular, the overflow and saturation behavior of the accumulator used must be considered.
- * Refer to the function specific documentation below for usage guidelines.
- */
-
- /**
- * @addtogroup park
- * @{
- */
-
- /**
- * @brief Floating-point Park transform
- * @param[in] Ialpha input two-phase vector coordinate alpha
- * @param[in] Ibeta input two-phase vector coordinate beta
- * @param[out] *pId points to output rotor reference frame d
- * @param[out] *pIq points to output rotor reference frame q
- * @param[in] sinVal sine value of rotation angle theta
- * @param[in] cosVal cosine value of rotation angle theta
- * @return none.
- *
- * The function implements the forward Park transform.
- *
- */
-
- static __INLINE void arm_park_f32(
- float32_t Ialpha,
- float32_t Ibeta,
- float32_t * pId,
- float32_t * pIq,
- float32_t sinVal,
- float32_t cosVal)
- {
- /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */
- *pId = Ialpha * cosVal + Ibeta * sinVal;
-
- /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */
- *pIq = -Ialpha * sinVal + Ibeta * cosVal;
-
- }
-
- /**
- * @brief Park transform for Q31 version
- * @param[in] Ialpha input two-phase vector coordinate alpha
- * @param[in] Ibeta input two-phase vector coordinate beta
- * @param[out] *pId points to output rotor reference frame d
- * @param[out] *pIq points to output rotor reference frame q
- * @param[in] sinVal sine value of rotation angle theta
- * @param[in] cosVal cosine value of rotation angle theta
- * @return none.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using an internal 32-bit accumulator.
- * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.
- * There is saturation on the addition and subtraction, hence there is no risk of overflow.
- */
-
-
- static __INLINE void arm_park_q31(
- q31_t Ialpha,
- q31_t Ibeta,
- q31_t * pId,
- q31_t * pIq,
- q31_t sinVal,
- q31_t cosVal)
- {
- q31_t product1, product2; /* Temporary variables used to store intermediate results */
- q31_t product3, product4; /* Temporary variables used to store intermediate results */
-
- /* Intermediate product is calculated by (Ialpha * cosVal) */
- product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31);
-
- /* Intermediate product is calculated by (Ibeta * sinVal) */
- product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31);
-
-
- /* Intermediate product is calculated by (Ialpha * sinVal) */
- product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31);
-
- /* Intermediate product is calculated by (Ibeta * cosVal) */
- product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31);
-
- /* Calculate pId by adding the two intermediate products 1 and 2 */
- *pId = __QADD(product1, product2);
-
- /* Calculate pIq by subtracting the two intermediate products 3 from 4 */
- *pIq = __QSUB(product4, product3);
- }
-
- /**
- * @} end of park group
- */
-
- /**
- * @brief Converts the elements of the Q7 vector to floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q7_to_float(
- q7_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @ingroup groupController
- */
-
- /**
- * @defgroup inv_park Vector Inverse Park transform
- * Inverse Park transform converts the input flux and torque components to two-coordinate vector.
- *
- * The function operates on a single sample of data and each call to the function returns the processed output.
- * The library provides separate functions for Q31 and floating-point data types.
- * \par Algorithm
- * \image html parkInvFormula.gif
- * where <code>pIalpha</code> and <code>pIbeta</code> are the stator vector components,
- * <code>Id</code> and <code>Iq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the
- * cosine and sine values of theta (rotor flux position).
- * \par Fixed-Point Behavior
- * Care must be taken when using the Q31 version of the Park transform.
- * In particular, the overflow and saturation behavior of the accumulator used must be considered.
- * Refer to the function specific documentation below for usage guidelines.
- */
-
- /**
- * @addtogroup inv_park
- * @{
- */
-
- /**
- * @brief Floating-point Inverse Park transform
- * @param[in] Id input coordinate of rotor reference frame d
- * @param[in] Iq input coordinate of rotor reference frame q
- * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha
- * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta
- * @param[in] sinVal sine value of rotation angle theta
- * @param[in] cosVal cosine value of rotation angle theta
- * @return none.
- */
-
- static __INLINE void arm_inv_park_f32(
- float32_t Id,
- float32_t Iq,
- float32_t * pIalpha,
- float32_t * pIbeta,
- float32_t sinVal,
- float32_t cosVal)
- {
- /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */
- *pIalpha = Id * cosVal - Iq * sinVal;
-
- /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */
- *pIbeta = Id * sinVal + Iq * cosVal;
-
- }
-
-
- /**
- * @brief Inverse Park transform for Q31 version
- * @param[in] Id input coordinate of rotor reference frame d
- * @param[in] Iq input coordinate of rotor reference frame q
- * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha
- * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta
- * @param[in] sinVal sine value of rotation angle theta
- * @param[in] cosVal cosine value of rotation angle theta
- * @return none.
- *
- * <b>Scaling and Overflow Behavior:</b>
- * \par
- * The function is implemented using an internal 32-bit accumulator.
- * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.
- * There is saturation on the addition, hence there is no risk of overflow.
- */
-
-
- static __INLINE void arm_inv_park_q31(
- q31_t Id,
- q31_t Iq,
- q31_t * pIalpha,
- q31_t * pIbeta,
- q31_t sinVal,
- q31_t cosVal)
- {
- q31_t product1, product2; /* Temporary variables used to store intermediate results */
- q31_t product3, product4; /* Temporary variables used to store intermediate results */
-
- /* Intermediate product is calculated by (Id * cosVal) */
- product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31);
-
- /* Intermediate product is calculated by (Iq * sinVal) */
- product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31);
-
-
- /* Intermediate product is calculated by (Id * sinVal) */
- product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31);
-
- /* Intermediate product is calculated by (Iq * cosVal) */
- product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31);
-
- /* Calculate pIalpha by using the two intermediate products 1 and 2 */
- *pIalpha = __QSUB(product1, product2);
-
- /* Calculate pIbeta by using the two intermediate products 3 and 4 */
- *pIbeta = __QADD(product4, product3);
-
- }
-
- /**
- * @} end of Inverse park group
- */
-
-
- /**
- * @brief Converts the elements of the Q31 vector to floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q31_to_float(
- q31_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
- /**
- * @ingroup groupInterpolation
- */
-
- /**
- * @defgroup LinearInterpolate Linear Interpolation
- *
- * Linear interpolation is a method of curve fitting using linear polynomials.
- * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line
- *
- * \par
- * \image html LinearInterp.gif "Linear interpolation"
- *
- * \par
- * A Linear Interpolate function calculates an output value(y), for the input(x)
- * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values)
- *
- * \par Algorithm:
- * <pre>
- * y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
- * where x0, x1 are nearest values of input x
- * y0, y1 are nearest values to output y
- * </pre>
- *
- * \par
- * This set of functions implements Linear interpolation process
- * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single
- * sample of data and each call to the function returns a single processed value.
- * <code>S</code> points to an instance of the Linear Interpolate function data structure.
- * <code>x</code> is the input sample value. The functions returns the output value.
- *
- * \par
- * if x is outside of the table boundary, Linear interpolation returns first value of the table
- * if x is below input range and returns last value of table if x is above range.
- */
-
- /**
- * @addtogroup LinearInterpolate
- * @{
- */
-
- /**
- * @brief Process function for the floating-point Linear Interpolation Function.
- * @param[in,out] *S is an instance of the floating-point Linear Interpolation structure
- * @param[in] x input sample to process
- * @return y processed output sample.
- *
- */
-
- static __INLINE float32_t arm_linear_interp_f32(
- arm_linear_interp_instance_f32 * S,
- float32_t x)
- {
-
- float32_t y;
- float32_t x0, x1; /* Nearest input values */
- float32_t y0, y1; /* Nearest output values */
- float32_t xSpacing = S->xSpacing; /* spacing between input values */
- int32_t i; /* Index variable */
- float32_t *pYData = S->pYData; /* pointer to output table */
-
- /* Calculation of index */
- i = (x - S->x1) / xSpacing;
-
- if(i < 0)
- {
- /* Iniatilize output for below specified range as least output value of table */
- y = pYData[0];
- }
- else if(i >= S->nValues)
- {
- /* Iniatilize output for above specified range as last output value of table */
- y = pYData[S->nValues-1];
- }
- else
- {
- /* Calculation of nearest input values */
- x0 = S->x1 + i * xSpacing;
- x1 = S->x1 + (i +1) * xSpacing;
-
- /* Read of nearest output values */
- y0 = pYData[i];
- y1 = pYData[i + 1];
-
- /* Calculation of output */
- y = y0 + (x - x0) * ((y1 - y0)/(x1-x0));
-
- }
-
- /* returns output value */
- return (y);
- }
-
- /**
- *
- * @brief Process function for the Q31 Linear Interpolation Function.
- * @param[in] *pYData pointer to Q31 Linear Interpolation table
- * @param[in] x input sample to process
- * @param[in] nValues number of table values
- * @return y processed output sample.
- *
- * \par
- * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.
- * This function can support maximum of table size 2^12.
- *
- */
-
-
- static __INLINE q31_t arm_linear_interp_q31(q31_t *pYData,
- q31_t x, uint32_t nValues)
- {
- q31_t y; /* output */
- q31_t y0, y1; /* Nearest output values */
- q31_t fract; /* fractional part */
- int32_t index; /* Index to read nearest output values */
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- index = ((x & 0xFFF00000) >> 20);
-
- if(index >= (nValues - 1))
- {
- return(pYData[nValues - 1]);
- }
- else if(index < 0)
- {
- return(pYData[0]);
- }
- else
- {
-
- /* 20 bits for the fractional part */
- /* shift left by 11 to keep fract in 1.31 format */
- fract = (x & 0x000FFFFF) << 11;
-
- /* Read two nearest output values from the index in 1.31(q31) format */
- y0 = pYData[index];
- y1 = pYData[index + 1u];
-
- /* Calculation of y0 * (1-fract) and y is in 2.30 format */
- y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32));
-
- /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */
- y += ((q31_t) (((q63_t) y1 * fract) >> 32));
-
- /* Convert y to 1.31 format */
- return (y << 1u);
-
- }
-
- }
-
- /**
- *
- * @brief Process function for the Q15 Linear Interpolation Function.
- * @param[in] *pYData pointer to Q15 Linear Interpolation table
- * @param[in] x input sample to process
- * @param[in] nValues number of table values
- * @return y processed output sample.
- *
- * \par
- * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.
- * This function can support maximum of table size 2^12.
- *
- */
-
-
- static __INLINE q15_t arm_linear_interp_q15(q15_t *pYData, q31_t x, uint32_t nValues)
- {
- q63_t y; /* output */
- q15_t y0, y1; /* Nearest output values */
- q31_t fract; /* fractional part */
- int32_t index; /* Index to read nearest output values */
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- index = ((x & 0xFFF00000) >> 20u);
-
- if(index >= (nValues - 1))
- {
- return(pYData[nValues - 1]);
- }
- else if(index < 0)
- {
- return(pYData[0]);
- }
- else
- {
- /* 20 bits for the fractional part */
- /* fract is in 12.20 format */
- fract = (x & 0x000FFFFF);
-
- /* Read two nearest output values from the index */
- y0 = pYData[index];
- y1 = pYData[index + 1u];
-
- /* Calculation of y0 * (1-fract) and y is in 13.35 format */
- y = ((q63_t) y0 * (0xFFFFF - fract));
-
- /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */
- y += ((q63_t) y1 * (fract));
-
- /* convert y to 1.15 format */
- return (y >> 20);
- }
-
-
- }
-
- /**
- *
- * @brief Process function for the Q7 Linear Interpolation Function.
- * @param[in] *pYData pointer to Q7 Linear Interpolation table
- * @param[in] x input sample to process
- * @param[in] nValues number of table values
- * @return y processed output sample.
- *
- * \par
- * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.
- * This function can support maximum of table size 2^12.
- */
-
-
- static __INLINE q7_t arm_linear_interp_q7(q7_t *pYData, q31_t x, uint32_t nValues)
- {
- q31_t y; /* output */
- q7_t y0, y1; /* Nearest output values */
- q31_t fract; /* fractional part */
- int32_t index; /* Index to read nearest output values */
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- index = ((x & 0xFFF00000) >> 20u);
-
-
- if(index >= (nValues - 1))
- {
- return(pYData[nValues - 1]);
- }
- else if(index < 0)
- {
- return(pYData[0]);
- }
- else
- {
-
- /* 20 bits for the fractional part */
- /* fract is in 12.20 format */
- fract = (x & 0x000FFFFF);
-
- /* Read two nearest output values from the index and are in 1.7(q7) format */
- y0 = pYData[index];
- y1 = pYData[index + 1u];
-
- /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */
- y = ((y0 * (0xFFFFF - fract)));
-
- /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */
- y += (y1 * fract);
-
- /* convert y to 1.7(q7) format */
- return (y >> 20u);
-
- }
-
- }
- /**
- * @} end of LinearInterpolate group
- */
-
- /**
- * @brief Fast approximation to the trigonometric sine function for floating-point data.
- * @param[in] x input value in radians.
- * @return sin(x).
- */
-
- float32_t arm_sin_f32(
- float32_t x);
-
- /**
- * @brief Fast approximation to the trigonometric sine function for Q31 data.
- * @param[in] x Scaled input value in radians.
- * @return sin(x).
- */
-
- q31_t arm_sin_q31(
- q31_t x);
-
- /**
- * @brief Fast approximation to the trigonometric sine function for Q15 data.
- * @param[in] x Scaled input value in radians.
- * @return sin(x).
- */
-
- q15_t arm_sin_q15(
- q15_t x);
-
- /**
- * @brief Fast approximation to the trigonometric cosine function for floating-point data.
- * @param[in] x input value in radians.
- * @return cos(x).
- */
-
- float32_t arm_cos_f32(
- float32_t x);
-
- /**
- * @brief Fast approximation to the trigonometric cosine function for Q31 data.
- * @param[in] x Scaled input value in radians.
- * @return cos(x).
- */
-
- q31_t arm_cos_q31(
- q31_t x);
-
- /**
- * @brief Fast approximation to the trigonometric cosine function for Q15 data.
- * @param[in] x Scaled input value in radians.
- * @return cos(x).
- */
-
- q15_t arm_cos_q15(
- q15_t x);
-
-
- /**
- * @ingroup groupFastMath
- */
-
-
- /**
- * @defgroup SQRT Square Root
- *
- * Computes the square root of a number.
- * There are separate functions for Q15, Q31, and floating-point data types.
- * The square root function is computed using the Newton-Raphson algorithm.
- * This is an iterative algorithm of the form:
- * <pre>
- * x1 = x0 - f(x0)/f'(x0)
- * </pre>
- * where <code>x1</code> is the current estimate,
- * <code>x0</code> is the previous estimate and
- * <code>f'(x0)</code> is the derivative of <code>f()</code> evaluated at <code>x0</code>.
- * For the square root function, the algorithm reduces to:
- * <pre>
- * x0 = in/2 [initial guess]
- * x1 = 1/2 * ( x0 + in / x0) [each iteration]
- * </pre>
- */
-
-
- /**
- * @addtogroup SQRT
- * @{
- */
-
- /**
- * @brief Floating-point square root function.
- * @param[in] in input value.
- * @param[out] *pOut square root of input value.
- * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if
- * <code>in</code> is negative value and returns zero output for negative values.
- */
-
- static __INLINE arm_status arm_sqrt_f32(
- float32_t in, float32_t *pOut)
- {
- if(in > 0)
- {
-
-// #if __FPU_USED
- #if (__FPU_USED == 1) && defined ( __CC_ARM )
- *pOut = __sqrtf(in);
- #else
- *pOut = sqrtf(in);
- #endif
-
- return (ARM_MATH_SUCCESS);
- }
- else
- {
- *pOut = 0.0f;
- return (ARM_MATH_ARGUMENT_ERROR);
- }
-
- }
-
-
- /**
- * @brief Q31 square root function.
- * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF.
- * @param[out] *pOut square root of input value.
- * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if
- * <code>in</code> is negative value and returns zero output for negative values.
- */
- arm_status arm_sqrt_q31(
- q31_t in, q31_t *pOut);
-
- /**
- * @brief Q15 square root function.
- * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF.
- * @param[out] *pOut square root of input value.
- * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if
- * <code>in</code> is negative value and returns zero output for negative values.
- */
- arm_status arm_sqrt_q15(
- q15_t in, q15_t *pOut);
-
- /**
- * @} end of SQRT group
- */
-
-
-
-
-
-
- /**
- * @brief floating-point Circular write function.
- */
-
- static __INLINE void arm_circularWrite_f32(
- int32_t * circBuffer,
- int32_t L,
- uint16_t * writeOffset,
- int32_t bufferInc,
- const int32_t * src,
- int32_t srcInc,
- uint32_t blockSize)
- {
- uint32_t i = 0u;
- int32_t wOffset;
-
- /* Copy the value of Index pointer that points
- * to the current location where the input samples to be copied */
- wOffset = *writeOffset;
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the input sample to the circular buffer */
- circBuffer[wOffset] = *src;
-
- /* Update the input pointer */
- src += srcInc;
-
- /* Circularly update wOffset. Watch out for positive and negative value */
- wOffset += bufferInc;
- if(wOffset >= L)
- wOffset -= L;
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *writeOffset = wOffset;
- }
-
-
-
- /**
- * @brief floating-point Circular Read function.
- */
- static __INLINE void arm_circularRead_f32(
- int32_t * circBuffer,
- int32_t L,
- int32_t * readOffset,
- int32_t bufferInc,
- int32_t * dst,
- int32_t * dst_base,
- int32_t dst_length,
- int32_t dstInc,
- uint32_t blockSize)
- {
- uint32_t i = 0u;
- int32_t rOffset, dst_end;
-
- /* Copy the value of Index pointer that points
- * to the current location from where the input samples to be read */
- rOffset = *readOffset;
- dst_end = (int32_t) (dst_base + dst_length);
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the sample from the circular buffer to the destination buffer */
- *dst = circBuffer[rOffset];
-
- /* Update the input pointer */
- dst += dstInc;
-
- if(dst == (int32_t *) dst_end)
- {
- dst = dst_base;
- }
-
- /* Circularly update rOffset. Watch out for positive and negative value */
- rOffset += bufferInc;
-
- if(rOffset >= L)
- {
- rOffset -= L;
- }
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *readOffset = rOffset;
- }
-
- /**
- * @brief Q15 Circular write function.
- */
-
- static __INLINE void arm_circularWrite_q15(
- q15_t * circBuffer,
- int32_t L,
- uint16_t * writeOffset,
- int32_t bufferInc,
- const q15_t * src,
- int32_t srcInc,
- uint32_t blockSize)
- {
- uint32_t i = 0u;
- int32_t wOffset;
-
- /* Copy the value of Index pointer that points
- * to the current location where the input samples to be copied */
- wOffset = *writeOffset;
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the input sample to the circular buffer */
- circBuffer[wOffset] = *src;
-
- /* Update the input pointer */
- src += srcInc;
-
- /* Circularly update wOffset. Watch out for positive and negative value */
- wOffset += bufferInc;
- if(wOffset >= L)
- wOffset -= L;
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *writeOffset = wOffset;
- }
-
-
-
- /**
- * @brief Q15 Circular Read function.
- */
- static __INLINE void arm_circularRead_q15(
- q15_t * circBuffer,
- int32_t L,
- int32_t * readOffset,
- int32_t bufferInc,
- q15_t * dst,
- q15_t * dst_base,
- int32_t dst_length,
- int32_t dstInc,
- uint32_t blockSize)
- {
- uint32_t i = 0;
- int32_t rOffset, dst_end;
-
- /* Copy the value of Index pointer that points
- * to the current location from where the input samples to be read */
- rOffset = *readOffset;
-
- dst_end = (int32_t) (dst_base + dst_length);
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the sample from the circular buffer to the destination buffer */
- *dst = circBuffer[rOffset];
-
- /* Update the input pointer */
- dst += dstInc;
-
- if(dst == (q15_t *) dst_end)
- {
- dst = dst_base;
- }
-
- /* Circularly update wOffset. Watch out for positive and negative value */
- rOffset += bufferInc;
-
- if(rOffset >= L)
- {
- rOffset -= L;
- }
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *readOffset = rOffset;
- }
-
-
- /**
- * @brief Q7 Circular write function.
- */
-
- static __INLINE void arm_circularWrite_q7(
- q7_t * circBuffer,
- int32_t L,
- uint16_t * writeOffset,
- int32_t bufferInc,
- const q7_t * src,
- int32_t srcInc,
- uint32_t blockSize)
- {
- uint32_t i = 0u;
- int32_t wOffset;
-
- /* Copy the value of Index pointer that points
- * to the current location where the input samples to be copied */
- wOffset = *writeOffset;
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the input sample to the circular buffer */
- circBuffer[wOffset] = *src;
-
- /* Update the input pointer */
- src += srcInc;
-
- /* Circularly update wOffset. Watch out for positive and negative value */
- wOffset += bufferInc;
- if(wOffset >= L)
- wOffset -= L;
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *writeOffset = wOffset;
- }
-
-
-
- /**
- * @brief Q7 Circular Read function.
- */
- static __INLINE void arm_circularRead_q7(
- q7_t * circBuffer,
- int32_t L,
- int32_t * readOffset,
- int32_t bufferInc,
- q7_t * dst,
- q7_t * dst_base,
- int32_t dst_length,
- int32_t dstInc,
- uint32_t blockSize)
- {
- uint32_t i = 0;
- int32_t rOffset, dst_end;
-
- /* Copy the value of Index pointer that points
- * to the current location from where the input samples to be read */
- rOffset = *readOffset;
-
- dst_end = (int32_t) (dst_base + dst_length);
-
- /* Loop over the blockSize */
- i = blockSize;
-
- while(i > 0u)
- {
- /* copy the sample from the circular buffer to the destination buffer */
- *dst = circBuffer[rOffset];
-
- /* Update the input pointer */
- dst += dstInc;
-
- if(dst == (q7_t *) dst_end)
- {
- dst = dst_base;
- }
-
- /* Circularly update rOffset. Watch out for positive and negative value */
- rOffset += bufferInc;
-
- if(rOffset >= L)
- {
- rOffset -= L;
- }
-
- /* Decrement the loop counter */
- i--;
- }
-
- /* Update the index pointer */
- *readOffset = rOffset;
- }
-
-
- /**
- * @brief Sum of the squares of the elements of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_power_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q63_t * pResult);
-
- /**
- * @brief Sum of the squares of the elements of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_power_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult);
-
- /**
- * @brief Sum of the squares of the elements of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_power_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q63_t * pResult);
-
- /**
- * @brief Sum of the squares of the elements of a Q7 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_power_q7(
- q7_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult);
-
- /**
- * @brief Mean value of a Q7 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_mean_q7(
- q7_t * pSrc,
- uint32_t blockSize,
- q7_t * pResult);
-
- /**
- * @brief Mean value of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
- void arm_mean_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q15_t * pResult);
-
- /**
- * @brief Mean value of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
- void arm_mean_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult);
-
- /**
- * @brief Mean value of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
- void arm_mean_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult);
-
- /**
- * @brief Variance of the elements of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_var_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult);
-
- /**
- * @brief Variance of the elements of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_var_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q63_t * pResult);
-
- /**
- * @brief Variance of the elements of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_var_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult);
-
- /**
- * @brief Root Mean Square of the elements of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_rms_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult);
-
- /**
- * @brief Root Mean Square of the elements of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_rms_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult);
-
- /**
- * @brief Root Mean Square of the elements of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_rms_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q15_t * pResult);
-
- /**
- * @brief Standard deviation of the elements of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_std_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult);
-
- /**
- * @brief Standard deviation of the elements of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_std_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult);
-
- /**
- * @brief Standard deviation of the elements of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output value.
- * @return none.
- */
-
- void arm_std_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q15_t * pResult);
-
- /**
- * @brief Floating-point complex magnitude
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_f32(
- float32_t * pSrc,
- float32_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q31 complex magnitude
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_q31(
- q31_t * pSrc,
- q31_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q15 complex magnitude
- * @param[in] *pSrc points to the complex input vector
- * @param[out] *pDst points to the real output vector
- * @param[in] numSamples number of complex samples in the input vector
- * @return none.
- */
-
- void arm_cmplx_mag_q15(
- q15_t * pSrc,
- q15_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q15 complex dot product
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] numSamples number of complex samples in each vector
- * @param[out] *realResult real part of the result returned here
- * @param[out] *imagResult imaginary part of the result returned here
- * @return none.
- */
-
- void arm_cmplx_dot_prod_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- uint32_t numSamples,
- q31_t * realResult,
- q31_t * imagResult);
-
- /**
- * @brief Q31 complex dot product
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] numSamples number of complex samples in each vector
- * @param[out] *realResult real part of the result returned here
- * @param[out] *imagResult imaginary part of the result returned here
- * @return none.
- */
-
- void arm_cmplx_dot_prod_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- uint32_t numSamples,
- q63_t * realResult,
- q63_t * imagResult);
-
- /**
- * @brief Floating-point complex dot product
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[in] numSamples number of complex samples in each vector
- * @param[out] *realResult real part of the result returned here
- * @param[out] *imagResult imaginary part of the result returned here
- * @return none.
- */
-
- void arm_cmplx_dot_prod_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- uint32_t numSamples,
- float32_t * realResult,
- float32_t * imagResult);
-
- /**
- * @brief Q15 complex-by-real multiplication
- * @param[in] *pSrcCmplx points to the complex input vector
- * @param[in] *pSrcReal points to the real input vector
- * @param[out] *pCmplxDst points to the complex output vector
- * @param[in] numSamples number of samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_real_q15(
- q15_t * pSrcCmplx,
- q15_t * pSrcReal,
- q15_t * pCmplxDst,
- uint32_t numSamples);
-
- /**
- * @brief Q31 complex-by-real multiplication
- * @param[in] *pSrcCmplx points to the complex input vector
- * @param[in] *pSrcReal points to the real input vector
- * @param[out] *pCmplxDst points to the complex output vector
- * @param[in] numSamples number of samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_real_q31(
- q31_t * pSrcCmplx,
- q31_t * pSrcReal,
- q31_t * pCmplxDst,
- uint32_t numSamples);
-
- /**
- * @brief Floating-point complex-by-real multiplication
- * @param[in] *pSrcCmplx points to the complex input vector
- * @param[in] *pSrcReal points to the real input vector
- * @param[out] *pCmplxDst points to the complex output vector
- * @param[in] numSamples number of samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_real_f32(
- float32_t * pSrcCmplx,
- float32_t * pSrcReal,
- float32_t * pCmplxDst,
- uint32_t numSamples);
-
- /**
- * @brief Minimum value of a Q7 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *result is output pointer
- * @param[in] index is the array index of the minimum value in the input buffer.
- * @return none.
- */
-
- void arm_min_q7(
- q7_t * pSrc,
- uint32_t blockSize,
- q7_t * result,
- uint32_t * index);
-
- /**
- * @brief Minimum value of a Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output pointer
- * @param[in] *pIndex is the array index of the minimum value in the input buffer.
- * @return none.
- */
-
- void arm_min_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q15_t * pResult,
- uint32_t * pIndex);
-
- /**
- * @brief Minimum value of a Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output pointer
- * @param[out] *pIndex is the array index of the minimum value in the input buffer.
- * @return none.
- */
- void arm_min_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult,
- uint32_t * pIndex);
-
- /**
- * @brief Minimum value of a floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[in] blockSize is the number of samples to process
- * @param[out] *pResult is output pointer
- * @param[out] *pIndex is the array index of the minimum value in the input buffer.
- * @return none.
- */
-
- void arm_min_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult,
- uint32_t * pIndex);
-
-/**
- * @brief Maximum value of a Q7 vector.
- * @param[in] *pSrc points to the input buffer
- * @param[in] blockSize length of the input vector
- * @param[out] *pResult maximum value returned here
- * @param[out] *pIndex index of maximum value returned here
- * @return none.
- */
-
- void arm_max_q7(
- q7_t * pSrc,
- uint32_t blockSize,
- q7_t * pResult,
- uint32_t * pIndex);
-
-/**
- * @brief Maximum value of a Q15 vector.
- * @param[in] *pSrc points to the input buffer
- * @param[in] blockSize length of the input vector
- * @param[out] *pResult maximum value returned here
- * @param[out] *pIndex index of maximum value returned here
- * @return none.
- */
-
- void arm_max_q15(
- q15_t * pSrc,
- uint32_t blockSize,
- q15_t * pResult,
- uint32_t * pIndex);
-
-/**
- * @brief Maximum value of a Q31 vector.
- * @param[in] *pSrc points to the input buffer
- * @param[in] blockSize length of the input vector
- * @param[out] *pResult maximum value returned here
- * @param[out] *pIndex index of maximum value returned here
- * @return none.
- */
-
- void arm_max_q31(
- q31_t * pSrc,
- uint32_t blockSize,
- q31_t * pResult,
- uint32_t * pIndex);
-
-/**
- * @brief Maximum value of a floating-point vector.
- * @param[in] *pSrc points to the input buffer
- * @param[in] blockSize length of the input vector
- * @param[out] *pResult maximum value returned here
- * @param[out] *pIndex index of maximum value returned here
- * @return none.
- */
-
- void arm_max_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult,
- uint32_t * pIndex);
-
- /**
- * @brief Q15 complex-by-complex multiplication
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_cmplx_q15(
- q15_t * pSrcA,
- q15_t * pSrcB,
- q15_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Q31 complex-by-complex multiplication
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_cmplx_q31(
- q31_t * pSrcA,
- q31_t * pSrcB,
- q31_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Floating-point complex-by-complex multiplication
- * @param[in] *pSrcA points to the first input vector
- * @param[in] *pSrcB points to the second input vector
- * @param[out] *pDst points to the output vector
- * @param[in] numSamples number of complex samples in each vector
- * @return none.
- */
-
- void arm_cmplx_mult_cmplx_f32(
- float32_t * pSrcA,
- float32_t * pSrcB,
- float32_t * pDst,
- uint32_t numSamples);
-
- /**
- * @brief Converts the elements of the floating-point vector to Q31 vector.
- * @param[in] *pSrc points to the floating-point input vector
- * @param[out] *pDst points to the Q31 output vector
- * @param[in] blockSize length of the input vector
- * @return none.
- */
- void arm_float_to_q31(
- float32_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Converts the elements of the floating-point vector to Q15 vector.
- * @param[in] *pSrc points to the floating-point input vector
- * @param[out] *pDst points to the Q15 output vector
- * @param[in] blockSize length of the input vector
- * @return none
- */
- void arm_float_to_q15(
- float32_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Converts the elements of the floating-point vector to Q7 vector.
- * @param[in] *pSrc points to the floating-point input vector
- * @param[out] *pDst points to the Q7 output vector
- * @param[in] blockSize length of the input vector
- * @return none
- */
- void arm_float_to_q7(
- float32_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Converts the elements of the Q31 vector to Q15 vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q31_to_q15(
- q31_t * pSrc,
- q15_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Converts the elements of the Q31 vector to Q7 vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q31_to_q7(
- q31_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
- /**
- * @brief Converts the elements of the Q15 vector to floating-point vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q15_to_float(
- q15_t * pSrc,
- float32_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Converts the elements of the Q15 vector to Q31 vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q15_to_q31(
- q15_t * pSrc,
- q31_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @brief Converts the elements of the Q15 vector to Q7 vector.
- * @param[in] *pSrc is input pointer
- * @param[out] *pDst is output pointer
- * @param[in] blockSize is the number of samples to process
- * @return none.
- */
- void arm_q15_to_q7(
- q15_t * pSrc,
- q7_t * pDst,
- uint32_t blockSize);
-
-
- /**
- * @ingroup groupInterpolation
- */
-
- /**
- * @defgroup BilinearInterpolate Bilinear Interpolation
- *
- * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid.
- * The underlying function <code>f(x, y)</code> is sampled on a regular grid and the interpolation process
- * determines values between the grid points.
- * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension.
- * Bilinear interpolation is often used in image processing to rescale images.
- * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types.
- *
- * <b>Algorithm</b>
- * \par
- * The instance structure used by the bilinear interpolation functions describes a two dimensional data table.
- * For floating-point, the instance structure is defined as:
- * <pre>
- * typedef struct
- * {
- * uint16_t numRows;
- * uint16_t numCols;
- * float32_t *pData;
- * } arm_bilinear_interp_instance_f32;
- * </pre>
- *
- * \par
- * where <code>numRows</code> specifies the number of rows in the table;
- * <code>numCols</code> specifies the number of columns in the table;
- * and <code>pData</code> points to an array of size <code>numRows*numCols</code> values.
- * The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes.
- * That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers.
- *
- * \par
- * Let <code>(x, y)</code> specify the desired interpolation point. Then define:
- * <pre>
- * XF = floor(x)
- * YF = floor(y)
- * </pre>
- * \par
- * The interpolated output point is computed as:
- * <pre>
- * f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
- * + f(XF+1, YF) * (x-XF)*(1-(y-YF))
- * + f(XF, YF+1) * (1-(x-XF))*(y-YF)
- * + f(XF+1, YF+1) * (x-XF)*(y-YF)
- * </pre>
- * Note that the coordinates (x, y) contain integer and fractional components.
- * The integer components specify which portion of the table to use while the
- * fractional components control the interpolation processor.
- *
- * \par
- * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output.
- */
-
- /**
- * @addtogroup BilinearInterpolate
- * @{
- */
-
- /**
- *
- * @brief Floating-point bilinear interpolation.
- * @param[in,out] *S points to an instance of the interpolation structure.
- * @param[in] X interpolation coordinate.
- * @param[in] Y interpolation coordinate.
- * @return out interpolated value.
- */
-
-
- static __INLINE float32_t arm_bilinear_interp_f32(
- const arm_bilinear_interp_instance_f32 * S,
- float32_t X,
- float32_t Y)
- {
- float32_t out;
- float32_t f00, f01, f10, f11;
- float32_t *pData = S->pData;
- int32_t xIndex, yIndex, index;
- float32_t xdiff, ydiff;
- float32_t b1, b2, b3, b4;
-
- xIndex = (int32_t) X;
- yIndex = (int32_t) Y;
-
- /* Care taken for table outside boundary */
- /* Returns zero output when values are outside table boundary */
- if(xIndex < 0 || xIndex > (S->numRows-1) || yIndex < 0 || yIndex > ( S->numCols-1))
- {
- return(0);
- }
-
- /* Calculation of index for two nearest points in X-direction */
- index = (xIndex - 1) + (yIndex-1) * S->numCols ;
-
-
- /* Read two nearest points in X-direction */
- f00 = pData[index];
- f01 = pData[index + 1];
-
- /* Calculation of index for two nearest points in Y-direction */
- index = (xIndex-1) + (yIndex) * S->numCols;
-
-
- /* Read two nearest points in Y-direction */
- f10 = pData[index];
- f11 = pData[index + 1];
-
- /* Calculation of intermediate values */
- b1 = f00;
- b2 = f01 - f00;
- b3 = f10 - f00;
- b4 = f00 - f01 - f10 + f11;
-
- /* Calculation of fractional part in X */
- xdiff = X - xIndex;
-
- /* Calculation of fractional part in Y */
- ydiff = Y - yIndex;
-
- /* Calculation of bi-linear interpolated output */
- out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff;
-
- /* return to application */
- return (out);
-
- }
-
- /**
- *
- * @brief Q31 bilinear interpolation.
- * @param[in,out] *S points to an instance of the interpolation structure.
- * @param[in] X interpolation coordinate in 12.20 format.
- * @param[in] Y interpolation coordinate in 12.20 format.
- * @return out interpolated value.
- */
-
- static __INLINE q31_t arm_bilinear_interp_q31(
- arm_bilinear_interp_instance_q31 * S,
- q31_t X,
- q31_t Y)
- {
- q31_t out; /* Temporary output */
- q31_t acc = 0; /* output */
- q31_t xfract, yfract; /* X, Y fractional parts */
- q31_t x1, x2, y1, y2; /* Nearest output values */
- int32_t rI, cI; /* Row and column indices */
- q31_t *pYData = S->pData; /* pointer to output table values */
- uint32_t nCols = S->numCols; /* num of rows */
-
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- rI = ((X & 0xFFF00000) >> 20u);
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- cI = ((Y & 0xFFF00000) >> 20u);
-
- /* Care taken for table outside boundary */
- /* Returns zero output when values are outside table boundary */
- if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1))
- {
- return(0);
- }
-
- /* 20 bits for the fractional part */
- /* shift left xfract by 11 to keep 1.31 format */
- xfract = (X & 0x000FFFFF) << 11u;
-
- /* Read two nearest output values from the index */
- x1 = pYData[(rI) + nCols * (cI)];
- x2 = pYData[(rI) + nCols * (cI) + 1u];
-
- /* 20 bits for the fractional part */
- /* shift left yfract by 11 to keep 1.31 format */
- yfract = (Y & 0x000FFFFF) << 11u;
-
- /* Read two nearest output values from the index */
- y1 = pYData[(rI) + nCols * (cI + 1)];
- y2 = pYData[(rI) + nCols * (cI + 1) + 1u];
-
- /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */
- out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32));
- acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32));
-
- /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */
- out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32));
- acc += ((q31_t) ((q63_t) out * (xfract) >> 32));
-
- /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */
- out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32));
- acc += ((q31_t) ((q63_t) out * (yfract) >> 32));
-
- /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */
- out = ((q31_t) ((q63_t) y2 * (xfract) >> 32));
- acc += ((q31_t) ((q63_t) out * (yfract) >> 32));
-
- /* Convert acc to 1.31(q31) format */
- return (acc << 2u);
-
- }
-
- /**
- * @brief Q15 bilinear interpolation.
- * @param[in,out] *S points to an instance of the interpolation structure.
- * @param[in] X interpolation coordinate in 12.20 format.
- * @param[in] Y interpolation coordinate in 12.20 format.
- * @return out interpolated value.
- */
-
- static __INLINE q15_t arm_bilinear_interp_q15(
- arm_bilinear_interp_instance_q15 * S,
- q31_t X,
- q31_t Y)
- {
- q63_t acc = 0; /* output */
- q31_t out; /* Temporary output */
- q15_t x1, x2, y1, y2; /* Nearest output values */
- q31_t xfract, yfract; /* X, Y fractional parts */
- int32_t rI, cI; /* Row and column indices */
- q15_t *pYData = S->pData; /* pointer to output table values */
- uint32_t nCols = S->numCols; /* num of rows */
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- rI = ((X & 0xFFF00000) >> 20);
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- cI = ((Y & 0xFFF00000) >> 20);
-
- /* Care taken for table outside boundary */
- /* Returns zero output when values are outside table boundary */
- if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1))
- {
- return(0);
- }
-
- /* 20 bits for the fractional part */
- /* xfract should be in 12.20 format */
- xfract = (X & 0x000FFFFF);
-
- /* Read two nearest output values from the index */
- x1 = pYData[(rI) + nCols * (cI)];
- x2 = pYData[(rI) + nCols * (cI) + 1u];
-
-
- /* 20 bits for the fractional part */
- /* yfract should be in 12.20 format */
- yfract = (Y & 0x000FFFFF);
-
- /* Read two nearest output values from the index */
- y1 = pYData[(rI) + nCols * (cI + 1)];
- y2 = pYData[(rI) + nCols * (cI + 1) + 1u];
-
- /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */
-
- /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */
- /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */
- out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u);
- acc = ((q63_t) out * (0xFFFFF - yfract));
-
- /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */
- out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u);
- acc += ((q63_t) out * (xfract));
-
- /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */
- out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u);
- acc += ((q63_t) out * (yfract));
-
- /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */
- out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u);
- acc += ((q63_t) out * (yfract));
-
- /* acc is in 13.51 format and down shift acc by 36 times */
- /* Convert out to 1.15 format */
- return (acc >> 36);
-
- }
-
- /**
- * @brief Q7 bilinear interpolation.
- * @param[in,out] *S points to an instance of the interpolation structure.
- * @param[in] X interpolation coordinate in 12.20 format.
- * @param[in] Y interpolation coordinate in 12.20 format.
- * @return out interpolated value.
- */
-
- static __INLINE q7_t arm_bilinear_interp_q7(
- arm_bilinear_interp_instance_q7 * S,
- q31_t X,
- q31_t Y)
- {
- q63_t acc = 0; /* output */
- q31_t out; /* Temporary output */
- q31_t xfract, yfract; /* X, Y fractional parts */
- q7_t x1, x2, y1, y2; /* Nearest output values */
- int32_t rI, cI; /* Row and column indices */
- q7_t *pYData = S->pData; /* pointer to output table values */
- uint32_t nCols = S->numCols; /* num of rows */
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- rI = ((X & 0xFFF00000) >> 20);
-
- /* Input is in 12.20 format */
- /* 12 bits for the table index */
- /* Index value calculation */
- cI = ((Y & 0xFFF00000) >> 20);
-
- /* Care taken for table outside boundary */
- /* Returns zero output when values are outside table boundary */
- if(rI < 0 || rI > (S->numRows-1) || cI < 0 || cI > ( S->numCols-1))
- {
- return(0);
- }
-
- /* 20 bits for the fractional part */
- /* xfract should be in 12.20 format */
- xfract = (X & 0x000FFFFF);
-
- /* Read two nearest output values from the index */
- x1 = pYData[(rI) + nCols * (cI)];
- x2 = pYData[(rI) + nCols * (cI) + 1u];
-
-
- /* 20 bits for the fractional part */
- /* yfract should be in 12.20 format */
- yfract = (Y & 0x000FFFFF);
-
- /* Read two nearest output values from the index */
- y1 = pYData[(rI) + nCols * (cI + 1)];
- y2 = pYData[(rI) + nCols * (cI + 1) + 1u];
-
- /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */
- out = ((x1 * (0xFFFFF - xfract)));
- acc = (((q63_t) out * (0xFFFFF - yfract)));
-
- /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */
- out = ((x2 * (0xFFFFF - yfract)));
- acc += (((q63_t) out * (xfract)));
-
- /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */
- out = ((y1 * (0xFFFFF - xfract)));
- acc += (((q63_t) out * (yfract)));
-
- /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */
- out = ((y2 * (yfract)));
- acc += (((q63_t) out * (xfract)));
-
- /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */
- return (acc >> 40);
-
- }
-
- /**
- * @} end of BilinearInterpolate group
- */
-
-
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _ARM_MATH_H */
-
-
-/**
- *
- * End of file.
- */
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm0.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cm0.h
deleted file mode 100644
index 9d7a19f9ae..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm0.h
+++ /dev/null
@@ -1,665 +0,0 @@
-/**************************************************************************//**
- * @file core_cm0.h
- * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File
- * @version V2.10
- * @date 19. July 2011
- *
- * @note
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#endif
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#ifndef __CORE_CM0_H_GENERIC
-#define __CORE_CM0_H_GENERIC
-
-
-/** \mainpage CMSIS Cortex-M0
-
- This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer.
- It consists of:
-
- - Cortex-M Core Register Definitions
- - Cortex-M functions
- - Cortex-M instructions
-
- The CMSIS Cortex-M0 Core Peripheral Access Layer contains C and assembly functions that ease
- access to the Cortex-M Core
- */
-
-/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions
- CMSIS violates following MISRA-C2004 Rules:
-
- - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.<br>
- Function definitions in header files are used to allow 'inlining'.
-
- - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
- Unions are used for effective representation of core registers.
-
- - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.<br>
- Function-like macros are used to allow more efficient code.
-
- */
-
-
-/*******************************************************************************
- * CMSIS definitions
- ******************************************************************************/
-/** \defgroup CMSIS_core_definitions CMSIS Core Definitions
- This file defines all structures and symbols for CMSIS core:
- - CMSIS version number
- - Cortex-M core
- - Cortex-M core Revision Number
- @{
- */
-
-/* CMSIS CM0 definitions */
-#define __CM0_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */
-#define __CM0_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */
-#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
-
-#define __CORTEX_M (0x00) /*!< Cortex core */
-
-
-#if defined ( __CC_ARM )
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
-
-#elif defined ( __ICCARM__ )
- #define __ASM __asm /*!< asm keyword for IAR Compiler */
- #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
-
-#elif defined ( __GNUC__ )
- #define __ASM __asm /*!< asm keyword for GNU Compiler */
- #define __INLINE inline /*!< inline keyword for GNU Compiler */
-
-#elif defined ( __TASKING__ )
- #define __ASM __asm /*!< asm keyword for TASKING Compiler */
- #define __INLINE inline /*!< inline keyword for TASKING Compiler */
-
-#endif
-
-/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */
-#define __FPU_USED 0
-
-#if defined ( __CC_ARM )
- #if defined __TARGET_FPU_VFP
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-#elif defined ( __ICCARM__ )
- #if defined __ARMVFP__
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-
-#elif defined ( __GNUC__ )
- #if defined (__VFP_FP__) && !defined(__SOFTFP__)
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-
-#elif defined ( __TASKING__ )
- /* add preprocessor checks */
-#endif
-
-#include <stdint.h> /*!< standard types definitions */
-#include "core_cmInstr.h" /*!< Core Instruction Access */
-#include "core_cmFunc.h" /*!< Core Function Access */
-
-#endif /* __CORE_CM0_H_GENERIC */
-
-#ifndef __CMSIS_GENERIC
-
-#ifndef __CORE_CM0_H_DEPENDANT
-#define __CORE_CM0_H_DEPENDANT
-
-/* check device defines and use defaults */
-#if defined __CHECK_DEVICE_DEFINES
- #ifndef __CM0_REV
- #define __CM0_REV 0x0000
- #warning "__CM0_REV not defined in device header file; using default!"
- #endif
-
- #ifndef __NVIC_PRIO_BITS
- #define __NVIC_PRIO_BITS 2
- #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
- #endif
-
- #ifndef __Vendor_SysTickConfig
- #define __Vendor_SysTickConfig 0
- #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
- #endif
-#endif
-
-/* IO definitions (access restrictions to peripheral registers) */
-#ifdef __cplusplus
- #define __I volatile /*!< defines 'read only' permissions */
-#else
- #define __I volatile const /*!< defines 'read only' permissions */
-#endif
-#define __O volatile /*!< defines 'write only' permissions */
-#define __IO volatile /*!< defines 'read / write' permissions */
-
-/*@} end of group CMSIS_core_definitions */
-
-
-
-/*******************************************************************************
- * Register Abstraction
- ******************************************************************************/
-/** \defgroup CMSIS_core_register CMSIS Core Register
- Core Register contain:
- - Core Register
- - Core NVIC Register
- - Core SCB Register
- - Core SysTick Register
-*/
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CORE CMSIS Core
- Type definitions for the Cortex-M Core Registers
- @{
- */
-
-/** \brief Union type to access the Application Program Status Register (APSR).
- */
-typedef union
-{
- struct
- {
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */
-#else
- uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */
-#endif
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} APSR_Type;
-
-
-/** \brief Union type to access the Interrupt Program Status Register (IPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
- uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} IPSR_Type;
-
-
-/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */
-#else
- uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */
-#endif
- uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
- uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} xPSR_Type;
-
-
-/** \brief Union type to access the Control Registers (CONTROL).
- */
-typedef union
-{
- struct
- {
- uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */
- uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */
- uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */
- uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} CONTROL_Type;
-
-/*@} end of group CMSIS_CORE */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_NVIC CMSIS NVIC
- Type definitions for the Cortex-M NVIC Registers
- @{
- */
-
-/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
- */
-typedef struct
-{
- __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
- uint32_t RESERVED0[31];
- __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
- uint32_t RSERVED1[31];
- __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
- uint32_t RESERVED2[31];
- __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
- uint32_t RESERVED3[31];
- uint32_t RESERVED4[64];
- __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */
-} NVIC_Type;
-
-/*@} end of group CMSIS_NVIC */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SCB CMSIS SCB
- Type definitions for the Cortex-M System Control Block Registers
- @{
- */
-
-/** \brief Structure type to access the System Control Block (SCB).
- */
-typedef struct
-{
- __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */
- __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */
- uint32_t RESERVED0;
- __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */
- __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */
- __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */
- uint32_t RESERVED1;
- __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */
- __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */
-} SCB_Type;
-
-/* SCB CPUID Register Definitions */
-#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */
-#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */
-
-#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */
-#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */
-
-#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */
-#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */
-
-#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */
-#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */
-
-#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */
-#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */
-
-/* SCB Interrupt Control State Register Definitions */
-#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */
-#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */
-
-#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */
-#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */
-
-#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */
-#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */
-
-#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */
-#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */
-
-#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */
-#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */
-
-#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */
-#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */
-
-#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */
-#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */
-
-#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */
-#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */
-
-#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */
-#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */
-
-/* SCB Application Interrupt and Reset Control Register Definitions */
-#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */
-#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */
-
-#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */
-#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */
-
-#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */
-#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */
-
-#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */
-#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */
-
-#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */
-#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */
-
-/* SCB System Control Register Definitions */
-#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */
-#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */
-
-#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */
-#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */
-
-#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */
-#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */
-
-/* SCB Configuration Control Register Definitions */
-#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */
-#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */
-
-#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */
-#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */
-
-/* SCB System Handler Control and State Register Definitions */
-#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */
-#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */
-
-/*@} end of group CMSIS_SCB */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SysTick CMSIS SysTick
- Type definitions for the Cortex-M System Timer Registers
- @{
- */
-
-/** \brief Structure type to access the System Timer (SysTick).
- */
-typedef struct
-{
- __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
- __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
- __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
- __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
-} SysTick_Type;
-
-/* SysTick Control / Status Register Definitions */
-#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */
-#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */
-
-#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */
-#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */
-
-#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */
-#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */
-
-#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
-#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */
-
-/* SysTick Reload Register Definitions */
-#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
-#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */
-
-/* SysTick Current Register Definitions */
-#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */
-#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */
-
-/* SysTick Calibration Register Definitions */
-#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */
-#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */
-
-#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */
-#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */
-
-#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */
-#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */
-
-/*@} end of group CMSIS_SysTick */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CoreDebug CMSIS Core Debug
- Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP
- and not via processor. Therefore they are not covered by the Cortex-M0 header file.
- @{
- */
-/*@} end of group CMSIS_CoreDebug */
-
-
-/** \ingroup CMSIS_core_register
- @{
- */
-
-/* Memory mapping of Cortex-M0 Hardware */
-#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
-#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */
-#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */
-#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */
-#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */
-
-#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */
-#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */
-#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */
-
-
-/*@} */
-
-
-
-/*******************************************************************************
- * Hardware Abstraction Layer
- ******************************************************************************/
-/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface
- Core Function Interface contains:
- - Core NVIC Functions
- - Core SysTick Functions
- - Core Register Access Functions
-*/
-
-
-
-/* ########################## NVIC functions #################################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions
- @{
- */
-
-/* Interrupt Priorities are WORD accessible only under ARMv6M */
-/* The following MACROS handle generation of the register offset and byte masks */
-#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 )
-#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) )
-#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) )
-
-
-/** \brief Enable External Interrupt
-
- This function enables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to enable
- */
-static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
-{
- NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
-}
-
-
-/** \brief Disable External Interrupt
-
- This function disables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to disable
- */
-static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
-{
- NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
-}
-
-
-/** \brief Get Pending Interrupt
-
- This function reads the pending register in the NVIC and returns the pending bit
- for the specified interrupt.
-
- \param [in] IRQn Number of the interrupt for get pending
- \return 0 Interrupt status is not pending
- \return 1 Interrupt status is pending
- */
-static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
-{
- return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0));
-}
-
-
-/** \brief Set Pending Interrupt
-
- This function sets the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for set pending
- */
-static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
-}
-
-
-/** \brief Clear Pending Interrupt
-
- This function clears the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for clear pending
- */
-static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
-}
-
-
-/** \brief Set Interrupt Priority
-
- This function sets the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- Note: The priority cannot be set for every core interrupt.
-
- \param [in] IRQn Number of the interrupt for set priority
- \param [in] priority Priority to set
- */
-static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
-{
- if(IRQn < 0) {
- SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |
- (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }
- else {
- NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |
- (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }
-}
-
-
-/** \brief Get Interrupt Priority
-
- This function reads the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- The returned priority value is automatically aligned to the implemented
- priority bits of the microcontroller.
-
- \param [in] IRQn Number of the interrupt for get priority
- \return Interrupt Priority
- */
-static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
-{
-
- if(IRQn < 0) {
- return((uint32_t)((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */
- else {
- return((uint32_t)((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */
-}
-
-
-/** \brief System Reset
-
- This function initiate a system reset request to reset the MCU.
- */
-static __INLINE void NVIC_SystemReset(void)
-{
- __DSB(); /* Ensure all outstanding memory accesses included
- buffered write are completed before reset */
- SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- SCB_AIRCR_SYSRESETREQ_Msk);
- __DSB(); /* Ensure completion of memory access */
- while(1); /* wait until reset */
-}
-
-/*@} end of CMSIS_Core_NVICFunctions */
-
-
-
-/* ################################## SysTick function ############################################ */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions
- @{
- */
-
-#if (__Vendor_SysTickConfig == 0)
-
-/** \brief System Tick Configuration
-
- This function initialises the system tick timer and its interrupt and start the system tick timer.
- Counter is in free running mode to generate periodical interrupts.
-
- \param [in] ticks Number of ticks between two interrupts
- \return 0 Function succeeded
- \return 1 Function failed
- */
-static __INLINE uint32_t SysTick_Config(uint32_t ticks)
-{
- if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
-
- SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
- NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
- SysTick->VAL = 0; /* Load the SysTick Counter Value */
- SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
- SysTick_CTRL_TICKINT_Msk |
- SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
- return (0); /* Function successful */
-}
-
-#endif
-
-/*@} end of CMSIS_Core_SysTickFunctions */
-
-
-
-
-#endif /* __CORE_CM0_H_DEPENDANT */
-
-#endif /* __CMSIS_GENERIC */
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm3.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cm3.h
deleted file mode 100644
index e6b14fc283..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm3.h
+++ /dev/null
@@ -1,1240 +0,0 @@
-/**************************************************************************//**
- * @file core_cm3.h
- * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File
- * @version V2.10
- * @date 19. July 2011
- *
- * @note
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#endif
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#ifndef __CORE_CM3_H_GENERIC
-#define __CORE_CM3_H_GENERIC
-
-
-/** \mainpage CMSIS Cortex-M3
-
- This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer.
- It consists of:
-
- - Cortex-M Core Register Definitions
- - Cortex-M functions
- - Cortex-M instructions
-
- The CMSIS Cortex-M3 Core Peripheral Access Layer contains C and assembly functions that ease
- access to the Cortex-M Core
- */
-
-/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions
- * @ingroup CMSIS_Core
- CMSIS violates following MISRA-C2004 Rules:
-
- - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.<br>
- Function definitions in header files are used to allow 'inlining'.
-
- - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
- Unions are used for effective representation of core registers.
-
- - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.<br>
- Function-like macros are used to allow more efficient code.
-
- */
-
-
-/*******************************************************************************
- * CMSIS definitions
- ******************************************************************************/
-/** \defgroup CMSIS_core_definitions CMSIS Core Definitions
- * @ingroup CMSIS_Core
- This file defines all structures and symbols for CMSIS core:
- - CMSIS version number
- - Cortex-M core
- - Cortex-M core Revision Number
- @{
- */
-
-/* CMSIS CM3 definitions */
-#define __CM3_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */
-#define __CM3_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */
-#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
-
-#define __CORTEX_M (0x03) /*!< Cortex core */
-
-
-#if defined ( __CC_ARM )
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
-
-#elif defined ( __ICCARM__ )
- #define __ASM __asm /*!< asm keyword for IAR Compiler */
- #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
-
-#elif defined ( __GNUC__ )
- #define __ASM __asm /*!< asm keyword for GNU Compiler */
- #define __INLINE inline /*!< inline keyword for GNU Compiler */
-
-#elif defined ( __TASKING__ )
- #define __ASM __asm /*!< asm keyword for TASKING Compiler */
- #define __INLINE inline /*!< inline keyword for TASKING Compiler */
-
-#endif
-
-/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */
-#define __FPU_USED 0
-
-#if defined ( __CC_ARM )
- #if defined __TARGET_FPU_VFP
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-#elif defined ( __ICCARM__ )
- #if defined __ARMVFP__
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-
-#elif defined ( __GNUC__ )
- #if defined (__VFP_FP__) && !defined(__SOFTFP__)
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #endif
-
-#elif defined ( __TASKING__ )
- /* add preprocessor checks */
-#endif
-
-#include <stdint.h> /*!< standard types definitions */
-#include "core_cmInstr.h" /*!< Core Instruction Access */
-#include "core_cmFunc.h" /*!< Core Function Access */
-
-#endif /* __CORE_CM3_H_GENERIC */
-
-#ifndef __CMSIS_GENERIC
-
-#ifndef __CORE_CM3_H_DEPENDANT
-#define __CORE_CM3_H_DEPENDANT
-
-/* check device defines and use defaults */
-#if defined __CHECK_DEVICE_DEFINES
- #ifndef __CM3_REV
- #define __CM3_REV 0x0200
- #warning "__CM3_REV not defined in device header file; using default!"
- #endif
-
- #ifndef __MPU_PRESENT
- #define __MPU_PRESENT 0
- #warning "__MPU_PRESENT not defined in device header file; using default!"
- #endif
-
- #ifndef __NVIC_PRIO_BITS
- #define __NVIC_PRIO_BITS 4
- #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
- #endif
-
- #ifndef __Vendor_SysTickConfig
- #define __Vendor_SysTickConfig 0
- #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
- #endif
-#endif
-
-/* IO definitions (access restrictions to peripheral registers) */
-#ifdef __cplusplus
- #define __I volatile /*!< defines 'read only' permissions */
-#else
- #define __I volatile const /*!< defines 'read only' permissions */
-#endif
-#define __O volatile /*!< defines 'write only' permissions */
-#define __IO volatile /*!< defines 'read / write' permissions */
-
-/*@} end of group CMSIS_core_definitions */
-
-
-
-/*******************************************************************************
- * Register Abstraction
- ******************************************************************************/
-/** \defgroup CMSIS_core_register CMSIS Core Register
- * @ingroup CMSIS_Core
- Core Register contain:
- - Core Register
- - Core NVIC Register
- - Core SCB Register
- - Core SysTick Register
- - Core Debug Register
- - Core MPU Register
-*/
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CORE CMSIS Core
- Type definitions for the Cortex-M Core Registers
- @{
- */
-
-/** \brief Union type to access the Application Program Status Register (APSR).
- */
-typedef union
-{
- struct
- {
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */
-#else
- uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */
-#endif
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} APSR_Type;
-
-
-/** \brief Union type to access the Interrupt Program Status Register (IPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
- uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} IPSR_Type;
-
-
-/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */
-#else
- uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */
-#endif
- uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
- uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} xPSR_Type;
-
-
-/** \brief Union type to access the Control Registers (CONTROL).
- */
-typedef union
-{
- struct
- {
- uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */
- uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */
- uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */
- uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} CONTROL_Type;
-
-/*@} end of group CMSIS_CORE */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_NVIC CMSIS NVIC
- Type definitions for the Cortex-M NVIC Registers
- @{
- */
-
-/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
- */
-typedef struct
-{
- __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
- uint32_t RESERVED0[24];
- __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
- uint32_t RSERVED1[24];
- __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
- uint32_t RESERVED2[24];
- __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
- uint32_t RESERVED3[24];
- __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */
- uint32_t RESERVED4[56];
- __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */
- uint32_t RESERVED5[644];
- __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */
-} NVIC_Type;
-
-/* Software Triggered Interrupt Register Definitions */
-#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */
-#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */
-
-/*@} end of group CMSIS_NVIC */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SCB CMSIS SCB
- Type definitions for the Cortex-M System Control Block Registers
- @{
- */
-
-/** \brief Structure type to access the System Control Block (SCB).
- */
-typedef struct
-{
- __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */
- __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */
- __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */
- __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */
- __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */
- __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */
- __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */
- __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */
- __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */
- __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */
- __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */
- __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */
- __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */
- __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */
- __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */
- __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */
- __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */
- __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */
- __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */
- uint32_t RESERVED0[5];
- __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */
-} SCB_Type;
-
-/* SCB CPUID Register Definitions */
-#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */
-#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */
-
-#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */
-#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */
-
-#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */
-#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */
-
-#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */
-#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */
-
-#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */
-#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */
-
-/* SCB Interrupt Control State Register Definitions */
-#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */
-#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */
-
-#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */
-#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */
-
-#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */
-#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */
-
-#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */
-#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */
-
-#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */
-#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */
-
-#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */
-#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */
-
-#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */
-#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */
-
-#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */
-#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */
-
-#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */
-#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */
-
-#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */
-#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */
-
-/* SCB Vector Table Offset Register Definitions */
-#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */
-#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */
-
-/* SCB Application Interrupt and Reset Control Register Definitions */
-#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */
-#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */
-
-#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */
-#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */
-
-#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */
-#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */
-
-#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */
-#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */
-
-#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */
-#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */
-
-#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */
-#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */
-
-#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */
-#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */
-
-/* SCB System Control Register Definitions */
-#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */
-#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */
-
-#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */
-#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */
-
-#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */
-#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */
-
-/* SCB Configuration Control Register Definitions */
-#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */
-#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */
-
-#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */
-#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */
-
-#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */
-#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */
-
-#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */
-#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */
-
-#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */
-#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */
-
-#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */
-#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */
-
-/* SCB System Handler Control and State Register Definitions */
-#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */
-#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */
-
-#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */
-#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */
-
-#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */
-#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */
-
-#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */
-#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */
-
-#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */
-#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */
-
-#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */
-#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */
-
-#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */
-#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */
-
-#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */
-#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */
-
-#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */
-#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */
-
-#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */
-#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */
-
-#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */
-#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */
-
-#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */
-#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */
-
-#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */
-#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */
-
-#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */
-#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */
-
-/* SCB Configurable Fault Status Registers Definitions */
-#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */
-#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */
-
-#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */
-#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */
-
-#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */
-#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */
-
-/* SCB Hard Fault Status Registers Definitions */
-#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */
-#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */
-
-#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */
-#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */
-
-#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */
-#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */
-
-/* SCB Debug Fault Status Register Definitions */
-#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */
-#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */
-
-#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */
-#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */
-
-#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */
-#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */
-
-#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */
-#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */
-
-#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */
-#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */
-
-/*@} end of group CMSIS_SCB */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SCnSCB CMSIS System Control and ID Register not in the SCB
- Type definitions for the Cortex-M System Control and ID Register not in the SCB
- @{
- */
-
-/** \brief Structure type to access the System Control and ID Register not in the SCB.
- */
-typedef struct
-{
- uint32_t RESERVED0[1];
- __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */
-#if ((defined __CM3_REV) && (__CM3_REV >= 0x200))
- __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */
-#else
- uint32_t RESERVED1[1];
-#endif
-} SCnSCB_Type;
-
-/* Interrupt Controller Type Register Definitions */
-#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */
-#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */
-
-/* Auxiliary Control Register Definitions */
-
-#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */
-#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */
-
-#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */
-#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */
-
-#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */
-#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */
-
-/*@} end of group CMSIS_SCnotSCB */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SysTick CMSIS SysTick
- Type definitions for the Cortex-M System Timer Registers
- @{
- */
-
-/** \brief Structure type to access the System Timer (SysTick).
- */
-typedef struct
-{
- __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
- __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
- __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
- __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
-} SysTick_Type;
-
-/* SysTick Control / Status Register Definitions */
-#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */
-#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */
-
-#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */
-#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */
-
-#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */
-#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */
-
-#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
-#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */
-
-/* SysTick Reload Register Definitions */
-#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
-#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */
-
-/* SysTick Current Register Definitions */
-#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */
-#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */
-
-/* SysTick Calibration Register Definitions */
-#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */
-#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */
-
-#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */
-#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */
-
-#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */
-#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */
-
-/*@} end of group CMSIS_SysTick */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_ITM CMSIS ITM
- Type definitions for the Cortex-M Instrumentation Trace Macrocell (ITM)
- @{
- */
-
-/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM).
- */
-typedef struct
-{
- __O union
- {
- __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */
- __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */
- __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */
- } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */
- uint32_t RESERVED0[864];
- __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */
- uint32_t RESERVED1[15];
- __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */
- uint32_t RESERVED2[15];
- __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */
-} ITM_Type;
-
-/* ITM Trace Privilege Register Definitions */
-#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */
-#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */
-
-/* ITM Trace Control Register Definitions */
-#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */
-#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */
-
-#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */
-#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */
-
-#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */
-#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */
-
-#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */
-#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */
-
-#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */
-#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */
-
-#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */
-#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA Mask */
-
-#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */
-#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */
-
-#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */
-#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */
-
-#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */
-#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */
-
-/*@}*/ /* end of group CMSIS_ITM */
-
-
-#if (__MPU_PRESENT == 1)
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_MPU CMSIS MPU
- Type definitions for the Cortex-M Memory Protection Unit (MPU)
- @{
- */
-
-/** \brief Structure type to access the Memory Protection Unit (MPU).
- */
-typedef struct
-{
- __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */
- __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */
- __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */
- __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */
- __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */
- __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */
- __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */
- __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */
- __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */
- __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */
- __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */
-} MPU_Type;
-
-/* MPU Type Register */
-#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */
-#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */
-
-#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */
-#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */
-
-#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */
-#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */
-
-/* MPU Control Register */
-#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */
-#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */
-
-#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */
-#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */
-
-#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */
-#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */
-
-/* MPU Region Number Register */
-#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */
-#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */
-
-/* MPU Region Base Address Register */
-#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */
-#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */
-
-#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */
-#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */
-
-#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */
-#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */
-
-/* MPU Region Attribute and Size Register */
-#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */
-#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */
-
-#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */
-#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */
-
-#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */
-#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */
-
-#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */
-#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */
-
-/*@} end of group CMSIS_MPU */
-#endif
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CoreDebug CMSIS Core Debug
- Type definitions for the Cortex-M Core Debug Registers
- @{
- */
-
-/** \brief Structure type to access the Core Debug Register (CoreDebug).
- */
-typedef struct
-{
- __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */
- __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */
- __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */
- __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */
-} CoreDebug_Type;
-
-/* Debug Halting Control and Status Register */
-#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */
-#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */
-
-#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */
-#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */
-
-#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */
-#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */
-
-#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */
-#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */
-
-#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */
-#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */
-
-#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */
-#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */
-
-#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */
-#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */
-
-#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */
-#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */
-
-#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */
-#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */
-
-#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */
-#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */
-
-#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */
-#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */
-
-#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */
-#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */
-
-/* Debug Core Register Selector Register */
-#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */
-#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */
-
-#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */
-#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */
-
-/* Debug Exception and Monitor Control Register */
-#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */
-#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */
-
-#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */
-#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */
-
-#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */
-#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */
-
-#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */
-#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */
-
-#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */
-#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */
-
-#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */
-#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */
-
-#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */
-#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */
-
-#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */
-#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */
-
-#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */
-#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */
-
-#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */
-#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */
-
-#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */
-#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */
-
-#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */
-#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */
-
-#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */
-#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */
-
-/*@} end of group CMSIS_CoreDebug */
-
-
-/** \ingroup CMSIS_core_register
- @{
- */
-
-/* Memory mapping of Cortex-M3 Hardware */
-#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
-#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */
-#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */
-#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */
-#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */
-#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */
-
-#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */
-#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */
-#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */
-#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */
-#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */
-#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */
-
-#if (__MPU_PRESENT == 1)
- #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */
- #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */
-#endif
-
-/*@} */
-
-
-
-/*******************************************************************************
- * Hardware Abstraction Layer
- ******************************************************************************/
-/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface
- * @ingroup CMSIS_Core
- Core Function Interface contains:
- - Core NVIC Functions
- - Core SysTick Functions
- - Core Debug Functions
- - Core Register Access Functions
-*/
-
-
-
-/* ########################## NVIC functions #################################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions
- @{
- */
-
-/** \brief Set Priority Grouping
-
- This function sets the priority grouping field using the required unlock sequence.
- The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.
- Only values from 0..7 are used.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
-
- \param [in] PriorityGroup Priority grouping field
- */
-static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
-{
- uint32_t reg_value;
- uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */
-
- reg_value = SCB->AIRCR; /* read old register configuration */
- reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */
- reg_value = (reg_value |
- ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (PriorityGroupTmp << 8)); /* Insert write key and priorty group */
- SCB->AIRCR = reg_value;
-}
-
-
-/** \brief Get Priority Grouping
-
- This function gets the priority grouping from NVIC Interrupt Controller.
- Priority grouping is SCB->AIRCR [10:8] PRIGROUP field.
-
- \return Priority grouping field
- */
-static __INLINE uint32_t NVIC_GetPriorityGrouping(void)
-{
- return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */
-}
-
-
-/** \brief Enable External Interrupt
-
- This function enables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to enable
- */
-static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
-{
- NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */
-}
-
-
-/** \brief Disable External Interrupt
-
- This function disables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to disable
- */
-static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
-{
- NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */
-}
-
-
-/** \brief Get Pending Interrupt
-
- This function reads the pending register in the NVIC and returns the pending bit
- for the specified interrupt.
-
- \param [in] IRQn Number of the interrupt for get pending
- \return 0 Interrupt status is not pending
- \return 1 Interrupt status is pending
- */
-static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
-{
- return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */
-}
-
-
-/** \brief Set Pending Interrupt
-
- This function sets the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for set pending
- */
-static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */
-}
-
-
-/** \brief Clear Pending Interrupt
-
- This function clears the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for clear pending
- */
-static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
-}
-
-
-/** \brief Get Active Interrupt
-
- This function reads the active register in NVIC and returns the active bit.
- \param [in] IRQn Number of the interrupt for get active
- \return 0 Interrupt status is not active
- \return 1 Interrupt status is active
- */
-static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
-{
- return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */
-}
-
-
-/** \brief Set Interrupt Priority
-
- This function sets the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- Note: The priority cannot be set for every core interrupt.
-
- \param [in] IRQn Number of the interrupt for set priority
- \param [in] priority Priority to set
- */
-static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
-{
- if(IRQn < 0) {
- SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
- else {
- NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
-}
-
-
-/** \brief Get Interrupt Priority
-
- This function reads the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- The returned priority value is automatically aligned to the implemented
- priority bits of the microcontroller.
-
- \param [in] IRQn Number of the interrupt for get priority
- \return Interrupt Priority
- */
-static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
-{
-
- if(IRQn < 0) {
- return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */
- else {
- return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */
-}
-
-
-/** \brief Encode Priority
-
- This function encodes the priority for an interrupt with the given priority group,
- preemptive priority value and sub priority value.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
-
- The returned priority value can be used for NVIC_SetPriority(...) function
-
- \param [in] PriorityGroup Used priority group
- \param [in] PreemptPriority Preemptive priority value (starting from 0)
- \param [in] SubPriority Sub priority value (starting from 0)
- \return Encoded priority for the interrupt
- */
-static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
-{
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
-
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
-
- return (
- ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) |
- ((SubPriority & ((1 << (SubPriorityBits )) - 1)))
- );
-}
-
-
-/** \brief Decode Priority
-
- This function decodes an interrupt priority value with the given priority group to
- preemptive priority value and sub priority value.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
-
- The priority value can be retrieved with NVIC_GetPriority(...) function
-
- \param [in] Priority Priority value
- \param [in] PriorityGroup Used priority group
- \param [out] pPreemptPriority Preemptive priority value (starting from 0)
- \param [out] pSubPriority Sub priority value (starting from 0)
- */
-static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority)
-{
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
-
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
-
- *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1);
- *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1);
-}
-
-
-/** \brief System Reset
-
- This function initiate a system reset request to reset the MCU.
- */
-static __INLINE void NVIC_SystemReset(void)
-{
- __DSB(); /* Ensure all outstanding memory accesses included
- buffered write are completed before reset */
- SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
- SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */
- __DSB(); /* Ensure completion of memory access */
- while(1); /* wait until reset */
-}
-
-/*@} end of CMSIS_Core_NVICFunctions */
-
-
-
-/* ################################## SysTick function ############################################ */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions
- @{
- */
-
-#if (__Vendor_SysTickConfig == 0)
-
-/** \brief System Tick Configuration
-
- This function initialises the system tick timer and its interrupt and start the system tick timer.
- Counter is in free running mode to generate periodical interrupts.
-
- \param [in] ticks Number of ticks between two interrupts
- \return 0 Function succeeded
- \return 1 Function failed
- */
-static __INLINE uint32_t SysTick_Config(uint32_t ticks)
-{
- if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
-
- SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
- NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
- SysTick->VAL = 0; /* Load the SysTick Counter Value */
- SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
- SysTick_CTRL_TICKINT_Msk |
- SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
- return (0); /* Function successful */
-}
-
-#endif
-
-/*@} end of CMSIS_Core_SysTickFunctions */
-
-
-
-/* ##################################### Debug In/Output function ########################################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_core_DebugFunctions CMSIS Core Debug Functions
- @{
- */
-
-extern volatile int32_t ITM_RxBuffer; /*!< external variable to receive characters */
-#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */
-
-
-/** \brief ITM Send Character
-
- This function transmits a character via the ITM channel 0.
- It just returns when no debugger is connected that has booked the output.
- It is blocking when a debugger is connected, but the previous character send is not transmitted.
-
- \param [in] ch Character to transmit
- \return Character to transmit
- */
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
- if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */
- (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */
- (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */
- {
- while (ITM->PORT[0].u32 == 0);
- ITM->PORT[0].u8 = (uint8_t) ch;
- }
- return (ch);
-}
-
-
-/** \brief ITM Receive Character
-
- This function inputs a character via external variable ITM_RxBuffer.
- It just returns when no debugger is connected that has booked the output.
- It is blocking when a debugger is connected, but the previous character send is not transmitted.
-
- \return Received character
- \return -1 No character received
- */
-static __INLINE int32_t ITM_ReceiveChar (void) {
- int32_t ch = -1; /* no character available */
-
- if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {
- ch = ITM_RxBuffer;
- ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */
- }
-
- return (ch);
-}
-
-
-/** \brief ITM Check Character
-
- This function checks external variable ITM_RxBuffer whether a character is available or not.
- It returns '1' if a character is available and '0' if no character is available.
-
- \return 0 No character available
- \return 1 Character available
- */
-static __INLINE int32_t ITM_CheckChar (void) {
-
- if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
- return (0); /* no character available */
- } else {
- return (1); /* character available */
- }
-}
-
-/*@} end of CMSIS_core_DebugFunctions */
-
-#endif /* __CORE_CM3_H_DEPENDANT */
-
-#endif /* __CMSIS_GENERIC */
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4.h
deleted file mode 100644
index bf022ba67f..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4.h
+++ /dev/null
@@ -1,1378 +0,0 @@
-/**************************************************************************//**
- * @file core_cm4.h
- * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File
- * @version V2.10
- * @date 19. July 2011
- *
- * @note
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#endif
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#ifndef __CORE_CM4_H_GENERIC
-#define __CORE_CM4_H_GENERIC
-
-
-/** \mainpage CMSIS Cortex-M4
-
- This documentation describes the CMSIS Cortex-M Core Peripheral Access Layer.
- It consists of:
-
- - Cortex-M Core Register Definitions
- - Cortex-M functions
- - Cortex-M instructions
- - Cortex-M SIMD instructions
-
- The CMSIS Cortex-M4 Core Peripheral Access Layer contains C and assembly functions that ease
- access to the Cortex-M Core
- */
-
-/** \defgroup CMSIS_MISRA_Exceptions CMSIS MISRA-C:2004 Compliance Exceptions
- CMSIS violates following MISRA-C2004 Rules:
-
- - Violates MISRA 2004 Required Rule 8.5, object/function definition in header file.<br>
- Function definitions in header files are used to allow 'inlining'.
-
- - Violates MISRA 2004 Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
- Unions are used for effective representation of core registers.
-
- - Violates MISRA 2004 Advisory Rule 19.7, Function-like macro defined.<br>
- Function-like macros are used to allow more efficient code.
-
- */
-
-
-/*******************************************************************************
- * CMSIS definitions
- ******************************************************************************/
-/** \defgroup CMSIS_core_definitions CMSIS Core Definitions
- This file defines all structures and symbols for CMSIS core:
- - CMSIS version number
- - Cortex-M core
- - Cortex-M core Revision Number
- @{
- */
-
-/* CMSIS CM4 definitions */
-#define __CM4_CMSIS_VERSION_MAIN (0x02) /*!< [31:16] CMSIS HAL main version */
-#define __CM4_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */
-#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | __CM4_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
-
-#define __CORTEX_M (0x04) /*!< Cortex core */
-
-
-#if defined ( __CC_ARM )
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
-
-#elif defined ( __ICCARM__ )
- #define __ASM __asm /*!< asm keyword for IAR Compiler */
- #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
-
-#elif defined ( __GNUC__ )
- #define __ASM __asm /*!< asm keyword for GNU Compiler */
- #define __INLINE inline /*!< inline keyword for GNU Compiler */
-
-#elif defined ( __TASKING__ )
- #define __ASM __asm /*!< asm keyword for TASKING Compiler */
- #define __INLINE inline /*!< inline keyword for TASKING Compiler */
-
-#endif
-
-/*!< __FPU_USED to be checked prior to making use of FPU specific registers and functions */
-#if defined ( __CC_ARM )
- #if defined __TARGET_FPU_VFP
- #if (__FPU_PRESENT == 1)
- #define __FPU_USED 1
- #else
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #define __FPU_USED 0
- #endif
- #else
- #define __FPU_USED 0
- #endif
-
-#elif defined ( __ICCARM__ )
- #if defined __ARMVFP__
- #if (__FPU_PRESENT == 1)
- #define __FPU_USED 1
- #else
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #define __FPU_USED 0
- #endif
- #else
- #define __FPU_USED 0
- #endif
-
-#elif defined ( __GNUC__ )
- #if defined (__VFP_FP__) && !defined(__SOFTFP__)
- #if (__FPU_PRESENT == 1)
- #define __FPU_USED 1
- #else
- #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
- #define __FPU_USED 0
- #endif
- #else
- #define __FPU_USED 0
- #endif
-
-#elif defined ( __TASKING__ )
- /* add preprocessor checks to define __FPU_USED */
- #define __FPU_USED 0
-#endif
-
-#include <stdint.h> /*!< standard types definitions */
-#include <core_cmInstr.h> /*!< Core Instruction Access */
-#include <core_cmFunc.h> /*!< Core Function Access */
-#include <core_cm4_simd.h> /*!< Compiler specific SIMD Intrinsics */
-
-#endif /* __CORE_CM4_H_GENERIC */
-
-#ifndef __CMSIS_GENERIC
-
-#ifndef __CORE_CM4_H_DEPENDANT
-#define __CORE_CM4_H_DEPENDANT
-
-/* check device defines and use defaults */
-#if defined __CHECK_DEVICE_DEFINES
- #ifndef __CM4_REV
- #define __CM4_REV 0x0000
- #warning "__CM4_REV not defined in device header file; using default!"
- #endif
-
- #ifndef __FPU_PRESENT
- #define __FPU_PRESENT 0
- #warning "__FPU_PRESENT not defined in device header file; using default!"
- #endif
-
- #ifndef __MPU_PRESENT
- #define __MPU_PRESENT 0
- #warning "__MPU_PRESENT not defined in device header file; using default!"
- #endif
-
- #ifndef __NVIC_PRIO_BITS
- #define __NVIC_PRIO_BITS 4
- #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
- #endif
-
- #ifndef __Vendor_SysTickConfig
- #define __Vendor_SysTickConfig 0
- #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
- #endif
-#endif
-
-/* IO definitions (access restrictions to peripheral registers) */
-#ifdef __cplusplus
- #define __I volatile /*!< defines 'read only' permissions */
-#else
- #define __I volatile const /*!< defines 'read only' permissions */
-#endif
-#define __O volatile /*!< defines 'write only' permissions */
-#define __IO volatile /*!< defines 'read / write' permissions */
-
-/*@} end of group CMSIS_core_definitions */
-
-
-
-/*******************************************************************************
- * Register Abstraction
- ******************************************************************************/
-/** \defgroup CMSIS_core_register CMSIS Core Register
- Core Register contain:
- - Core Register
- - Core NVIC Register
- - Core SCB Register
- - Core SysTick Register
- - Core Debug Register
- - Core MPU Register
- - Core FPU Register
-*/
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CORE CMSIS Core
- Type definitions for the Cortex-M Core Registers
- @{
- */
-
-/** \brief Union type to access the Application Program Status Register (APSR).
- */
-typedef union
-{
- struct
- {
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */
-#else
- uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */
-#endif
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} APSR_Type;
-
-
-/** \brief Union type to access the Interrupt Program Status Register (IPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
- uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} IPSR_Type;
-
-
-/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR).
- */
-typedef union
-{
- struct
- {
- uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
-#if (__CORTEX_M != 0x04)
- uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */
-#else
- uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */
- uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
- uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */
-#endif
- uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
- uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
- uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
- uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
- uint32_t C:1; /*!< bit: 29 Carry condition code flag */
- uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
- uint32_t N:1; /*!< bit: 31 Negative condition code flag */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} xPSR_Type;
-
-
-/** \brief Union type to access the Control Registers (CONTROL).
- */
-typedef union
-{
- struct
- {
- uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */
- uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */
- uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */
- uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */
- } b; /*!< Structure used for bit access */
- uint32_t w; /*!< Type used for word access */
-} CONTROL_Type;
-
-/*@} end of group CMSIS_CORE */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_NVIC CMSIS NVIC
- Type definitions for the Cortex-M NVIC Registers
- @{
- */
-
-/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
- */
-typedef struct
-{
- __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
- uint32_t RESERVED0[24];
- __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
- uint32_t RSERVED1[24];
- __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
- uint32_t RESERVED2[24];
- __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
- uint32_t RESERVED3[24];
- __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */
- uint32_t RESERVED4[56];
- __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */
- uint32_t RESERVED5[644];
- __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */
-} NVIC_Type;
-
-/* Software Triggered Interrupt Register Definitions */
-#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */
-#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */
-
-/*@} end of group CMSIS_NVIC */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SCB CMSIS SCB
- Type definitions for the Cortex-M System Control Block Registers
- @{
- */
-
-/** \brief Structure type to access the System Control Block (SCB).
- */
-typedef struct
-{
- __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */
- __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */
- __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */
- __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */
- __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */
- __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */
- __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */
- __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */
- __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */
- __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */
- __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */
- __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */
- __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */
- __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */
- __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */
- __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */
- __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */
- __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */
- __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */
- uint32_t RESERVED0[5];
- __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */
-} SCB_Type;
-
-/* SCB CPUID Register Definitions */
-#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */
-#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */
-
-#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */
-#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */
-
-#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */
-#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */
-
-#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */
-#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */
-
-#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */
-#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */
-
-/* SCB Interrupt Control State Register Definitions */
-#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */
-#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */
-
-#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */
-#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */
-
-#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */
-#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */
-
-#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */
-#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */
-
-#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */
-#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */
-
-#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */
-#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */
-
-#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */
-#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */
-
-#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */
-#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */
-
-#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */
-#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */
-
-#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */
-#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */
-
-/* SCB Vector Table Offset Register Definitions */
-#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */
-#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */
-
-/* SCB Application Interrupt and Reset Control Register Definitions */
-#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */
-#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */
-
-#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */
-#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */
-
-#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */
-#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */
-
-#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */
-#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */
-
-#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */
-#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */
-
-#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */
-#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */
-
-#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */
-#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */
-
-/* SCB System Control Register Definitions */
-#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */
-#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */
-
-#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */
-#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */
-
-#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */
-#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */
-
-/* SCB Configuration Control Register Definitions */
-#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */
-#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */
-
-#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */
-#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */
-
-#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */
-#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */
-
-#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */
-#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */
-
-#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */
-#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */
-
-#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */
-#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */
-
-/* SCB System Handler Control and State Register Definitions */
-#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */
-#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */
-
-#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */
-#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */
-
-#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */
-#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */
-
-#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */
-#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */
-
-#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */
-#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */
-
-#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */
-#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */
-
-#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */
-#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */
-
-#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */
-#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */
-
-#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */
-#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */
-
-#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */
-#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */
-
-#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */
-#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */
-
-#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */
-#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */
-
-#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */
-#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */
-
-#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */
-#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */
-
-/* SCB Configurable Fault Status Registers Definitions */
-#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */
-#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */
-
-#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */
-#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */
-
-#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */
-#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */
-
-/* SCB Hard Fault Status Registers Definitions */
-#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */
-#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */
-
-#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */
-#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */
-
-#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */
-#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */
-
-/* SCB Debug Fault Status Register Definitions */
-#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */
-#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */
-
-#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */
-#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */
-
-#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */
-#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */
-
-#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */
-#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */
-
-#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */
-#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */
-
-/*@} end of group CMSIS_SCB */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SCnSCB CMSIS System Control and ID Register not in the SCB
- Type definitions for the Cortex-M System Control and ID Register not in the SCB
- @{
- */
-
-/** \brief Structure type to access the System Control and ID Register not in the SCB.
- */
-typedef struct
-{
- uint32_t RESERVED0[1];
- __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */
- __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */
-} SCnSCB_Type;
-
-/* Interrupt Controller Type Register Definitions */
-#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */
-#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */
-
-/* Auxiliary Control Register Definitions */
-#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */
-#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */
-
-#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */
-#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */
-
-#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */
-#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */
-
-#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */
-#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */
-
-#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */
-#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */
-
-/*@} end of group CMSIS_SCnotSCB */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_SysTick CMSIS SysTick
- Type definitions for the Cortex-M System Timer Registers
- @{
- */
-
-/** \brief Structure type to access the System Timer (SysTick).
- */
-typedef struct
-{
- __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
- __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
- __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
- __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
-} SysTick_Type;
-
-/* SysTick Control / Status Register Definitions */
-#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */
-#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */
-
-#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */
-#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */
-
-#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */
-#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */
-
-#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
-#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */
-
-/* SysTick Reload Register Definitions */
-#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
-#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */
-
-/* SysTick Current Register Definitions */
-#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */
-#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */
-
-/* SysTick Calibration Register Definitions */
-#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */
-#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */
-
-#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */
-#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */
-
-#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */
-#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */
-
-/*@} end of group CMSIS_SysTick */
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_ITM CMSIS ITM
- Type definitions for the Cortex-M Instrumentation Trace Macrocell (ITM)
- @{
- */
-
-/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM).
- */
-typedef struct
-{
- __O union
- {
- __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */
- __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */
- __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */
- } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */
- uint32_t RESERVED0[864];
- __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */
- uint32_t RESERVED1[15];
- __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */
- uint32_t RESERVED2[15];
- __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */
-} ITM_Type;
-
-/* ITM Trace Privilege Register Definitions */
-#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */
-#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */
-
-/* ITM Trace Control Register Definitions */
-#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */
-#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */
-
-#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */
-#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */
-
-#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */
-#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */
-
-#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */
-#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */
-
-#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */
-#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */
-
-#define ITM_TCR_TXENA_Pos 3 /*!< ITM TCR: TXENA Position */
-#define ITM_TCR_TXENA_Msk (1UL << ITM_TCR_TXENA_Pos) /*!< ITM TCR: TXENA Mask */
-
-#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */
-#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */
-
-#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */
-#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */
-
-#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */
-#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */
-
-/*@}*/ /* end of group CMSIS_ITM */
-
-
-#if (__MPU_PRESENT == 1)
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_MPU CMSIS MPU
- Type definitions for the Cortex-M Memory Protection Unit (MPU)
- @{
- */
-
-/** \brief Structure type to access the Memory Protection Unit (MPU).
- */
-typedef struct
-{
- __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */
- __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */
- __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */
- __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */
- __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */
- __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */
- __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */
- __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */
- __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */
- __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */
- __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */
-} MPU_Type;
-
-/* MPU Type Register */
-#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */
-#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */
-
-#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */
-#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */
-
-#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */
-#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */
-
-/* MPU Control Register */
-#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */
-#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */
-
-#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */
-#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */
-
-#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */
-#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */
-
-/* MPU Region Number Register */
-#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */
-#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */
-
-/* MPU Region Base Address Register */
-#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */
-#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */
-
-#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */
-#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */
-
-#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */
-#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */
-
-/* MPU Region Attribute and Size Register */
-#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */
-#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */
-
-#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */
-#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */
-
-#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */
-#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */
-
-#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */
-#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */
-
-/*@} end of group CMSIS_MPU */
-#endif
-
-
-#if (__FPU_PRESENT == 1)
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_FPU CMSIS FPU
- Type definitions for the Cortex-M Floating Point Unit (FPU)
- @{
- */
-
-/** \brief Structure type to access the Floating Point Unit (FPU).
- */
-typedef struct
-{
- uint32_t RESERVED0[1];
- __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */
- __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */
- __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */
- __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */
- __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */
-} FPU_Type;
-
-/* Floating-Point Context Control Register */
-#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */
-#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */
-
-#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */
-#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */
-
-#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */
-#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */
-
-#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */
-#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */
-
-#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */
-#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */
-
-#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */
-#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */
-
-#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */
-#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */
-
-#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */
-#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */
-
-#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */
-#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */
-
-/* Floating-Point Context Address Register */
-#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */
-#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */
-
-/* Floating-Point Default Status Control Register */
-#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */
-#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */
-
-#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */
-#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */
-
-#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */
-#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */
-
-#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */
-#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */
-
-/* Media and FP Feature Register 0 */
-#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */
-#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */
-
-#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */
-#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */
-
-#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */
-#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */
-
-#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */
-#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */
-
-#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */
-#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */
-
-#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */
-#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */
-
-#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */
-#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */
-
-#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */
-#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */
-
-/* Media and FP Feature Register 1 */
-#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */
-#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */
-
-#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */
-#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */
-
-#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */
-#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */
-
-#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */
-#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */
-
-/*@} end of group CMSIS_FPU */
-#endif
-
-
-/** \ingroup CMSIS_core_register
- \defgroup CMSIS_CoreDebug CMSIS Core Debug
- Type definitions for the Cortex-M Core Debug Registers
- @{
- */
-
-/** \brief Structure type to access the Core Debug Register (CoreDebug).
- */
-typedef struct
-{
- __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */
- __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */
- __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */
- __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */
-} CoreDebug_Type;
-
-/* Debug Halting Control and Status Register */
-#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */
-#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */
-
-#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */
-#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */
-
-#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */
-#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */
-
-#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */
-#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */
-
-#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */
-#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */
-
-#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */
-#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */
-
-#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */
-#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */
-
-#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */
-#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */
-
-#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */
-#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */
-
-#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */
-#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */
-
-#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */
-#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */
-
-#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */
-#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */
-
-/* Debug Core Register Selector Register */
-#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */
-#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */
-
-#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */
-#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */
-
-/* Debug Exception and Monitor Control Register */
-#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */
-#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */
-
-#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */
-#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */
-
-#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */
-#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */
-
-#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */
-#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */
-
-#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */
-#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */
-
-#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */
-#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */
-
-#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */
-#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */
-
-#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */
-#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */
-
-#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */
-#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */
-
-#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */
-#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */
-
-#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */
-#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */
-
-#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */
-#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */
-
-#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */
-#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */
-
-/*@} end of group CMSIS_CoreDebug */
-
-
-/** \ingroup CMSIS_core_register
- @{
- */
-
-/* Memory mapping of Cortex-M4 Hardware */
-#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
-#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */
-#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */
-#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */
-#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */
-#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */
-
-#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */
-#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */
-#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */
-#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */
-#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */
-#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */
-
-#if (__MPU_PRESENT == 1)
- #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */
- #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */
-#endif
-
-#if (__FPU_PRESENT == 1)
- #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */
- #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */
-#endif
-
-/*@} */
-
-
-
-/*******************************************************************************
- * Hardware Abstraction Layer
- ******************************************************************************/
-/** \defgroup CMSIS_Core_FunctionInterface CMSIS Core Function Interface
- Core Function Interface contains:
- - Core NVIC Functions
- - Core SysTick Functions
- - Core Debug Functions
- - Core Register Access Functions
-*/
-
-
-
-/* ########################## NVIC functions #################################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_NVICFunctions CMSIS Core NVIC Functions
- @{
- */
-
-/** \brief Set Priority Grouping
-
- This function sets the priority grouping field using the required unlock sequence.
- The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.
- Only values from 0..7 are used.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
-
- \param [in] PriorityGroup Priority grouping field
- */
-static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
-{
- uint32_t reg_value;
- uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */
-
- reg_value = SCB->AIRCR; /* read old register configuration */
- reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */
- reg_value = (reg_value |
- ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (PriorityGroupTmp << 8)); /* Insert write key and priorty group */
- SCB->AIRCR = reg_value;
-}
-
-
-/** \brief Get Priority Grouping
-
- This function gets the priority grouping from NVIC Interrupt Controller.
- Priority grouping is SCB->AIRCR [10:8] PRIGROUP field.
-
- \return Priority grouping field
- */
-static __INLINE uint32_t NVIC_GetPriorityGrouping(void)
-{
- return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */
-}
-
-
-/** \brief Enable External Interrupt
-
- This function enables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to enable
- */
-static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
-{
-/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */
- NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
-}
-
-
-/** \brief Disable External Interrupt
-
- This function disables a device specific interrupt in the NVIC interrupt controller.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the external interrupt to disable
- */
-static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
-{
- NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */
-}
-
-
-/** \brief Get Pending Interrupt
-
- This function reads the pending register in the NVIC and returns the pending bit
- for the specified interrupt.
-
- \param [in] IRQn Number of the interrupt for get pending
- \return 0 Interrupt status is not pending
- \return 1 Interrupt status is pending
- */
-static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
-{
- return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */
-}
-
-
-/** \brief Set Pending Interrupt
-
- This function sets the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for set pending
- */
-static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */
-}
-
-
-/** \brief Clear Pending Interrupt
-
- This function clears the pending bit for the specified interrupt.
- The interrupt number cannot be a negative value.
-
- \param [in] IRQn Number of the interrupt for clear pending
- */
-static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
-{
- NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
-}
-
-
-/** \brief Get Active Interrupt
-
- This function reads the active register in NVIC and returns the active bit.
- \param [in] IRQn Number of the interrupt for get active
- \return 0 Interrupt status is not active
- \return 1 Interrupt status is active
- */
-static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
-{
- return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */
-}
-
-
-/** \brief Set Interrupt Priority
-
- This function sets the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- Note: The priority cannot be set for every core interrupt.
-
- \param [in] IRQn Number of the interrupt for set priority
- \param [in] priority Priority to set
- */
-static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
-{
- if(IRQn < 0) {
- SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
- else {
- NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
-}
-
-
-/** \brief Get Interrupt Priority
-
- This function reads the priority for the specified interrupt. The interrupt
- number can be positive to specify an external (device specific)
- interrupt, or negative to specify an internal (core) interrupt.
-
- The returned priority value is automatically aligned to the implemented
- priority bits of the microcontroller.
-
- \param [in] IRQn Number of the interrupt for get priority
- \return Interrupt Priority
- */
-static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
-{
-
- if(IRQn < 0) {
- return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */
- else {
- return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */
-}
-
-
-/** \brief Encode Priority
-
- This function encodes the priority for an interrupt with the given priority group,
- preemptive priority value and sub priority value.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
-
- The returned priority value can be used for NVIC_SetPriority(...) function
-
- \param [in] PriorityGroup Used priority group
- \param [in] PreemptPriority Preemptive priority value (starting from 0)
- \param [in] SubPriority Sub priority value (starting from 0)
- \return Encoded priority for the interrupt
- */
-static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
-{
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
-
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
-
- return (
- ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) |
- ((SubPriority & ((1 << (SubPriorityBits )) - 1)))
- );
-}
-
-
-/** \brief Decode Priority
-
- This function decodes an interrupt priority value with the given priority group to
- preemptive priority value and sub priority value.
- In case of a conflict between priority grouping and available
- priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.
-
- The priority value can be retrieved with NVIC_GetPriority(...) function
-
- \param [in] Priority Priority value
- \param [in] PriorityGroup Used priority group
- \param [out] pPreemptPriority Preemptive priority value (starting from 0)
- \param [out] pSubPriority Sub priority value (starting from 0)
- */
-static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority)
-{
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
-
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
-
- *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1);
- *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1);
-}
-
-
-/** \brief System Reset
-
- This function initiate a system reset request to reset the MCU.
- */
-static __INLINE void NVIC_SystemReset(void)
-{
- __DSB(); /* Ensure all outstanding memory accesses included
- buffered write are completed before reset */
- SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
- SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */
- __DSB(); /* Ensure completion of memory access */
- while(1); /* wait until reset */
-}
-
-/*@} end of CMSIS_Core_NVICFunctions */
-
-
-
-/* ################################## SysTick function ############################################ */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_SysTickFunctions CMSIS Core SysTick Functions
- @{
- */
-
-#if (__Vendor_SysTickConfig == 0)
-
-/** \brief System Tick Configuration
-
- This function initialises the system tick timer and its interrupt and start the system tick timer.
- Counter is in free running mode to generate periodical interrupts.
-
- \param [in] ticks Number of ticks between two interrupts
- \return 0 Function succeeded
- \return 1 Function failed
- */
-static __INLINE uint32_t SysTick_Config(uint32_t ticks)
-{
- if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
-
- SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
- NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
- SysTick->VAL = 0; /* Load the SysTick Counter Value */
- SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
- SysTick_CTRL_TICKINT_Msk |
- SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
- return (0); /* Function successful */
-}
-
-#endif
-
-/*@} end of CMSIS_Core_SysTickFunctions */
-
-
-
-/* ##################################### Debug In/Output function ########################################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_core_DebugFunctions CMSIS Core Debug Functions
- @{
- */
-
-extern volatile int32_t ITM_RxBuffer; /*!< external variable to receive characters */
-#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */
-
-
-/** \brief ITM Send Character
-
- This function transmits a character via the ITM channel 0.
- It just returns when no debugger is connected that has booked the output.
- It is blocking when a debugger is connected, but the previous character send is not transmitted.
-
- \param [in] ch Character to transmit
- \return Character to transmit
- */
-static __INLINE uint32_t ITM_SendChar (uint32_t ch)
-{
- if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */
- (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */
- (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */
- {
- while (ITM->PORT[0].u32 == 0);
- ITM->PORT[0].u8 = (uint8_t) ch;
- }
- return (ch);
-}
-
-
-/** \brief ITM Receive Character
-
- This function inputs a character via external variable ITM_RxBuffer.
- It just returns when no debugger is connected that has booked the output.
- It is blocking when a debugger is connected, but the previous character send is not transmitted.
-
- \return Received character
- \return -1 No character received
- */
-static __INLINE int32_t ITM_ReceiveChar (void) {
- int32_t ch = -1; /* no character available */
-
- if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {
- ch = ITM_RxBuffer;
- ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */
- }
-
- return (ch);
-}
-
-
-/** \brief ITM Check Character
-
- This function checks external variable ITM_RxBuffer whether a character is available or not.
- It returns '1' if a character is available and '0' if no character is available.
-
- \return 0 No character available
- \return 1 Character available
- */
-static __INLINE int32_t ITM_CheckChar (void) {
-
- if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {
- return (0); /* no character available */
- } else {
- return (1); /* character available */
- }
-}
-
-/*@} end of CMSIS_core_DebugFunctions */
-
-#endif /* __CORE_CM4_H_DEPENDANT */
-
-#endif /* __CMSIS_GENERIC */
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4_simd.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4_simd.h
deleted file mode 100644
index e7b6765225..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cm4_simd.h
+++ /dev/null
@@ -1,701 +0,0 @@
-/**************************************************************************//**
- * @file core_cm4_simd.h
- * @brief CMSIS Cortex-M4 SIMD Header File
- * @version V2.10
- * @date 19. July 2011
- *
- * @note
- * Copyright (C) 2010-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#ifndef __CORE_CM4_SIMD_H
-#define __CORE_CM4_SIMD_H
-
-
-/*******************************************************************************
- * Hardware Abstraction Layer
- ******************************************************************************/
-
-
-/* ################### Compiler specific Intrinsics ########################### */
-/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
- Access to dedicated SIMD instructions
- @{
-*/
-
-#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
-/* ARM armcc specific functions */
-
-/*------ CM4 SOMD Intrinsics -----------------------------------------------------*/
-#define __SADD8 __sadd8
-#define __QADD8 __qadd8
-#define __SHADD8 __shadd8
-#define __UADD8 __uadd8
-#define __UQADD8 __uqadd8
-#define __UHADD8 __uhadd8
-#define __SSUB8 __ssub8
-#define __QSUB8 __qsub8
-#define __SHSUB8 __shsub8
-#define __USUB8 __usub8
-#define __UQSUB8 __uqsub8
-#define __UHSUB8 __uhsub8
-#define __SADD16 __sadd16
-#define __QADD16 __qadd16
-#define __SHADD16 __shadd16
-#define __UADD16 __uadd16
-#define __UQADD16 __uqadd16
-#define __UHADD16 __uhadd16
-#define __SSUB16 __ssub16
-#define __QSUB16 __qsub16
-#define __SHSUB16 __shsub16
-#define __USUB16 __usub16
-#define __UQSUB16 __uqsub16
-#define __UHSUB16 __uhsub16
-#define __SASX __sasx
-#define __QASX __qasx
-#define __SHASX __shasx
-#define __UASX __uasx
-#define __UQASX __uqasx
-#define __UHASX __uhasx
-#define __SSAX __ssax
-#define __QSAX __qsax
-#define __SHSAX __shsax
-#define __USAX __usax
-#define __UQSAX __uqsax
-#define __UHSAX __uhsax
-#define __USAD8 __usad8
-#define __USADA8 __usada8
-#define __SSAT16 __ssat16
-#define __USAT16 __usat16
-#define __UXTB16 __uxtb16
-#define __UXTAB16 __uxtab16
-#define __SXTB16 __sxtb16
-#define __SXTAB16 __sxtab16
-#define __SMUAD __smuad
-#define __SMUADX __smuadx
-#define __SMLAD __smlad
-#define __SMLADX __smladx
-#define __SMLALD __smlald
-#define __SMLALDX __smlaldx
-#define __SMUSD __smusd
-#define __SMUSDX __smusdx
-#define __SMLSD __smlsd
-#define __SMLSDX __smlsdx
-#define __SMLSLD __smlsld
-#define __SMLSLDX __smlsldx
-#define __SEL __sel
-#define __QADD __qadd
-#define __QSUB __qsub
-
-#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
- ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
-
-#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \
- ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) )
-
-
-/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/
-
-
-
-#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
-/* IAR iccarm specific functions */
-
-#include <cmsis_iar.h>
-
-/*------ CM4 SIMDDSP Intrinsics -----------------------------------------------------*/
-/* intrinsic __SADD8 see intrinsics.h */
-/* intrinsic __QADD8 see intrinsics.h */
-/* intrinsic __SHADD8 see intrinsics.h */
-/* intrinsic __UADD8 see intrinsics.h */
-/* intrinsic __UQADD8 see intrinsics.h */
-/* intrinsic __UHADD8 see intrinsics.h */
-/* intrinsic __SSUB8 see intrinsics.h */
-/* intrinsic __QSUB8 see intrinsics.h */
-/* intrinsic __SHSUB8 see intrinsics.h */
-/* intrinsic __USUB8 see intrinsics.h */
-/* intrinsic __UQSUB8 see intrinsics.h */
-/* intrinsic __UHSUB8 see intrinsics.h */
-/* intrinsic __SADD16 see intrinsics.h */
-/* intrinsic __QADD16 see intrinsics.h */
-/* intrinsic __SHADD16 see intrinsics.h */
-/* intrinsic __UADD16 see intrinsics.h */
-/* intrinsic __UQADD16 see intrinsics.h */
-/* intrinsic __UHADD16 see intrinsics.h */
-/* intrinsic __SSUB16 see intrinsics.h */
-/* intrinsic __QSUB16 see intrinsics.h */
-/* intrinsic __SHSUB16 see intrinsics.h */
-/* intrinsic __USUB16 see intrinsics.h */
-/* intrinsic __UQSUB16 see intrinsics.h */
-/* intrinsic __UHSUB16 see intrinsics.h */
-/* intrinsic __SASX see intrinsics.h */
-/* intrinsic __QASX see intrinsics.h */
-/* intrinsic __SHASX see intrinsics.h */
-/* intrinsic __UASX see intrinsics.h */
-/* intrinsic __UQASX see intrinsics.h */
-/* intrinsic __UHASX see intrinsics.h */
-/* intrinsic __SSAX see intrinsics.h */
-/* intrinsic __QSAX see intrinsics.h */
-/* intrinsic __SHSAX see intrinsics.h */
-/* intrinsic __USAX see intrinsics.h */
-/* intrinsic __UQSAX see intrinsics.h */
-/* intrinsic __UHSAX see intrinsics.h */
-/* intrinsic __USAD8 see intrinsics.h */
-/* intrinsic __USADA8 see intrinsics.h */
-/* intrinsic __SSAT16 see intrinsics.h */
-/* intrinsic __USAT16 see intrinsics.h */
-/* intrinsic __UXTB16 see intrinsics.h */
-/* intrinsic __SXTB16 see intrinsics.h */
-/* intrinsic __UXTAB16 see intrinsics.h */
-/* intrinsic __SXTAB16 see intrinsics.h */
-/* intrinsic __SMUAD see intrinsics.h */
-/* intrinsic __SMUADX see intrinsics.h */
-/* intrinsic __SMLAD see intrinsics.h */
-/* intrinsic __SMLADX see intrinsics.h */
-/* intrinsic __SMLALD see intrinsics.h */
-/* intrinsic __SMLALDX see intrinsics.h */
-/* intrinsic __SMUSD see intrinsics.h */
-/* intrinsic __SMUSDX see intrinsics.h */
-/* intrinsic __SMLSD see intrinsics.h */
-/* intrinsic __SMLSDX see intrinsics.h */
-/* intrinsic __SMLSLD see intrinsics.h */
-/* intrinsic __SMLSLDX see intrinsics.h */
-/* intrinsic __SEL see intrinsics.h */
-/* intrinsic __QADD see intrinsics.h */
-/* intrinsic __QSUB see intrinsics.h */
-/* intrinsic __PKHBT see intrinsics.h */
-/* intrinsic __PKHTB see intrinsics.h */
-
-/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/
-
-
-
-#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
-/* GNU gcc specific functions */
-
-/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __USAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)
-{
- uint32_t result;
-
- __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
- return(result);
-}
-
-#define __SSAT16(ARG1,ARG2) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1); \
- __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
- __RES; \
- })
-
-#define __USAT16(ARG1,ARG2) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1); \
- __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
- __RES; \
- })
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UXTB16(uint32_t op1)
-{
- uint32_t result;
-
- __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1));
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SXTB16(uint32_t op1)
-{
- uint32_t result;
-
- __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1));
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)
-{
- uint32_t result;
-
- __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)
-{
- uint32_t result;
-
- __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
- return(result);
-}
-
-#define __SMLALD(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \
- __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \
- (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \
- })
-
-#define __SMLALDX(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \
- __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \
- (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \
- })
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)
-{
- uint32_t result;
-
- __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)
-{
- uint32_t result;
-
- __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
- return(result);
-}
-
-#define __SMLSLD(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \
- __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \
- (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \
- })
-
-#define __SMLSLDX(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \
- __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \
- (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \
- })
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __SEL (uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QADD(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2)
-{
- uint32_t result;
-
- __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
- return(result);
-}
-
-#define __PKHBT(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \
- __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \
- __RES; \
- })
-
-#define __PKHTB(ARG1,ARG2,ARG3) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \
- if (ARG3 == 0) \
- __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \
- else \
- __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \
- __RES; \
- })
-
-/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/
-
-
-
-#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
-/* TASKING carm specific functions */
-
-
-/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/
-/* not yet supported */
-/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/
-
-
-#endif
-
-/*@} end of group CMSIS_SIMD_intrinsics */
-
-
-#endif /* __CORE_CM4_SIMD_H */
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cmFunc.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cmFunc.h
deleted file mode 100644
index 88819f9dd1..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cmFunc.h
+++ /dev/null
@@ -1,609 +0,0 @@
-/**************************************************************************//**
- * @file core_cmFunc.h
- * @brief CMSIS Cortex-M Core Function Access Header File
- * @version V2.10
- * @date 26. July 2011
- *
- * @note
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-
-#ifndef __CORE_CMFUNC_H
-#define __CORE_CMFUNC_H
-
-
-/* ########################### Core Function Access ########################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
- @{
- */
-
-#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
-/* ARM armcc specific functions */
-
-#if (__ARMCC_VERSION < 400677)
- #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
-#endif
-
-/* intrinsic void __enable_irq(); */
-/* intrinsic void __disable_irq(); */
-
-/** \brief Get Control Register
-
- This function returns the content of the Control Register.
-
- \return Control Register value
- */
-static __INLINE uint32_t __get_CONTROL(void)
-{
- register uint32_t __regControl __ASM("control");
- return(__regControl);
-}
-
-
-/** \brief Set Control Register
-
- This function writes the given value to the Control Register.
-
- \param [in] control Control Register value to set
- */
-static __INLINE void __set_CONTROL(uint32_t control)
-{
- register uint32_t __regControl __ASM("control");
- __regControl = control;
-}
-
-
-/** \brief Get ISPR Register
-
- This function returns the content of the ISPR Register.
-
- \return ISPR Register value
- */
-static __INLINE uint32_t __get_IPSR(void)
-{
- register uint32_t __regIPSR __ASM("ipsr");
- return(__regIPSR);
-}
-
-
-/** \brief Get APSR Register
-
- This function returns the content of the APSR Register.
-
- \return APSR Register value
- */
-static __INLINE uint32_t __get_APSR(void)
-{
- register uint32_t __regAPSR __ASM("apsr");
- return(__regAPSR);
-}
-
-
-/** \brief Get xPSR Register
-
- This function returns the content of the xPSR Register.
-
- \return xPSR Register value
- */
-static __INLINE uint32_t __get_xPSR(void)
-{
- register uint32_t __regXPSR __ASM("xpsr");
- return(__regXPSR);
-}
-
-
-/** \brief Get Process Stack Pointer
-
- This function returns the current value of the Process Stack Pointer (PSP).
-
- \return PSP Register value
- */
-static __INLINE uint32_t __get_PSP(void)
-{
- register uint32_t __regProcessStackPointer __ASM("psp");
- return(__regProcessStackPointer);
-}
-
-
-/** \brief Set Process Stack Pointer
-
- This function assigns the given value to the Process Stack Pointer (PSP).
-
- \param [in] topOfProcStack Process Stack Pointer value to set
- */
-static __INLINE void __set_PSP(uint32_t topOfProcStack)
-{
- register uint32_t __regProcessStackPointer __ASM("psp");
- __regProcessStackPointer = topOfProcStack;
-}
-
-
-/** \brief Get Main Stack Pointer
-
- This function returns the current value of the Main Stack Pointer (MSP).
-
- \return MSP Register value
- */
-static __INLINE uint32_t __get_MSP(void)
-{
- register uint32_t __regMainStackPointer __ASM("msp");
- return(__regMainStackPointer);
-}
-
-
-/** \brief Set Main Stack Pointer
-
- This function assigns the given value to the Main Stack Pointer (MSP).
-
- \param [in] topOfMainStack Main Stack Pointer value to set
- */
-static __INLINE void __set_MSP(uint32_t topOfMainStack)
-{
- register uint32_t __regMainStackPointer __ASM("msp");
- __regMainStackPointer = topOfMainStack;
-}
-
-
-/** \brief Get Priority Mask
-
- This function returns the current state of the priority mask bit from the Priority Mask Register.
-
- \return Priority Mask value
- */
-static __INLINE uint32_t __get_PRIMASK(void)
-{
- register uint32_t __regPriMask __ASM("primask");
- return(__regPriMask);
-}
-
-
-/** \brief Set Priority Mask
-
- This function assigns the given value to the Priority Mask Register.
-
- \param [in] priMask Priority Mask
- */
-static __INLINE void __set_PRIMASK(uint32_t priMask)
-{
- register uint32_t __regPriMask __ASM("primask");
- __regPriMask = (priMask);
-}
-
-
-#if (__CORTEX_M >= 0x03)
-
-/** \brief Enable FIQ
-
- This function enables FIQ interrupts by clearing the F-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-#define __enable_fault_irq __enable_fiq
-
-
-/** \brief Disable FIQ
-
- This function disables FIQ interrupts by setting the F-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-#define __disable_fault_irq __disable_fiq
-
-
-/** \brief Get Base Priority
-
- This function returns the current value of the Base Priority register.
-
- \return Base Priority register value
- */
-static __INLINE uint32_t __get_BASEPRI(void)
-{
- register uint32_t __regBasePri __ASM("basepri");
- return(__regBasePri);
-}
-
-
-/** \brief Set Base Priority
-
- This function assigns the given value to the Base Priority register.
-
- \param [in] basePri Base Priority value to set
- */
-static __INLINE void __set_BASEPRI(uint32_t basePri)
-{
- register uint32_t __regBasePri __ASM("basepri");
- __regBasePri = (basePri & 0xff);
-}
-
-
-/** \brief Get Fault Mask
-
- This function returns the current value of the Fault Mask register.
-
- \return Fault Mask register value
- */
-static __INLINE uint32_t __get_FAULTMASK(void)
-{
- register uint32_t __regFaultMask __ASM("faultmask");
- return(__regFaultMask);
-}
-
-
-/** \brief Set Fault Mask
-
- This function assigns the given value to the Fault Mask register.
-
- \param [in] faultMask Fault Mask value to set
- */
-static __INLINE void __set_FAULTMASK(uint32_t faultMask)
-{
- register uint32_t __regFaultMask __ASM("faultmask");
- __regFaultMask = (faultMask & (uint32_t)1);
-}
-
-#endif /* (__CORTEX_M >= 0x03) */
-
-
-#if (__CORTEX_M == 0x04)
-
-/** \brief Get FPSCR
-
- This function returns the current value of the Floating Point Status/Control register.
-
- \return Floating Point Status/Control register value
- */
-static __INLINE uint32_t __get_FPSCR(void)
-{
-#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- register uint32_t __regfpscr __ASM("fpscr");
- return(__regfpscr);
-#else
- return(0);
-#endif
-}
-
-
-/** \brief Set FPSCR
-
- This function assigns the given value to the Floating Point Status/Control register.
-
- \param [in] fpscr Floating Point Status/Control value to set
- */
-static __INLINE void __set_FPSCR(uint32_t fpscr)
-{
-#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- register uint32_t __regfpscr __ASM("fpscr");
- __regfpscr = (fpscr);
-#endif
-}
-
-#endif /* (__CORTEX_M == 0x04) */
-
-
-#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
-/* IAR iccarm specific functions */
-
-#include <cmsis_iar.h>
-
-#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
-/* GNU gcc specific functions */
-
-/** \brief Enable IRQ Interrupts
-
- This function enables IRQ interrupts by clearing the I-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __enable_irq(void)
-{
- __ASM volatile ("cpsie i");
-}
-
-
-/** \brief Disable IRQ Interrupts
-
- This function disables IRQ interrupts by setting the I-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __disable_irq(void)
-{
- __ASM volatile ("cpsid i");
-}
-
-
-/** \brief Get Control Register
-
- This function returns the content of the Control Register.
-
- \return Control Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_CONTROL(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, control" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Control Register
-
- This function writes the given value to the Control Register.
-
- \param [in] control Control Register value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_CONTROL(uint32_t control)
-{
- __ASM volatile ("MSR control, %0" : : "r" (control) );
-}
-
-
-/** \brief Get ISPR Register
-
- This function returns the content of the ISPR Register.
-
- \return ISPR Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_IPSR(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Get APSR Register
-
- This function returns the content of the APSR Register.
-
- \return APSR Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_APSR(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, apsr" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Get xPSR Register
-
- This function returns the content of the xPSR Register.
-
- \return xPSR Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_xPSR(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, xpsr" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Get Process Stack Pointer
-
- This function returns the current value of the Process Stack Pointer (PSP).
-
- \return PSP Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PSP(void)
-{
- register uint32_t result;
-
- __ASM volatile ("MRS %0, psp\n" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Process Stack Pointer
-
- This function assigns the given value to the Process Stack Pointer (PSP).
-
- \param [in] topOfProcStack Process Stack Pointer value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_PSP(uint32_t topOfProcStack)
-{
- __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) );
-}
-
-
-/** \brief Get Main Stack Pointer
-
- This function returns the current value of the Main Stack Pointer (MSP).
-
- \return MSP Register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_MSP(void)
-{
- register uint32_t result;
-
- __ASM volatile ("MRS %0, msp\n" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Main Stack Pointer
-
- This function assigns the given value to the Main Stack Pointer (MSP).
-
- \param [in] topOfMainStack Main Stack Pointer value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_MSP(uint32_t topOfMainStack)
-{
- __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) );
-}
-
-
-/** \brief Get Priority Mask
-
- This function returns the current state of the priority mask bit from the Priority Mask Register.
-
- \return Priority Mask value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PRIMASK(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, primask" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Priority Mask
-
- This function assigns the given value to the Priority Mask Register.
-
- \param [in] priMask Priority Mask
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_PRIMASK(uint32_t priMask)
-{
- __ASM volatile ("MSR primask, %0" : : "r" (priMask) );
-}
-
-
-#if (__CORTEX_M >= 0x03)
-
-/** \brief Enable FIQ
-
- This function enables FIQ interrupts by clearing the F-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __enable_fault_irq(void)
-{
- __ASM volatile ("cpsie f");
-}
-
-
-/** \brief Disable FIQ
-
- This function disables FIQ interrupts by setting the F-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __disable_fault_irq(void)
-{
- __ASM volatile ("cpsid f");
-}
-
-
-/** \brief Get Base Priority
-
- This function returns the current value of the Base Priority register.
-
- \return Base Priority register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_BASEPRI(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, basepri_max" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Base Priority
-
- This function assigns the given value to the Base Priority register.
-
- \param [in] basePri Base Priority value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_BASEPRI(uint32_t value)
-{
- __ASM volatile ("MSR basepri, %0" : : "r" (value) );
-}
-
-
-/** \brief Get Fault Mask
-
- This function returns the current value of the Fault Mask register.
-
- \return Fault Mask register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FAULTMASK(void)
-{
- uint32_t result;
-
- __ASM volatile ("MRS %0, faultmask" : "=r" (result) );
- return(result);
-}
-
-
-/** \brief Set Fault Mask
-
- This function assigns the given value to the Fault Mask register.
-
- \param [in] faultMask Fault Mask value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_FAULTMASK(uint32_t faultMask)
-{
- __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
-}
-
-#endif /* (__CORTEX_M >= 0x03) */
-
-
-#if (__CORTEX_M == 0x04)
-
-/** \brief Get FPSCR
-
- This function returns the current value of the Floating Point Status/Control register.
-
- \return Floating Point Status/Control register value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FPSCR(void)
-{
-#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- uint32_t result;
-
- __ASM volatile ("VMRS %0, fpscr" : "=r" (result) );
- return(result);
-#else
- return(0);
-#endif
-}
-
-
-/** \brief Set FPSCR
-
- This function assigns the given value to the Floating Point Status/Control register.
-
- \param [in] fpscr Floating Point Status/Control value to set
- */
-__attribute__( ( always_inline ) ) static __INLINE void __set_FPSCR(uint32_t fpscr)
-{
-#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) );
-#endif
-}
-
-#endif /* (__CORTEX_M == 0x04) */
-
-
-#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
-/* TASKING carm specific functions */
-
-/*
- * The CMSIS functions have been implemented as intrinsics in the compiler.
- * Please use "carm -?i" to get an up to date list of all instrinsics,
- * Including the CMSIS ones.
- */
-
-#endif
-
-/*@} end of CMSIS_Core_RegAccFunctions */
-
-
-#endif /* __CORE_CMFUNC_H */
diff --git a/bsp/lpc408x/Libraries/CMSIS/Include/core_cmInstr.h b/bsp/lpc408x/Libraries/CMSIS/Include/core_cmInstr.h
deleted file mode 100644
index 56d5ac75cd..0000000000
--- a/bsp/lpc408x/Libraries/CMSIS/Include/core_cmInstr.h
+++ /dev/null
@@ -1,586 +0,0 @@
-/**************************************************************************//**
- * @file core_cmInstr.h
- * @brief CMSIS Cortex-M Core Instruction Access Header File
- * @version V2.10
- * @date 19. July 2011
- *
- * @note
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers. This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-
-#ifndef __CORE_CMINSTR_H
-#define __CORE_CMINSTR_H
-
-
-/* ########################## Core Instruction Access ######################### */
-/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
- * @ingroup CMSIS_Core
- Access to dedicated instructions
- @{
-*/
-
-#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
-/* ARM armcc specific functions */
-
-#if (__ARMCC_VERSION < 400677)
- #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
-#endif
-
-
-/** \brief No Operation
-
- No Operation does nothing. This instruction can be used for code alignment purposes.
- */
-#define __NOP __nop
-
-
-/** \brief Wait For Interrupt
-
- Wait For Interrupt is a hint instruction that suspends execution
- until one of a number of events occurs.
- */
-#define __WFI __wfi
-
-
-/** \brief Wait For Event
-
- Wait For Event is a hint instruction that permits the processor to enter
- a low-power state until one of a number of events occurs.
- */
-#define __WFE __wfe
-
-
-/** \brief Send Event
-
- Send Event is a hint instruction. It causes an event to be signaled to the CPU.
- */
-#define __SEV __sev
-
-
-/** \brief Instruction Synchronization Barrier
-
- Instruction Synchronization Barrier flushes the pipeline in the processor,
- so that all instructions following the ISB are fetched from cache or
- memory, after the instruction has been completed.
- */
-#define __ISB() __isb(0xF)
-
-
-/** \brief Data Synchronization Barrier
-
- This function acts as a special kind of Data Memory Barrier.
- It completes when all explicit memory accesses before this instruction complete.
- */
-#define __DSB() __dsb(0xF)
-
-
-/** \brief Data Memory Barrier
-
- This function ensures the apparent order of the explicit memory operations before
- and after the instruction, without ensuring their completion.
- */
-#define __DMB() __dmb(0xF)
-
-
-/** \brief Reverse byte order (32 bit)
-
- This function reverses the byte order in integer value.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-#define __REV __rev
-
-
-/** \brief Reverse byte order (16 bit)
-
- This function reverses the byte order in two unsigned short values.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-static __INLINE __ASM uint32_t __REV16(uint32_t value)
-{
- rev16 r0, r0
- bx lr
-}
-
-
-/** \brief Reverse byte order in signed short value
-
- This function reverses the byte order in a signed short value with sign extension to integer.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-static __INLINE __ASM int32_t __REVSH(int32_t value)
-{
- revsh r0, r0
- bx lr
-}
-
-
-#if (__CORTEX_M >= 0x03)
-
-/** \brief Reverse bit order of value
-
- This function reverses the bit order of the given value.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-#define __RBIT __rbit
-
-
-/** \brief LDR Exclusive (8 bit)
-
- This function performs a exclusive LDR command for 8 bit value.
-
- \param [in] ptr Pointer to data
- \return value of type uint8_t at (*ptr)
- */
-#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr))
-
-
-/** \brief LDR Exclusive (16 bit)
-
- This function performs a exclusive LDR command for 16 bit values.
-
- \param [in] ptr Pointer to data
- \return value of type uint16_t at (*ptr)
- */
-#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr))
-
-
-/** \brief LDR Exclusive (32 bit)
-
- This function performs a exclusive LDR command for 32 bit values.
-
- \param [in] ptr Pointer to data
- \return value of type uint32_t at (*ptr)
- */
-#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr))
-
-
-/** \brief STR Exclusive (8 bit)
-
- This function performs a exclusive STR command for 8 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-#define __STREXB(value, ptr) __strex(value, ptr)
-
-
-/** \brief STR Exclusive (16 bit)
-
- This function performs a exclusive STR command for 16 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-#define __STREXH(value, ptr) __strex(value, ptr)
-
-
-/** \brief STR Exclusive (32 bit)
-
- This function performs a exclusive STR command for 32 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-#define __STREXW(value, ptr) __strex(value, ptr)
-
-
-/** \brief Remove the exclusive lock
-
- This function removes the exclusive lock which is created by LDREX.
-
- */
-#define __CLREX __clrex
-
-
-/** \brief Signed Saturate
-
- This function saturates a signed value.
-
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (1..32)
- \return Saturated value
- */
-#define __SSAT __ssat
-
-
-/** \brief Unsigned Saturate
-
- This function saturates an unsigned value.
-
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (0..31)
- \return Saturated value
- */
-#define __USAT __usat
-
-
-/** \brief Count leading zeros
-
- This function counts the number of leading zeros of a data value.
-
- \param [in] value Value to count the leading zeros
- \return number of leading zeros in value
- */
-#define __CLZ __clz
-
-#endif /* (__CORTEX_M >= 0x03) */
-
-
-
-#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
-/* IAR iccarm specific functions */
-
-#include <cmsis_iar.h>
-
-
-#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
-/* GNU gcc specific functions */
-
-/** \brief No Operation
-
- No Operation does nothing. This instruction can be used for code alignment purposes.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __NOP(void)
-{
- __ASM volatile ("nop");
-}
-
-
-/** \brief Wait For Interrupt
-
- Wait For Interrupt is a hint instruction that suspends execution
- until one of a number of events occurs.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __WFI(void)
-{
- __ASM volatile ("wfi");
-}
-
-
-/** \brief Wait For Event
-
- Wait For Event is a hint instruction that permits the processor to enter
- a low-power state until one of a number of events occurs.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __WFE(void)
-{
- __ASM volatile ("wfe");
-}
-
-
-/** \brief Send Event
-
- Send Event is a hint instruction. It causes an event to be signaled to the CPU.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __SEV(void)
-{
- __ASM volatile ("sev");
-}
-
-
-/** \brief Instruction Synchronization Barrier
-
- Instruction Synchronization Barrier flushes the pipeline in the processor,
- so that all instructions following the ISB are fetched from cache or
- memory, after the instruction has been completed.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __ISB(void)
-{
- __ASM volatile ("isb");
-}
-
-
-/** \brief Data Synchronization Barrier
-
- This function acts as a special kind of Data Memory Barrier.
- It completes when all explicit memory accesses before this instruction complete.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __DSB(void)
-{
- __ASM volatile ("dsb");
-}
-
-
-/** \brief Data Memory Barrier
-
- This function ensures the apparent order of the explicit memory operations before
- and after the instruction, without ensuring their completion.
- */
-__attribute__( ( always_inline ) ) static __INLINE void __DMB(void)
-{
- __ASM volatile ("dmb");
-}
-
-
-/** \brief Reverse byte order (32 bit)
-
- This function reverses the byte order in integer value.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __REV(uint32_t value)
-{
- uint32_t result;
-
- __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
- return(result);
-}
-
-
-/** \brief Reverse byte order (16 bit)
-
- This function reverses the byte order in two unsigned short values.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __REV16(uint32_t value)
-{
- uint32_t result;
-
- __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
- return(result);
-}
-
-
-/** \brief Reverse byte order in signed short value
-
- This function reverses the byte order in a signed short value with sign extension to integer.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-__attribute__( ( always_inline ) ) static __INLINE int32_t __REVSH(int32_t value)
-{
- uint32_t result;
-
- __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );
- return(result);
-}
-
-
-#if (__CORTEX_M >= 0x03)
-
-/** \brief Reverse bit order of value
-
- This function reverses the bit order of the given value.
-
- \param [in] value Value to reverse
- \return Reversed value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __RBIT(uint32_t value)
-{
- uint32_t result;
-
- __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
- return(result);
-}
-
-
-/** \brief LDR Exclusive (8 bit)
-
- This function performs a exclusive LDR command for 8 bit value.
-
- \param [in] ptr Pointer to data
- \return value of type uint8_t at (*ptr)
- */
-__attribute__( ( always_inline ) ) static __INLINE uint8_t __LDREXB(volatile uint8_t *addr)
-{
- uint8_t result;
-
- __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );
- return(result);
-}
-
-
-/** \brief LDR Exclusive (16 bit)
-
- This function performs a exclusive LDR command for 16 bit values.
-
- \param [in] ptr Pointer to data
- \return value of type uint16_t at (*ptr)
- */
-__attribute__( ( always_inline ) ) static __INLINE uint16_t __LDREXH(volatile uint16_t *addr)
-{
- uint16_t result;
-
- __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );
- return(result);
-}
-
-
-/** \brief LDR Exclusive (32 bit)
-
- This function performs a exclusive LDR command for 32 bit values.
-
- \param [in] ptr Pointer to data
- \return value of type uint32_t at (*ptr)
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __LDREXW(volatile uint32_t *addr)
-{
- uint32_t result;
-
- __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );
- return(result);
-}
-
-
-/** \brief STR Exclusive (8 bit)
-
- This function performs a exclusive STR command for 8 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
-{
- uint32_t result;
-
- __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
- return(result);
-}
-
-
-/** \brief STR Exclusive (16 bit)
-
- This function performs a exclusive STR command for 16 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
-{
- uint32_t result;
-
- __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
- return(result);
-}
-
-
-/** \brief STR Exclusive (32 bit)
-
- This function performs a exclusive STR command for 32 bit values.
-
- \param [in] value Value to store
- \param [in] ptr Pointer to location
- \return 0 Function succeeded
- \return 1 Function failed
- */
-__attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
-{
- uint32_t result;
-
- __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
- return(result);
-}
-
-
-/** \brief Remove the exclusive lock
-
- This function removes the exclusive lock which is created by LDREX.
-
- */
-__attribute__( ( always_inline ) ) static __INLINE void __CLREX(void)
-{
- __ASM volatile ("clrex");
-}
-
-
-/** \brief Signed Saturate
-
- This function saturates a signed value.
-
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (1..32)
- \return Saturated value
- */
-#define __SSAT(ARG1,ARG2) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1); \
- __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
- __RES; \
- })
-
-
-/** \brief Unsigned Saturate
-
- This function saturates an unsigned value.
-
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (0..31)
- \return Saturated value
- */
-#define __USAT(ARG1,ARG2) \
-({ \
- uint32_t __RES, __ARG1 = (ARG1); \
- __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
- __RES; \
- })
-
-
-/** \brief Count leading zeros
-
- This function counts the number of leading zeros of a data value.
-
- \param [in] value Value to count the leading zeros
- \return number of leading zeros in value
- */
-__attribute__( ( always_inline ) ) static __INLINE uint8_t __CLZ(uint32_t value)
-{
- uint8_t result;
-
- __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) );
- return(result);
-}
-
-#endif /* (__CORTEX_M >= 0x03) */
-
-
-
-
-#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
-/* TASKING carm specific functions */
-
-/*
- * The CMSIS functions have been implemented as intrinsics in the compiler.
- * Please use "carm -?i" to get an up to date list of all intrinsics,
- * Including the CMSIS ones.
- */
-
-#endif
-
-/*@}*/ /* end of group CMSIS_Core_InstructionInterface */
-
-#endif /* __CORE_CMINSTR_H */
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC177x_8x.h b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC177x_8x.h
deleted file mode 100644
index 5ebe1428d4..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC177x_8x.h
+++ /dev/null
@@ -1,1442 +0,0 @@
-/**********************************************************************
-* $Id$ LPC177x_8x.h 2011-06-02
-*//**
-* @file LPC177x_8x.h
-* @brief Cortex-M3 Core Peripheral Access Layer Header File for
-* NXP LPC177x_8x Series.
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef __LPC177x_8x_H__
-#define __LPC177x_8x_H__
-
-/*
- * ==========================================================================
- * ---------- Interrupt Number Definition -----------------------------------
- * ==========================================================================
- */
-
-typedef enum IRQn
-{
-/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/
- NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
- MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */
- BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */
- UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */
- SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */
- DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */
- PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */
- SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */
-
-/****** LPC177x_8x Specific Interrupt Numbers *******************************************************/
- WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */
- TIMER0_IRQn = 1, /*!< Timer0 Interrupt */
- TIMER1_IRQn = 2, /*!< Timer1 Interrupt */
- TIMER2_IRQn = 3, /*!< Timer2 Interrupt */
- TIMER3_IRQn = 4, /*!< Timer3 Interrupt */
- UART0_IRQn = 5, /*!< UART0 Interrupt */
- UART1_IRQn = 6, /*!< UART1 Interrupt */
- UART2_IRQn = 7, /*!< UART2 Interrupt */
- UART3_IRQn = 8, /*!< UART3 Interrupt */
- PWM1_IRQn = 9, /*!< PWM1 Interrupt */
- I2C0_IRQn = 10, /*!< I2C0 Interrupt */
- I2C1_IRQn = 11, /*!< I2C1 Interrupt */
- I2C2_IRQn = 12, /*!< I2C2 Interrupt */
- Reserved0_IRQn = 13, /*!< Reserved */
- SSP0_IRQn = 14, /*!< SSP0 Interrupt */
- SSP1_IRQn = 15, /*!< SSP1 Interrupt */
- PLL0_IRQn = 16, /*!< PLL0 Lock (Main PLL) Interrupt */
- RTC_IRQn = 17, /*!< Real Time Clock Interrupt */
- EINT0_IRQn = 18, /*!< External Interrupt 0 Interrupt */
- EINT1_IRQn = 19, /*!< External Interrupt 1 Interrupt */
- EINT2_IRQn = 20, /*!< External Interrupt 2 Interrupt */
- EINT3_IRQn = 21, /*!< External Interrupt 3 Interrupt */
- ADC_IRQn = 22, /*!< A/D Converter Interrupt */
- BOD_IRQn = 23, /*!< Brown-Out Detect Interrupt */
- USB_IRQn = 24, /*!< USB Interrupt */
- CAN_IRQn = 25, /*!< CAN Interrupt */
- DMA_IRQn = 26, /*!< General Purpose DMA Interrupt */
- I2S_IRQn = 27, /*!< I2S Interrupt */
- ENET_IRQn = 28, /*!< Ethernet Interrupt */
- MCI_IRQn = 29, /*!< SD/MMC card I/F Interrupt */
- MCPWM_IRQn = 30, /*!< Motor Control PWM Interrupt */
- QEI_IRQn = 31, /*!< Quadrature Encoder Interface Interrupt */
- PLL1_IRQn = 32, /*!< PLL1 Lock (USB PLL) Interrupt */
- USBActivity_IRQn = 33, /*!< USB Activity interrupt */
- CANActivity_IRQn = 34, /*!< CAN Activity interrupt */
- UART4_IRQn = 35, /*!< UART4 Interrupt */
- SSP2_IRQn = 36, /*!< SSP2 Interrupt */
- LCD_IRQn = 37, /*!< LCD Interrupt */
- GPIO_IRQn = 38, /*!< GPIO Interrupt */
- PWM0_IRQn = 39, /*!< PWM0 Interrupt */
- EEPROM_IRQn = 40, /*!< EEPROM Interrupt */
-} IRQn_Type;
-
-
-/*
- * ==========================================================================
- * ----------- Processor and Core Peripheral Section ------------------------
- * ==========================================================================
- */
-
-/* Configuration of the Cortex-M3 Processor and Core Peripherals */
-#define __MPU_PRESENT 1 /*!< MPU present or not */
-#define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */
-#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
-
-
-#include "core_cm3.h" /* Cortex-M3 processor and core peripherals */
-//#include "system_LPC177x_8x.h" /* System Header */
-
-
-/******************************************************************************/
-/* Device Specific Peripheral registers structures */
-/******************************************************************************/
-
-#if defined ( __CC_ARM )
-#pragma anon_unions
-#endif
-
-/*------------- System Control (SC) ------------------------------------------*/
-typedef struct
-{
- __IO uint32_t FLASHCFG; /*!< Offset: 0x000 (R/W) Flash Accelerator Configuration Register */
- uint32_t RESERVED0[31];
- __IO uint32_t PLL0CON; /*!< Offset: 0x080 (R/W) PLL0 Control Register */
- __IO uint32_t PLL0CFG; /*!< Offset: 0x084 (R/W) PLL0 Configuration Register */
- __I uint32_t PLL0STAT; /*!< Offset: 0x088 (R/ ) PLL0 Status Register */
- __O uint32_t PLL0FEED; /*!< Offset: 0x08C ( /W) PLL0 Feed Register */
- uint32_t RESERVED1[4];
- __IO uint32_t PLL1CON; /*!< Offset: 0x0A0 (R/W) PLL1 Control Register */
- __IO uint32_t PLL1CFG; /*!< Offset: 0x0A4 (R/W) PLL1 Configuration Register */
- __I uint32_t PLL1STAT; /*!< Offset: 0x0A8 (R/ ) PLL1 Status Register */
- __O uint32_t PLL1FEED; /*!< Offset: 0x0AC ( /W) PLL1 Feed Register */
- uint32_t RESERVED2[4];
- __IO uint32_t PCON; /*!< Offset: 0x0C0 (R/W) Power Control Register */
- __IO uint32_t PCONP; /*!< Offset: 0x0C4 (R/W) Power Control for Peripherals Register */
- uint32_t RESERVED3[14];
- __IO uint32_t EMCCLKSEL; /*!< Offset: 0x100 (R/W) External Memory Controller Clock Selection Register */
- __IO uint32_t CCLKSEL; /*!< Offset: 0x104 (R/W) CPU Clock Selection Register */
- __IO uint32_t USBCLKSEL; /*!< Offset: 0x108 (R/W) USB Clock Selection Register */
- __IO uint32_t CLKSRCSEL; /*!< Offset: 0x10C (R/W) Clock Source Select Register */
- __IO uint32_t CANSLEEPCLR; /*!< Offset: 0x110 (R/W) CAN Sleep Clear Register */
- __IO uint32_t CANWAKEFLAGS; /*!< Offset: 0x114 (R/W) CAN Wake-up Flags Register */
- uint32_t RESERVED4[10];
- __IO uint32_t EXTINT; /*!< Offset: 0x140 (R/W) External Interrupt Flag Register */
- uint32_t RESERVED5[1];
- __IO uint32_t EXTMODE; /*!< Offset: 0x148 (R/W) External Interrupt Mode Register */
- __IO uint32_t EXTPOLAR; /*!< Offset: 0x14C (R/W) External Interrupt Polarity Register */
- uint32_t RESERVED6[12];
- __IO uint32_t RSID; /*!< Offset: 0x180 (R/W) Reset Source Identification Register */
- uint32_t RESERVED7[7];
- __IO uint32_t SCS; /*!< Offset: 0x1A0 (R/W) System Controls and Status Register */
- __IO uint32_t IRCTRIM; /*!< Offset: 0x1A4 (R/W) Clock Dividers */
- __IO uint32_t PCLKSEL; /*!< Offset: 0x1A8 (R/W) Peripheral Clock Selection Register */
- uint32_t RESERVED8;
- __IO uint32_t PBOOST; /*!< Offset: 0x1B0 (R/W) Power Boost control register */
- uint32_t RESERVED9;
- __IO uint32_t LCD_CFG; /*!< Offset: 0x1B8 (R/W) LCD Configuration and clocking control Register */
- uint32_t RESERVED10[1];
- __IO uint32_t USBIntSt; /*!< Offset: 0x1C0 (R/W) USB Interrupt Status Register */
- __IO uint32_t DMAREQSEL; /*!< Offset: 0x1C4 (R/W) DMA Request Select Register */
- __IO uint32_t CLKOUTCFG; /*!< Offset: 0x1C8 (R/W) Clock Output Configuration Register */
- __IO uint32_t RSTCON0; /*!< Offset: 0x1CC (R/W) RESET Control0 Register */
- __IO uint32_t RSTCON1; /*!< Offset: 0x1D0 (R/W) RESET Control1 Register */
- uint32_t RESERVED11[2];
- __IO uint32_t EMCDLYCTL; /*!< Offset: 0x1DC (R/W) SDRAM programmable delays */
- __IO uint32_t EMCCAL; /*!< Offset: 0x1E0 (R/W) Calibration of programmable delays */
- } LPC_SC_TypeDef;
-
-/*------------- Pin Connect Block (PINCON) -----------------------------------*/
-typedef struct
-{
- __IO uint32_t P0_0; /* 0x000 */
- __IO uint32_t P0_1;
- __IO uint32_t P0_2;
- __IO uint32_t P0_3;
- __IO uint32_t P0_4;
- __IO uint32_t P0_5;
- __IO uint32_t P0_6;
- __IO uint32_t P0_7;
-
- __IO uint32_t P0_8; /* 0x020 */
- __IO uint32_t P0_9;
- __IO uint32_t P0_10;
- __IO uint32_t P0_11;
- __IO uint32_t P0_12;
- __IO uint32_t P0_13;
- __IO uint32_t P0_14;
- __IO uint32_t P0_15;
-
- __IO uint32_t P0_16; /* 0x040 */
- __IO uint32_t P0_17;
- __IO uint32_t P0_18;
- __IO uint32_t P0_19;
- __IO uint32_t P0_20;
- __IO uint32_t P0_21;
- __IO uint32_t P0_22;
- __IO uint32_t P0_23;
-
- __IO uint32_t P0_24; /* 0x060 */
- __IO uint32_t P0_25;
- __IO uint32_t P0_26;
- __IO uint32_t P0_27;
- __IO uint32_t P0_28;
- __IO uint32_t P0_29;
- __IO uint32_t P0_30;
- __IO uint32_t P0_31;
-
- __IO uint32_t P1_0; /* 0x080 */
- __IO uint32_t P1_1;
- __IO uint32_t P1_2;
- __IO uint32_t P1_3;
- __IO uint32_t P1_4;
- __IO uint32_t P1_5;
- __IO uint32_t P1_6;
- __IO uint32_t P1_7;
-
- __IO uint32_t P1_8; /* 0x0A0 */
- __IO uint32_t P1_9;
- __IO uint32_t P1_10;
- __IO uint32_t P1_11;
- __IO uint32_t P1_12;
- __IO uint32_t P1_13;
- __IO uint32_t P1_14;
- __IO uint32_t P1_15;
-
- __IO uint32_t P1_16; /* 0x0C0 */
- __IO uint32_t P1_17;
- __IO uint32_t P1_18;
- __IO uint32_t P1_19;
- __IO uint32_t P1_20;
- __IO uint32_t P1_21;
- __IO uint32_t P1_22;
- __IO uint32_t P1_23;
-
- __IO uint32_t P1_24; /* 0x0E0 */
- __IO uint32_t P1_25;
- __IO uint32_t P1_26;
- __IO uint32_t P1_27;
- __IO uint32_t P1_28;
- __IO uint32_t P1_29;
- __IO uint32_t P1_30;
- __IO uint32_t P1_31;
-
- __IO uint32_t P2_0; /* 0x100 */
- __IO uint32_t P2_1;
- __IO uint32_t P2_2;
- __IO uint32_t P2_3;
- __IO uint32_t P2_4;
- __IO uint32_t P2_5;
- __IO uint32_t P2_6;
- __IO uint32_t P2_7;
-
- __IO uint32_t P2_8; /* 0x120 */
- __IO uint32_t P2_9;
- __IO uint32_t P2_10;
- __IO uint32_t P2_11;
- __IO uint32_t P2_12;
- __IO uint32_t P2_13;
- __IO uint32_t P2_14;
- __IO uint32_t P2_15;
-
- __IO uint32_t P2_16; /* 0x140 */
- __IO uint32_t P2_17;
- __IO uint32_t P2_18;
- __IO uint32_t P2_19;
- __IO uint32_t P2_20;
- __IO uint32_t P2_21;
- __IO uint32_t P2_22;
- __IO uint32_t P2_23;
-
- __IO uint32_t P2_24; /* 0x160 */
- __IO uint32_t P2_25;
- __IO uint32_t P2_26;
- __IO uint32_t P2_27;
- __IO uint32_t P2_28;
- __IO uint32_t P2_29;
- __IO uint32_t P2_30;
- __IO uint32_t P2_31;
-
- __IO uint32_t P3_0; /* 0x180 */
- __IO uint32_t P3_1;
- __IO uint32_t P3_2;
- __IO uint32_t P3_3;
- __IO uint32_t P3_4;
- __IO uint32_t P3_5;
- __IO uint32_t P3_6;
- __IO uint32_t P3_7;
-
- __IO uint32_t P3_8; /* 0x1A0 */
- __IO uint32_t P3_9;
- __IO uint32_t P3_10;
- __IO uint32_t P3_11;
- __IO uint32_t P3_12;
- __IO uint32_t P3_13;
- __IO uint32_t P3_14;
- __IO uint32_t P3_15;
-
- __IO uint32_t P3_16; /* 0x1C0 */
- __IO uint32_t P3_17;
- __IO uint32_t P3_18;
- __IO uint32_t P3_19;
- __IO uint32_t P3_20;
- __IO uint32_t P3_21;
- __IO uint32_t P3_22;
- __IO uint32_t P3_23;
-
- __IO uint32_t P3_24; /* 0x1E0 */
- __IO uint32_t P3_25;
- __IO uint32_t P3_26;
- __IO uint32_t P3_27;
- __IO uint32_t P3_28;
- __IO uint32_t P3_29;
- __IO uint32_t P3_30;
- __IO uint32_t P3_31;
-
- __IO uint32_t P4_0; /* 0x200 */
- __IO uint32_t P4_1;
- __IO uint32_t P4_2;
- __IO uint32_t P4_3;
- __IO uint32_t P4_4;
- __IO uint32_t P4_5;
- __IO uint32_t P4_6;
- __IO uint32_t P4_7;
-
- __IO uint32_t P4_8; /* 0x220 */
- __IO uint32_t P4_9;
- __IO uint32_t P4_10;
- __IO uint32_t P4_11;
- __IO uint32_t P4_12;
- __IO uint32_t P4_13;
- __IO uint32_t P4_14;
- __IO uint32_t P4_15;
-
- __IO uint32_t P4_16; /* 0x240 */
- __IO uint32_t P4_17;
- __IO uint32_t P4_18;
- __IO uint32_t P4_19;
- __IO uint32_t P4_20;
- __IO uint32_t P4_21;
- __IO uint32_t P4_22;
- __IO uint32_t P4_23;
-
- __IO uint32_t P4_24; /* 0x260 */
- __IO uint32_t P4_25;
- __IO uint32_t P4_26;
- __IO uint32_t P4_27;
- __IO uint32_t P4_28;
- __IO uint32_t P4_29;
- __IO uint32_t P4_30;
- __IO uint32_t P4_31;
-
- __IO uint32_t P5_0; /* 0x280 */
- __IO uint32_t P5_1;
- __IO uint32_t P5_2;
- __IO uint32_t P5_3;
- __IO uint32_t P5_4; /* 0x290 */
-} LPC_IOCON_TypeDef;
-
-/*------------- General Purpose Input/Output (GPIO) --------------------------*/
-typedef struct
-{
- __IO uint32_t DIR;
- uint32_t RESERVED0[3];
- __IO uint32_t MASK;
- __IO uint32_t PIN;
- __IO uint32_t SET;
- __O uint32_t CLR;
-} LPC_GPIO_TypeDef;
-
-typedef struct
-{
- __I uint32_t IntStatus;
- __I uint32_t IO0IntStatR;
- __I uint32_t IO0IntStatF;
- __O uint32_t IO0IntClr;
- __IO uint32_t IO0IntEnR;
- __IO uint32_t IO0IntEnF;
- uint32_t RESERVED0[3];
- __I uint32_t IO2IntStatR;
- __I uint32_t IO2IntStatF;
- __O uint32_t IO2IntClr;
- __IO uint32_t IO2IntEnR;
- __IO uint32_t IO2IntEnF;
-} LPC_GPIOINT_TypeDef;
-
-/*------------- Timer (TIM) --------------------------------------------------*/
-typedef struct
-{
- __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */
- __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */
- __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */
- __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */
- __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */
- __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */
- __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */
- __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */
- __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */
- __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */
- __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */
- __I uint32_t CR1; /*!< Offset: 0x030 Capture Register 1 (R/ ) */
- uint32_t RESERVED0[2];
- __IO uint32_t EMR; /*!< Offset: 0x03C External Match Register (R/W) */
- uint32_t RESERVED1[12];
- __IO uint32_t CTCR; /*!< Offset: 0x070 Count Control Register (R/W) */
-} LPC_TIM_TypeDef;
-
-/*------------- Pulse-Width Modulation (PWM) ---------------------------------*/
-typedef struct
-{
- __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */
- __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */
- __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */
- __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */
- __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */
- __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */
- __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */
- __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */
- __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */
- __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */
- __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */
- __I uint32_t CR1; /*!< Offset: 0x030 Capture Register 1 (R/ ) */
- __I uint32_t CR2; /*!< Offset: 0x034 Capture Register 2 (R/ ) */
- __I uint32_t CR3; /*!< Offset: 0x038 Capture Register 3 (R/ ) */
- uint32_t RESERVED0;
- __IO uint32_t MR4; /*!< Offset: 0x040 Match Register 4 (R/W) */
- __IO uint32_t MR5; /*!< Offset: 0x044 Match Register 5 (R/W) */
- __IO uint32_t MR6; /*!< Offset: 0x048 Match Register 6 (R/W) */
- __IO uint32_t PCR; /*!< Offset: 0x04C PWM Control Register (R/W) */
- __IO uint32_t LER; /*!< Offset: 0x050 Load Enable Register (R/W) */
- uint32_t RESERVED1[7];
- __IO uint32_t CTCR; /*!< Offset: 0x070 Counter Control Register (R/W) */
-} LPC_PWM_TypeDef;
-
-/*------------- Universal Asynchronous Receiver Transmitter (UARTx) -----------*/
-/* There are three types of UARTs on the chip:
-(1) UART0,UART2, and UART3 are the standard UART.
-(2) UART1 is the standard with modem capability.
-(3) USART(UART4) is the sync/async UART with smart card capability.
-More details can be found on the Users Manual. */
-
-#if 0
-typedef struct
-{
- union {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[7];
- __I uint8_t LSR;
- uint8_t RESERVED2[7];
- __IO uint8_t SCR;
- uint8_t RESERVED3[3];
- __IO uint32_t ACR;
- __IO uint8_t ICR;
- uint8_t RESERVED4[3];
- __IO uint8_t FDR;
- uint8_t RESERVED5[7];
- __IO uint8_t TER;
- uint8_t RESERVED6[39];
- __I uint8_t FIFOLVL;
-} LPC_UART_TypeDef;
-#else
-typedef struct
-{
- union
- {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union
- {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union
- {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[7];//Reserved
- __I uint8_t LSR;
- uint8_t RESERVED2[7];//Reserved
- __IO uint8_t SCR;
- uint8_t RESERVED3[3];//Reserved
- __IO uint32_t ACR;
- uint8_t RESERVED4[4];//Reserved
- __IO uint8_t FDR;
- uint8_t RESERVED5[7];//Reserved
- __IO uint8_t TER;
- uint8_t RESERVED8[27];//Reserved
- __IO uint8_t RS485CTRL;
- uint8_t RESERVED9[3];//Reserved
- __IO uint8_t ADRMATCH;
- uint8_t RESERVED10[3];//Reserved
- __IO uint8_t RS485DLY;
- uint8_t RESERVED11[3];//Reserved
-}LPC_UART_TypeDef;
-#endif
-
-
-typedef struct
-{
- union {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[3];
- __IO uint8_t MCR;
- uint8_t RESERVED2[3];
- __I uint8_t LSR;
- uint8_t RESERVED3[3];
- __I uint8_t MSR;
- uint8_t RESERVED4[3];
- __IO uint8_t SCR;
- uint8_t RESERVED5[3];
- __IO uint32_t ACR;
- uint32_t RESERVED6;
- __IO uint32_t FDR;
- uint32_t RESERVED7;
- __IO uint8_t TER;
- uint8_t RESERVED8[27];
- __IO uint8_t RS485CTRL;
- uint8_t RESERVED9[3];
- __IO uint8_t ADRMATCH;
- uint8_t RESERVED10[3];
- __IO uint8_t RS485DLY;
- uint8_t RESERVED11[3];
-} LPC_UART1_TypeDef;
-
-typedef struct
-{
- union {
- __I uint32_t RBR; /*!< Offset: 0x000 Receiver Buffer Register (R/ ) */
- __O uint32_t THR; /*!< Offset: 0x000 Transmit Holding Register ( /W) */
- __IO uint32_t DLL; /*!< Offset: 0x000 Divisor Latch LSB (R/W) */
- };
- union {
- __IO uint32_t DLM; /*!< Offset: 0x004 Divisor Latch MSB (R/W) */
- __IO uint32_t IER; /*!< Offset: 0x000 Interrupt Enable Register (R/W) */
- };
- union {
- __I uint32_t IIR; /*!< Offset: 0x008 Interrupt ID Register (R/ ) */
- __O uint32_t FCR; /*!< Offset: 0x008 FIFO Control Register ( /W) */
- };
- __IO uint32_t LCR; /*!< Offset: 0x00C Line Control Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x010 Modem control Register (R/W) */
- __I uint32_t LSR; /*!< Offset: 0x014 Line Status Register (R/ ) */
- __I uint32_t MSR; /*!< Offset: 0x018 Modem status Register (R/ ) */
- __IO uint32_t SCR; /*!< Offset: 0x01C Scratch Pad Register (R/W) */
- __IO uint32_t ACR; /*!< Offset: 0x020 Auto-baud Control Register (R/W) */
- __IO uint32_t ICR; /*!< Offset: 0x024 irDA Control Register (R/W) */
- __IO uint32_t FDR; /*!< Offset: 0x028 Fractional Divider Register (R/W) */
- __IO uint32_t OSR; /*!< Offset: 0x02C Over sampling Register (R/W) */
- uint32_t RESERVED0[6];
- __IO uint32_t SCI_CTRL; /*!< Offset: 0x048 Smart card Interface Control Register (R/W) */
- __IO uint32_t RS485CTRL; /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */
- __IO uint32_t ADRMATCH; /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */
- __IO uint32_t RS485DLY; /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */
- __IO uint32_t SYNCCTRL; /*!< Offset: 0x058 Synchronous Mode Control Register (R/W ) */
- __IO uint32_t TER; /*!< Offset: 0x05C Transmit Enable Register (R/W) */
-} LPC_UART4_TypeDef;
-
-/*------------- Synchronous Serial Communication (SSP) -----------------------*/
-typedef struct
-{
- __IO uint32_t CR0; /*!< Offset: 0x000 Control Register 0 (R/W) */
- __IO uint32_t CR1; /*!< Offset: 0x004 Control Register 1 (R/W) */
- __IO uint32_t DR; /*!< Offset: 0x008 Data Register (R/W) */
- __I uint32_t SR; /*!< Offset: 0x00C Status Registe (R/ ) */
- __IO uint32_t CPSR; /*!< Offset: 0x010 Clock Prescale Register (R/W) */
- __IO uint32_t IMSC; /*!< Offset: 0x014 Interrupt Mask Set and Clear Register (R/W) */
- __IO uint32_t RIS; /*!< Offset: 0x018 Raw Interrupt Status Register (R/W) */
- __IO uint32_t MIS; /*!< Offset: 0x01C Masked Interrupt Status Register (R/W) */
- __IO uint32_t ICR; /*!< Offset: 0x020 SSPICR Interrupt Clear Register (R/W) */
- __IO uint32_t DMACR;
-} LPC_SSP_TypeDef;
-
-/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/
-typedef struct
-{
- __IO uint32_t CONSET; /*!< Offset: 0x000 I2C Control Set Register (R/W) */
- __I uint32_t STAT; /*!< Offset: 0x004 I2C Status Register (R/ ) */
- __IO uint32_t DAT; /*!< Offset: 0x008 I2C Data Register (R/W) */
- __IO uint32_t ADR0; /*!< Offset: 0x00C I2C Slave Address Register 0 (R/W) */
- __IO uint32_t SCLH; /*!< Offset: 0x010 SCH Duty Cycle Register High Half Word (R/W) */
- __IO uint32_t SCLL; /*!< Offset: 0x014 SCL Duty Cycle Register Low Half Word (R/W) */
- __O uint32_t CONCLR; /*!< Offset: 0x018 I2C Control Clear Register ( /W) */
- __IO uint32_t MMCTRL; /*!< Offset: 0x01C Monitor mode control register (R/W) */
- __IO uint32_t ADR1; /*!< Offset: 0x020 I2C Slave Address Register 1 (R/W) */
- __IO uint32_t ADR2; /*!< Offset: 0x024 I2C Slave Address Register 2 (R/W) */
- __IO uint32_t ADR3; /*!< Offset: 0x028 I2C Slave Address Register 3 (R/W) */
- __I uint32_t DATA_BUFFER; /*!< Offset: 0x02C Data buffer register ( /W) */
- __IO uint32_t MASK0; /*!< Offset: 0x030 I2C Slave address mask register 0 (R/W) */
- __IO uint32_t MASK1; /*!< Offset: 0x034 I2C Slave address mask register 1 (R/W) */
- __IO uint32_t MASK2; /*!< Offset: 0x038 I2C Slave address mask register 2 (R/W) */
- __IO uint32_t MASK3; /*!< Offset: 0x03C I2C Slave address mask register 3 (R/W) */
-} LPC_I2C_TypeDef;
-
-/*------------- Inter IC Sound (I2S) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t DAO;
- __IO uint32_t DAI;
- __O uint32_t TXFIFO;
- __I uint32_t RXFIFO;
- __I uint32_t STATE;
- __IO uint32_t DMA1;
- __IO uint32_t DMA2;
- __IO uint32_t IRQ;
- __IO uint32_t TXRATE;
- __IO uint32_t RXRATE;
- __IO uint32_t TXBITRATE;
- __IO uint32_t RXBITRATE;
- __IO uint32_t TXMODE;
- __IO uint32_t RXMODE;
-} LPC_I2S_TypeDef;
-
-/*------------- Real-Time Clock (RTC) ----------------------------------------*/
-typedef struct
-{
- __IO uint8_t ILR;
- uint8_t RESERVED0[7];
- __IO uint8_t CCR;
- uint8_t RESERVED1[3];
- __IO uint8_t CIIR;
- uint8_t RESERVED2[3];
- __IO uint8_t AMR;
- uint8_t RESERVED3[3];
- __I uint32_t CTIME0;
- __I uint32_t CTIME1;
- __I uint32_t CTIME2;
- __IO uint8_t SEC;
- uint8_t RESERVED4[3];
- __IO uint8_t MIN;
- uint8_t RESERVED5[3];
- __IO uint8_t HOUR;
- uint8_t RESERVED6[3];
- __IO uint8_t DOM;
- uint8_t RESERVED7[3];
- __IO uint8_t DOW;
- uint8_t RESERVED8[3];
- __IO uint16_t DOY;
- uint16_t RESERVED9;
- __IO uint8_t MONTH;
- uint8_t RESERVED10[3];
- __IO uint16_t YEAR;
- uint16_t RESERVED11;
- __IO uint32_t CALIBRATION;
- __IO uint32_t GPREG0;
- __IO uint32_t GPREG1;
- __IO uint32_t GPREG2;
- __IO uint32_t GPREG3;
- __IO uint32_t GPREG4;
- __IO uint8_t RTC_AUXEN;
- uint8_t RESERVED12[3];
- __IO uint8_t RTC_AUX;
- uint8_t RESERVED13[3];
- __IO uint8_t ALSEC;
- uint8_t RESERVED14[3];
- __IO uint8_t ALMIN;
- uint8_t RESERVED15[3];
- __IO uint8_t ALHOUR;
- uint8_t RESERVED16[3];
- __IO uint8_t ALDOM;
- uint8_t RESERVED17[3];
- __IO uint8_t ALDOW;
- uint8_t RESERVED18[3];
- __IO uint16_t ALDOY;
- uint16_t RESERVED19;
- __IO uint8_t ALMON;
- uint8_t RESERVED20[3];
- __IO uint16_t ALYEAR;
- uint16_t RESERVED21;
- __IO uint32_t ERSTATUS;
- __IO uint32_t ERCONTROL;
- __IO uint32_t ERCOUNTERS;
- uint32_t RESERVED22;
- __IO uint32_t ERFIRSTSTAMP0;
- __IO uint32_t ERFIRSTSTAMP1;
- __IO uint32_t ERFIRSTSTAMP2;
- uint32_t RESERVED23;
- __IO uint32_t ERLASTSTAMP0;
- __IO uint32_t ERLASTSTAMP1;
- __IO uint32_t ERLASTSTAMP2;
-} LPC_RTC_TypeDef;
-
-/*------------- Watchdog Timer (WDT) -----------------------------------------*/
-typedef struct
-{
- __IO uint8_t MOD;
- uint8_t RESERVED0[3];
- __IO uint32_t TC;
- __O uint8_t FEED;
- uint8_t RESERVED1[3];
- __I uint32_t TV;
- uint32_t RESERVED2;
- __IO uint32_t WARNINT;
- __IO uint32_t WINDOW;
-} LPC_WDT_TypeDef;
-
-/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/
-typedef struct
-{
- __IO uint32_t CR; /*!< Offset: 0x000 A/D Control Register (R/W) */
- __IO uint32_t GDR; /*!< Offset: 0x004 A/D Global Data Register (R/W) */
- uint32_t RESERVED0;
- __IO uint32_t INTEN; /*!< Offset: 0x00C A/D Interrupt Enable Register (R/W) */
- __IO uint32_t DR[8]; /*!< Offset: 0x010-0x02C A/D Channel 0..7 Data Register (R/W) */
- __I uint32_t STAT; /*!< Offset: 0x030 A/D Status Register (R/ ) */
- __IO uint32_t ADTRM;
-} LPC_ADC_TypeDef;
-
-/*------------- Digital-to-Analog Converter (DAC) ----------------------------*/
-typedef struct
-{
- __IO uint32_t CR;
- __IO uint32_t CTRL;
- __IO uint32_t CNTVAL;
-} LPC_DAC_TypeDef;
-
-/*------------- Motor Control Pulse-Width Modulation (MCPWM) -----------------*/
-typedef struct
-{
- __I uint32_t CON;
- __O uint32_t CON_SET;
- __O uint32_t CON_CLR;
- __I uint32_t CAPCON;
- __O uint32_t CAPCON_SET;
- __O uint32_t CAPCON_CLR;
- __IO uint32_t TC0;
- __IO uint32_t TC1;
- __IO uint32_t TC2;
- __IO uint32_t LIM0;
- __IO uint32_t LIM1;
- __IO uint32_t LIM2;
- __IO uint32_t MAT0;
- __IO uint32_t MAT1;
- __IO uint32_t MAT2;
- __IO uint32_t DT;
- __IO uint32_t CP;
- __IO uint32_t CAP0;
- __IO uint32_t CAP1;
- __IO uint32_t CAP2;
- __I uint32_t INTEN;
- __O uint32_t INTEN_SET;
- __O uint32_t INTEN_CLR;
- __I uint32_t CNTCON;
- __O uint32_t CNTCON_SET;
- __O uint32_t CNTCON_CLR;
- __I uint32_t INTF;
- __O uint32_t INTF_SET;
- __O uint32_t INTF_CLR;
- __O uint32_t CAP_CLR;
-} LPC_MCPWM_TypeDef;
-
-/*------------- Quadrature Encoder Interface (QEI) ---------------------------*/
-typedef struct
-{
- __O uint32_t CON;
- __I uint32_t STAT;
- __IO uint32_t CONF;
- __I uint32_t POS;
- __IO uint32_t MAXPOS;
- __IO uint32_t CMPOS0;
- __IO uint32_t CMPOS1;
- __IO uint32_t CMPOS2;
- __I uint32_t INXCNT;
- __IO uint32_t INXCMP0;
- __IO uint32_t LOAD;
- __I uint32_t TIME;
- __I uint32_t VEL;
- __I uint32_t CAP;
- __IO uint32_t VELCOMP;
- __IO uint32_t FILTERPHA;
- __IO uint32_t FILTERPHB;
- __IO uint32_t FILTERINX;
- __IO uint32_t WINDOW;
- __IO uint32_t INXCMP1;
- __IO uint32_t INXCMP2;
- uint32_t RESERVED0[993];
- __O uint32_t IEC;
- __O uint32_t IES;
- __I uint32_t INTSTAT;
- __I uint32_t IE;
- __O uint32_t CLR;
- __O uint32_t SET;
-} LPC_QEI_TypeDef;
-
-/*------------- SD/MMC card Interface (MCI)-----------------------------------*/
-typedef struct
-{
- __IO uint32_t POWER;
- __IO uint32_t CLOCK;
- __IO uint32_t ARGUMENT;
- __IO uint32_t COMMAND;
- __I uint32_t RESP_CMD;
- __I uint32_t RESP0;
- __I uint32_t RESP1;
- __I uint32_t RESP2;
- __I uint32_t RESP3;
- __IO uint32_t DATATMR;
- __IO uint32_t DATALEN;
- __IO uint32_t DATACTRL;
- __I uint32_t DATACNT;
- __I uint32_t STATUS;
- __O uint32_t CLEAR;
- __IO uint32_t MASK0;
- uint32_t RESERVED0[2];
- __I uint32_t FIFOCNT;
- uint32_t RESERVED1[13];
- __IO uint32_t FIFO[16];
-} LPC_MCI_TypeDef;
-
-/*------------- Controller Area Network (CAN) --------------------------------*/
-typedef struct
-{
- __IO uint32_t mask[512]; /* ID Masks */
-} LPC_CANAF_RAM_TypeDef;
-
-typedef struct /* Acceptance Filter Registers */
-{
- ///Offset: 0x00000000 - Acceptance Filter Register
- __IO uint32_t AFMR;
-
- ///Offset: 0x00000004 - Standard Frame Individual Start Address Register
- __IO uint32_t SFF_sa;
-
- ///Offset: 0x00000008 - Standard Frame Group Start Address Register
- __IO uint32_t SFF_GRP_sa;
-
- ///Offset: 0x0000000C - Extended Frame Start Address Register
- __IO uint32_t EFF_sa;
-
- ///Offset: 0x00000010 - Extended Frame Group Start Address Register
- __IO uint32_t EFF_GRP_sa;
-
- ///Offset: 0x00000014 - End of AF Tables register
- __IO uint32_t ENDofTable;
-
- ///Offset: 0x00000018 - LUT Error Address register
- __I uint32_t LUTerrAd;
-
- ///Offset: 0x0000001C - LUT Error Register
- __I uint32_t LUTerr;
-
- ///Offset: 0x00000020 - CAN Central Transmit Status Register
- __IO uint32_t FCANIE;
-
- ///Offset: 0x00000024 - FullCAN Interrupt and Capture registers 0
- __IO uint32_t FCANIC0;
-
- ///Offset: 0x00000028 - FullCAN Interrupt and Capture registers 1
- __IO uint32_t FCANIC1;
-} LPC_CANAF_TypeDef;
-
-typedef struct /* Central Registers */
-{
- __I uint32_t TxSR;
- __I uint32_t RxSR;
- __I uint32_t MSR;
-} LPC_CANCR_TypeDef;
-
-typedef struct /* Controller Registers */
-{
- ///Offset: 0x00000000 - Controls the operating mode of the CAN Controller
- __IO uint32_t MOD;
-
- ///Offset: 0x00000004 - Command bits that affect the state
- __O uint32_t CMR;
-
- ///Offset: 0x00000008 - Global Controller Status and Error Counters
- __IO uint32_t GSR;
-
- ///Offset: 0x0000000C - Interrupt status, Arbitration Lost Capture, Error Code Capture
- __I uint32_t ICR;
-
- ///Offset: 0x00000010 - Interrupt Enable Register
- __IO uint32_t IER;
-
- ///Offset: 0x00000014 - Bus Timing Register
- __IO uint32_t BTR;
-
- ///Offset: 0x00000018 - Error Warning Limit
- __IO uint32_t EWL;
-
- ///Offset: 0x0000001C - Status Register
- __I uint32_t SR;
-
- ///Offset: 0x00000020 - Receive frame status
- __IO uint32_t RFS;
-
- ///Offset: 0x00000024 - Received Identifier
- __IO uint32_t RID;
-
- ///Offset: 0x00000028 - Received data bytes 1-4
- __IO uint32_t RDA;
-
- ///Offset: 0x0000002C - Received data bytes 5-8
- __IO uint32_t RDB;
-
- ///Offset: 0x00000030 - Transmit frame info (Tx Buffer 1)
- __IO uint32_t TFI1;
-
- ///Offset: 0x00000034 - Transmit Identifier (Tx Buffer 1)
- __IO uint32_t TID1;
-
- ///Offset: 0x00000038 - Transmit data bytes 1-4 (Tx Buffer 1)
- __IO uint32_t TDA1;
-
- ///Offset: 0x0000003C - Transmit data bytes 5-8 (Tx Buffer 1)
- __IO uint32_t TDB1;
-
- ///Offset: 0x00000040 - Transmit frame info (Tx Buffer 2)
- __IO uint32_t TFI2;
-
- ///Offset: 0x00000044 - Transmit Identifier (Tx Buffer 2)
- __IO uint32_t TID2;
-
- ///Offset: 0x00000048 - Transmit data bytes 1-4 (Tx Buffer 2)
- __IO uint32_t TDA2;
-
- ///Offset: 0x0000004C - Transmit data bytes 5-8 (Tx Buffer 2)
- __IO uint32_t TDB2;
-
- ///Offset: 0x00000050 - Transmit frame info (Tx Buffer 3)
- __IO uint32_t TFI3;
-
- ///Offset: 0x00000054 - Transmit Identifier (Tx Buffer 3)
- __IO uint32_t TID3;
-
- ///Offset: 0x00000058 - Transmit data bytes 1-4 (Tx Buffer 3)
- __IO uint32_t TDA3;
-
- ///Offset: 0x0000005C - Transmit data bytes 5-8 (Tx Buffer 3)
- __IO uint32_t TDB3;
-} LPC_CAN_TypeDef;
-
-/*------------- General Purpose Direct Memory Access (GPDMA) -----------------*/
-typedef struct /* Common Registers */
-{
- __I uint32_t IntStat;
- __I uint32_t IntTCStat;
- __O uint32_t IntTCClear;
- __I uint32_t IntErrStat;
- __O uint32_t IntErrClr;
- __I uint32_t RawIntTCStat;
- __I uint32_t RawIntErrStat;
- __I uint32_t EnbldChns;
- __IO uint32_t SoftBReq;
- __IO uint32_t SoftSReq;
- __IO uint32_t SoftLBReq;
- __IO uint32_t SoftLSReq;
- __IO uint32_t Config;
- __IO uint32_t Sync;
-} LPC_GPDMA_TypeDef;
-
-typedef struct /* Channel Registers */
-{
- __IO uint32_t CSrcAddr;
- __IO uint32_t CDestAddr;
- __IO uint32_t CLLI;
- __IO uint32_t CControl;
- __IO uint32_t CConfig;
-} LPC_GPDMACH_TypeDef;
-
-/*------------- Universal Serial Bus (USB) -----------------------------------*/
-typedef struct
-{
- __I uint32_t Revision; /* USB Host Registers */
- __IO uint32_t Control;
- __IO uint32_t CommandStatus;
- __IO uint32_t InterruptStatus;
- __IO uint32_t InterruptEnable;
- __IO uint32_t InterruptDisable;
- __IO uint32_t HCCA;
- __I uint32_t PeriodCurrentED;
- __IO uint32_t ControlHeadED;
- __IO uint32_t ControlCurrentED;
- __IO uint32_t BulkHeadED;
- __IO uint32_t BulkCurrentED;
- __I uint32_t DoneHead;
- __IO uint32_t FmInterval;
- __I uint32_t FmRemaining;
- __I uint32_t FmNumber;
- __IO uint32_t PeriodicStart;
- __IO uint32_t LSTreshold;
- __IO uint32_t RhDescriptorA;
- __IO uint32_t RhDescriptorB;
- __IO uint32_t RhStatus;
- __IO uint32_t RhPortStatus1;
- __IO uint32_t RhPortStatus2;
- uint32_t RESERVED0[40];
- __I uint32_t Module_ID;
-
- __I uint32_t IntSt; /* USB On-The-Go Registers */
- __IO uint32_t IntEn;
- __O uint32_t IntSet;
- __O uint32_t IntClr;
- __IO uint32_t StCtrl;
- __IO uint32_t Tmr;
- uint32_t RESERVED1[58];
-
- __I uint32_t DevIntSt; /* USB Device Interrupt Registers */
- __IO uint32_t DevIntEn;
- __O uint32_t DevIntClr;
- __O uint32_t DevIntSet;
-
- __O uint32_t CmdCode; /* USB Device SIE Command Registers */
- __I uint32_t CmdData;
-
- __I uint32_t RxData; /* USB Device Transfer Registers */
- __O uint32_t TxData;
- __I uint32_t RxPLen;
- __O uint32_t TxPLen;
- __IO uint32_t Ctrl;
- __O uint32_t DevIntPri;
-
- __I uint32_t EpIntSt; /* USB Device Endpoint Interrupt Regs */
- __IO uint32_t EpIntEn;
- __O uint32_t EpIntClr;
- __O uint32_t EpIntSet;
- __O uint32_t EpIntPri;
-
- __IO uint32_t ReEp; /* USB Device Endpoint Realization Reg*/
- __O uint32_t EpInd;
- __IO uint32_t MaxPSize;
-
- __I uint32_t DMARSt; /* USB Device DMA Registers */
- __O uint32_t DMARClr;
- __O uint32_t DMARSet;
- uint32_t RESERVED2[9];
- __IO uint32_t UDCAH;
- __I uint32_t EpDMASt;
- __O uint32_t EpDMAEn;
- __O uint32_t EpDMADis;
- __I uint32_t DMAIntSt;
- __IO uint32_t DMAIntEn;
- uint32_t RESERVED3[2];
- __I uint32_t EoTIntSt;
- __O uint32_t EoTIntClr;
- __O uint32_t EoTIntSet;
- __I uint32_t NDDRIntSt;
- __O uint32_t NDDRIntClr;
- __O uint32_t NDDRIntSet;
- __I uint32_t SysErrIntSt;
- __O uint32_t SysErrIntClr;
- __O uint32_t SysErrIntSet;
- uint32_t RESERVED4[15];
-
- union {
- __I uint32_t I2C_RX; /* USB OTG I2C Registers */
- __O uint32_t I2C_TX;
- };
- __IO uint32_t I2C_STS;
- __IO uint32_t I2C_CTL;
- __IO uint32_t I2C_CLKHI;
- __O uint32_t I2C_CLKLO;
- uint32_t RESERVED5[824];
-
- union {
- __IO uint32_t USBClkCtrl; /* USB Clock Control Registers */
- __IO uint32_t OTGClkCtrl;
- };
- union {
- __I uint32_t USBClkSt;
- __I uint32_t OTGClkSt;
- };
-} LPC_USB_TypeDef;
-
-/*------------- Ethernet Media Access Controller (EMAC) ----------------------*/
-typedef struct
-{
- __IO uint32_t MAC1; /* MAC Registers */
- __IO uint32_t MAC2;
- __IO uint32_t IPGT;
- __IO uint32_t IPGR;
- __IO uint32_t CLRT;
- __IO uint32_t MAXF;
- __IO uint32_t SUPP;
- __IO uint32_t TEST;
- __IO uint32_t MCFG;
- __IO uint32_t MCMD;
- __IO uint32_t MADR;
- __O uint32_t MWTD;
- __I uint32_t MRDD;
- __I uint32_t MIND;
- uint32_t RESERVED0[2];
- __IO uint32_t SA0;
- __IO uint32_t SA1;
- __IO uint32_t SA2;
- uint32_t RESERVED1[45];
- __IO uint32_t Command; /* Control Registers */
- __I uint32_t Status;
- __IO uint32_t RxDescriptor;
- __IO uint32_t RxStatus;
- __IO uint32_t RxDescriptorNumber;
- __I uint32_t RxProduceIndex;
- __IO uint32_t RxConsumeIndex;
- __IO uint32_t TxDescriptor;
- __IO uint32_t TxStatus;
- __IO uint32_t TxDescriptorNumber;
- __IO uint32_t TxProduceIndex;
- __I uint32_t TxConsumeIndex;
- uint32_t RESERVED2[10];
- __I uint32_t TSV0;
- __I uint32_t TSV1;
- __I uint32_t RSV;
- uint32_t RESERVED3[3];
- __IO uint32_t FlowControlCounter;
- __I uint32_t FlowControlStatus;
- uint32_t RESERVED4[34];
- __IO uint32_t RxFilterCtrl; /* Rx Filter Registers */
- __I uint32_t RxFilterWoLStatus;
- __O uint32_t RxFilterWoLClear;
- uint32_t RESERVED5;
- __IO uint32_t HashFilterL;
- __IO uint32_t HashFilterH;
- uint32_t RESERVED6[882];
- __I uint32_t IntStatus; /* Module Control Registers */
- __IO uint32_t IntEnable;
- __O uint32_t IntClear;
- __O uint32_t IntSet;
- uint32_t RESERVED7;
- __IO uint32_t PowerDown;
- uint32_t RESERVED8;
- __IO uint32_t Module_ID;
-} LPC_EMAC_TypeDef;
-
-/*------------- LCD controller (LCD) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t TIMH; /* LCD Registers */
- __IO uint32_t TIMV;
- __IO uint32_t POL;
- __IO uint32_t LE;
- __IO uint32_t UPBASE;
- __IO uint32_t LPBASE;
- __IO uint32_t CTRL;
- __IO uint32_t INTMSK;
- __I uint32_t INTRAW;
- __I uint32_t INTSTAT;
- __O uint32_t INTCLR;
- __I uint32_t UPCURR;
- __I uint32_t LPCURR;
- uint32_t RESERVED0[115];
- __IO uint32_t PAL[128];
- uint32_t RESERVED1[256];
- __IO uint32_t CRSR_IMG[256];
- __IO uint32_t CRSR_CTRL;
- __IO uint32_t CRSR_CFG;
- __IO uint32_t CRSR_PAL0;
- __IO uint32_t CRSR_PAL1;
- __IO uint32_t CRSR_XY;
- __IO uint32_t CRSR_CLIP;
- uint32_t RESERVED2[2];
- __IO uint32_t CRSR_INTMSK;
- __O uint32_t CRSR_INTCLR;
- __I uint32_t CRSR_INTRAW;
- __I uint32_t CRSR_INTSTAT;
-} LPC_LCD_TypeDef;
-
-/*------------- External Memory Controller (EMC) -----------------------------*/
-typedef struct
-{
- __IO uint32_t Control;
- __I uint32_t Status;
- __IO uint32_t Config;
- uint32_t RESERVED0[5];
- __IO uint32_t DynamicControl;
- __IO uint32_t DynamicRefresh;
- __IO uint32_t DynamicReadConfig;
- uint32_t RESERVED1[1];
- __IO uint32_t DynamicRP;
- __IO uint32_t DynamicRAS;
- __IO uint32_t DynamicSREX;
- __IO uint32_t DynamicAPR;
- __IO uint32_t DynamicDAL;
- __IO uint32_t DynamicWR;
- __IO uint32_t DynamicRC;
- __IO uint32_t DynamicRFC;
- __IO uint32_t DynamicXSR;
- __IO uint32_t DynamicRRD;
- __IO uint32_t DynamicMRD;
- uint32_t RESERVED2[9];
- __IO uint32_t StaticExtendedWait;
- uint32_t RESERVED3[31];
- __IO uint32_t DynamicConfig0;
- __IO uint32_t DynamicRasCas0;
- uint32_t RESERVED4[6];
- __IO uint32_t DynamicConfig1;
- __IO uint32_t DynamicRasCas1;
- uint32_t RESERVED5[6];
- __IO uint32_t DynamicConfig2;
- __IO uint32_t DynamicRasCas2;
- uint32_t RESERVED6[6];
- __IO uint32_t DynamicConfig3;
- __IO uint32_t DynamicRasCas3;
- uint32_t RESERVED7[38];
- __IO uint32_t StaticConfig0;
- __IO uint32_t StaticWaitWen0;
- __IO uint32_t StaticWaitOen0;
- __IO uint32_t StaticWaitRd0;
- __IO uint32_t StaticWaitPage0;
- __IO uint32_t StaticWaitWr0;
- __IO uint32_t StaticWaitTurn0;
- uint32_t RESERVED8[1];
- __IO uint32_t StaticConfig1;
- __IO uint32_t StaticWaitWen1;
- __IO uint32_t StaticWaitOen1;
- __IO uint32_t StaticWaitRd1;
- __IO uint32_t StaticWaitPage1;
- __IO uint32_t StaticWaitWr1;
- __IO uint32_t StaticWaitTurn1;
- uint32_t RESERVED9[1];
- __IO uint32_t StaticConfig2;
- __IO uint32_t StaticWaitWen2;
- __IO uint32_t StaticWaitOen2;
- __IO uint32_t StaticWaitRd2;
- __IO uint32_t StaticWaitPage2;
- __IO uint32_t StaticWaitWr2;
- __IO uint32_t StaticWaitTurn2;
- uint32_t RESERVED10[1];
- __IO uint32_t StaticConfig3;
- __IO uint32_t StaticWaitWen3;
- __IO uint32_t StaticWaitOen3;
- __IO uint32_t StaticWaitRd3;
- __IO uint32_t StaticWaitPage3;
- __IO uint32_t StaticWaitWr3;
- __IO uint32_t StaticWaitTurn3;
-} LPC_EMC_TypeDef;
-
-/*------------- CRC Engine (CRC) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t MODE;
- __IO uint32_t SEED;
- union {
- __I uint32_t SUM;
- struct {
- __O uint32_t DATA;
- } WR_DATA_DWORD;
-
- struct {
- __O uint16_t DATA;
- uint16_t RESERVED;
- }WR_DATA_WORD;
-
- struct {
- __O uint8_t DATA;
- uint8_t RESERVED[3];
- }WR_DATA_BYTE;
- };
-} LPC_CRC_TypeDef;
-
-/*------------- EEPROM Controller (EEPROM) -----------------------------------*/
-typedef struct
-{
- __IO uint32_t CMD; /* 0x0080 */
- __IO uint32_t ADDR;
- __IO uint32_t WDATA;
- __IO uint32_t RDATA;
- __IO uint32_t WSTATE; /* 0x0090 */
- __IO uint32_t CLKDIV;
- __IO uint32_t PWRDWN; /* 0x0098 */
- uint32_t RESERVED0[975];
- __IO uint32_t INT_CLR_ENABLE; /* 0x0FD8 */
- __IO uint32_t INT_SET_ENABLE;
- __IO uint32_t INT_STATUS; /* 0x0FE0 */
- __IO uint32_t INT_ENABLE;
- __IO uint32_t INT_CLR_STATUS;
- __IO uint32_t INT_SET_STATUS;
-} LPC_EEPROM_TypeDef;
-
-#if defined ( __CC_ARM )
-#pragma no_anon_unions
-#endif
-
-/******************************************************************************/
-/* Peripheral memory map */
-/******************************************************************************/
-/* Base addresses */
-#define LPC_FLASH_BASE (0x00000000UL)
-#define LPC_RAM_BASE (0x10000000UL)
-#define LPC_PERI_RAM_BASE (0x20000000UL)
-#define LPC_APB0_BASE (0x40000000UL)
-#define LPC_APB1_BASE (0x40080000UL)
-#define LPC_AHBRAM1_BASE (0x20004000UL)
-#define LPC_AHB_BASE (0x20080000UL)
-#define LPC_CM3_BASE (0xE0000000UL)
-
-/* APB0 peripherals */
-#define LPC_WDT_BASE (LPC_APB0_BASE + 0x00000)
-#define LPC_TIM0_BASE (LPC_APB0_BASE + 0x04000)
-#define LPC_TIM1_BASE (LPC_APB0_BASE + 0x08000)
-#define LPC_UART0_BASE (LPC_APB0_BASE + 0x0C000)
-#define LPC_UART1_BASE (LPC_APB0_BASE + 0x10000)
-#define LPC_PWM0_BASE (LPC_APB0_BASE + 0x14000)
-#define LPC_PWM1_BASE (LPC_APB0_BASE + 0x18000)
-#define LPC_I2C0_BASE (LPC_APB0_BASE + 0x1C000)
-#define LPC_RTC_BASE (LPC_APB0_BASE + 0x24000)
-#define LPC_GPIOINT_BASE (LPC_APB0_BASE + 0x28080)
-#define LPC_IOCON_BASE (LPC_APB0_BASE + 0x2C000)
-#define LPC_SSP1_BASE (LPC_APB0_BASE + 0x30000)
-#define LPC_ADC_BASE (LPC_APB0_BASE + 0x34000)
-#define LPC_CANAF_RAM_BASE (LPC_APB0_BASE + 0x38000)
-#define LPC_CANAF_BASE (LPC_APB0_BASE + 0x3C000)
-#define LPC_CANCR_BASE (LPC_APB0_BASE + 0x40000)
-#define LPC_CAN1_BASE (LPC_APB0_BASE + 0x44000)
-#define LPC_CAN2_BASE (LPC_APB0_BASE + 0x48000)
-#define LPC_I2C1_BASE (LPC_APB0_BASE + 0x5C000)
-
-/* APB1 peripherals */
-#define LPC_SSP0_BASE (LPC_APB1_BASE + 0x08000)
-#define LPC_DAC_BASE (LPC_APB1_BASE + 0x0C000)
-#define LPC_TIM2_BASE (LPC_APB1_BASE + 0x10000)
-#define LPC_TIM3_BASE (LPC_APB1_BASE + 0x14000)
-#define LPC_UART2_BASE (LPC_APB1_BASE + 0x18000)
-#define LPC_UART3_BASE (LPC_APB1_BASE + 0x1C000)
-#define LPC_I2C2_BASE (LPC_APB1_BASE + 0x20000)
-#define LPC_UART4_BASE (LPC_APB1_BASE + 0x24000)
-#define LPC_I2S_BASE (LPC_APB1_BASE + 0x28000)
-#define LPC_SSP2_BASE (LPC_APB1_BASE + 0x2C000)
-#define LPC_MCPWM_BASE (LPC_APB1_BASE + 0x38000)
-#define LPC_QEI_BASE (LPC_APB1_BASE + 0x3C000)
-#define LPC_MCI_BASE (LPC_APB1_BASE + 0x40000)
-#define LPC_SC_BASE (LPC_APB1_BASE + 0x7C000)
-
-/* AHB peripherals */
-#define LPC_GPDMA_BASE (LPC_AHB_BASE + 0x00000)
-#define LPC_GPDMACH0_BASE (LPC_AHB_BASE + 0x00100)
-#define LPC_GPDMACH1_BASE (LPC_AHB_BASE + 0x00120)
-#define LPC_GPDMACH2_BASE (LPC_AHB_BASE + 0x00140)
-#define LPC_GPDMACH3_BASE (LPC_AHB_BASE + 0x00160)
-#define LPC_GPDMACH4_BASE (LPC_AHB_BASE + 0x00180)
-#define LPC_GPDMACH5_BASE (LPC_AHB_BASE + 0x001A0)
-#define LPC_GPDMACH6_BASE (LPC_AHB_BASE + 0x001C0)
-#define LPC_GPDMACH7_BASE (LPC_AHB_BASE + 0x001E0)
-#define LPC_EMAC_BASE (LPC_AHB_BASE + 0x04000)
-#define LPC_LCD_BASE (LPC_AHB_BASE + 0x08000)
-#define LPC_USB_BASE (LPC_AHB_BASE + 0x0C000)
-#define LPC_CRC_BASE (LPC_AHB_BASE + 0x10000)
-#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x18000)
-#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x18020)
-#define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x18040)
-#define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x18060)
-#define LPC_GPIO4_BASE (LPC_AHB_BASE + 0x18080)
-#define LPC_GPIO5_BASE (LPC_AHB_BASE + 0x180A0)
-#define LPC_EMC_BASE (LPC_AHB_BASE + 0x1C000)
-
-#define LPC_EEPROM_BASE (LPC_FLASH_BASE+ 0x200080)
-
-
-/******************************************************************************/
-/* Peripheral declaration */
-/******************************************************************************/
-#define LPC_SC ((LPC_SC_TypeDef *) LPC_SC_BASE )
-#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE )
-#define LPC_TIM0 ((LPC_TIM_TypeDef *) LPC_TIM0_BASE )
-#define LPC_TIM1 ((LPC_TIM_TypeDef *) LPC_TIM1_BASE )
-#define LPC_TIM2 ((LPC_TIM_TypeDef *) LPC_TIM2_BASE )
-#define LPC_TIM3 ((LPC_TIM_TypeDef *) LPC_TIM3_BASE )
-#define LPC_UART0 ((LPC_UART_TypeDef *) LPC_UART0_BASE )
-#define LPC_UART1 ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
-#define LPC_UART2 ((LPC_UART_TypeDef *) LPC_UART2_BASE )
-#define LPC_UART3 ((LPC_UART_TypeDef *) LPC_UART3_BASE )
-#define LPC_UART4 ((LPC_UART4_TypeDef *) LPC_UART4_BASE )
-#define LPC_PWM0 ((LPC_PWM_TypeDef *) LPC_PWM0_BASE )
-#define LPC_PWM1 ((LPC_PWM_TypeDef *) LPC_PWM1_BASE )
-#define LPC_I2C0 ((LPC_I2C_TypeDef *) LPC_I2C0_BASE )
-#define LPC_I2C1 ((LPC_I2C_TypeDef *) LPC_I2C1_BASE )
-#define LPC_I2C2 ((LPC_I2C_TypeDef *) LPC_I2C2_BASE )
-#define LPC_I2S ((LPC_I2S_TypeDef *) LPC_I2S_BASE )
-#define LPC_RTC ((LPC_RTC_TypeDef *) LPC_RTC_BASE )
-#define LPC_GPIOINT ((LPC_GPIOINT_TypeDef *) LPC_GPIOINT_BASE )
-#define LPC_IOCON ((LPC_IOCON_TypeDef *) LPC_IOCON_BASE )
-#define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE )
-#define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE )
-#define LPC_SSP2 ((LPC_SSP_TypeDef *) LPC_SSP2_BASE )
-#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE )
-#define LPC_DAC ((LPC_DAC_TypeDef *) LPC_DAC_BASE )
-#define LPC_CANAF_RAM ((LPC_CANAF_RAM_TypeDef *) LPC_CANAF_RAM_BASE)
-#define LPC_CANAF ((LPC_CANAF_TypeDef *) LPC_CANAF_BASE )
-#define LPC_CANCR ((LPC_CANCR_TypeDef *) LPC_CANCR_BASE )
-#define LPC_CAN1 ((LPC_CAN_TypeDef *) LPC_CAN1_BASE )
-#define LPC_CAN2 ((LPC_CAN_TypeDef *) LPC_CAN2_BASE )
-#define LPC_MCPWM ((LPC_MCPWM_TypeDef *) LPC_MCPWM_BASE )
-#define LPC_QEI ((LPC_QEI_TypeDef *) LPC_QEI_BASE )
-#define LPC_MCI ((LPC_MCI_TypeDef *) LPC_MCI_BASE )
-#define LPC_GPDMA ((LPC_GPDMA_TypeDef *) LPC_GPDMA_BASE )
-#define LPC_GPDMACH0 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH0_BASE )
-#define LPC_GPDMACH1 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH1_BASE )
-#define LPC_GPDMACH2 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH2_BASE )
-#define LPC_GPDMACH3 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH3_BASE )
-#define LPC_GPDMACH4 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH4_BASE )
-#define LPC_GPDMACH5 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH5_BASE )
-#define LPC_GPDMACH6 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH6_BASE )
-#define LPC_GPDMACH7 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH7_BASE )
-#define LPC_EMAC ((LPC_EMAC_TypeDef *) LPC_EMAC_BASE )
-#define LPC_LCD ((LPC_LCD_TypeDef *) LPC_LCD_BASE )
-#define LPC_USB ((LPC_USB_TypeDef *) LPC_USB_BASE )
-#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )
-#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE )
-#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE )
-#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE )
-#define LPC_GPIO4 ((LPC_GPIO_TypeDef *) LPC_GPIO4_BASE )
-#define LPC_GPIO5 ((LPC_GPIO_TypeDef *) LPC_GPIO5_BASE )
-#define LPC_EMC ((LPC_EMC_TypeDef *) LPC_EMC_BASE )
-#define LPC_CRC ((LPC_CRC_TypeDef *) LPC_CRC_BASE )
-#define LPC_EEPROM ((LPC_EEPROM_TypeDef *) LPC_EEPROM_BASE )
-
-#endif // __LPC177x_8x_H__
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC407x_8x_177x_8x.h b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC407x_8x_177x_8x.h
deleted file mode 100644
index 9942f382e5..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/LPC407x_8x_177x_8x.h
+++ /dev/null
@@ -1,1514 +0,0 @@
-/****************************************************************************************************//**
-* $Id$ LPC407x_8x_177x_8x.h 2012-04-25
-*//**
- * @file LPC407x_8x_177x_8x.h
- *
- * @brief CMSIS Cortex-M4 Cortex-M3 Peripheral Access Layer Header File for
- * NXP LPC407x_8x_177x_8x.
- * @version V0.7
- * @date 20. June 2012
- * @author NXP MCU SW Application Team
-*
-* Copyright(C) 2012, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef __LPC407x_8x_177x_8x_H__
-#define __LPC407x_8x_177x_8x_H__
-
-
-
-/* ------------------------- Interrupt Number Definition ------------------------ */
-
-typedef enum IRQn
-{
-/****** Cortex-M4 Processor Exceptions Numbers ***************************************************/
- Reset_IRQn = -15, /*!< 1 Reset Vector, invoked on Power up and warm reset */
- NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
- HardFault_IRQn = -13, /*!< 3 Hard Fault, all classes of Fault */
- MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */
- BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */
- UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */
- SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */
- DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */
- PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */
- SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */
-
-/****** LPC407x_8x_177x_8x Specific Interrupt Numbers *******************************************************/
- WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */
- TIMER0_IRQn = 1, /*!< Timer0 Interrupt */
- TIMER1_IRQn = 2, /*!< Timer1 Interrupt */
- TIMER2_IRQn = 3, /*!< Timer2 Interrupt */
- TIMER3_IRQn = 4, /*!< Timer3 Interrupt */
- UART0_IRQn = 5, /*!< UART0 Interrupt */
- UART1_IRQn = 6, /*!< UART1 Interrupt */
- UART2_IRQn = 7, /*!< UART2 Interrupt */
- UART3_IRQn = 8, /*!< UART3 Interrupt */
- PWM1_IRQn = 9, /*!< PWM1 Interrupt */
- I2C0_IRQn = 10, /*!< I2C0 Interrupt */
- I2C1_IRQn = 11, /*!< I2C1 Interrupt */
- I2C2_IRQn = 12, /*!< I2C2 Interrupt */
- Reserved0_IRQn = 13, /*!< Reserved */
- SSP0_IRQn = 14, /*!< SSP0 Interrupt */
- SSP1_IRQn = 15, /*!< SSP1 Interrupt */
- PLL0_IRQn = 16, /*!< PLL0 Lock (Main PLL) Interrupt */
- RTC_IRQn = 17, /*!< Real Time Clock Interrupt */
- EINT0_IRQn = 18, /*!< External Interrupt 0 Interrupt */
- EINT1_IRQn = 19, /*!< External Interrupt 1 Interrupt */
- EINT2_IRQn = 20, /*!< External Interrupt 2 Interrupt */
- EINT3_IRQn = 21, /*!< External Interrupt 3 Interrupt */
- ADC_IRQn = 22, /*!< A/D Converter Interrupt */
- BOD_IRQn = 23, /*!< Brown-Out Detect Interrupt */
- USB_IRQn = 24, /*!< USB Interrupt */
- CAN_IRQn = 25, /*!< CAN Interrupt */
- DMA_IRQn = 26, /*!< General Purpose DMA Interrupt */
- I2S_IRQn = 27, /*!< I2S Interrupt */
- ENET_IRQn = 28, /*!< Ethernet Interrupt */
- MCI_IRQn = 29, /*!< SD/MMC card I/F Interrupt */
- MCPWM_IRQn = 30, /*!< Motor Control PWM Interrupt */
- QEI_IRQn = 31, /*!< Quadrature Encoder Interface Interrupt */
- PLL1_IRQn = 32, /*!< PLL1 Lock (USB PLL) Interrupt */
- USBActivity_IRQn = 33, /*!< USB Activity interrupt */
- CANActivity_IRQn = 34, /*!< CAN Activity interrupt */
- UART4_IRQn = 35, /*!< UART4 Interrupt */
- SSP2_IRQn = 36, /*!< SSP2 Interrupt */
- LCD_IRQn = 37, /*!< LCD Interrupt */
- GPIO_IRQn = 38, /*!< GPIO Interrupt */
- PWM0_IRQn = 39, /*!< 39 PWM0 */
- EEPROM_IRQn = 40, /*!< 40 EEPROM */
- CMP0_IRQn = 41, /*!< 41 CMP0 */
- CMP1_IRQn = 42 /*!< 42 CMP1 */
-} IRQn_Type;
-
-/* ================================================================================ */
-/* ================ Processor and Core Peripheral Section ================ */
-/* ================================================================================ */
-#ifdef CORE_M4
-/* ----------------Configuration of the cm4 Processor and Core Peripherals---------------- */
-#define __CM4_REV 0x0000 /*!< Cortex-M4 Core Revision */
-#define __MPU_PRESENT 1 /*!< MPU present or not */
-#define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */
-#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
-#define __FPU_PRESENT 1 /*!< FPU present or not */
-
-
-#include "core_cm4.h" /*!< Cortex-M4 processor and core peripherals */
-#else
-/* Configuration of the Cortex-M3 Processor and Core Peripherals */
-#define __MPU_PRESENT 1 /*!< MPU present or not */
-#define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */
-#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
-
-
-#include "core_cm3.h" /* Cortex-M3 processor and core peripherals */
-
-#endif
-
-#include "system_LPC407x_8x_177x_8x.h" /*!< LPC408x_7x System */
-
-
-
-
-/* ================================================================================ */
-/* ================ Device Specific Peripheral Section ================ */
-/* ================================================================================ */
-
-#if defined ( __CC_ARM )
-#pragma anon_unions
-#elif defined ( __ICCARM__ )
-#pragma language=save
-#pragma language=extended
-#endif
-
-/*------------- General Purpose Direct Memory Access (GPDMA) -----------------*/
-typedef struct /* Common Registers */
-{
- __I uint32_t IntStat;
- __I uint32_t IntTCStat;
- __O uint32_t IntTCClear;
- __I uint32_t IntErrStat;
- __O uint32_t IntErrClr;
- __I uint32_t RawIntTCStat;
- __I uint32_t RawIntErrStat;
- __I uint32_t EnbldChns;
- __IO uint32_t SoftBReq;
- __IO uint32_t SoftSReq;
- __IO uint32_t SoftLBReq;
- __IO uint32_t SoftLSReq;
- __IO uint32_t Config;
- __IO uint32_t Sync;
-} LPC_GPDMA_TypeDef;
-
-typedef struct /* Channel Registers */
-{
- __IO uint32_t CSrcAddr;
- __IO uint32_t CDestAddr;
- __IO uint32_t CLLI;
- __IO uint32_t CControl;
- __IO uint32_t CConfig;
-} LPC_GPDMACH_TypeDef;
-
-/*------------- System Control (SC) ------------------------------------------*/
-typedef struct
-{
- __IO uint32_t FLASHCFG; /*!< Offset: 0x000 (R/W) Flash Accelerator Configuration Register */
- uint32_t RESERVED0[31];
- __IO uint32_t PLL0CON; /*!< Offset: 0x080 (R/W) PLL0 Control Register */
- __IO uint32_t PLL0CFG; /*!< Offset: 0x084 (R/W) PLL0 Configuration Register */
- __I uint32_t PLL0STAT; /*!< Offset: 0x088 (R/ ) PLL0 Status Register */
- __O uint32_t PLL0FEED; /*!< Offset: 0x08C ( /W) PLL0 Feed Register */
- uint32_t RESERVED1[4];
- __IO uint32_t PLL1CON; /*!< Offset: 0x0A0 (R/W) PLL1 Control Register */
- __IO uint32_t PLL1CFG; /*!< Offset: 0x0A4 (R/W) PLL1 Configuration Register */
- __I uint32_t PLL1STAT; /*!< Offset: 0x0A8 (R/ ) PLL1 Status Register */
- __O uint32_t PLL1FEED; /*!< Offset: 0x0AC ( /W) PLL1 Feed Register */
- uint32_t RESERVED2[4];
- __IO uint32_t PCON; /*!< Offset: 0x0C0 (R/W) Power Control Register */
- __IO uint32_t PCONP; /*!< Offset: 0x0C4 (R/W) Power Control for Peripherals Register */
- __IO uint32_t PCONP1; /*!< Offset: 0x0C8 (R/W) Power Control for Peripherals Register */
- uint32_t RESERVED3[13];
- __IO uint32_t EMCCLKSEL; /*!< Offset: 0x100 (R/W) External Memory Controller Clock Selection Register */
- __IO uint32_t CCLKSEL; /*!< Offset: 0x104 (R/W) CPU Clock Selection Register */
- __IO uint32_t USBCLKSEL; /*!< Offset: 0x108 (R/W) USB Clock Selection Register */
- __IO uint32_t CLKSRCSEL; /*!< Offset: 0x10C (R/W) Clock Source Select Register */
- __IO uint32_t CANSLEEPCLR; /*!< Offset: 0x110 (R/W) CAN Sleep Clear Register */
- __IO uint32_t CANWAKEFLAGS; /*!< Offset: 0x114 (R/W) CAN Wake-up Flags Register */
- uint32_t RESERVED4[10];
- __IO uint32_t EXTINT; /*!< Offset: 0x140 (R/W) External Interrupt Flag Register */
- uint32_t RESERVED5[1];
- __IO uint32_t EXTMODE; /*!< Offset: 0x148 (R/W) External Interrupt Mode Register */
- __IO uint32_t EXTPOLAR; /*!< Offset: 0x14C (R/W) External Interrupt Polarity Register */
- uint32_t RESERVED6[12];
- __IO uint32_t RSID; /*!< Offset: 0x180 (R/W) Reset Source Identification Register */
- uint32_t RESERVED7[7];
- __IO uint32_t SCS; /*!< Offset: 0x1A0 (R/W) System Controls and Status Register */
- __IO uint32_t IRCTRIM; /*!< Offset: 0x1A4 (R/W) Clock Dividers */
- __IO uint32_t PCLKSEL; /*!< Offset: 0x1A8 (R/W) Peripheral Clock Selection Register */
- uint32_t RESERVED8;
- __IO uint32_t PBOOST; /*!< Offset: 0x1B0 (R/W) Power Boost control register */
- __IO uint32_t SPIFICLKSEL;
- __IO uint32_t LCD_CFG; /*!< Offset: 0x1B8 (R/W) LCD Configuration and clocking control Register */
- uint32_t RESERVED10[1];
- __IO uint32_t USBIntSt; /*!< Offset: 0x1C0 (R/W) USB Interrupt Status Register */
- __IO uint32_t DMAREQSEL; /*!< Offset: 0x1C4 (R/W) DMA Request Select Register */
- __IO uint32_t CLKOUTCFG; /*!< Offset: 0x1C8 (R/W) Clock Output Configuration Register */
- __IO uint32_t RSTCON0; /*!< Offset: 0x1CC (R/W) RESET Control0 Register */
- __IO uint32_t RSTCON1; /*!< Offset: 0x1D0 (R/W) RESET Control1 Register */
- uint32_t RESERVED11[2];
- __IO uint32_t EMCDLYCTL; /*!< Offset: 0x1DC (R/W) SDRAM programmable delays */
- __IO uint32_t EMCCAL; /*!< Offset: 0x1E0 (R/W) Calibration of programmable delays */
- } LPC_SC_TypeDef;
-/*------------- Ethernet Media Access Controller (EMAC) ----------------------*/
-typedef struct
-{
- __IO uint32_t MAC1; /* MAC Registers */
- __IO uint32_t MAC2;
- __IO uint32_t IPGT;
- __IO uint32_t IPGR;
- __IO uint32_t CLRT;
- __IO uint32_t MAXF;
- __IO uint32_t SUPP;
- __IO uint32_t TEST;
- __IO uint32_t MCFG;
- __IO uint32_t MCMD;
- __IO uint32_t MADR;
- __O uint32_t MWTD;
- __I uint32_t MRDD;
- __I uint32_t MIND;
- uint32_t RESERVED0[2];
- __IO uint32_t SA0;
- __IO uint32_t SA1;
- __IO uint32_t SA2;
- uint32_t RESERVED1[45];
- __IO uint32_t Command; /* Control Registers */
- __I uint32_t Status;
- __IO uint32_t RxDescriptor;
- __IO uint32_t RxStatus;
- __IO uint32_t RxDescriptorNumber;
- __I uint32_t RxProduceIndex;
- __IO uint32_t RxConsumeIndex;
- __IO uint32_t TxDescriptor;
- __IO uint32_t TxStatus;
- __IO uint32_t TxDescriptorNumber;
- __IO uint32_t TxProduceIndex;
- __I uint32_t TxConsumeIndex;
- uint32_t RESERVED2[10];
- __I uint32_t TSV0;
- __I uint32_t TSV1;
- __I uint32_t RSV;
- uint32_t RESERVED3[3];
- __IO uint32_t FlowControlCounter;
- __I uint32_t FlowControlStatus;
- uint32_t RESERVED4[34];
- __IO uint32_t RxFilterCtrl; /* Rx Filter Registers */
- __I uint32_t RxFilterWoLStatus;
- __O uint32_t RxFilterWoLClear;
- uint32_t RESERVED5;
- __IO uint32_t HashFilterL;
- __IO uint32_t HashFilterH;
- uint32_t RESERVED6[882];
- __I uint32_t IntStatus; /* Module Control Registers */
- __IO uint32_t IntEnable;
- __O uint32_t IntClear;
- __O uint32_t IntSet;
- uint32_t RESERVED7;
- __IO uint32_t PowerDown;
- uint32_t RESERVED8;
- __IO uint32_t Module_ID;
-} LPC_EMAC_TypeDef;
-
-/*------------- LCD controller (LCD) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t TIMH; /* LCD Registers */
- __IO uint32_t TIMV;
- __IO uint32_t POL;
- __IO uint32_t LE;
- __IO uint32_t UPBASE;
- __IO uint32_t LPBASE;
- __IO uint32_t CTRL;
- __IO uint32_t INTMSK;
- __I uint32_t INTRAW;
- __I uint32_t INTSTAT;
- __O uint32_t INTCLR;
- __I uint32_t UPCURR;
- __I uint32_t LPCURR;
- uint32_t RESERVED0[115];
- __IO uint32_t PAL[128];
- uint32_t RESERVED1[256];
- __IO uint32_t CRSR_IMG[256];
- __IO uint32_t CRSR_CTRL;
- __IO uint32_t CRSR_CFG;
- __IO uint32_t CRSR_PAL0;
- __IO uint32_t CRSR_PAL1;
- __IO uint32_t CRSR_XY;
- __IO uint32_t CRSR_CLIP;
- uint32_t RESERVED2[2];
- __IO uint32_t CRSR_INTMSK;
- __O uint32_t CRSR_INTCLR;
- __I uint32_t CRSR_INTRAW;
- __I uint32_t CRSR_INTSTAT;
-} LPC_LCD_TypeDef;
-
-/*------------- Universal Serial Bus (USB) -----------------------------------*/
-typedef struct
-{
- __I uint32_t Revision; /* USB Host Registers */
- __IO uint32_t Control;
- __IO uint32_t CommandStatus;
- __IO uint32_t InterruptStatus;
- __IO uint32_t InterruptEnable;
- __IO uint32_t InterruptDisable;
- __IO uint32_t HCCA;
- __I uint32_t PeriodCurrentED;
- __IO uint32_t ControlHeadED;
- __IO uint32_t ControlCurrentED;
- __IO uint32_t BulkHeadED;
- __IO uint32_t BulkCurrentED;
- __I uint32_t DoneHead;
- __IO uint32_t FmInterval;
- __I uint32_t FmRemaining;
- __I uint32_t FmNumber;
- __IO uint32_t PeriodicStart;
- __IO uint32_t LSTreshold;
- __IO uint32_t RhDescriptorA;
- __IO uint32_t RhDescriptorB;
- __IO uint32_t RhStatus;
- __IO uint32_t RhPortStatus1;
- __IO uint32_t RhPortStatus2;
- uint32_t RESERVED0[40];
- __I uint32_t Module_ID;
-
- __I uint32_t IntSt; /* USB On-The-Go Registers */
- __IO uint32_t IntEn;
- __O uint32_t IntSet;
- __O uint32_t IntClr;
- __IO uint32_t StCtrl;
- __IO uint32_t Tmr;
- uint32_t RESERVED1[58];
-
- __I uint32_t DevIntSt; /* USB Device Interrupt Registers */
- __IO uint32_t DevIntEn;
- __O uint32_t DevIntClr;
- __O uint32_t DevIntSet;
-
- __O uint32_t CmdCode; /* USB Device SIE Command Registers */
- __I uint32_t CmdData;
-
- __I uint32_t RxData; /* USB Device Transfer Registers */
- __O uint32_t TxData;
- __I uint32_t RxPLen;
- __O uint32_t TxPLen;
- __IO uint32_t Ctrl;
- __O uint32_t DevIntPri;
-
- __I uint32_t EpIntSt; /* USB Device Endpoint Interrupt Regs */
- __IO uint32_t EpIntEn;
- __O uint32_t EpIntClr;
- __O uint32_t EpIntSet;
- __O uint32_t EpIntPri;
-
- __IO uint32_t ReEp; /* USB Device Endpoint Realization Reg*/
- __O uint32_t EpInd;
- __IO uint32_t MaxPSize;
-
- __I uint32_t DMARSt; /* USB Device DMA Registers */
- __O uint32_t DMARClr;
- __O uint32_t DMARSet;
- uint32_t RESERVED2[9];
- __IO uint32_t UDCAH;
- __I uint32_t EpDMASt;
- __O uint32_t EpDMAEn;
- __O uint32_t EpDMADis;
- __I uint32_t DMAIntSt;
- __IO uint32_t DMAIntEn;
- uint32_t RESERVED3[2];
- __I uint32_t EoTIntSt;
- __O uint32_t EoTIntClr;
- __O uint32_t EoTIntSet;
- __I uint32_t NDDRIntSt;
- __O uint32_t NDDRIntClr;
- __O uint32_t NDDRIntSet;
- __I uint32_t SysErrIntSt;
- __O uint32_t SysErrIntClr;
- __O uint32_t SysErrIntSet;
- uint32_t RESERVED4[15];
-
- union {
- __I uint32_t I2C_RX; /* USB OTG I2C Registers */
- __O uint32_t I2C_TX;
- };
- __IO uint32_t I2C_STS;
- __IO uint32_t I2C_CTL;
- __IO uint32_t I2C_CLKHI;
- __O uint32_t I2C_CLKLO;
- uint32_t RESERVED5[824];
-
- union {
- __IO uint32_t USBClkCtrl; /* USB Clock Control Registers */
- __IO uint32_t OTGClkCtrl;
- };
- union {
- __I uint32_t USBClkSt;
- __I uint32_t OTGClkSt;
- };
-} LPC_USB_TypeDef;
-
-/*------------- CRC Engine (CRC) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t MODE;
- __IO uint32_t SEED;
- union {
- __I uint32_t SUM;
- struct {
- __O uint32_t DATA;
- } WR_DATA_DWORD;
-
- struct {
- __O uint16_t DATA;
- uint16_t RESERVED;
- }WR_DATA_WORD;
-
- struct {
- __O uint8_t DATA;
- uint8_t RESERVED[3];
- }WR_DATA_BYTE;
- };
-} LPC_CRC_TypeDef;
-/*------------- General Purpose Input/Output (GPIO) --------------------------*/
-typedef struct
-{
- __IO uint32_t DIR;
- uint32_t RESERVED0[3];
- __IO uint32_t MASK;
- __IO uint32_t PIN;
- __IO uint32_t SET;
- __O uint32_t CLR;
-} LPC_GPIO_TypeDef;
-
-typedef struct
-{
- __I uint32_t IntStatus;
- __I uint32_t IO0IntStatR;
- __I uint32_t IO0IntStatF;
- __O uint32_t IO0IntClr;
- __IO uint32_t IO0IntEnR;
- __IO uint32_t IO0IntEnF;
- uint32_t RESERVED0[3];
- __I uint32_t IO2IntStatR;
- __I uint32_t IO2IntStatF;
- __O uint32_t IO2IntClr;
- __IO uint32_t IO2IntEnR;
- __IO uint32_t IO2IntEnF;
-} LPC_GPIOINT_TypeDef;
-
-/*------------- External Memory Controller (EMC) -----------------------------*/
-typedef struct
-{
- __IO uint32_t Control;
- __I uint32_t Status;
- __IO uint32_t Config;
- uint32_t RESERVED0[5];
- __IO uint32_t DynamicControl;
- __IO uint32_t DynamicRefresh;
- __IO uint32_t DynamicReadConfig;
- uint32_t RESERVED1[1];
- __IO uint32_t DynamicRP;
- __IO uint32_t DynamicRAS;
- __IO uint32_t DynamicSREX;
- __IO uint32_t DynamicAPR;
- __IO uint32_t DynamicDAL;
- __IO uint32_t DynamicWR;
- __IO uint32_t DynamicRC;
- __IO uint32_t DynamicRFC;
- __IO uint32_t DynamicXSR;
- __IO uint32_t DynamicRRD;
- __IO uint32_t DynamicMRD;
- uint32_t RESERVED2[9];
- __IO uint32_t StaticExtendedWait;
- uint32_t RESERVED3[31];
- __IO uint32_t DynamicConfig0;
- __IO uint32_t DynamicRasCas0;
- uint32_t RESERVED4[6];
- __IO uint32_t DynamicConfig1;
- __IO uint32_t DynamicRasCas1;
- uint32_t RESERVED5[6];
- __IO uint32_t DynamicConfig2;
- __IO uint32_t DynamicRasCas2;
- uint32_t RESERVED6[6];
- __IO uint32_t DynamicConfig3;
- __IO uint32_t DynamicRasCas3;
- uint32_t RESERVED7[38];
- __IO uint32_t StaticConfig0;
- __IO uint32_t StaticWaitWen0;
- __IO uint32_t StaticWaitOen0;
- __IO uint32_t StaticWaitRd0;
- __IO uint32_t StaticWaitPage0;
- __IO uint32_t StaticWaitWr0;
- __IO uint32_t StaticWaitTurn0;
- uint32_t RESERVED8[1];
- __IO uint32_t StaticConfig1;
- __IO uint32_t StaticWaitWen1;
- __IO uint32_t StaticWaitOen1;
- __IO uint32_t StaticWaitRd1;
- __IO uint32_t StaticWaitPage1;
- __IO uint32_t StaticWaitWr1;
- __IO uint32_t StaticWaitTurn1;
- uint32_t RESERVED9[1];
- __IO uint32_t StaticConfig2;
- __IO uint32_t StaticWaitWen2;
- __IO uint32_t StaticWaitOen2;
- __IO uint32_t StaticWaitRd2;
- __IO uint32_t StaticWaitPage2;
- __IO uint32_t StaticWaitWr2;
- __IO uint32_t StaticWaitTurn2;
- uint32_t RESERVED10[1];
- __IO uint32_t StaticConfig3;
- __IO uint32_t StaticWaitWen3;
- __IO uint32_t StaticWaitOen3;
- __IO uint32_t StaticWaitRd3;
- __IO uint32_t StaticWaitPage3;
- __IO uint32_t StaticWaitWr3;
- __IO uint32_t StaticWaitTurn3;
-} LPC_EMC_TypeDef;
-
-/*------------- Watchdog Timer (WDT) -----------------------------------------*/
-typedef struct
-{
- __IO uint8_t MOD;
- uint8_t RESERVED0[3];
- __IO uint32_t TC;
- __O uint8_t FEED;
- uint8_t RESERVED1[3];
- __I uint32_t TV;
- uint32_t RESERVED2;
- __IO uint32_t WARNINT;
- __IO uint32_t WINDOW;
-} LPC_WDT_TypeDef;
-
-/*------------- Timer (TIM) --------------------------------------------------*/
-typedef struct
-{
- __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */
- __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */
- __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */
- __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */
- __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */
- __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */
- __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */
- __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */
- __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */
- __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */
- __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */
- __I uint32_t CR1; /*!< Offset: 0x030 Capture Register 1 (R/ ) */
- uint32_t RESERVED0[2];
- __IO uint32_t EMR; /*!< Offset: 0x03C External Match Register (R/W) */
- uint32_t RESERVED1[12];
- __IO uint32_t CTCR; /*!< Offset: 0x070 Count Control Register (R/W) */
-} LPC_TIM_TypeDef;
-
-
-/*------------- Pulse-Width Modulation (PWM) ---------------------------------*/
-typedef struct
-{
- __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */
- __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */
- __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */
- __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */
- __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */
- __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */
- __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */
- __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */
- __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */
- __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */
- __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */
- __I uint32_t CR1; /*!< Offset: 0x030 Capture Register 1 (R/ ) */
- __I uint32_t CR2; /*!< Offset: 0x034 Capture Register 2 (R/ ) */
- __I uint32_t CR3; /*!< Offset: 0x038 Capture Register 3 (R/ ) */
- uint32_t RESERVED0;
- __IO uint32_t MR4; /*!< Offset: 0x040 Match Register 4 (R/W) */
- __IO uint32_t MR5; /*!< Offset: 0x044 Match Register 5 (R/W) */
- __IO uint32_t MR6; /*!< Offset: 0x048 Match Register 6 (R/W) */
- __IO uint32_t PCR; /*!< Offset: 0x04C PWM Control Register (R/W) */
- __IO uint32_t LER; /*!< Offset: 0x050 Load Enable Register (R/W) */
- uint32_t RESERVED1[7];
- __IO uint32_t CTCR; /*!< Offset: 0x070 Counter Control Register (R/W) */
-} LPC_PWM_TypeDef;
-
-/*------------- Universal Asynchronous Receiver Transmitter (UARTx) -----------*/
-/* There are three types of UARTs on the chip:
-(1) UART0,UART2, and UART3 are the standard UART.
-(2) UART1 is the standard with modem capability.
-(3) USART(UART4) is the sync/async UART with smart card capability.
-More details can be found on the Users Manual. */
-
-#if 0
-typedef struct
-{
- union {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[7];
- __I uint8_t LSR;
- uint8_t RESERVED2[7];
- __IO uint8_t SCR;
- uint8_t RESERVED3[3];
- __IO uint32_t ACR;
- __IO uint8_t ICR;
- uint8_t RESERVED4[3];
- __IO uint8_t FDR;
- uint8_t RESERVED5[7];
- __IO uint8_t TER;
- uint8_t RESERVED6[39];
- __I uint8_t FIFOLVL;
-} LPC_UART_TypeDef;
-#else
-typedef struct
-{
- union
- {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union
- {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union
- {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[7];//Reserved
- __I uint8_t LSR;
- uint8_t RESERVED2[7];//Reserved
- __IO uint8_t SCR;
- uint8_t RESERVED3[3];//Reserved
- __IO uint32_t ACR;
- __IO uint8_t ICR;
- uint8_t RESERVED4[3];//Reserved
- __IO uint8_t FDR;
- uint8_t RESERVED5[7];//Reserved
- __IO uint8_t TER;
- uint8_t RESERVED8[27];//Reserved
- __IO uint8_t RS485CTRL;
- uint8_t RESERVED9[3];//Reserved
- __IO uint8_t ADRMATCH;
- uint8_t RESERVED10[3];//Reserved
- __IO uint8_t RS485DLY;
- uint8_t RESERVED11[3];//Reserved
- __I uint8_t FIFOLVL;
-}LPC_UART_TypeDef;
-#endif
-
-
-typedef struct
-{
- union {
- __I uint8_t RBR;
- __O uint8_t THR;
- __IO uint8_t DLL;
- uint32_t RESERVED0;
- };
- union {
- __IO uint8_t DLM;
- __IO uint32_t IER;
- };
- union {
- __I uint32_t IIR;
- __O uint8_t FCR;
- };
- __IO uint8_t LCR;
- uint8_t RESERVED1[3];
- __IO uint8_t MCR;
- uint8_t RESERVED2[3];
- __I uint8_t LSR;
- uint8_t RESERVED3[3];
- __I uint8_t MSR;
- uint8_t RESERVED4[3];
- __IO uint8_t SCR;
- uint8_t RESERVED5[3];
- __IO uint32_t ACR;
- uint32_t RESERVED6;
- __IO uint32_t FDR;
- uint32_t RESERVED7;
- __IO uint8_t TER;
- uint8_t RESERVED8[27];
- __IO uint8_t RS485CTRL;
- uint8_t RESERVED9[3];
- __IO uint8_t ADRMATCH;
- uint8_t RESERVED10[3];
- __IO uint8_t RS485DLY;
- uint8_t RESERVED11[3];
- __I uint8_t FIFOLVL;
-} LPC_UART1_TypeDef;
-
-typedef struct
-{
- union {
- __I uint32_t RBR; /*!< Offset: 0x000 Receiver Buffer Register (R/ ) */
- __O uint32_t THR; /*!< Offset: 0x000 Transmit Holding Register ( /W) */
- __IO uint32_t DLL; /*!< Offset: 0x000 Divisor Latch LSB (R/W) */
- };
- union {
- __IO uint32_t DLM; /*!< Offset: 0x004 Divisor Latch MSB (R/W) */
- __IO uint32_t IER; /*!< Offset: 0x000 Interrupt Enable Register (R/W) */
- };
- union {
- __I uint32_t IIR; /*!< Offset: 0x008 Interrupt ID Register (R/ ) */
- __O uint32_t FCR; /*!< Offset: 0x008 FIFO Control Register ( /W) */
- };
- __IO uint32_t LCR; /*!< Offset: 0x00C Line Control Register (R/W) */
- __IO uint32_t MCR; /*!< Offset: 0x010 Modem control Register (R/W) */
- __I uint32_t LSR; /*!< Offset: 0x014 Line Status Register (R/ ) */
- __I uint32_t MSR; /*!< Offset: 0x018 Modem status Register (R/ ) */
- __IO uint32_t SCR; /*!< Offset: 0x01C Scratch Pad Register (R/W) */
- __IO uint32_t ACR; /*!< Offset: 0x020 Auto-baud Control Register (R/W) */
- __IO uint32_t ICR; /*!< Offset: 0x024 irDA Control Register (R/W) */
- __IO uint32_t FDR; /*!< Offset: 0x028 Fractional Divider Register (R/W) */
- __IO uint32_t OSR; /*!< Offset: 0x02C Over sampling Register (R/W) */
- __O uint32_t POP; /*!< Offset: 0x030 NHP Pop Register (W) */
- __IO uint32_t MODE; /*!< Offset: 0x034 NHP Mode selection Register (W) */
- uint32_t RESERVED0[2];
- __IO uint32_t HDEN; /*!< Offset: 0x040 Half duplex Enable Register (R/W) */
- uint32_t RESERVED1;
- __IO uint32_t SCI_CTRL; /*!< Offset: 0x048 Smart card Interface Control Register (R/W) */
- __IO uint32_t RS485CTRL; /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */
- __IO uint32_t ADRMATCH; /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */
- __IO uint32_t RS485DLY; /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */
- __IO uint32_t SYNCCTRL; /*!< Offset: 0x058 Synchronous Mode Control Register (R/W ) */
- __IO uint32_t TER; /*!< Offset: 0x05C Transmit Enable Register (R/W) */
- uint32_t RESERVED2[989];
- __I uint32_t CFG; /*!< Offset: 0xFD4 Configuration Register (R) */
- __O uint32_t INTCE; /*!< Offset: 0xFD8 Interrupt Clear Enable Register (W) */
- __O uint32_t INTSE; /*!< Offset: 0xFDC Interrupt Set Enable Register (W) */
- __I uint32_t INTS; /*!< Offset: 0xFE0 Interrupt Status Register (R) */
- __I uint32_t INTE; /*!< Offset: 0xFE4 Interrupt Enable Register (R) */
- __O uint32_t INTCS; /*!< Offset: 0xFE8 Interrupt Clear Status Register (W) */
- __O uint32_t INTSS; /*!< Offset: 0xFEC Interrupt Set Status Register (W) */
- uint32_t RESERVED3[3];
- __I uint32_t MID; /*!< Offset: 0xFFC Module Identification Register (R) */
-} LPC_UART4_TypeDef;
-/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/
-typedef struct
-{
- __IO uint32_t CONSET; /*!< Offset: 0x000 I2C Control Set Register (R/W) */
- __I uint32_t STAT; /*!< Offset: 0x004 I2C Status Register (R/ ) */
- __IO uint32_t DAT; /*!< Offset: 0x008 I2C Data Register (R/W) */
- __IO uint32_t ADR0; /*!< Offset: 0x00C I2C Slave Address Register 0 (R/W) */
- __IO uint32_t SCLH; /*!< Offset: 0x010 SCH Duty Cycle Register High Half Word (R/W) */
- __IO uint32_t SCLL; /*!< Offset: 0x014 SCL Duty Cycle Register Low Half Word (R/W) */
- __O uint32_t CONCLR; /*!< Offset: 0x018 I2C Control Clear Register ( /W) */
- __IO uint32_t MMCTRL; /*!< Offset: 0x01C Monitor mode control register (R/W) */
- __IO uint32_t ADR1; /*!< Offset: 0x020 I2C Slave Address Register 1 (R/W) */
- __IO uint32_t ADR2; /*!< Offset: 0x024 I2C Slave Address Register 2 (R/W) */
- __IO uint32_t ADR3; /*!< Offset: 0x028 I2C Slave Address Register 3 (R/W) */
- __I uint32_t DATA_BUFFER; /*!< Offset: 0x02C Data buffer register ( /W) */
- __IO uint32_t MASK0; /*!< Offset: 0x030 I2C Slave address mask register 0 (R/W) */
- __IO uint32_t MASK1; /*!< Offset: 0x034 I2C Slave address mask register 1 (R/W) */
- __IO uint32_t MASK2; /*!< Offset: 0x038 I2C Slave address mask register 2 (R/W) */
- __IO uint32_t MASK3; /*!< Offset: 0x03C I2C Slave address mask register 3 (R/W) */
-} LPC_I2C_TypeDef;
-
-/*------------- Real-Time Clock (RTC) ----------------------------------------*/
-typedef struct
-{
- __IO uint8_t ILR;
- uint8_t RESERVED0[7];
- __IO uint8_t CCR;
- uint8_t RESERVED1[3];
- __IO uint8_t CIIR;
- uint8_t RESERVED2[3];
- __IO uint8_t AMR;
- uint8_t RESERVED3[3];
- __I uint32_t CTIME0;
- __I uint32_t CTIME1;
- __I uint32_t CTIME2;
- __IO uint8_t SEC;
- uint8_t RESERVED4[3];
- __IO uint8_t MIN;
- uint8_t RESERVED5[3];
- __IO uint8_t HOUR;
- uint8_t RESERVED6[3];
- __IO uint8_t DOM;
- uint8_t RESERVED7[3];
- __IO uint8_t DOW;
- uint8_t RESERVED8[3];
- __IO uint16_t DOY;
- uint16_t RESERVED9;
- __IO uint8_t MONTH;
- uint8_t RESERVED10[3];
- __IO uint16_t YEAR;
- uint16_t RESERVED11;
- __IO uint32_t CALIBRATION;
- __IO uint32_t GPREG0;
- __IO uint32_t GPREG1;
- __IO uint32_t GPREG2;
- __IO uint32_t GPREG3;
- __IO uint32_t GPREG4;
- __IO uint8_t RTC_AUXEN;
- uint8_t RESERVED12[3];
- __IO uint8_t RTC_AUX;
- uint8_t RESERVED13[3];
- __IO uint8_t ALSEC;
- uint8_t RESERVED14[3];
- __IO uint8_t ALMIN;
- uint8_t RESERVED15[3];
- __IO uint8_t ALHOUR;
- uint8_t RESERVED16[3];
- __IO uint8_t ALDOM;
- uint8_t RESERVED17[3];
- __IO uint8_t ALDOW;
- uint8_t RESERVED18[3];
- __IO uint16_t ALDOY;
- uint16_t RESERVED19;
- __IO uint8_t ALMON;
- uint8_t RESERVED20[3];
- __IO uint16_t ALYEAR;
- uint16_t RESERVED21;
- __IO uint32_t ERSTATUS;
- __IO uint32_t ERCONTROL;
- __IO uint32_t ERCOUNTERS;
- uint32_t RESERVED22;
- __IO uint32_t ERFIRSTSTAMP0;
- __IO uint32_t ERFIRSTSTAMP1;
- __IO uint32_t ERFIRSTSTAMP2;
- uint32_t RESERVED23;
- __IO uint32_t ERLASTSTAMP0;
- __IO uint32_t ERLASTSTAMP1;
- __IO uint32_t ERLASTSTAMP2;
-} LPC_RTC_TypeDef;
-
-
-
-/*------------- Pin Connect Block (PINCON) -----------------------------------*/
-typedef struct
-{
- __IO uint32_t P0_0; /* 0x000 */
- __IO uint32_t P0_1;
- __IO uint32_t P0_2;
- __IO uint32_t P0_3;
- __IO uint32_t P0_4;
- __IO uint32_t P0_5;
- __IO uint32_t P0_6;
- __IO uint32_t P0_7;
-
- __IO uint32_t P0_8; /* 0x020 */
- __IO uint32_t P0_9;
- __IO uint32_t P0_10;
- __IO uint32_t P0_11;
- __IO uint32_t P0_12;
- __IO uint32_t P0_13;
- __IO uint32_t P0_14;
- __IO uint32_t P0_15;
-
- __IO uint32_t P0_16; /* 0x040 */
- __IO uint32_t P0_17;
- __IO uint32_t P0_18;
- __IO uint32_t P0_19;
- __IO uint32_t P0_20;
- __IO uint32_t P0_21;
- __IO uint32_t P0_22;
- __IO uint32_t P0_23;
-
- __IO uint32_t P0_24; /* 0x060 */
- __IO uint32_t P0_25;
- __IO uint32_t P0_26;
- __IO uint32_t P0_27;
- __IO uint32_t P0_28;
- __IO uint32_t P0_29;
- __IO uint32_t P0_30;
- __IO uint32_t P0_31;
-
- __IO uint32_t P1_0; /* 0x080 */
- __IO uint32_t P1_1;
- __IO uint32_t P1_2;
- __IO uint32_t P1_3;
- __IO uint32_t P1_4;
- __IO uint32_t P1_5;
- __IO uint32_t P1_6;
- __IO uint32_t P1_7;
-
- __IO uint32_t P1_8; /* 0x0A0 */
- __IO uint32_t P1_9;
- __IO uint32_t P1_10;
- __IO uint32_t P1_11;
- __IO uint32_t P1_12;
- __IO uint32_t P1_13;
- __IO uint32_t P1_14;
- __IO uint32_t P1_15;
-
- __IO uint32_t P1_16; /* 0x0C0 */
- __IO uint32_t P1_17;
- __IO uint32_t P1_18;
- __IO uint32_t P1_19;
- __IO uint32_t P1_20;
- __IO uint32_t P1_21;
- __IO uint32_t P1_22;
- __IO uint32_t P1_23;
-
- __IO uint32_t P1_24; /* 0x0E0 */
- __IO uint32_t P1_25;
- __IO uint32_t P1_26;
- __IO uint32_t P1_27;
- __IO uint32_t P1_28;
- __IO uint32_t P1_29;
- __IO uint32_t P1_30;
- __IO uint32_t P1_31;
-
- __IO uint32_t P2_0; /* 0x100 */
- __IO uint32_t P2_1;
- __IO uint32_t P2_2;
- __IO uint32_t P2_3;
- __IO uint32_t P2_4;
- __IO uint32_t P2_5;
- __IO uint32_t P2_6;
- __IO uint32_t P2_7;
-
- __IO uint32_t P2_8; /* 0x120 */
- __IO uint32_t P2_9;
- __IO uint32_t P2_10;
- __IO uint32_t P2_11;
- __IO uint32_t P2_12;
- __IO uint32_t P2_13;
- __IO uint32_t P2_14;
- __IO uint32_t P2_15;
-
- __IO uint32_t P2_16; /* 0x140 */
- __IO uint32_t P2_17;
- __IO uint32_t P2_18;
- __IO uint32_t P2_19;
- __IO uint32_t P2_20;
- __IO uint32_t P2_21;
- __IO uint32_t P2_22;
- __IO uint32_t P2_23;
-
- __IO uint32_t P2_24; /* 0x160 */
- __IO uint32_t P2_25;
- __IO uint32_t P2_26;
- __IO uint32_t P2_27;
- __IO uint32_t P2_28;
- __IO uint32_t P2_29;
- __IO uint32_t P2_30;
- __IO uint32_t P2_31;
-
- __IO uint32_t P3_0; /* 0x180 */
- __IO uint32_t P3_1;
- __IO uint32_t P3_2;
- __IO uint32_t P3_3;
- __IO uint32_t P3_4;
- __IO uint32_t P3_5;
- __IO uint32_t P3_6;
- __IO uint32_t P3_7;
-
- __IO uint32_t P3_8; /* 0x1A0 */
- __IO uint32_t P3_9;
- __IO uint32_t P3_10;
- __IO uint32_t P3_11;
- __IO uint32_t P3_12;
- __IO uint32_t P3_13;
- __IO uint32_t P3_14;
- __IO uint32_t P3_15;
-
- __IO uint32_t P3_16; /* 0x1C0 */
- __IO uint32_t P3_17;
- __IO uint32_t P3_18;
- __IO uint32_t P3_19;
- __IO uint32_t P3_20;
- __IO uint32_t P3_21;
- __IO uint32_t P3_22;
- __IO uint32_t P3_23;
-
- __IO uint32_t P3_24; /* 0x1E0 */
- __IO uint32_t P3_25;
- __IO uint32_t P3_26;
- __IO uint32_t P3_27;
- __IO uint32_t P3_28;
- __IO uint32_t P3_29;
- __IO uint32_t P3_30;
- __IO uint32_t P3_31;
-
- __IO uint32_t P4_0; /* 0x200 */
- __IO uint32_t P4_1;
- __IO uint32_t P4_2;
- __IO uint32_t P4_3;
- __IO uint32_t P4_4;
- __IO uint32_t P4_5;
- __IO uint32_t P4_6;
- __IO uint32_t P4_7;
-
- __IO uint32_t P4_8; /* 0x220 */
- __IO uint32_t P4_9;
- __IO uint32_t P4_10;
- __IO uint32_t P4_11;
- __IO uint32_t P4_12;
- __IO uint32_t P4_13;
- __IO uint32_t P4_14;
- __IO uint32_t P4_15;
-
- __IO uint32_t P4_16; /* 0x240 */
- __IO uint32_t P4_17;
- __IO uint32_t P4_18;
- __IO uint32_t P4_19;
- __IO uint32_t P4_20;
- __IO uint32_t P4_21;
- __IO uint32_t P4_22;
- __IO uint32_t P4_23;
-
- __IO uint32_t P4_24; /* 0x260 */
- __IO uint32_t P4_25;
- __IO uint32_t P4_26;
- __IO uint32_t P4_27;
- __IO uint32_t P4_28;
- __IO uint32_t P4_29;
- __IO uint32_t P4_30;
- __IO uint32_t P4_31;
-
- __IO uint32_t P5_0; /* 0x280 */
- __IO uint32_t P5_1;
- __IO uint32_t P5_2;
- __IO uint32_t P5_3;
- __IO uint32_t P5_4; /* 0x290 */
-} LPC_IOCON_TypeDef;
-
-
-
-
-
-
-/*------------- Synchronous Serial Communication (SSP) -----------------------*/
-typedef struct
-{
- __IO uint32_t CR0; /*!< Offset: 0x000 Control Register 0 (R/W) */
- __IO uint32_t CR1; /*!< Offset: 0x004 Control Register 1 (R/W) */
- __IO uint32_t DR; /*!< Offset: 0x008 Data Register (R/W) */
- __I uint32_t SR; /*!< Offset: 0x00C Status Registe (R/ ) */
- __IO uint32_t CPSR; /*!< Offset: 0x010 Clock Prescale Register (R/W) */
- __IO uint32_t IMSC; /*!< Offset: 0x014 Interrupt Mask Set and Clear Register (R/W) */
- __IO uint32_t RIS; /*!< Offset: 0x018 Raw Interrupt Status Register (R/W) */
- __IO uint32_t MIS; /*!< Offset: 0x01C Masked Interrupt Status Register (R/W) */
- __IO uint32_t ICR; /*!< Offset: 0x020 SSPICR Interrupt Clear Register (R/W) */
- __IO uint32_t DMACR;
-} LPC_SSP_TypeDef;
-
-/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/
-typedef struct
-{
- __IO uint32_t CR; /*!< Offset: 0x000 A/D Control Register (R/W) */
- __IO uint32_t GDR; /*!< Offset: 0x004 A/D Global Data Register (R/W) */
- uint32_t RESERVED0;
- __IO uint32_t INTEN; /*!< Offset: 0x00C A/D Interrupt Enable Register (R/W) */
- __IO uint32_t DR[8]; /*!< Offset: 0x010-0x02C A/D Channel 0..7 Data Register (R/W) */
- __I uint32_t STAT; /*!< Offset: 0x030 A/D Status Register (R/ ) */
- __IO uint32_t ADTRM;
-} LPC_ADC_TypeDef;
-
-/*------------- Controller Area Network (CAN) --------------------------------*/
-typedef struct
-{
- __IO uint32_t mask[512]; /* ID Masks */
-} LPC_CANAF_RAM_TypeDef;
-
-typedef struct /* Acceptance Filter Registers */
-{
- ///Offset: 0x00000000 - Acceptance Filter Register
- __IO uint32_t AFMR;
-
- ///Offset: 0x00000004 - Standard Frame Individual Start Address Register
- __IO uint32_t SFF_sa;
-
- ///Offset: 0x00000008 - Standard Frame Group Start Address Register
- __IO uint32_t SFF_GRP_sa;
-
- ///Offset: 0x0000000C - Extended Frame Start Address Register
- __IO uint32_t EFF_sa;
-
- ///Offset: 0x00000010 - Extended Frame Group Start Address Register
- __IO uint32_t EFF_GRP_sa;
-
- ///Offset: 0x00000014 - End of AF Tables register
- __IO uint32_t ENDofTable;
-
- ///Offset: 0x00000018 - LUT Error Address register
- __I uint32_t LUTerrAd;
-
- ///Offset: 0x0000001C - LUT Error Register
- __I uint32_t LUTerr;
-
- ///Offset: 0x00000020 - CAN Central Transmit Status Register
- __IO uint32_t FCANIE;
-
- ///Offset: 0x00000024 - FullCAN Interrupt and Capture registers 0
- __IO uint32_t FCANIC0;
-
- ///Offset: 0x00000028 - FullCAN Interrupt and Capture registers 1
- __IO uint32_t FCANIC1;
-} LPC_CANAF_TypeDef;
-
-typedef struct /* Central Registers */
-{
- __I uint32_t TxSR;
- __I uint32_t RxSR;
- __I uint32_t MSR;
-} LPC_CANCR_TypeDef;
-
-typedef struct /* Controller Registers */
-{
- ///Offset: 0x00000000 - Controls the operating mode of the CAN Controller
- __IO uint32_t MOD;
-
- ///Offset: 0x00000004 - Command bits that affect the state
- __O uint32_t CMR;
-
- ///Offset: 0x00000008 - Global Controller Status and Error Counters
- __IO uint32_t GSR;
-
- ///Offset: 0x0000000C - Interrupt status, Arbitration Lost Capture, Error Code Capture
- __I uint32_t ICR;
-
- ///Offset: 0x00000010 - Interrupt Enable Register
- __IO uint32_t IER;
-
- ///Offset: 0x00000014 - Bus Timing Register
- __IO uint32_t BTR;
-
- ///Offset: 0x00000018 - Error Warning Limit
- __IO uint32_t EWL;
-
- ///Offset: 0x0000001C - Status Register
- __I uint32_t SR;
-
- ///Offset: 0x00000020 - Receive frame status
- __IO uint32_t RFS;
-
- ///Offset: 0x00000024 - Received Identifier
- __IO uint32_t RID;
-
- ///Offset: 0x00000028 - Received data bytes 1-4
- __IO uint32_t RDA;
-
- ///Offset: 0x0000002C - Received data bytes 5-8
- __IO uint32_t RDB;
-
- ///Offset: 0x00000030 - Transmit frame info (Tx Buffer 1)
- __IO uint32_t TFI1;
-
- ///Offset: 0x00000034 - Transmit Identifier (Tx Buffer 1)
- __IO uint32_t TID1;
-
- ///Offset: 0x00000038 - Transmit data bytes 1-4 (Tx Buffer 1)
- __IO uint32_t TDA1;
-
- ///Offset: 0x0000003C - Transmit data bytes 5-8 (Tx Buffer 1)
- __IO uint32_t TDB1;
-
- ///Offset: 0x00000040 - Transmit frame info (Tx Buffer 2)
- __IO uint32_t TFI2;
-
- ///Offset: 0x00000044 - Transmit Identifier (Tx Buffer 2)
- __IO uint32_t TID2;
-
- ///Offset: 0x00000048 - Transmit data bytes 1-4 (Tx Buffer 2)
- __IO uint32_t TDA2;
-
- ///Offset: 0x0000004C - Transmit data bytes 5-8 (Tx Buffer 2)
- __IO uint32_t TDB2;
-
- ///Offset: 0x00000050 - Transmit frame info (Tx Buffer 3)
- __IO uint32_t TFI3;
-
- ///Offset: 0x00000054 - Transmit Identifier (Tx Buffer 3)
- __IO uint32_t TID3;
-
- ///Offset: 0x00000058 - Transmit data bytes 1-4 (Tx Buffer 3)
- __IO uint32_t TDA3;
-
- ///Offset: 0x0000005C - Transmit data bytes 5-8 (Tx Buffer 3)
- __IO uint32_t TDB3;
-} LPC_CAN_TypeDef;
-
-/*------------- Digital-to-Analog Converter (DAC) ----------------------------*/
-typedef struct
-{
- __IO uint32_t CR;
- __IO uint32_t CTRL;
- __IO uint32_t CNTVAL;
-} LPC_DAC_TypeDef;
-
-
-/*------------- Inter IC Sound (I2S) -----------------------------------------*/
-typedef struct
-{
- __IO uint32_t DAO;
- __IO uint32_t DAI;
- __O uint32_t TXFIFO;
- __I uint32_t RXFIFO;
- __I uint32_t STATE;
- __IO uint32_t DMA1;
- __IO uint32_t DMA2;
- __IO uint32_t IRQ;
- __IO uint32_t TXRATE;
- __IO uint32_t RXRATE;
- __IO uint32_t TXBITRATE;
- __IO uint32_t RXBITRATE;
- __IO uint32_t TXMODE;
- __IO uint32_t RXMODE;
-} LPC_I2S_TypeDef;
-
-
-
-
-
-
-/*------------- Motor Control Pulse-Width Modulation (MCPWM) -----------------*/
-typedef struct
-{
- __I uint32_t CON;
- __O uint32_t CON_SET;
- __O uint32_t CON_CLR;
- __I uint32_t CAPCON;
- __O uint32_t CAPCON_SET;
- __O uint32_t CAPCON_CLR;
- __IO uint32_t TC0;
- __IO uint32_t TC1;
- __IO uint32_t TC2;
- __IO uint32_t LIM0;
- __IO uint32_t LIM1;
- __IO uint32_t LIM2;
- __IO uint32_t MAT0;
- __IO uint32_t MAT1;
- __IO uint32_t MAT2;
- __IO uint32_t DT;
- __IO uint32_t CP;
- __IO uint32_t CAP0;
- __IO uint32_t CAP1;
- __IO uint32_t CAP2;
- __I uint32_t INTEN;
- __O uint32_t INTEN_SET;
- __O uint32_t INTEN_CLR;
- __I uint32_t CNTCON;
- __O uint32_t CNTCON_SET;
- __O uint32_t CNTCON_CLR;
- __I uint32_t INTF;
- __O uint32_t INTF_SET;
- __O uint32_t INTF_CLR;
- __O uint32_t CAP_CLR;
-} LPC_MCPWM_TypeDef;
-
-/*------------- Quadrature Encoder Interface (QEI) ---------------------------*/
-typedef struct
-{
- __O uint32_t CON;
- __I uint32_t STAT;
- __IO uint32_t CONF;
- __I uint32_t POS;
- __IO uint32_t MAXPOS;
- __IO uint32_t CMPOS0;
- __IO uint32_t CMPOS1;
- __IO uint32_t CMPOS2;
- __I uint32_t INXCNT;
- __IO uint32_t INXCMP0;
- __IO uint32_t LOAD;
- __I uint32_t TIME;
- __I uint32_t VEL;
- __I uint32_t CAP;
- __IO uint32_t VELCOMP;
- __IO uint32_t FILTERPHA;
- __IO uint32_t FILTERPHB;
- __IO uint32_t FILTERINX;
- __IO uint32_t WINDOW;
- __IO uint32_t INXCMP1;
- __IO uint32_t INXCMP2;
- uint32_t RESERVED0[993];
- __O uint32_t IEC;
- __O uint32_t IES;
- __I uint32_t INTSTAT;
- __I uint32_t IE;
- __O uint32_t CLR;
- __O uint32_t SET;
-} LPC_QEI_TypeDef;
-
-/*------------- SD/MMC card Interface (MCI)-----------------------------------*/
-typedef struct
-{
- __IO uint32_t POWER;
- __IO uint32_t CLOCK;
- __IO uint32_t ARGUMENT;
- __IO uint32_t COMMAND;
- __I uint32_t RESP_CMD;
- __I uint32_t RESP0;
- __I uint32_t RESP1;
- __I uint32_t RESP2;
- __I uint32_t RESP3;
- __IO uint32_t DATATMR;
- __IO uint32_t DATALEN;
- __IO uint32_t DATACTRL;
- __I uint32_t DATACNT;
- __I uint32_t STATUS;
- __O uint32_t CLEAR;
- __IO uint32_t MASK0;
- uint32_t RESERVED0[2];
- __I uint32_t FIFOCNT;
- uint32_t RESERVED1[13];
- __IO uint32_t FIFO[16];
-} LPC_MCI_TypeDef;
-
-
-
-
-
-
-
-
-
-
-/*------------- EEPROM Controller (EEPROM) -----------------------------------*/
-typedef struct
-{
- __IO uint32_t CMD; /* 0x0080 */
- __IO uint32_t ADDR;
- __IO uint32_t WDATA;
- __IO uint32_t RDATA;
- __IO uint32_t WSTATE; /* 0x0090 */
- __IO uint32_t CLKDIV;
- __IO uint32_t PWRDWN; /* 0x0098 */
- uint32_t RESERVED0[975];
- __IO uint32_t INT_CLR_ENABLE; /* 0x0FD8 */
- __IO uint32_t INT_SET_ENABLE;
- __IO uint32_t INT_STATUS; /* 0x0FE0 */
- __IO uint32_t INT_ENABLE;
- __IO uint32_t INT_CLR_STATUS;
- __IO uint32_t INT_SET_STATUS;
-} LPC_EEPROM_TypeDef;
-
-
-/*------------- COMPARATOR ----------------------------------------------------*/
-
-typedef struct { /*!< (@ 0x40020000) COMPARATOR Structure */
- __IO uint32_t CTRL; /*!< (@ 0x40020000) Comparator block control register */
- __IO uint32_t CTRL0; /*!< (@ 0x40020004) Comparator 0 control register */
- __IO uint32_t CTRL1; /*!< (@ 0x40020008) Comparator 1 control register */
-} LPC_COMPARATOR_Type;
-
-
-#if defined ( __CC_ARM )
-#pragma no_anon_unions
-#elif defined ( __ICCARM__ )
-#pragma language=restore
-#endif
-
-/******************************************************************************/
-/* Peripheral memory map */
-/******************************************************************************/
-/* Base addresses */
-#define LPC_FLASH_BASE (0x00000000UL)
-#define LPC_RAM_BASE (0x10000000UL)
-#define LPC_PERI_RAM_BASE (0x20000000UL)
-#define LPC_APB0_BASE (0x40000000UL)
-#define LPC_APB1_BASE (0x40080000UL)
-#define LPC_AHBRAM1_BASE (0x20004000UL)
-#define LPC_AHB_BASE (0x20080000UL)
-#define LPC_CM3_BASE (0xE0000000UL)
-
-/* APB0 peripherals */
-#define LPC_WDT_BASE (LPC_APB0_BASE + 0x00000)
-#define LPC_TIM0_BASE (LPC_APB0_BASE + 0x04000)
-#define LPC_TIM1_BASE (LPC_APB0_BASE + 0x08000)
-#define LPC_UART0_BASE (LPC_APB0_BASE + 0x0C000)
-#define LPC_UART1_BASE (LPC_APB0_BASE + 0x10000)
-#define LPC_PWM0_BASE (LPC_APB0_BASE + 0x14000)
-#define LPC_PWM1_BASE (LPC_APB0_BASE + 0x18000)
-#define LPC_I2C0_BASE (LPC_APB0_BASE + 0x1C000)
-#define LPC_COMPARATOR_BASE (LPC_APB0_BASE + 0x20000)
-#define LPC_RTC_BASE (LPC_APB0_BASE + 0x24000)
-#define LPC_GPIOINT_BASE (LPC_APB0_BASE + 0x28080)
-#define LPC_IOCON_BASE (LPC_APB0_BASE + 0x2C000)
-#define LPC_SSP1_BASE (LPC_APB0_BASE + 0x30000)
-#define LPC_ADC_BASE (LPC_APB0_BASE + 0x34000)
-#define LPC_CANAF_RAM_BASE (LPC_APB0_BASE + 0x38000)
-#define LPC_CANAF_BASE (LPC_APB0_BASE + 0x3C000)
-#define LPC_CANCR_BASE (LPC_APB0_BASE + 0x40000)
-#define LPC_CAN1_BASE (LPC_APB0_BASE + 0x44000)
-#define LPC_CAN2_BASE (LPC_APB0_BASE + 0x48000)
-#define LPC_I2C1_BASE (LPC_APB0_BASE + 0x5C000)
-
-/* APB1 peripherals */
-#define LPC_SSP0_BASE (LPC_APB1_BASE + 0x08000)
-#define LPC_DAC_BASE (LPC_APB1_BASE + 0x0C000)
-#define LPC_TIM2_BASE (LPC_APB1_BASE + 0x10000)
-#define LPC_TIM3_BASE (LPC_APB1_BASE + 0x14000)
-#define LPC_UART2_BASE (LPC_APB1_BASE + 0x18000)
-#define LPC_UART3_BASE (LPC_APB1_BASE + 0x1C000)
-#define LPC_I2C2_BASE (LPC_APB1_BASE + 0x20000)
-#define LPC_UART4_BASE (LPC_APB1_BASE + 0x24000)
-#define LPC_I2S_BASE (LPC_APB1_BASE + 0x28000)
-#define LPC_SSP2_BASE (LPC_APB1_BASE + 0x2C000)
-#define LPC_MCPWM_BASE (LPC_APB1_BASE + 0x38000)
-#define LPC_QEI_BASE (LPC_APB1_BASE + 0x3C000)
-#define LPC_MCI_BASE (LPC_APB1_BASE + 0x40000)
-#define LPC_SC_BASE (LPC_APB1_BASE + 0x7C000)
-
-/* AHB peripherals */
-#define LPC_GPDMA_BASE (LPC_AHB_BASE + 0x00000)
-#define LPC_GPDMACH0_BASE (LPC_AHB_BASE + 0x00100)
-#define LPC_GPDMACH1_BASE (LPC_AHB_BASE + 0x00120)
-#define LPC_GPDMACH2_BASE (LPC_AHB_BASE + 0x00140)
-#define LPC_GPDMACH3_BASE (LPC_AHB_BASE + 0x00160)
-#define LPC_GPDMACH4_BASE (LPC_AHB_BASE + 0x00180)
-#define LPC_GPDMACH5_BASE (LPC_AHB_BASE + 0x001A0)
-#define LPC_GPDMACH6_BASE (LPC_AHB_BASE + 0x001C0)
-#define LPC_GPDMACH7_BASE (LPC_AHB_BASE + 0x001E0)
-#define LPC_EMAC_BASE (LPC_AHB_BASE + 0x04000)
-#define LPC_LCD_BASE (LPC_AHB_BASE + 0x08000)
-#define LPC_USB_BASE (LPC_AHB_BASE + 0x0C000)
-#define LPC_CRC_BASE (LPC_AHB_BASE + 0x10000)
-#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x18000)
-#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x18020)
-#define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x18040)
-#define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x18060)
-#define LPC_GPIO4_BASE (LPC_AHB_BASE + 0x18080)
-#define LPC_GPIO5_BASE (LPC_AHB_BASE + 0x180A0)
-#define LPC_EMC_BASE (LPC_AHB_BASE + 0x1C000)
-
-#define LPC_EEPROM_BASE (LPC_FLASH_BASE+ 0x200080)
-
-
-/******************************************************************************/
-/* Peripheral declaration */
-/******************************************************************************/
-#define LPC_SC ((LPC_SC_TypeDef *) LPC_SC_BASE )
-#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE )
-#define LPC_TIM0 ((LPC_TIM_TypeDef *) LPC_TIM0_BASE )
-#define LPC_TIM1 ((LPC_TIM_TypeDef *) LPC_TIM1_BASE )
-#define LPC_TIM2 ((LPC_TIM_TypeDef *) LPC_TIM2_BASE )
-#define LPC_TIM3 ((LPC_TIM_TypeDef *) LPC_TIM3_BASE )
-#define LPC_UART0 ((LPC_UART_TypeDef *) LPC_UART0_BASE )
-#define LPC_UART1 ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
-#define LPC_UART2 ((LPC_UART_TypeDef *) LPC_UART2_BASE )
-#define LPC_UART3 ((LPC_UART_TypeDef *) LPC_UART3_BASE )
-#define LPC_UART4 ((LPC_UART4_TypeDef *) LPC_UART4_BASE )
-#define LPC_PWM0 ((LPC_PWM_TypeDef *) LPC_PWM0_BASE )
-#define LPC_PWM1 ((LPC_PWM_TypeDef *) LPC_PWM1_BASE )
-#define LPC_I2C0 ((LPC_I2C_TypeDef *) LPC_I2C0_BASE )
-#define LPC_I2C1 ((LPC_I2C_TypeDef *) LPC_I2C1_BASE )
-#define LPC_I2C2 ((LPC_I2C_TypeDef *) LPC_I2C2_BASE )
-#define LPC_I2S ((LPC_I2S_TypeDef *) LPC_I2S_BASE )
-#define LPC_COMPARATOR ((LPC_COMPARATOR_Type *) LPC_COMPARATOR_BASE)
-#define LPC_RTC ((LPC_RTC_TypeDef *) LPC_RTC_BASE )
-#define LPC_GPIOINT ((LPC_GPIOINT_TypeDef *) LPC_GPIOINT_BASE )
-#define LPC_IOCON ((LPC_IOCON_TypeDef *) LPC_IOCON_BASE )
-#define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE )
-#define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE )
-#define LPC_SSP2 ((LPC_SSP_TypeDef *) LPC_SSP2_BASE )
-#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE )
-#define LPC_DAC ((LPC_DAC_TypeDef *) LPC_DAC_BASE )
-#define LPC_CANAF_RAM ((LPC_CANAF_RAM_TypeDef *) LPC_CANAF_RAM_BASE)
-#define LPC_CANAF ((LPC_CANAF_TypeDef *) LPC_CANAF_BASE )
-#define LPC_CANCR ((LPC_CANCR_TypeDef *) LPC_CANCR_BASE )
-#define LPC_CAN1 ((LPC_CAN_TypeDef *) LPC_CAN1_BASE )
-#define LPC_CAN2 ((LPC_CAN_TypeDef *) LPC_CAN2_BASE )
-#define LPC_MCPWM ((LPC_MCPWM_TypeDef *) LPC_MCPWM_BASE )
-#define LPC_QEI ((LPC_QEI_TypeDef *) LPC_QEI_BASE )
-#define LPC_MCI ((LPC_MCI_TypeDef *) LPC_MCI_BASE )
-#define LPC_GPDMA ((LPC_GPDMA_TypeDef *) LPC_GPDMA_BASE )
-#define LPC_GPDMACH0 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH0_BASE )
-#define LPC_GPDMACH1 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH1_BASE )
-#define LPC_GPDMACH2 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH2_BASE )
-#define LPC_GPDMACH3 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH3_BASE )
-#define LPC_GPDMACH4 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH4_BASE )
-#define LPC_GPDMACH5 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH5_BASE )
-#define LPC_GPDMACH6 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH6_BASE )
-#define LPC_GPDMACH7 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH7_BASE )
-#define LPC_EMAC ((LPC_EMAC_TypeDef *) LPC_EMAC_BASE )
-#define LPC_LCD ((LPC_LCD_TypeDef *) LPC_LCD_BASE )
-#define LPC_USB ((LPC_USB_TypeDef *) LPC_USB_BASE )
-#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )
-#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE )
-#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE )
-#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE )
-#define LPC_GPIO4 ((LPC_GPIO_TypeDef *) LPC_GPIO4_BASE )
-#define LPC_GPIO5 ((LPC_GPIO_TypeDef *) LPC_GPIO5_BASE )
-#define LPC_EMC ((LPC_EMC_TypeDef *) LPC_EMC_BASE )
-#define LPC_CRC ((LPC_CRC_TypeDef *) LPC_CRC_BASE )
-#define LPC_EEPROM ((LPC_EEPROM_TypeDef *) LPC_EEPROM_BASE )
-
-
-
-#endif // __LPC407x_8x_177x_8x_H__
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC177x_8x.h b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC177x_8x.h
deleted file mode 100644
index 464225eca3..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC177x_8x.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/**********************************************************************
-* $Id$ system_LPC177x_8x.h 2011-06-02
-*//**
-* @file system_LPC177x_8x.h
-* @brief CMSIS Cortex-M3 Device Peripheral Access Layer Source File
-* for the NXP LPC177x_8x Device Series
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef __SYSTEM_LPC177x_8x_H
-#define __SYSTEM_LPC177x_8x_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
-extern uint32_t PeripheralClock; /*!< Peripheral Clock Frequency (Pclk) */
-extern uint32_t EMCClock; /*!< EMC Clock */
-extern uint32_t USBClock; /*!< USB Frequency */
-
-
-/**
- * Initialize the system
- *
- * @param none
- * @return none
- *
- * @brief Setup the microcontroller system.
- * Initialize the System and update the SystemCoreClock variable.
- */
-extern void SystemInit (void);
-
-/**
- * Update SystemCoreClock variable
- *
- * @param none
- * @return none
- *
- * @brief Updates the SystemCoreClock with current core Clock
- * retrieved from cpu registers.
- */
-extern void SystemCoreClockUpdate (void);
-
-/*----------------------------------------------------------------------------
- Define clocks
- *----------------------------------------------------------------------------*/
-#define XTAL (12000000UL) /* Oscillator frequency */
-#define OSC_CLK ( XTAL) /* Main oscillator frequency */
-#define RTC_CLK ( 32768UL) /* RTC oscillator frequency */
-#define IRC_OSC (12000000UL) /* Internal RC oscillator frequency */
-#define WDT_OSC ( 500000UL) /* Internal WDT oscillator frequency */
-
-
-
-/*
-//-------- <<< end of configuration section >>> ------------------------------
-*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __SYSTEM_LPC177x_8x_H */
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC407x_8x_177x_8x.h b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC407x_8x_177x_8x.h
deleted file mode 100644
index 18a54a0d7f..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Include/system_LPC407x_8x_177x_8x.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/**********************************************************************
-* $Id$ system_LPC407x_8x_177x_8x.h 2011-06-02
-*//**
-* @file system_LPC407x_8x_177x_8x.h
-* @brief CMSIS Cortex-M3 Device Peripheral Access Layer Source File
-* for the NXP LPC Device Series
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef __SYSTEM_LPC407x_8x_177x_8x_H
-#define __SYSTEM_LPC407x_8x_177x_8x_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
-extern uint32_t PeripheralClock; /*!< Peripheral Clock Frequency (Pclk) */
-extern uint32_t EMCClock; /*!< EMC Clock */
-extern uint32_t USBClock; /*!< USB Frequency */
-
-
-/**
- * Initialize the system
- *
- * @param none
- * @return none
- *
- * @brief Setup the microcontroller system.
- * Initialize the System and update the SystemCoreClock variable.
- */
-extern void SystemInit (void);
-
-/**
- * Update SystemCoreClock variable
- *
- * @param none
- * @return none
- *
- * @brief Updates the SystemCoreClock with current core Clock
- * retrieved from cpu registers.
- */
-extern void SystemCoreClockUpdate (void);
-
-/*----------------------------------------------------------------------------
- Define clocks
- *----------------------------------------------------------------------------*/
-#define XTAL (12000000UL) /* Oscillator frequency */
-#define OSC_CLK ( XTAL) /* Main oscillator frequency */
-#define RTC_CLK ( 32768UL) /* RTC oscillator frequency */
-#define IRC_OSC (12000000UL) /* Internal RC oscillator frequency */
-#define WDT_OSC ( 500000UL) /* Internal WDT oscillator frequency */
-
-
-
-/*
-//-------- <<< end of configuration section >>> ------------------------------
-*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __SYSTEM_LPC407x_8x_177x_8x_H */
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC177x_8x.s
deleted file mode 100644
index 59cc885de3..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC177x_8x.s
+++ /dev/null
@@ -1,301 +0,0 @@
-;/*****************************************************************************
-; * @file: startup_LPC177x_8x.s
-; * @purpose: CMSIS Cortex-M3 Core Device Startup File
-; * for the NXP LPC177x_8x Device Series
-; * @version: V1.20
-; * @date: 07. October 2010
-; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-; *
-; * Copyright (C) 2010 ARM Limited. All rights reserved.
-; * ARM Limited (ARM) is supplying this software for use with Cortex-M3
-; * processor based microcontrollers. This file can be freely distributed
-; * within development tools that are supporting such ARM based processors.
-; *
-; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
-; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
-; *
-; *****************************************************************************/
-
-
-; <h> Stack Configuration
-; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Stack_Size EQU 0x00000200
-
- AREA STACK, NOINIT, READWRITE, ALIGN=3
-Stack_Mem SPACE Stack_Size
-__initial_sp
-
-
-; <h> Heap Configuration
-; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Heap_Size EQU 0x00000000
-
- AREA HEAP, NOINIT, READWRITE, ALIGN=3
-__heap_base
-Heap_Mem SPACE Heap_Size
-__heap_limit
-
-
- PRESERVE8
- THUMB
-
-
-; Vector Table Mapped to Address 0 at Reset
-
- AREA RESET, DATA, READONLY
- EXPORT __Vectors
-
-__Vectors DCD __initial_sp ; Top of Stack
- DCD Reset_Handler ; Reset Handler
- DCD NMI_Handler ; NMI Handler
- DCD HardFault_Handler ; Hard Fault Handler
- DCD MemManage_Handler ; MPU Fault Handler
- DCD BusFault_Handler ; Bus Fault Handler
- DCD UsageFault_Handler ; Usage Fault Handler
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD SVC_Handler ; SVCall Handler
- DCD DebugMon_Handler ; Debug Monitor Handler
- DCD 0 ; Reserved
- DCD PendSV_Handler ; PendSV Handler
- DCD SysTick_Handler ; SysTick Handler
-
- ; External Interrupts
- DCD WDT_IRQHandler ; 16: Watchdog Timer
- DCD TIMER0_IRQHandler ; 17: Timer0
- DCD TIMER1_IRQHandler ; 18: Timer1
- DCD TIMER2_IRQHandler ; 19: Timer2
- DCD TIMER3_IRQHandler ; 20: Timer3
- DCD UART0_IRQHandler ; 21: UART0
- DCD UART1_IRQHandler ; 22: UART1
- DCD UART2_IRQHandler ; 23: UART2
- DCD UART3_IRQHandler ; 24: UART3
- DCD PWM1_IRQHandler ; 25: PWM1
- DCD I2C0_IRQHandler ; 26: I2C0
- DCD I2C1_IRQHandler ; 27: I2C1
- DCD I2C2_IRQHandler ; 28: I2C2
- DCD 0 ; 29: reserved, not for SPIFI anymore
- DCD SSP0_IRQHandler ; 30: SSP0
- DCD SSP1_IRQHandler ; 31: SSP1
- DCD PLL0_IRQHandler ; 32: PLL0 Lock (Main PLL)
- DCD RTC_IRQHandler ; 33: Real Time Clock
- DCD EINT0_IRQHandler ; 34: External Interrupt 0
- DCD EINT1_IRQHandler ; 35: External Interrupt 1
- DCD EINT2_IRQHandler ; 36: External Interrupt 2
- DCD EINT3_IRQHandler ; 37: External Interrupt 3
- DCD ADC_IRQHandler ; 38: A/D Converter
- DCD BOD_IRQHandler ; 39: Brown-Out Detect
- DCD USB_IRQHandler ; 40: USB
- DCD CAN_IRQHandler ; 41: CAN
- DCD DMA_IRQHandler ; 42: General Purpose DMA
- DCD I2S_IRQHandler ; 43: I2S
- DCD ENET_IRQHandler ; 44: Ethernet
- DCD MCI_IRQHandler ; 45: SD/MMC card I/F
- DCD MCPWM_IRQHandler ; 46: Motor Control PWM
- DCD QEI_IRQHandler ; 47: Quadrature Encoder Interface
- DCD PLL1_IRQHandler ; 48: PLL1 Lock (USB PLL)
- DCD USBActivity_IRQHandler ; 49: USB Activity interrupt to wakeup
- DCD CANActivity_IRQHandler ; 50: CAN Activity interrupt to wakeup
- DCD UART4_IRQHandler ; 51: UART4
- DCD SSP2_IRQHandler ; 52: SSP2
- DCD LCD_IRQHandler ; 53: LCD
- DCD GPIO_IRQHandler ; 54: GPIO
- DCD PWM0_IRQHandler ; 55: PWM0
- DCD EEPROM_IRQHandler ; 56: EEPROM
-
-
- IF :LNOT::DEF:NO_CRP
- AREA |.ARM.__at_0x02FC|, CODE, READONLY
-CRP_Key DCD 0xFFFFFFFF
- ENDIF
-
-
- AREA |.text|, CODE, READONLY
-
-
-; Reset Handler
-
-Reset_Handler PROC
- EXPORT Reset_Handler [WEAK]
- IMPORT SystemInit
- IMPORT __main
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__main
- BX R0
- ENDP
-
-
-; Dummy Exception Handlers (infinite loops which can be modified)
-
-NMI_Handler PROC
- EXPORT NMI_Handler [WEAK]
- B .
- ENDP
-HardFault_Handler\
- PROC
- EXPORT HardFault_Handler [WEAK]
- B .
- ENDP
-MemManage_Handler\
- PROC
- EXPORT MemManage_Handler [WEAK]
- B .
- ENDP
-BusFault_Handler\
- PROC
- EXPORT BusFault_Handler [WEAK]
- B .
- ENDP
-UsageFault_Handler\
- PROC
- EXPORT UsageFault_Handler [WEAK]
- B .
- ENDP
-SVC_Handler PROC
- EXPORT SVC_Handler [WEAK]
- B .
- ENDP
-DebugMon_Handler\
- PROC
- EXPORT DebugMon_Handler [WEAK]
- B .
- ENDP
-PendSV_Handler PROC
- EXPORT PendSV_Handler [WEAK]
- B .
- ENDP
-SysTick_Handler PROC
- EXPORT SysTick_Handler [WEAK]
- B .
- ENDP
-
-Default_Handler PROC
-
- EXPORT WDT_IRQHandler [WEAK]
- EXPORT TIMER0_IRQHandler [WEAK]
- EXPORT TIMER1_IRQHandler [WEAK]
- EXPORT TIMER2_IRQHandler [WEAK]
- EXPORT TIMER3_IRQHandler [WEAK]
- EXPORT UART0_IRQHandler [WEAK]
- EXPORT UART1_IRQHandler [WEAK]
- EXPORT UART2_IRQHandler [WEAK]
- EXPORT UART3_IRQHandler [WEAK]
- EXPORT PWM1_IRQHandler [WEAK]
- EXPORT I2C0_IRQHandler [WEAK]
- EXPORT I2C1_IRQHandler [WEAK]
- EXPORT I2C2_IRQHandler [WEAK]
- ;EXPORT SPIFI_IRQHandler [WEAK]
- EXPORT SSP0_IRQHandler [WEAK]
- EXPORT SSP1_IRQHandler [WEAK]
- EXPORT PLL0_IRQHandler [WEAK]
- EXPORT RTC_IRQHandler [WEAK]
- EXPORT EINT0_IRQHandler [WEAK]
- EXPORT EINT1_IRQHandler [WEAK]
- EXPORT EINT2_IRQHandler [WEAK]
- EXPORT EINT3_IRQHandler [WEAK]
- EXPORT ADC_IRQHandler [WEAK]
- EXPORT BOD_IRQHandler [WEAK]
- EXPORT USB_IRQHandler [WEAK]
- EXPORT CAN_IRQHandler [WEAK]
- EXPORT DMA_IRQHandler [WEAK]
- EXPORT I2S_IRQHandler [WEAK]
- EXPORT ENET_IRQHandler [WEAK]
- EXPORT MCI_IRQHandler [WEAK]
- EXPORT MCPWM_IRQHandler [WEAK]
- EXPORT QEI_IRQHandler [WEAK]
- EXPORT PLL1_IRQHandler [WEAK]
- EXPORT USBActivity_IRQHandler [WEAK]
- EXPORT CANActivity_IRQHandler [WEAK]
- EXPORT UART4_IRQHandler [WEAK]
- EXPORT SSP2_IRQHandler [WEAK]
- EXPORT LCD_IRQHandler [WEAK]
- EXPORT GPIO_IRQHandler [WEAK]
- EXPORT PWM0_IRQHandler [WEAK]
- EXPORT EEPROM_IRQHandler [WEAK]
-
-WDT_IRQHandler
-TIMER0_IRQHandler
-TIMER1_IRQHandler
-TIMER2_IRQHandler
-TIMER3_IRQHandler
-UART0_IRQHandler
-UART1_IRQHandler
-UART2_IRQHandler
-UART3_IRQHandler
-PWM1_IRQHandler
-I2C0_IRQHandler
-I2C1_IRQHandler
-I2C2_IRQHandler
-;SPIFI_IRQHandler ;not used
-SSP0_IRQHandler
-SSP1_IRQHandler
-PLL0_IRQHandler
-RTC_IRQHandler
-EINT0_IRQHandler
-EINT1_IRQHandler
-EINT2_IRQHandler
-EINT3_IRQHandler
-ADC_IRQHandler
-BOD_IRQHandler
-USB_IRQHandler
-CAN_IRQHandler
-DMA_IRQHandler
-I2S_IRQHandler
-ENET_IRQHandler
-MCI_IRQHandler
-MCPWM_IRQHandler
-QEI_IRQHandler
-PLL1_IRQHandler
-USBActivity_IRQHandler
-CANActivity_IRQHandler
-UART4_IRQHandler
-SSP2_IRQHandler
-LCD_IRQHandler
-GPIO_IRQHandler
-PWM0_IRQHandler
-EEPROM_IRQHandler
-
- B .
-
- ENDP
-
-
- ALIGN
-
-
-; User Initial Stack & Heap
-
- IF :DEF:__MICROLIB
-
- EXPORT __initial_sp
- EXPORT __heap_base
- EXPORT __heap_limit
-
- ELSE
-
- IMPORT __use_two_region_memory
- EXPORT __user_initial_stackheap
-__user_initial_stackheap
-
- LDR R0, = Heap_Mem
- LDR R1, =(Stack_Mem + Stack_Size)
- LDR R2, = (Heap_Mem + Heap_Size)
- LDR R3, = Stack_Mem
- BX LR
-
- ALIGN
-
- ENDIF
-
-
- END
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s
deleted file mode 100644
index bca9de93c8..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s
+++ /dev/null
@@ -1,302 +0,0 @@
-;/*****************************************************************************
-; * @file: startup_LPC407x_8x.s
-; * @purpose: CMSIS Cortex-M4 Core Device Startup File
-; * for the NXP LPC407x_8x Device Series
-; * @version: V1.20
-; * @date: 16. January 2012
-; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-; *
-; * Copyright (C) 2012 ARM Limited. All rights reserved.
-; * ARM Limited (ARM) is supplying this software for use with Cortex-M4
-; * processor based microcontrollers. This file can be freely distributed
-; * within development tools that are supporting such ARM based processors.
-; *
-; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
-; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
-; *
-; *****************************************************************************/
-
-
-; <h> Stack Configuration
-; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Stack_Size EQU 0x00000400
-
- AREA STACK, NOINIT, READWRITE, ALIGN=3
-Stack_Mem SPACE Stack_Size
-__initial_sp
-
-
-; <h> Heap Configuration
-; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Heap_Size EQU 0x00000000
-
- AREA HEAP, NOINIT, READWRITE, ALIGN=3
-__heap_base
-Heap_Mem SPACE Heap_Size
-__heap_limit
-
-
- PRESERVE8
- THUMB
-
-
-; Vector Table Mapped to Address 0 at Reset
-
- AREA RESET, DATA, READONLY
- EXPORT __Vectors
-
-__Vectors DCD __initial_sp ; Top of Stack
- DCD Reset_Handler ; Reset Handler
- DCD NMI_Handler ; NMI Handler
- DCD HardFault_Handler ; Hard Fault Handler
- DCD MemManage_Handler ; MPU Fault Handler
- DCD BusFault_Handler ; Bus Fault Handler
- DCD UsageFault_Handler ; Usage Fault Handler
- ; DCD 0xEFFFF5D6 ; Reserved- vector sum
- DCD 0xEFFFF39E ; Reserved- vector sum
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD SVC_Handler ; SVCall Handler
- DCD DebugMon_Handler ; Debug Monitor Handler
- DCD 0 ; Reserved
- DCD PendSV_Handler ; PendSV Handler
- DCD SysTick_Handler ; SysTick Handler
-
- ; External Interrupts
- DCD WDT_IRQHandler ; 16: Watchdog Timer
- DCD TIMER0_IRQHandler ; 17: Timer0
- DCD TIMER1_IRQHandler ; 18: Timer1
- DCD TIMER2_IRQHandler ; 19: Timer2
- DCD TIMER3_IRQHandler ; 20: Timer3
- DCD UART0_IRQHandler ; 21: UART0
- DCD UART1_IRQHandler ; 22: UART1
- DCD UART2_IRQHandler ; 23: UART2
- DCD UART3_IRQHandler ; 24: UART3
- DCD PWM1_IRQHandler ; 25: PWM1
- DCD I2C0_IRQHandler ; 26: I2C0
- DCD I2C1_IRQHandler ; 27: I2C1
- DCD I2C2_IRQHandler ; 28: I2C2
- DCD 0 ; 29: reserved, not for SPIFI anymore
- DCD SSP0_IRQHandler ; 30: SSP0
- DCD SSP1_IRQHandler ; 31: SSP1
- DCD PLL0_IRQHandler ; 32: PLL0 Lock (Main PLL)
- DCD RTC_IRQHandler ; 33: Real Time Clock
- DCD EINT0_IRQHandler ; 34: External Interrupt 0
- DCD EINT1_IRQHandler ; 35: External Interrupt 1
- DCD EINT2_IRQHandler ; 36: External Interrupt 2
- DCD EINT3_IRQHandler ; 37: External Interrupt 3
- DCD ADC_IRQHandler ; 38: A/D Converter
- DCD BOD_IRQHandler ; 39: Brown-Out Detect
- DCD USB_IRQHandler ; 40: USB
- DCD CAN_IRQHandler ; 41: CAN
- DCD DMA_IRQHandler ; 42: General Purpose DMA
- DCD I2S_IRQHandler ; 43: I2S
- DCD ENET_IRQHandler ; 44: Ethernet
- DCD MCI_IRQHandler ; 45: SD/MMC card I/F
- DCD MCPWM_IRQHandler ; 46: Motor Control PWM
- DCD QEI_IRQHandler ; 47: Quadrature Encoder Interface
- DCD PLL1_IRQHandler ; 48: PLL1 Lock (USB PLL)
- DCD USBActivity_IRQHandler ; 49: USB Activity interrupt to wakeup
- DCD CANActivity_IRQHandler ; 50: CAN Activity interrupt to wakeup
- DCD UART4_IRQHandler ; 51: UART4
- DCD SSP2_IRQHandler ; 52: SSP2
- DCD LCD_IRQHandler ; 53: LCD
- DCD GPIO_IRQHandler ; 54: GPIO
- DCD PWM0_IRQHandler ; 55: PWM0
- DCD EEPROM_IRQHandler ; 56: EEPROM
-
-
- IF :LNOT::DEF:NO_CRP
- AREA |.ARM.__at_0x02FC|, CODE, READONLY
-CRP_Key DCD 0xFFFFFFFF
- ENDIF
-
-
- AREA |.text|, CODE, READONLY
-
-
-; Reset Handler
-
-Reset_Handler PROC
- EXPORT Reset_Handler [WEAK]
- IMPORT SystemInit
- IMPORT __main
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__main
- BX R0
- ENDP
-
-
-; Dummy Exception Handlers (infinite loops which can be modified)
-
-NMI_Handler PROC
- EXPORT NMI_Handler [WEAK]
- B .
- ENDP
-HardFault_Handler\
- PROC
- EXPORT HardFault_Handler [WEAK]
- B .
- ENDP
-MemManage_Handler\
- PROC
- EXPORT MemManage_Handler [WEAK]
- B .
- ENDP
-BusFault_Handler\
- PROC
- EXPORT BusFault_Handler [WEAK]
- B .
- ENDP
-UsageFault_Handler\
- PROC
- EXPORT UsageFault_Handler [WEAK]
- B .
- ENDP
-SVC_Handler PROC
- EXPORT SVC_Handler [WEAK]
- B .
- ENDP
-DebugMon_Handler\
- PROC
- EXPORT DebugMon_Handler [WEAK]
- B .
- ENDP
-PendSV_Handler PROC
- EXPORT PendSV_Handler [WEAK]
- B .
- ENDP
-SysTick_Handler PROC
- EXPORT SysTick_Handler [WEAK]
- B .
- ENDP
-
-Default_Handler PROC
-
- EXPORT WDT_IRQHandler [WEAK]
- EXPORT TIMER0_IRQHandler [WEAK]
- EXPORT TIMER1_IRQHandler [WEAK]
- EXPORT TIMER2_IRQHandler [WEAK]
- EXPORT TIMER3_IRQHandler [WEAK]
- EXPORT UART0_IRQHandler [WEAK]
- EXPORT UART1_IRQHandler [WEAK]
- EXPORT UART2_IRQHandler [WEAK]
- EXPORT UART3_IRQHandler [WEAK]
- EXPORT PWM1_IRQHandler [WEAK]
- EXPORT I2C0_IRQHandler [WEAK]
- EXPORT I2C1_IRQHandler [WEAK]
- EXPORT I2C2_IRQHandler [WEAK]
- ;EXPORT SPIFI_IRQHandler [WEAK]
- EXPORT SSP0_IRQHandler [WEAK]
- EXPORT SSP1_IRQHandler [WEAK]
- EXPORT PLL0_IRQHandler [WEAK]
- EXPORT RTC_IRQHandler [WEAK]
- EXPORT EINT0_IRQHandler [WEAK]
- EXPORT EINT1_IRQHandler [WEAK]
- EXPORT EINT2_IRQHandler [WEAK]
- EXPORT EINT3_IRQHandler [WEAK]
- EXPORT ADC_IRQHandler [WEAK]
- EXPORT BOD_IRQHandler [WEAK]
- EXPORT USB_IRQHandler [WEAK]
- EXPORT CAN_IRQHandler [WEAK]
- EXPORT DMA_IRQHandler [WEAK]
- EXPORT I2S_IRQHandler [WEAK]
- EXPORT ENET_IRQHandler [WEAK]
- EXPORT MCI_IRQHandler [WEAK]
- EXPORT MCPWM_IRQHandler [WEAK]
- EXPORT QEI_IRQHandler [WEAK]
- EXPORT PLL1_IRQHandler [WEAK]
- EXPORT USBActivity_IRQHandler [WEAK]
- EXPORT CANActivity_IRQHandler [WEAK]
- EXPORT UART4_IRQHandler [WEAK]
- EXPORT SSP2_IRQHandler [WEAK]
- EXPORT LCD_IRQHandler [WEAK]
- EXPORT GPIO_IRQHandler [WEAK]
- EXPORT PWM0_IRQHandler [WEAK]
- EXPORT EEPROM_IRQHandler [WEAK]
-
-WDT_IRQHandler
-TIMER0_IRQHandler
-TIMER1_IRQHandler
-TIMER2_IRQHandler
-TIMER3_IRQHandler
-UART0_IRQHandler
-UART1_IRQHandler
-UART2_IRQHandler
-UART3_IRQHandler
-PWM1_IRQHandler
-I2C0_IRQHandler
-I2C1_IRQHandler
-I2C2_IRQHandler
-;SPIFI_IRQHandler ;not used
-SSP0_IRQHandler
-SSP1_IRQHandler
-PLL0_IRQHandler
-RTC_IRQHandler
-EINT0_IRQHandler
-EINT1_IRQHandler
-EINT2_IRQHandler
-EINT3_IRQHandler
-ADC_IRQHandler
-BOD_IRQHandler
-USB_IRQHandler
-CAN_IRQHandler
-DMA_IRQHandler
-I2S_IRQHandler
-ENET_IRQHandler
-MCI_IRQHandler
-MCPWM_IRQHandler
-QEI_IRQHandler
-PLL1_IRQHandler
-USBActivity_IRQHandler
-CANActivity_IRQHandler
-UART4_IRQHandler
-SSP2_IRQHandler
-LCD_IRQHandler
-GPIO_IRQHandler
-PWM0_IRQHandler
-EEPROM_IRQHandler
-
- B .
-
- ENDP
-
-
- ALIGN
-
-
-; User Initial Stack & Heap
-
- IF :DEF:__MICROLIB
-
- EXPORT __initial_sp
- EXPORT __heap_base
- EXPORT __heap_limit
-
- ELSE
-
- IMPORT __use_two_region_memory
- EXPORT __user_initial_stackheap
-__user_initial_stackheap
-
- LDR R0, = Heap_Mem
- LDR R1, =(Stack_Mem + Stack_Size)
- LDR R2, = (Heap_Mem + Heap_Size)
- LDR R3, = Stack_Mem
- BX LR
-
- ALIGN
-
- ENDIF
-
-
- END
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC177x_8x.s
deleted file mode 100644
index 5d966a39b3..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC177x_8x.s
+++ /dev/null
@@ -1,279 +0,0 @@
-/*****************************************************************************/
-/* startup_LPC17xx.s: Startup file for LPC17xx device series */
-/*****************************************************************************/
-/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
-/*****************************************************************************/
-
-
-/*
-//*** <<< Use Configuration Wizard in Context Menu >>> ***
-*/
-
-
-/*
-// <h> Stack Configuration
-// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-// </h>
-*/
-
- .equ Stack_Size, 0x00000100
- .section ".stack", "w"
- .align 3
- .globl __cs3_stack_mem
- .globl __cs3_stack_size
-__cs3_stack_mem:
- .if Stack_Size
- .space Stack_Size
- .endif
- .size __cs3_stack_mem, . - __cs3_stack_mem
- .set __cs3_stack_size, . - __cs3_stack_mem
-
-
-/*
-// <h> Heap Configuration
-// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-// </h>
-*/
-
- .equ Heap_Size, 0x00001000
-
- .section ".heap", "w"
- .align 3
- .globl __cs3_heap_start
- .globl __cs3_heap_end
-__cs3_heap_start:
- .if Heap_Size
- .space Heap_Size
- .endif
-__cs3_heap_end:
-
-
-/* Vector Table */
-
- .section ".cs3.interrupt_vector"
- .globl __cs3_interrupt_vector_cortex_m
- .type __cs3_interrupt_vector_cortex_m, %object
-
-__cs3_interrupt_vector_cortex_m:
- .long __cs3_stack /* Top of Stack */
- .long __cs3_reset /* Reset Handler */
- .long NMI_Handler /* NMI Handler */
- .long HardFault_Handler /* Hard Fault Handler */
- .long MemManage_Handler /* MPU Fault Handler */
- .long BusFault_Handler /* Bus Fault Handler */
- .long UsageFault_Handler /* Usage Fault Handler */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long SVC_Handler /* SVCall Handler */
- .long DebugMon_Handler /* Debug Monitor Handler */
- .long 0 /* Reserved */
- .long PendSV_Handler /* PendSV Handler */
- .long SysTick_Handler /* SysTick Handler */
-
- /* External Interrupts */
- .long WDT_IRQHandler /* 16: Watchdog Timer */
- .long TIMER0_IRQHandler /* 17: Timer0 */
- .long TIMER1_IRQHandler /* 18: Timer1 */
- .long TIMER2_IRQHandler /* 19: Timer2 */
- .long TIMER3_IRQHandler /* 20: Timer3 */
- .long UART0_IRQHandler /* 21: UART0 */
- .long UART1_IRQHandler /* 22: UART1 */
- .long UART2_IRQHandler /* 23: UART2 */
- .long UART3_IRQHandler /* 24: UART3 */
- .long PWM1_IRQHandler /* 25: PWM1 */
- .long I2C0_IRQHandler /* 26: I2C0 */
- .long I2C1_IRQHandler /* 27: I2C1 */
- .long I2C2_IRQHandler /* 28: I2C2 */
- .long 0 /* 29: Reserved, not for SPIFI anymore */
- .long SSP0_IRQHandler /* 30: SSP0 */
- .long SSP1_IRQHandler /* 31: SSP1 */
- .long PLL0_IRQHandler /* 32: PLL0 Lock (Main PLL) */
- .long RTC_IRQHandler /* 33: Real Time Clock */
- .long EINT0_IRQHandler /* 34: External Interrupt 0 */
- .long EINT1_IRQHandler /* 35: External Interrupt 1 */
- .long EINT2_IRQHandler /* 36: External Interrupt 2 */
- .long EINT3_IRQHandler /* 37: External Interrupt 3 */
- .long ADC_IRQHandler /* 38: A/D Converter */
- .long BOD_IRQHandler /* 39: Brown-Out Detect */
- .long USB_IRQHandler /* 40: USB */
- .long CAN_IRQHandler /* 41: CAN */
- .long DMA_IRQHandler /* 42: General Purpose DMA */
- .long I2S_IRQHandler /* 43: I2S */
- .long ENET_IRQHandler /* 44: Ethernet */
- .long MCI_IRQHandler /* 45: SD/MMC Card */
- .long MCPWM_IRQHandler /* 46: Motor Control PWM */
- .long QEI_IRQHandler /* 47: Quadrature Encoder Interface */
- .long PLL1_IRQHandler /* 48: PLL1 Lock (USB PLL) */
- .long USBActivity_IRQHandler /* 49: USB Activity */
- .long CANActivity_IRQHandler /* 50: CAN Activity */
- .long UART4_IRQHandler /* 51: UART4 */
- .long SSP2_IRQHandler /* 52: SSP2 */
- .long LCD_IRQHandler /* 53: LCD */
- .long GPIO_IRQHandler /* 54: GPIO */
- .long PWM0_IRQHandler /* 55: PWM0 */
- .long EEPROM_IRQHandler /* 56: EEPROM */
-
- .size __cs3_interrupt_vector_cortex_m, . - __cs3_interrupt_vector_cortex_m
-
-
- .thumb
-
- .section ".crp"
- .globl CRP_Value
-CRP_Value:
- .long 0xFFFFFFFF
-
-/* Reset Handler */
-
- .section .cs3.reset,"x",%progbits
- .thumb_func
- .globl __cs3_reset_cortex_m
- .type __cs3_reset_cortex_m, %function
-__cs3_reset_cortex_m:
- .fnstart
-.if (RAM_MODE)
-/* Clear .bss section (Zero init) */
- MOV R0, #0
- LDR R1, =__bss_start__
- LDR R2, =__bss_end__
- CMP R1,R2
- BEQ BSSIsEmpty
-LoopZI:
- CMP R1, R2
- BHS BSSIsEmpty
- STR R0, [R1]
- ADD R1, #4
- BLO LoopZI
-BSSIsEmpty:
- LDR R0, =SystemInit
- BLX R0
- LDR R0,=main
- BX R0
-.else
- LDR R0, =SystemInit
- BLX R0
- LDR R0,=_start
- BX R0
-.endif
- .pool
- .cantunwind
- .fnend
- .size __cs3_reset_cortex_m,.-__cs3_reset_cortex_m
-
- .section ".text"
-
-/* Exception Handlers */
-
- .weak NMI_Handler
- .type NMI_Handler, %function
-NMI_Handler:
- B .
- .size NMI_Handler, . - NMI_Handler
-
- .weak HardFault_Handler
- .type HardFault_Handler, %function
-HardFault_Handler:
- B .
- .size HardFault_Handler, . - HardFault_Handler
-
- .weak MemManage_Handler
- .type MemManage_Handler, %function
-MemManage_Handler:
- B .
- .size MemManage_Handler, . - MemManage_Handler
-
- .weak BusFault_Handler
- .type BusFault_Handler, %function
-BusFault_Handler:
- B .
- .size BusFault_Handler, . - BusFault_Handler
-
- .weak UsageFault_Handler
- .type UsageFault_Handler, %function
-UsageFault_Handler:
- B .
- .size UsageFault_Handler, . - UsageFault_Handler
-
- .weak SVC_Handler
- .type SVC_Handler, %function
-SVC_Handler:
- B .
- .size SVC_Handler, . - SVC_Handler
-
- .weak DebugMon_Handler
- .type DebugMon_Handler, %function
-DebugMon_Handler:
- B .
- .size DebugMon_Handler, . - DebugMon_Handler
-
- .weak PendSV_Handler
- .type PendSV_Handler, %function
-PendSV_Handler:
- B .
- .size PendSV_Handler, . - PendSV_Handler
-
- .weak SysTick_Handler
- .type SysTick_Handler, %function
-SysTick_Handler:
- B .
- .size SysTick_Handler, . - SysTick_Handler
-
-
-/* IRQ Handlers */
-
- .globl Default_Handler
- .type Default_Handler, %function
-Default_Handler:
- B .
- .size Default_Handler, . - Default_Handler
-
- .macro IRQ handler
- .weak \handler
- .set \handler, Default_Handler
- .endm
-
- IRQ WDT_IRQHandler
- IRQ TIMER0_IRQHandler
- IRQ TIMER1_IRQHandler
- IRQ TIMER2_IRQHandler
- IRQ TIMER3_IRQHandler
- IRQ UART0_IRQHandler
- IRQ UART1_IRQHandler
- IRQ UART2_IRQHandler
- IRQ UART3_IRQHandler
- IRQ PWM1_IRQHandler
- IRQ I2C0_IRQHandler
- IRQ I2C1_IRQHandler
- IRQ I2C2_IRQHandler
-/* IRQ SPIFI_IRQHandler */
- IRQ SSP0_IRQHandler
- IRQ SSP1_IRQHandler
- IRQ PLL0_IRQHandler
- IRQ RTC_IRQHandler
- IRQ EINT0_IRQHandler
- IRQ EINT1_IRQHandler
- IRQ EINT2_IRQHandler
- IRQ EINT3_IRQHandler
- IRQ ADC_IRQHandler
- IRQ BOD_IRQHandler
- IRQ USB_IRQHandler
- IRQ CAN_IRQHandler
- IRQ DMA_IRQHandler
- IRQ I2S_IRQHandler
- IRQ ENET_IRQHandler
- IRQ MCI_IRQHandler
- IRQ MCPWM_IRQHandler
- IRQ QEI_IRQHandler
- IRQ PLL1_IRQHandler
- IRQ USBActivity_IRQHandler
- IRQ CANActivity_IRQHandler
- IRQ UART4_IRQHandler
- IRQ SSP2_IRQHandler
- IRQ LCD_IRQHandler
- IRQ GPIO_IRQHandler
- IRQ PWM0_IRQHandler
- IRQ EEPROM_IRQHandler
-
- .end
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC407x_8x_177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC407x_8x_177x_8x.s
deleted file mode 100644
index 7278ca26fa..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC407x_8x_177x_8x.s
+++ /dev/null
@@ -1,281 +0,0 @@
-/*****************************************************************************/
-/* startup_LPC17xx.s: Startup file for LPC17xx device series */
-/*****************************************************************************/
-/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
-/*****************************************************************************/
-
-
-/*
-//*** <<< Use Configuration Wizard in Context Menu >>> ***
-*/
-
-
-/*
-// <h> Stack Configuration
-// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-// </h>
-*/
-
- .equ Stack_Size, 0x00000100
- .section ".stack", "w"
- .align 3
- .globl __cs3_stack_mem
- .globl __cs3_stack_size
-__cs3_stack_mem:
- .if Stack_Size
- .space Stack_Size
- .endif
- .size __cs3_stack_mem, . - __cs3_stack_mem
- .set __cs3_stack_size, . - __cs3_stack_mem
-
-
-/*
-// <h> Heap Configuration
-// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-// </h>
-*/
-
- .equ Heap_Size, 0x00001000
-
- .section ".heap", "w"
- .align 3
- .globl __cs3_heap_start
- .globl __cs3_heap_end
-__cs3_heap_start:
- .if Heap_Size
- .space Heap_Size
- .endif
-__cs3_heap_end:
-
-
-/* Vector Table */
-
- .section ".cs3.interrupt_vector"
- .globl __cs3_interrupt_vector_cortex_m
- .type __cs3_interrupt_vector_cortex_m, %object
-
-__cs3_interrupt_vector_cortex_m:
- .long __cs3_stack /* Top of Stack */
- .long __cs3_reset /* Reset Handler */
- .long NMI_Handler /* NMI Handler */
- .long HardFault_Handler /* Hard Fault Handler */
- .long MemManage_Handler /* MPU Fault Handler */
- .long BusFault_Handler /* Bus Fault Handler */
- .long UsageFault_Handler /* Usage Fault Handler */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long 0 /* Reserved */
- .long SVC_Handler /* SVCall Handler */
- .long DebugMon_Handler /* Debug Monitor Handler */
- .long 0 /* Reserved */
- .long PendSV_Handler /* PendSV Handler */
- .long SysTick_Handler /* SysTick Handler */
-
- /* External Interrupts */
- .long WDT_IRQHandler /* 16: Watchdog Timer */
- .long TIMER0_IRQHandler /* 17: Timer0 */
- .long TIMER1_IRQHandler /* 18: Timer1 */
- .long TIMER2_IRQHandler /* 19: Timer2 */
- .long TIMER3_IRQHandler /* 20: Timer3 */
- .long UART0_IRQHandler /* 21: UART0 */
- .long UART1_IRQHandler /* 22: UART1 */
- .long UART2_IRQHandler /* 23: UART2 */
- .long UART3_IRQHandler /* 24: UART3 */
- .long PWM1_IRQHandler /* 25: PWM1 */
- .long I2C0_IRQHandler /* 26: I2C0 */
- .long I2C1_IRQHandler /* 27: I2C1 */
- .long I2C2_IRQHandler /* 28: I2C2 */
- .long 0 /* 29: Reserved, not for SPIFI anymore */
- .long SSP0_IRQHandler /* 30: SSP0 */
- .long SSP1_IRQHandler /* 31: SSP1 */
- .long PLL0_IRQHandler /* 32: PLL0 Lock (Main PLL) */
- .long RTC_IRQHandler /* 33: Real Time Clock */
- .long EINT0_IRQHandler /* 34: External Interrupt 0 */
- .long EINT1_IRQHandler /* 35: External Interrupt 1 */
- .long EINT2_IRQHandler /* 36: External Interrupt 2 */
- .long EINT3_IRQHandler /* 37: External Interrupt 3 */
- .long ADC_IRQHandler /* 38: A/D Converter */
- .long BOD_IRQHandler /* 39: Brown-Out Detect */
- .long USB_IRQHandler /* 40: USB */
- .long CAN_IRQHandler /* 41: CAN */
- .long DMA_IRQHandler /* 42: General Purpose DMA */
- .long I2S_IRQHandler /* 43: I2S */
- .long ENET_IRQHandler /* 44: Ethernet */
- .long MCI_IRQHandler /* 45: SD/MMC Card */
- .long MCPWM_IRQHandler /* 46: Motor Control PWM */
- .long QEI_IRQHandler /* 47: Quadrature Encoder Interface */
- .long PLL1_IRQHandler /* 48: PLL1 Lock (USB PLL) */
- .long USBActivity_IRQHandler /* 49: USB Activity */
- .long CANActivity_IRQHandler /* 50: CAN Activity */
- .long UART4_IRQHandler /* 51: UART4 */
- .long SSP2_IRQHandler /* 52: SSP2 */
- .long LCD_IRQHandler /* 53: LCD */
- .long GPIO_IRQHandler /* 54: GPIO */
- .long PWM0_IRQHandler /* 55: PWM0 */
- .long EEPROM_IRQHandler /* 56: EEPROM */
-
- .size __cs3_interrupt_vector_cortex_m, . - __cs3_interrupt_vector_cortex_m
-
-
- .thumb
-
- .section ".crp"
- .globl CRP_Value
-CRP_Value:
- .long 0xFFFFFFFF
-
-/* Reset Handler */
-
- .section .cs3.reset,"x",%progbits
- .thumb_func
- .globl __cs3_reset_cortex_m
- .globl Reset_Handler
- .type __cs3_reset_cortex_m, %function
-__cs3_reset_cortex_m:
-Reset_Handler:
- .fnstart
-.ifdef RAM_MODE
-/* Clear .bss section (Zero init) */
- MOV R0, #0
- LDR R1, =__bss_start__
- LDR R2, =__bss_end__
- CMP R1,R2
- BEQ BSSIsEmpty
-LoopZI:
- CMP R1, R2
- BHS BSSIsEmpty
- STR R0, [R1]
- ADD R1, #4
- BLO LoopZI
-BSSIsEmpty:
- LDR R0, =SystemInit
- BLX R0
- LDR R0,=main
- BX R0
-.else
- LDR R0, =SystemInit
- BLX R0
- LDR R0,=main
- BX R0
-.endif
- .pool
- .cantunwind
- .fnend
- .size __cs3_reset_cortex_m,.-__cs3_reset_cortex_m
-
- .section ".text"
-
-/* Exception Handlers */
-
- .weak NMI_Handler
- .type NMI_Handler, %function
-NMI_Handler:
- B .
- .size NMI_Handler, . - NMI_Handler
-
- .weak HardFault_Handler
- .type HardFault_Handler, %function
-HardFault_Handler:
- B .
- .size HardFault_Handler, . - HardFault_Handler
-
- .weak MemManage_Handler
- .type MemManage_Handler, %function
-MemManage_Handler:
- B .
- .size MemManage_Handler, . - MemManage_Handler
-
- .weak BusFault_Handler
- .type BusFault_Handler, %function
-BusFault_Handler:
- B .
- .size BusFault_Handler, . - BusFault_Handler
-
- .weak UsageFault_Handler
- .type UsageFault_Handler, %function
-UsageFault_Handler:
- B .
- .size UsageFault_Handler, . - UsageFault_Handler
-
- .weak SVC_Handler
- .type SVC_Handler, %function
-SVC_Handler:
- B .
- .size SVC_Handler, . - SVC_Handler
-
- .weak DebugMon_Handler
- .type DebugMon_Handler, %function
-DebugMon_Handler:
- B .
- .size DebugMon_Handler, . - DebugMon_Handler
-
- .weak PendSV_Handler
- .type PendSV_Handler, %function
-PendSV_Handler:
- B .
- .size PendSV_Handler, . - PendSV_Handler
-
- .weak SysTick_Handler
- .type SysTick_Handler, %function
-SysTick_Handler:
- B .
- .size SysTick_Handler, . - SysTick_Handler
-
-
-/* IRQ Handlers */
-
- .globl Default_Handler
- .type Default_Handler, %function
-Default_Handler:
- B .
- .size Default_Handler, . - Default_Handler
-
- .macro IRQ handler
- .weak \handler
- .set \handler, Default_Handler
- .endm
-
- IRQ WDT_IRQHandler
- IRQ TIMER0_IRQHandler
- IRQ TIMER1_IRQHandler
- IRQ TIMER2_IRQHandler
- IRQ TIMER3_IRQHandler
- IRQ UART0_IRQHandler
- IRQ UART1_IRQHandler
- IRQ UART2_IRQHandler
- IRQ UART3_IRQHandler
- IRQ PWM1_IRQHandler
- IRQ I2C0_IRQHandler
- IRQ I2C1_IRQHandler
- IRQ I2C2_IRQHandler
-/* IRQ SPIFI_IRQHandler */
- IRQ SSP0_IRQHandler
- IRQ SSP1_IRQHandler
- IRQ PLL0_IRQHandler
- IRQ RTC_IRQHandler
- IRQ EINT0_IRQHandler
- IRQ EINT1_IRQHandler
- IRQ EINT2_IRQHandler
- IRQ EINT3_IRQHandler
- IRQ ADC_IRQHandler
- IRQ BOD_IRQHandler
- IRQ USB_IRQHandler
- IRQ CAN_IRQHandler
- IRQ DMA_IRQHandler
- IRQ I2S_IRQHandler
- IRQ ENET_IRQHandler
- IRQ MCI_IRQHandler
- IRQ MCPWM_IRQHandler
- IRQ QEI_IRQHandler
- IRQ PLL1_IRQHandler
- IRQ USBActivity_IRQHandler
- IRQ CANActivity_IRQHandler
- IRQ UART4_IRQHandler
- IRQ SSP2_IRQHandler
- IRQ LCD_IRQHandler
- IRQ GPIO_IRQHandler
- IRQ PWM0_IRQHandler
- IRQ EEPROM_IRQHandler
-
- .end
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC177x_8x.s
deleted file mode 100644
index 55f4be7484..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC177x_8x.s
+++ /dev/null
@@ -1,396 +0,0 @@
-;/*****************************************************************************
-; * @file: startup_LPC177x_8x.s
-; * @purpose: CMSIS Cortex-M3 Core Device Startup File
-; * for the NXP LPC17xx Device Series
-; * @version: V1.03
-; * @date: 09. February 2010
-; *----------------------------------------------------------------------------
-; *
-; * Copyright (C) 2010 ARM Limited. All rights reserved.
-; *
-; * ARM Limited (ARM) is supplying this software for use with Cortex-Mx
-; * processor based microcontrollers. This file can be freely distributed
-; * within development tools that are supporting such ARM based processors.
-; *
-; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
-; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
-; *
-; ******************************************************************************/
-
-
-;
-; The modules in this file are included in the libraries, and may be replaced
-; by any user-defined modules that define the PUBLIC symbol _program_start or
-; a user defined start symbol.
-; To override the cstartup defined in the library, simply add your modified
-; version to the workbench project.
-;
-; The vector table is normally located at address 0.
-; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
-; The name "__vector_table" has special meaning for C-SPY:
-; it is where the SP start value is found, and the NVIC vector
-; table register (VTOR) is initialized to this address if != 0.
-;
-; Cortex-M version
-;
-
- MODULE ?cstartup
-
- ;; Forward declaration of sections.
- SECTION CSTACK:DATA:NOROOT(3)
-
- SECTION .intvec:CODE:NOROOT(2)
-
- EXTERN __iar_program_start
- EXTERN SystemInit
- PUBLIC __vector_table
- PUBLIC __vector_table_0x1c
- PUBLIC __Vectors
- PUBLIC __Vectors_End
- PUBLIC __Vectors_Size
-
- DATA
-
-__vector_table
- DCD sfe(CSTACK)
- DCD Reset_Handler
-
- DCD NMI_Handler
- DCD HardFault_Handler
- DCD MemManage_Handler
- DCD BusFault_Handler
- DCD UsageFault_Handler
-__vector_table_0x1c
- DCD 0
- DCD 0
- DCD 0
- DCD 0
- DCD SVC_Handler
- DCD DebugMon_Handler
- DCD 0
- DCD PendSV_Handler
- DCD SysTick_Handler
-
- ; External Interrupts
- DCD WDT_IRQHandler ; 16: Watchdog Timer
- DCD TIMER0_IRQHandler ; 17: Timer0
- DCD TIMER1_IRQHandler ; 18: Timer1
- DCD TIMER2_IRQHandler ; 19: Timer2
- DCD TIMER3_IRQHandler ; 20: Timer3
- DCD UART0_IRQHandler ; 21: UART0
- DCD UART1_IRQHandler ; 22: UART1
- DCD UART2_IRQHandler ; 23: UART2
- DCD UART3_IRQHandler ; 24: UART3
- DCD PWM1_IRQHandler ; 25: PWM1
- DCD I2C0_IRQHandler ; 26: I2C0
- DCD I2C1_IRQHandler ; 27: I2C1
- DCD I2C2_IRQHandler ; 28: I2C2
- DCD 0 ; 29: reserved; not for SPIFI anymore
- DCD SSP0_IRQHandler ; 30: SSP0
- DCD SSP1_IRQHandler ; 31: SSP1
- DCD PLL0_IRQHandler ; 32: PLL0 Lock (Main PLL)
- DCD RTC_IRQHandler ; 33: Real Time Clock
- DCD EINT0_IRQHandler ; 34: External Interrupt 0
- DCD EINT1_IRQHandler ; 35: External Interrupt 1
- DCD EINT2_IRQHandler ; 36: External Interrupt 2
- DCD EINT3_IRQHandler ; 37: External Interrupt 3
- DCD ADC_IRQHandler ; 38: A/D Converter
- DCD BOD_IRQHandler ; 39: Brown-Out Detect
- DCD USB_IRQHandler ; 40: USB
- DCD CAN_IRQHandler ; 41: CAN
- DCD DMA_IRQHandler ; 42: General Purpose DMA
- DCD I2S_IRQHandler ; 43: I2S
- DCD ENET_IRQHandler ; 44: Ethernet
- DCD MCI_IRQHandler ; 45: MCI Card
- DCD MCPWM_IRQHandler ; 46: Motor Control PWM
- DCD QEI_IRQHandler ; 47: Quadrature Encoder Interface
- DCD PLL1_IRQHandler ; 48: PLL1 Lock (USB PLL)
- DCD USBActivity_IRQHandler ; 49: USB Activity Interrupt
- DCD CANActivity_IRQHandler ; 50: CAN Activity Interrupt
- DCD UART4_IRQHandler ; 51: UART4
- DCD SSP2_IRQHandler ; 52: SSP2
- DCD LCD_IRQHandler ; 53: LCD
- DCD GPIO_IRQHandler ; 54: GPIO
- DCD PWM0_IRQHandler ; 55: PWM0
- DCD EEPROM_IRQHandler ; 56: EEPROM
-
-
-
-
-__Vectors_End
-
-__Vectors EQU __vector_table
-__Vectors_Size EQU __Vectors_End - __Vectors
-
- PUBLIC CRP_Value
- RSEG CRPKEY : CODE(2)
-CRP_Value
- DCD 0xFFFFFFFF
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; Default interrupt handlers.
-;;
- THUMB
-
- PUBWEAK Reset_Handler
- SECTION .text:CODE:REORDER(2)
-Reset_Handler
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__iar_program_start
- BX R0
-
- PUBWEAK NMI_Handler
- SECTION .text:CODE:REORDER(1)
-NMI_Handler
- B NMI_Handler
-
- PUBWEAK HardFault_Handler
- SECTION .text:CODE:REORDER(1)
-HardFault_Handler
- B HardFault_Handler
-
- PUBWEAK MemManage_Handler
- SECTION .text:CODE:REORDER(1)
-MemManage_Handler
- B MemManage_Handler
-
- PUBWEAK BusFault_Handler
- SECTION .text:CODE:REORDER(1)
-BusFault_Handler
- B BusFault_Handler
-
- PUBWEAK UsageFault_Handler
- SECTION .text:CODE:REORDER(1)
-UsageFault_Handler
- B UsageFault_Handler
-
- PUBWEAK SVC_Handler
- SECTION .text:CODE:REORDER(1)
-SVC_Handler
- B SVC_Handler
-
- PUBWEAK DebugMon_Handler
- SECTION .text:CODE:REORDER(1)
-DebugMon_Handler
- B DebugMon_Handler
-
- PUBWEAK PendSV_Handler
- SECTION .text:CODE:REORDER(1)
-PendSV_Handler
- B PendSV_Handler
-
- PUBWEAK SysTick_Handler
- SECTION .text:CODE:REORDER(1)
-SysTick_Handler
- B SysTick_Handler
-
- PUBWEAK WDT_IRQHandler
- SECTION .text:CODE:REORDER(1)
-WDT_IRQHandler
- B WDT_IRQHandler
-
- PUBWEAK TIMER0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-TIMER0_IRQHandler
- B TIMER0_IRQHandler
-
- PUBWEAK TIMER1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-TIMER1_IRQHandler
- B TIMER1_IRQHandler
-
- PUBWEAK TIMER2_IRQHandler
- SECTION .text:CODE:REORDER(1)
-TIMER2_IRQHandler
- B TIMER2_IRQHandler
-
- PUBWEAK TIMER3_IRQHandler
- SECTION .text:CODE:REORDER(1)
-TIMER3_IRQHandler
- B TIMER3_IRQHandler
-
- PUBWEAK UART0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-UART0_IRQHandler
- B UART0_IRQHandler
-
- PUBWEAK UART1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-UART1_IRQHandler
- B UART1_IRQHandler
-
- PUBWEAK UART2_IRQHandler
- SECTION .text:CODE:REORDER(1)
-UART2_IRQHandler
- B UART2_IRQHandler
-
- PUBWEAK UART3_IRQHandler
- SECTION .text:CODE:REORDER(1)
-UART3_IRQHandler
- B UART3_IRQHandler
-
- PUBWEAK PWM1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-PWM1_IRQHandler
- B PWM1_IRQHandler
-
- PUBWEAK I2C0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-I2C0_IRQHandler
- B I2C0_IRQHandler
-
- PUBWEAK I2C1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-I2C1_IRQHandler
- B I2C1_IRQHandler
-
- PUBWEAK I2C2_IRQHandler
- SECTION .text:CODE:REORDER(1)
-I2C2_IRQHandler
- B I2C2_IRQHandler
-
- ;PUBWEAK SPIFI_IRQHandler
- ;SECTION .text:CODE:REORDER(1)
-;SPIFI_IRQHandler
- ;B SPIFI_IRQHandler
-
- PUBWEAK SSP0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-SSP0_IRQHandler
- B SSP0_IRQHandler
-
- PUBWEAK SSP1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-SSP1_IRQHandler
- B SSP1_IRQHandler
-
- PUBWEAK PLL0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-PLL0_IRQHandler
- B PLL0_IRQHandler
-
- PUBWEAK RTC_IRQHandler
- SECTION .text:CODE:REORDER(1)
-RTC_IRQHandler
- B RTC_IRQHandler
-
- PUBWEAK EINT0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-EINT0_IRQHandler
- B EINT0_IRQHandler
-
- PUBWEAK EINT1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-EINT1_IRQHandler
- B EINT1_IRQHandler
-
- PUBWEAK EINT2_IRQHandler
- SECTION .text:CODE:REORDER(1)
-EINT2_IRQHandler
- B EINT2_IRQHandler
-
- PUBWEAK EINT3_IRQHandler
- SECTION .text:CODE:REORDER(1)
-EINT3_IRQHandler
- B EINT3_IRQHandler
-
- PUBWEAK ADC_IRQHandler
- SECTION .text:CODE:REORDER(1)
-ADC_IRQHandler
- B ADC_IRQHandler
-
- PUBWEAK BOD_IRQHandler
- SECTION .text:CODE:REORDER(1)
-BOD_IRQHandler
- B BOD_IRQHandler
-
- PUBWEAK USB_IRQHandler
- SECTION .text:CODE:REORDER(1)
-USB_IRQHandler
- B USB_IRQHandler
-
- PUBWEAK CAN_IRQHandler
- SECTION .text:CODE:REORDER(1)
-CAN_IRQHandler
- B CAN_IRQHandler
-
- PUBWEAK DMA_IRQHandler
- SECTION .text:CODE:REORDER(1)
-DMA_IRQHandler
- B DMA_IRQHandler
-
- PUBWEAK I2S_IRQHandler
- SECTION .text:CODE:REORDER(1)
-I2S_IRQHandler
- B I2S_IRQHandler
-
- PUBWEAK ENET_IRQHandler
- SECTION .text:CODE:REORDER(1)
-ENET_IRQHandler
- B ENET_IRQHandler
-
- PUBWEAK MCI_IRQHandler
- SECTION .text:CODE:REORDER(1)
-MCI_IRQHandler
- B MCI_IRQHandler
-
- PUBWEAK MCPWM_IRQHandler
- SECTION .text:CODE:REORDER(1)
-MCPWM_IRQHandler
- B MCPWM_IRQHandler
-
- PUBWEAK QEI_IRQHandler
- SECTION .text:CODE:REORDER(1)
-QEI_IRQHandler
- B QEI_IRQHandler
-
- PUBWEAK PLL1_IRQHandler
- SECTION .text:CODE:REORDER(1)
-PLL1_IRQHandler
- B PLL1_IRQHandler
-
- PUBWEAK USBActivity_IRQHandler
- SECTION .text:CODE:REORDER(1)
-USBActivity_IRQHandler
- B USBActivity_IRQHandler
-
- PUBWEAK CANActivity_IRQHandler
- SECTION .text:CODE:REORDER(1)
-CANActivity_IRQHandler
- B CANActivity_IRQHandler
-
- PUBWEAK UART4_IRQHandler
- SECTION .text:CODE:REORDER(1)
-UART4_IRQHandler
- B UART4_IRQHandler
-
- PUBWEAK SSP2_IRQHandler
- SECTION .text:CODE:REORDER(1)
-SSP2_IRQHandler
- B SSP2_IRQHandler
-
- PUBWEAK LCD_IRQHandler
- SECTION .text:CODE:REORDER(1)
-LCD_IRQHandler
- B LCD_IRQHandler
-
- PUBWEAK GPIO_IRQHandler
- SECTION .text:CODE:REORDER(1)
-GPIO_IRQHandler
- B GPIO_IRQHandler
-
- PUBWEAK PWM0_IRQHandler
- SECTION .text:CODE:REORDER(1)
-PWM0_IRQHandler
- B PWM0_IRQHandler
-
- PUBWEAK EEPROM_IRQHandler
- SECTION .text:CODE:REORDER(1)
-EEPROM_IRQHandler
- B EEPROM_IRQHandler
-
- END
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC407x_8x_177x_8x.s b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC407x_8x_177x_8x.s
deleted file mode 100644
index 81a4008c85..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC407x_8x_177x_8x.s
+++ /dev/null
@@ -1,419 +0,0 @@
-;/*****************************************************************************
-; * @file: startup_LPC407x_8x.s
-; * @purpose: CMSIS Cortex-M4 Core Device Startup File
-; * for the NXP LPC40xx Device Series
-; * @version: V1.00
-; * @date: September 2012
-; *----------------------------------------------------------------------------
-; *
-; * Copyright (C) 2010 ARM Limited. All rights reserved.
-; *
-; * ARM Limited (ARM) is supplying this software for use with Cortex-Mx
-; * processor based microcontrollers. This file can be freely distributed
-; * within development tools that are supporting such ARM based processors.
-; *
-; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
-; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
-; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
-; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
-; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
-; *
-; ******************************************************************************/
-
-
-;
-; The modules in this file are included in the libraries, and may be replaced
-; by any user-defined modules that define the PUBLIC symbol _program_start or
-; a user defined start symbol.
-; To override the cstartup defined in the library, simply add your modified
-; version to the workbench project.
-;
-; The vector table is normally located at address 0.
-; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
-; The name "__vector_table" has special meaning for C-SPY:
-; it is where the SP start value is found, and the NVIC vector
-; table register (VTOR) is initialized to this address if != 0.
-;
-; Cortex-M version
-;
-
- MODULE ?cstartup
-
- ;; Forward declaration of sections.
- SECTION CSTACK:DATA:NOROOT(3)
-
- SECTION .intvec:CODE:NOROOT(2)
-
- EXTERN __iar_program_start
- EXTERN SystemInit
- PUBLIC __vector_table
- PUBLIC __vector_table_0x1c
- PUBLIC __Vectors
- PUBLIC __Vectors_End
- PUBLIC __Vectors_Size
-
- DATA
-
-__vector_table
- DCD sfe(CSTACK)
- DCD Reset_Handler
-
- DCD NMI_Handler
- DCD HardFault_Handler
- DCD MemManage_Handler
- DCD BusFault_Handler
- DCD UsageFault_Handler
-__vector_table_0x1c
- DCD 0
- DCD 0
- DCD 0
- DCD 0
- DCD SVC_Handler
- DCD DebugMon_Handler
- DCD 0
- DCD PendSV_Handler
- DCD SysTick_Handler
-
- ; External Interrupts
- DCD WDT_IRQHandler ; 16: Watchdog Timer
- DCD TIMER0_IRQHandler ; 17: Timer0
- DCD TIMER1_IRQHandler ; 18: Timer1
- DCD TIMER2_IRQHandler ; 19: Timer2
- DCD TIMER3_IRQHandler ; 20: Timer3
- DCD UART0_IRQHandler ; 21: UART0
- DCD UART1_IRQHandler ; 22: UART1
- DCD UART2_IRQHandler ; 23: UART2
- DCD UART3_IRQHandler ; 24: UART3
- DCD PWM1_IRQHandler ; 25: PWM1
- DCD I2C0_IRQHandler ; 26: I2C0
- DCD I2C1_IRQHandler ; 27: I2C1
- DCD I2C2_IRQHandler ; 28: I2C2
- DCD 0 ; 29: Reserved
- DCD SSP0_IRQHandler ; 30: SSP0
- DCD SSP1_IRQHandler ; 31: SSP1
- DCD PLL0_IRQHandler ; 32: PLL0 Lock (Main PLL)
- DCD RTC_IRQHandler ; 33: Real Time Clock
- DCD EINT0_IRQHandler ; 34: External Interrupt 0
- DCD EINT1_IRQHandler ; 35: External Interrupt 1
- DCD EINT2_IRQHandler ; 36: External Interrupt 2
- DCD EINT3_IRQHandler ; 37: External Interrupt 3
- DCD ADC_IRQHandler ; 38: A/D Converter
- DCD BOD_IRQHandler ; 39: Brown-Out Detect
- DCD USB_IRQHandler ; 40: USB
- DCD CAN_IRQHandler ; 41: CAN
- DCD DMA_IRQHandler ; 42: General Purpose DMA
- DCD I2S_IRQHandler ; 43: I2S
- DCD ENET_IRQHandler ; 44: Ethernet
- DCD MCI_IRQHandler ; 45: MCI Card
- DCD MCPWM_IRQHandler ; 46: Motor Control PWM
- DCD QEI_IRQHandler ; 47: Quadrature Encoder Interface
- DCD PLL1_IRQHandler ; 48: PLL1 Lock (USB PLL)
- DCD USBActivity_IRQHandler ; 49: USB Activity Interrupt
- DCD CANActivity_IRQHandler ; 50: CAN Activity Interrupt
- DCD UART4_IRQHandler ; 51: UART4
- DCD SSP2_IRQHandler ; 52: SSP2
- DCD LCD_IRQHandler ; 53: LCD
- DCD GPIO_IRQHandler ; 54: GPIO
- DCD PWM0_IRQHandler ; 55: PWM0
- DCD EEPROM_IRQHandler ; 56: EEPROM
-
-
-__Vectors_End
-
-__Vectors EQU __vector_table
-__Vectors_Size EQU __Vectors_End - __Vectors
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; Default interrupt handlers.
-;;
- THUMB
-
- PUBWEAK Reset_Handler
- SECTION .text:CODE:REORDER:NOROOT(2)
-Reset_Handler
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__iar_program_start
- BX R0
-
- PUBWEAK NMI_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-NMI_Handler
- B NMI_Handler
-
- PUBWEAK HardFault_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-HardFault_Handler
- B HardFault_Handler
-
- PUBWEAK MemManage_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-MemManage_Handler
- B MemManage_Handler
-
- PUBWEAK BusFault_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-BusFault_Handler
- B BusFault_Handler
-
- PUBWEAK UsageFault_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UsageFault_Handler
- B UsageFault_Handler
-
- PUBWEAK SVC_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-SVC_Handler
- B SVC_Handler
-
- PUBWEAK DebugMon_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-DebugMon_Handler
- B DebugMon_Handler
-
- PUBWEAK PendSV_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-PendSV_Handler
- B PendSV_Handler
-
- PUBWEAK SysTick_Handler
- SECTION .text:CODE:REORDER:NOROOT(1)
-SysTick_Handler
- B SysTick_Handler
-
- PUBWEAK WDT_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-WDT_IRQHandler
- B WDT_IRQHandler
-
- PUBWEAK TIMER0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-TIMER0_IRQHandler
- B TIMER0_IRQHandler
-
- PUBWEAK TIMER1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-TIMER1_IRQHandler
- B TIMER1_IRQHandler
-
- PUBWEAK TIMER2_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-TIMER2_IRQHandler
- B TIMER2_IRQHandler
-
- PUBWEAK TIMER3_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-TIMER3_IRQHandler
- B TIMER3_IRQHandler
-
- PUBWEAK UART0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UART0_IRQHandler
- B UART0_IRQHandler
-
- PUBWEAK UART1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UART1_IRQHandler
- B UART1_IRQHandler
-
- PUBWEAK UART2_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UART2_IRQHandler
- B UART2_IRQHandler
-
- PUBWEAK UART3_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UART3_IRQHandler
- B UART3_IRQHandler
-
- PUBWEAK PWM1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-PWM1_IRQHandler
- B PWM1_IRQHandler
-
- PUBWEAK I2C0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-I2C0_IRQHandler
- B I2C0_IRQHandler
-
- PUBWEAK I2C1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-I2C1_IRQHandler
- B I2C1_IRQHandler
-
- PUBWEAK I2C2_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-I2C2_IRQHandler
- B I2C2_IRQHandler
-
-; PUBWEAK SPIFI_IRQHandler
-; SECTION .text:CODE:REORDER:NOROOT(1)
-;SPIFI_IRQHandler
-; B SPIFI_IRQHandler
-
- PUBWEAK SSP0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-SSP0_IRQHandler
- B SSP0_IRQHandler
-
- PUBWEAK SSP1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-SSP1_IRQHandler
- B SSP1_IRQHandler
-
- PUBWEAK PLL0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-PLL0_IRQHandler
- B PLL0_IRQHandler
-
- PUBWEAK RTC_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-RTC_IRQHandler
- B RTC_IRQHandler
-
- PUBWEAK EINT0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-EINT0_IRQHandler
- B EINT0_IRQHandler
-
- PUBWEAK EINT1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-EINT1_IRQHandler
- B EINT1_IRQHandler
-
- PUBWEAK EINT2_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-EINT2_IRQHandler
- B EINT2_IRQHandler
-
- PUBWEAK EINT3_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-EINT3_IRQHandler
- B EINT3_IRQHandler
-
- PUBWEAK ADC_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-ADC_IRQHandler
- B ADC_IRQHandler
-
- PUBWEAK BOD_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-BOD_IRQHandler
- B BOD_IRQHandler
-
- PUBWEAK USB_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-USB_IRQHandler
- B USB_IRQHandler
-
- PUBWEAK CAN_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-CAN_IRQHandler
- B CAN_IRQHandler
-
- PUBWEAK DMA_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-DMA_IRQHandler
- B DMA_IRQHandler
-
- PUBWEAK I2S_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-I2S_IRQHandler
- B I2S_IRQHandler
-
- PUBWEAK ENET_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-ENET_IRQHandler
- B ENET_IRQHandler
-
- PUBWEAK MCI_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-MCI_IRQHandler
- B MCI_IRQHandler
-
- PUBWEAK MCPWM_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-MCPWM_IRQHandler
- B MCPWM_IRQHandler
-
- PUBWEAK QEI_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-QEI_IRQHandler
- B QEI_IRQHandler
-
- PUBWEAK PLL1_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-PLL1_IRQHandler
- B PLL1_IRQHandler
-
- PUBWEAK USBActivity_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-USBActivity_IRQHandler
- B USBActivity_IRQHandler
-
- PUBWEAK CANActivity_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-CANActivity_IRQHandler
- B CANActivity_IRQHandler
-
- PUBWEAK UART4_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-UART4_IRQHandler
- B UART4_IRQHandler
-
- PUBWEAK SSP2_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-SSP2_IRQHandler
- B SSP2_IRQHandler
-
- PUBWEAK LCD_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-LCD_IRQHandler
- B LCD_IRQHandler
-
- PUBWEAK GPIO_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-GPIO_IRQHandler
- B GPIO_IRQHandler
-
- PUBWEAK PWM0_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-PWM0_IRQHandler
- B PWM0_IRQHandler
-
- PUBWEAK EEPROM_IRQHandler
- SECTION .text:CODE:REORDER:NOROOT(1)
-EEPROM_IRQHandler
- B EEPROM_IRQHandler
-
-#ifndef SRAM
- SECTION .crp:CODE:ROOT(2)
- DATA
-
-/* Code Read Protection
-CRP1 0x12345678 - Write to RAM command can not access RAM below 0x10000200.
- - Read Memory command: disabled.
- - Copy RAM to Flash command: cannot write to Sector 0.
- - "Go" command: disabled.
- - Erase sector(s) command: can erase any individual sector except
- sector 0 only, or can erase all sectors at once.
- - Compare command: disabled
-CRP2 0x87654321 - Write to RAM command: disabled.
- - Copy RAM to Flash: disabled.
- - Erase command: only allows erase of all sectors.
-CRP3 0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
- by pulling PIO0_1 LOW is disabled if a valid user code is
- present in flash sector 0.
-Caution: If CRP3 is selected, no future factory testing can be
-performed on the device.
-*/
-
-#ifndef CRP
- #define CRP 0xFFFFFFFF
-#endif
-
- DCD CRP
-#endif
- END
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC177x_8x.c b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC177x_8x.c
deleted file mode 100644
index ee222aee7e..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC177x_8x.c
+++ /dev/null
@@ -1,507 +0,0 @@
-/**********************************************************************
-* $Id$ system_LPC177x_8x.c 2011-06-02
-*//**
-* @file system_LPC177x_8x.c
-* @brief CMSIS Cortex-M3 Device Peripheral Access Layer Source File
-* for the NXP LPC177x_8x Device Series
-*
-* ARM Limited (ARM) is supplying this software for use with
-* Cortex-M processor based microcontrollers. This file can be
-* freely distributed within development tools that are supporting
-* such ARM based processors.
-*
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#include <stdint.h>
-#include "LPC177x_8x.h"
-#include "system_LPC177x_8x.h"
-
-#define __CLK_DIV(x,y) (((y) == 0) ? 0: (x)/(y))
-
-/*
-//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-*/
-/*--------------------- Clock Configuration ----------------------------------
-//
-// <e> Clock Configuration
-// <h> System Controls and Status Register (SCS - address 0x400F C1A0)
-// <o1.0> EMC Shift Control Bit
-// <i> Controls how addresses are output on the EMC address pins for static memories
-// <0=> Static CS addresses match bus width; AD[1] = 0 for 32 bit, AD[0] = 0 for 16+32 bit (Bit 0 is 0)
-// <1=> Static CS addresses start at LSB 0 regardless of memory width (Bit 0 is 1)
-//
-// <o1.1> EMC Reset Disable Bit
-// <i> If 0 (zero), all registers and functions of the EMC are initialized upon any reset condition
-// <i> If 1, EMC is still retained its state through a warm reset
-// <0=> Both EMC resets are asserted when any type of chip reset event occurs (Bit 1 is 0)
-// <1=> Portions of EMC will only be reset by POR or BOR event (Bit 1 is 1)
-//
-// <o1.2> EMC Burst Control
-// <i> Set to 1 to prevent multiple sequential accesses to memory via EMC static memory chip selects
-// <0=> Burst enabled (Bit 2 is 0)
-// <1=> Bust disbled (Bit 2 is 1)
-//
-// <o1.3> MCIPWR Active Level
-// <i> Selects the active level for the SD card interface signal SD_PWR
-// <0=> SD_PWR is active low (inverted output of the SD Card interface block) (Bit 3 is 0)
-// <1=> SD_PWR is active high (follows the output of the SD Card interface block) (Bit 3 is 1)
-//
-// <o1.4> Main Oscillator Range Select
-// <0=> In Range 1 MHz to 20 MHz (Bit 4 is 0)
-// <1=> In Range 15 MHz to 25 MHz (Bit 4 is 1)
-//
-// <o1.5> Main Oscillator enable
-// <i> 0 (zero) means disabled, 1 means enable
-//
-// <o1.6> Main Oscillator status (Read-Only)
-// </h>
-//
-// <h> Clock Source Select Register (CLKSRCSEL - address 0x400F C10C)
-// <o2.0> CLKSRC: Select the clock source for sysclk to PLL0 clock
-// <0=> Internal RC oscillator (Bit 0 is 0)
-// <1=> Main oscillator (Bit 0 is 1)
-// </h>
-//
-// <e3>PLL0 Configuration (Main PLL PLL0CFG - address 0x400F C084)
-// <i> F_in is in the range of 1 MHz to 25 MHz
-// <i> F_cco = (F_in * M * 2 * P) is in range of 156 MHz to 320 MHz
-// <i> PLL out clock = (F_cco / (2 * P)) is in rane of 9.75 MHz to 160 MHz
-//
-// <o4.0..4> MSEL: PLL Multiplier Value
-// <i> M Value
-// <1-32><#-1>
-//
-// <o4.5..6> PSEL: PLL Divider Value
-// <i> P Value
-// <0=> 1
-// <1=> 2
-// <2=> 4
-// <3=> 8
-// </e>
-//
-// <e5>PLL1 Configuration (Alt PLL PLL1CFG - address 0x400F C0A4)
-// <i> F_in is in the range of 1 MHz to 25 MHz
-// <i> F_cco = (F_in * M * 2 * P) is in range of 156 MHz to 320 MHz
-// <i> PLL out clock = (F_cco / (2 * P)) is in rane of 9.75 MHz to 160 MHz
-//
-// <o6.0..4> MSEL: PLL Multiplier Value
-// <i> M Value
-// <1-32><#-1>
-//
-// <o6.5..6> PSEL: PLL Divider Value
-// <i> P Value
-// <0=> 1
-// <1=> 2
-// <2=> 4
-// <3=> 8
-// </e>
-//
-// <h> CPU Clock Selection Register (CCLKSEL - address 0x400F C104)
-// <o7.0..4> CCLKDIV: Select the value for divider of CPU clock (CCLK)
-// <i> 0: The divider is turned off. No clock will be provided to the CPU
-// <i> n: The input clock is divided by n to produce the CPU clock
-// <0-31>
-//
-// <o7.8> CCLKSEL: Select the input to the divider of CPU clock
-// <0=> sysclk clock is used
-// <1=> Main PLL0 clock is used
-// </h>
-//
-// <h> USB Clock Selection Register (USBCLKSEL - 0x400F C108)
-// <o8.0..4> USBDIV: USB clock (source PLL0) divider selection
-// <0=> Divider is off and no clock provides to USB subsystem
-// <4=> Divider value is 4 (The source clock is divided by 4)
-// <6=> Divider value is 6 (The source clock is divided by 6)
-//
-// <o8.8..9> USBSEL: Select the source for USB clock divider
-// <i> When CPU clock is selected, the USB can be accessed
-// <i> by software but cannot perform USB functions
-// <0=> sysclk clock (the clock input to PLL0)
-// <1=> The clock output from PLL0
-// <2=> The clock output from PLL1
-// </h>
-//
-// <h> EMC Clock Selection Register (EMCCLKSEL - address 0x400F C100)
-// <o9.0> EMCDIV: Set the divider for EMC clock
-// <0=> Divider value is 1
-// <1=> Divider value is 2 (EMC clock is equal a half of input clock)
-// </h>
-//
-// <h> Peripheral Clock Selection Register (PCLKSEL - address 0x400F C1A8)
-// <o10.0..4> PCLKDIV: APB Peripheral clock divider
-// <i> 0: The divider is turned off. No clock will be provided to APB peripherals
-// <i> n: The input clock is divided by n to produce the APB peripheral clock
-// <0-31>
-// </h>
-//
-// <h> Power Control for Peripherals Register (PCONP - address 0x400F C1C8)
-// <o11.0> PCLCD: LCD controller power/clock enable (bit 0)
-// <o11.1> PCTIM0: Timer/Counter 0 power/clock enable (bit 1)
-// <o11.2> PCTIM1: Timer/Counter 1 power/clock enable (bit 2)
-// <o11.3> PCUART0: UART 0 power/clock enable (bit 3)
-// <o11.4> PCUART1: UART 1 power/clock enable (bit 4)
-// <o11.5> PCPWM0: PWM0 power/clock enable (bit 5)
-// <o11.6> PCPWM1: PWM1 power/clock enable (bit 6)
-// <o11.7> PCI2C0: I2C 0 interface power/clock enable (bit 7)
-// <o11.8> PCUART4: UART 4 power/clock enable (bit 8)
-// <o11.9> PCRTC: RTC and Event Recorder power/clock enable (bit 9)
-// <o11.10> PCSSP1: SSP 1 interface power/clock enable (bit 10)
-// <o11.11> PCEMC: External Memory Controller power/clock enable (bit 11)
-// <o11.12> PCADC: A/D converter power/clock enable (bit 12)
-// <o11.13> PCCAN1: CAN controller 1 power/clock enable (bit 13)
-// <o11.14> PCCAN2: CAN controller 2 power/clock enable (bit 14)
-// <o11.15> PCGPIO: IOCON, GPIO, and GPIO interrupts power/clock enable (bit 15)
-// <o11.17> PCMCPWM: Motor Control PWM power/clock enable (bit 17)
-// <o11.18> PCQEI: Quadrature encoder interface power/clock enable (bit 18)
-// <o11.19> PCI2C1: I2C 1 interface power/clock enable (bit 19)
-// <o11.20> PCSSP2: SSP 2 interface power/clock enable (bit 20)
-// <o11.21> PCSSP0: SSP 0 interface power/clock enable (bit 21)
-// <o11.22> PCTIM2: Timer 2 power/clock enable (bit 22)
-// <o11.23> PCTIM3: Timer 3 power/clock enable (bit 23)
-// <o11.24> PCUART2: UART 2 power/clock enable (bit 24)
-// <o11.25> PCUART3: UART 3 power/clock enable (bit 25)
-// <o11.26> PCI2C2: I2C 2 interface power/clock enable (bit 26)
-// <o11.27> PCI2S: I2S interface power/clock enable (bit 27)
-// <o11.28> PCSDC: SD Card interface power/clock enable (bit 28)
-// <o11.29> PCGPDMA: GPDMA function power/clock enable (bit 29)
-// <o11.30> PCENET: Ethernet block power/clock enable (bit 30)
-// <o11.31> PCUSB: USB interface power/clock enable (bit 31)
-// </h>
-//
-// <h> Clock Output Configuration Register (CLKOUTCFG)
-// <o12.0..3> CLKOUTSEL: Clock Source for CLKOUT Selection
-// <0=> CPU clock
-// <1=> Main Oscillator
-// <2=> Internal RC Oscillator
-// <3=> USB clock
-// <4=> RTC Oscillator
-// <5=> unused
-// <6=> Watchdog Oscillator
-//
-// <o12.4..7> CLKOUTDIV: Output Clock Divider
-// <1-16><#-1>
-//
-// <o12.8> CLKOUT_EN: CLKOUT enable
-// </h>
-//
-// </e>
-*/
-
-#define CLOCK_SETUP 1
-#define SCS_Val 0x00000021
-#define CLKSRCSEL_Val 0x00000001
-#define PLL0_SETUP 1
-#define PLL0CFG_Val 0x00000009
-#define PLL1_SETUP 1
-#define PLL1CFG_Val 0x00000023
-#define CCLKSEL_Val 0x00000101
-#define USBCLKSEL_Val 0x00000201
-#define EMCCLKSEL_Val 0x00000001
-#define PCLKSEL_Val 0x00000002
-#define PCONP_Val 0x042887DE
-#define CLKOUTCFG_Val 0x00000100
-
-
-/*--------------------- Flash Accelerator Configuration ----------------------
-//
-// <e> Flash Accelerator Configuration register (FLASHCFG - address 0x400F C000)
-// <o1.12..15> FLASHTIM: Flash Access Time
-// <0=> 1 CPU clock (for CPU clock up to 20 MHz)
-// <1=> 2 CPU clocks (for CPU clock up to 40 MHz)
-// <2=> 3 CPU clocks (for CPU clock up to 60 MHz)
-// <3=> 4 CPU clocks (for CPU clock up to 80 MHz)
-// <4=> 5 CPU clocks (for CPU clock up to 100 MHz)
-// <5=> 6 CPU clocks (for any CPU clock)
-// </e>
-*/
-
-#define FLASH_SETUP 1
-#define FLASHCFG_Val 0x00005000
-
-/*----------------------------------------------------------------------------
- Check the register settings
- *----------------------------------------------------------------------------*/
-#define CHECK_RANGE(val, min, max) ((val < min) || (val > max))
-#define CHECK_RSVD(val, mask) (val & mask)
-
-/* Clock Configuration -------------------------------------------------------*/
-#if (CHECK_RSVD((SCS_Val), ~0x0000003F))
- #error "SCS: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RANGE((CLKSRCSEL_Val), 0, 1))
- #error "CLKSRCSEL: Value out of range!"
-#endif
-
-#if (CHECK_RSVD((PLL0CFG_Val), ~0x0000007F))
- #error "PLL0CFG: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PLL1CFG_Val), ~0x0000007F))
- #error "PLL1CFG: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((CCLKSEL_Val), ~0x0000011F))
- #error "CCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((USBCLKSEL_Val), ~0x0000031F))
- #error "USBCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((EMCCLKSEL_Val), ~0x00000001))
- #error "EMCCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PCLKSEL_Val), ~0x0000001F))
- #error "PCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PCONP_Val), ~0xFFFEFFFF))
- #error "PCONP: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((CLKOUTCFG_Val), ~0x000001FF))
- #error "CLKOUTCFG: Invalid values of reserved bits!"
-#endif
-
-/* Flash Accelerator Configuration -------------------------------------------*/
-#if (CHECK_RSVD((FLASHCFG_Val), ~0x0000F000))
- #warning "FLASHCFG: Invalid values of reserved bits!"
-#endif
-
-
-/*----------------------------------------------------------------------------
- DEFINES
- *----------------------------------------------------------------------------*/
-/* pll_out_clk = F_cco / (2 � P)
- F_cco = pll_in_clk � M � 2 � P */
-#define __M ((PLL0CFG_Val & 0x1F) + 1)
-#define __PLL0_CLK(__F_IN) (__F_IN * __M)
-#define __CCLK_DIV (CCLKSEL_Val & 0x1F)
-#define __PCLK_DIV (PCLKSEL_Val & 0x1F)
-#define __ECLK_DIV ((EMCCLKSEL_Val & 0x01) + 1)
-
-/* Determine core clock frequency according to settings */
-#if (CLOCK_SETUP) /* Clock Setup */
-
- #if ((CLKSRCSEL_Val & 0x01) == 1) && ((SCS_Val & 0x20)== 0)
- #error "Main Oscillator is selected as clock source but is not enabled!"
- #endif
-
- #if ((CCLKSEL_Val & 0x100) == 0x100) && (PLL0_SETUP == 0)
- #error "Main PLL is selected as clock source but is not enabled!"
- #endif
-
- #if ((CCLKSEL_Val & 0x100) == 0) /* cclk = sysclk */
- #if ((CLKSRCSEL_Val & 0x01) == 0) /* sysclk = irc_clk */
- #define __CORE_CLK (IRC_OSC / __CCLK_DIV)
- #define __PER_CLK (IRC_OSC/ __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK/ __ECLK_DIV)
- #else /* sysclk = osc_clk */
- #define __CORE_CLK (OSC_CLK / __CCLK_DIV)
- #define __PER_CLK (OSC_CLK/ __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK/ __ECLK_DIV)
- #endif
- #else /* cclk = pll_clk */
- #if ((CLKSRCSEL_Val & 0x01) == 0) /* sysclk = irc_clk */
- #define __CORE_CLK (__PLL0_CLK(IRC_OSC) / __CCLK_DIV)
- #define __PER_CLK (__PLL0_CLK(IRC_OSC) / __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK / __ECLK_DIV)
- #else /* sysclk = osc_clk */
- #define __CORE_CLK (__PLL0_CLK(OSC_CLK) / __CCLK_DIV)
- #define __PER_CLK (__PLL0_CLK(OSC_CLK) / __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK / __ECLK_DIV)
- #endif
- #endif
-
-#else
- #define __CORE_CLK (IRC_OSC)
- #define __PER_CLK (IRC_OSC)
- #define __EMC_CLK (__CORE_CLK)
-#endif
-
-/*----------------------------------------------------------------------------
- Clock Variable definitions
- *----------------------------------------------------------------------------*/
-uint32_t SystemCoreClock = __CORE_CLK;/*!< System Clock Frequency (Core Clock)*/
-uint32_t PeripheralClock = __PER_CLK; /*!< Peripheral Clock Frequency (Pclk) */
-uint32_t EMCClock = __EMC_CLK; /*!< EMC Clock Frequency */
-uint32_t USBClock = (48000000UL); /*!< USB Clock Frequency - this value will
- be updated after call SystemCoreClockUpdate, should be 48MHz*/
-
-
-/*----------------------------------------------------------------------------
- Clock functions
- *----------------------------------------------------------------------------*/
-void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
-{
- /* Determine clock frequency according to clock register values */
- if ((LPC_SC->CCLKSEL &0x100) == 0) { /* cclk = sysclk */
- if ((LPC_SC->CLKSRCSEL & 0x01) == 0) { /* sysclk = irc_clk */
- SystemCoreClock = __CLK_DIV(IRC_OSC , (LPC_SC->CCLKSEL & 0x1F));
- PeripheralClock = __CLK_DIV(IRC_OSC , (LPC_SC->PCLKSEL & 0x1F));
- EMCClock = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));
- }
- else { /* sysclk = osc_clk */
- if ((LPC_SC->SCS & 0x40) == 0) {
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- SystemCoreClock = __CLK_DIV(OSC_CLK , (LPC_SC->CCLKSEL & 0x1F));
- PeripheralClock = __CLK_DIV(OSC_CLK , (LPC_SC->PCLKSEL & 0x1F));
- EMCClock = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));
- }
- }
- }
- else { /* cclk = pll_clk */
- if ((LPC_SC->PLL0STAT & 0x100) == 0) { /* PLL0 not enabled */
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- if ((LPC_SC->CLKSRCSEL & 0x01) == 0) { /* sysclk = irc_clk */
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);
- uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);
- uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;
- SystemCoreClock = __CLK_DIV(IRC_OSC * mul , cpu_div);
- PeripheralClock = __CLK_DIV(IRC_OSC * mul , per_div);
- EMCClock = SystemCoreClock / emc_div;
- }
- else { /* sysclk = osc_clk */
- if ((LPC_SC->SCS & 0x40) == 0) {
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);
- uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);
- uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;
- SystemCoreClock = __CLK_DIV(OSC_CLK * mul , cpu_div);
- PeripheralClock = __CLK_DIV(OSC_CLK * mul , per_div);
- EMCClock = SystemCoreClock / emc_div;
- }
- }
- }
- }
- /* ---update USBClock------------------*/
- if(LPC_SC->USBCLKSEL & (0x01<<8))//Use PLL0 as the input to the USB clock divider
- {
- switch (LPC_SC->USBCLKSEL & 0x1F)
- {
- case 0:
- USBClock = 0; //no clock will be provided to the USB subsystem
- break;
- case 4:
- case 6:
- {
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t usb_div = (LPC_SC->USBCLKSEL & 0x1F);
- if(LPC_SC->CLKSRCSEL & 0x01) //pll_clk_in = main_osc
- USBClock = OSC_CLK * mul / usb_div;
- else //pll_clk_in = irc_clk
- USBClock = IRC_OSC * mul / usb_div;
- }
- break;
- default:
- USBClock = 0; /* this should never happen! */
- }
- }
- else if(LPC_SC->USBCLKSEL & (0x02<<8))//usb_input_clk = alt_pll (pll1)
- {
- if(LPC_SC->CLKSRCSEL & 0x01) //pll1_clk_in = main_osc
- USBClock = (OSC_CLK * ((LPC_SC->PLL1STAT & 0x1F) + 1));
- else //pll1_clk_in = irc_clk
- USBClock = (IRC_OSC * ((LPC_SC->PLL0STAT & 0x1F) + 1));
- }
- else
- USBClock = 0; /* this should never happen! */
-}
-
- /* Determine clock frequency according to clock register values */
-
-/**
- * Initialize the system
- *
- * @param none
- * @return none
- *
- * @brief Setup the microcontroller system.
- * Initialize the System.
- */
-void SystemInit (void)
-{
-#if (CLOCK_SETUP) /* Clock Setup */
- LPC_SC->SCS = SCS_Val;
- if (SCS_Val & (1 << 5)) { /* If Main Oscillator is enabled */
- while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready */
- }
-
- LPC_SC->CLKSRCSEL = CLKSRCSEL_Val; /* Select Clock Source for sysclk/PLL0*/
-
-#if (PLL0_SETUP)
- LPC_SC->PLL0CFG = PLL0CFG_Val;
- LPC_SC->PLL0CON = 0x01; /* PLL0 Enable */
- LPC_SC->PLL0FEED = 0xAA;
- LPC_SC->PLL0FEED = 0x55;
- while (!(LPC_SC->PLL0STAT & (1<<10)));/* Wait for PLOCK0 */
-#endif
-
-#if (PLL1_SETUP)
- LPC_SC->PLL1CFG = PLL1CFG_Val;
- LPC_SC->PLL1CON = 0x01; /* PLL1 Enable */
- LPC_SC->PLL1FEED = 0xAA;
- LPC_SC->PLL1FEED = 0x55;
- while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1 */
-#endif
-
- LPC_SC->CCLKSEL = CCLKSEL_Val; /* Setup Clock Divider */
- LPC_SC->USBCLKSEL = USBCLKSEL_Val; /* Setup USB Clock Divider */
- LPC_SC->EMCCLKSEL = EMCCLKSEL_Val; /* EMC Clock Selection */
- LPC_SC->PCLKSEL = PCLKSEL_Val; /* Peripheral Clock Selection */
- LPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */
- LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */
-#endif
-
- LPC_SC->PBOOST |= 0x03; /* Power Boost control */
-
-#if (FLASH_SETUP == 1) /* Flash Accelerator Setup */
- LPC_SC->FLASHCFG = FLASHCFG_Val|0x03A;
-#endif
-#ifdef __RAM_MODE__
- SCB->VTOR = 0x10000000 & 0x3FFFFF80;
-#else
- SCB->VTOR = 0x00000000 & 0x3FFFFF80;
-#endif
- SystemCoreClockUpdate();
-}
diff --git a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c b/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c
deleted file mode 100644
index b716d06f62..0000000000
--- a/bsp/lpc408x/Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/**********************************************************************
-* $Id$ system_LPC407x_8x_177x_8x.c 2012-01-16
-*//**
-* @file system_LPC407x_8x_177x_8x.c
-* @brief CMSIS Cortex-M3, M4 Device Peripheral Access Layer Source File
-* for the NXP LPC407x_8x_177x_8x Device Series
-*
-* ARM Limited (ARM) is supplying this software for use with
-* Cortex-M processor based microcontrollers. This file can be
-* freely distributed within development tools that are supporting
-* such ARM based processors.
-*
-* @version 1.2
-* @date 20. June. 2012
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2012, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-**********************************************************************/
-
-#include <stdint.h>
-#include "LPC407x_8x_177x_8x.h"
-#include "system_LPC407x_8x_177x_8x.h"
-
-#define __CLK_DIV(x,y) (((y) == 0) ? 0: (x)/(y))
-
-/*
-//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-*/
-/*--------------------- Clock Configuration ----------------------------------
-//
-// <e> Clock Configuration
-// <h> System Controls and Status Register (SCS - address 0x400F C1A0)
-// <o1.0> EMC Shift Control Bit
-// <i> Controls how addresses are output on the EMC address pins for static memories
-// <0=> Static CS addresses match bus width; AD[1] = 0 for 32 bit, AD[0] = 0 for 16+32 bit (Bit 0 is 0)
-// <1=> Static CS addresses start at LSB 0 regardless of memory width (Bit 0 is 1)
-//
-// <o1.1> EMC Reset Disable Bit
-// <i> If 0 (zero), all registers and functions of the EMC are initialized upon any reset condition
-// <i> If 1, EMC is still retained its state through a warm reset
-// <0=> Both EMC resets are asserted when any type of chip reset event occurs (Bit 1 is 0)
-// <1=> Portions of EMC will only be reset by POR or BOR event (Bit 1 is 1)
-//
-// <o1.2> EMC Burst Control
-// <i> Set to 1 to prevent multiple sequential accesses to memory via EMC static memory chip selects
-// <0=> Burst enabled (Bit 2 is 0)
-// <1=> Bust disbled (Bit 2 is 1)
-//
-// <o1.3> MCIPWR Active Level
-// <i> Selects the active level for the SD card interface signal SD_PWR
-// <0=> SD_PWR is active low (inverted output of the SD Card interface block) (Bit 3 is 0)
-// <1=> SD_PWR is active high (follows the output of the SD Card interface block) (Bit 3 is 1)
-//
-// <o1.4> Main Oscillator Range Select
-// <0=> In Range 1 MHz to 20 MHz (Bit 4 is 0)
-// <1=> In Range 15 MHz to 25 MHz (Bit 4 is 1)
-//
-// <o1.5> Main Oscillator enable
-// <i> 0 (zero) means disabled, 1 means enable
-//
-// <o1.6> Main Oscillator status (Read-Only)
-// </h>
-//
-// <h> Clock Source Select Register (CLKSRCSEL - address 0x400F C10C)
-// <o2.0> CLKSRC: Select the clock source for sysclk to PLL0 clock
-// <0=> Internal RC oscillator (Bit 0 is 0)
-// <1=> Main oscillator (Bit 0 is 1)
-// </h>
-//
-// <e3>PLL0 Configuration (Main PLL PLL0CFG - address 0x400F C084)
-// <i> F_in is in the range of 1 MHz to 25 MHz
-// <i> F_cco = (F_in * M * 2 * P) is in range of 156 MHz to 320 MHz
-// <i> PLL out clock = (F_cco / (2 * P)) is in rane of 9.75 MHz to 160 MHz
-//
-// <o4.0..4> MSEL: PLL Multiplier Value
-// <i> M Value
-// <1-32><#-1>
-//
-// <o4.5..6> PSEL: PLL Divider Value
-// <i> P Value
-// <0=> 1
-// <1=> 2
-// <2=> 4
-// <3=> 8
-// </e>
-//
-// <e5>PLL1 Configuration (Alt PLL PLL1CFG - address 0x400F C0A4)
-// <i> F_in is in the range of 1 MHz to 25 MHz
-// <i> F_cco = (F_in * M * 2 * P) is in range of 156 MHz to 320 MHz
-// <i> PLL out clock = (F_cco / (2 * P)) is in rane of 9.75 MHz to 160 MHz
-//
-// <o6.0..4> MSEL: PLL Multiplier Value
-// <i> M Value
-// <1-32><#-1>
-//
-// <o6.5..6> PSEL: PLL Divider Value
-// <i> P Value
-// <0=> 1
-// <1=> 2
-// <2=> 4
-// <3=> 8
-// </e>
-//
-// <h> CPU Clock Selection Register (CCLKSEL - address 0x400F C104)
-// <o7.0..4> CCLKDIV: Select the value for divider of CPU clock (CCLK)
-// <i> 0: The divider is turned off. No clock will be provided to the CPU
-// <i> n: The input clock is divided by n to produce the CPU clock
-// <0-31>
-//
-// <o7.8> CCLKSEL: Select the input to the divider of CPU clock
-// <0=> sysclk clock is used
-// <1=> Main PLL0 clock is used
-// </h>
-//
-// <h> USB Clock Selection Register (USBCLKSEL - 0x400F C108)
-// <o8.0..4> USBDIV: USB clock (source PLL0) divider selection
-// <0=> Divider is off and no clock provides to USB subsystem
-// <4=> Divider value is 4 (The source clock is divided by 4)
-// <6=> Divider value is 6 (The source clock is divided by 6)
-//
-// <o8.8..9> USBSEL: Select the source for USB clock divider
-// <i> When CPU clock is selected, the USB can be accessed
-// <i> by software but cannot perform USB functions
-// <0=> sysclk clock (the clock input to PLL0)
-// <1=> The clock output from PLL0
-// <2=> The clock output from PLL1
-// </h>
-//
-// <h> EMC Clock Selection Register (EMCCLKSEL - address 0x400F C100)
-// <o9.0> EMCDIV: Set the divider for EMC clock
-// <0=> Divider value is 1
-// <1=> Divider value is 2 (EMC clock is equal a half of input clock)
-// </h>
-//
-// <h> Peripheral Clock Selection Register (PCLKSEL - address 0x400F C1A8)
-// <o10.0..4> PCLKDIV: APB Peripheral clock divider
-// <i> 0: The divider is turned off. No clock will be provided to APB peripherals
-// <i> n: The input clock is divided by n to produce the APB peripheral clock
-// <0-31>
-// </h>
-//
-// <h> SPIFI Clock Selection Register (SPIFICLKSEL - address 0x400F C1B4)
-// <o11.0..4> SPIFIDIV: Set the divider for SPIFI clock
-// <i> 0: The divider is turned off. No clock will be provided to the SPIFI
-// <i> n: The input clock is divided by n to produce the SPIFI clock
-// <0-31>
-//
-// <o11.8..9> SPIFISEL: Select the input clock for SPIFI clock divider
-// <0=> sysclk clock (the clock input to PLL0)
-// <1=> The clock output from PLL0
-// <2=> The clock output from PLL1
-// </h>
-//
-// <h> Power Control for Peripherals Register (PCONP - address 0x400F C1C8)
-// <o12.0> PCLCD: LCD controller power/clock enable (bit 0)
-// <o12.1> PCTIM0: Timer/Counter 0 power/clock enable (bit 1)
-// <o12.2> PCTIM1: Timer/Counter 1 power/clock enable (bit 2)
-// <o12.3> PCUART0: UART 0 power/clock enable (bit 3)
-// <o12.4> PCUART1: UART 1 power/clock enable (bit 4)
-// <o12.5> PCPWM0: PWM0 power/clock enable (bit 5)
-// <o12.6> PCPWM1: PWM1 power/clock enable (bit 6)
-// <o12.7> PCI2C0: I2C 0 interface power/clock enable (bit 7)
-// <o12.8> PCUART4: UART 4 power/clock enable (bit 8)
-// <o12.9> PCRTC: RTC and Event Recorder power/clock enable (bit 9)
-// <o12.10> PCSSP1: SSP 1 interface power/clock enable (bit 10)
-// <o12.11> PCEMC: External Memory Controller power/clock enable (bit 11)
-// <o12.12> PCADC: A/D converter power/clock enable (bit 12)
-// <o12.13> PCCAN1: CAN controller 1 power/clock enable (bit 13)
-// <o12.14> PCCAN2: CAN controller 2 power/clock enable (bit 14)
-// <o12.15> PCGPIO: IOCON, GPIO, and GPIO interrupts power/clock enable (bit 15)
-// <o12.17> PCMCPWM: Motor Control PWM power/clock enable (bit 17)
-// <o12.18> PCQEI: Quadrature encoder interface power/clock enable (bit 18)
-// <o12.19> PCI2C1: I2C 1 interface power/clock enable (bit 19)
-// <o12.20> PCSSP2: SSP 2 interface power/clock enable (bit 20)
-// <o12.21> PCSSP0: SSP 0 interface power/clock enable (bit 21)
-// <o12.22> PCTIM2: Timer 2 power/clock enable (bit 22)
-// <o12.23> PCTIM3: Timer 3 power/clock enable (bit 23)
-// <o12.24> PCUART2: UART 2 power/clock enable (bit 24)
-// <o12.25> PCUART3: UART 3 power/clock enable (bit 25)
-// <o12.26> PCI2C2: I2C 2 interface power/clock enable (bit 26)
-// <o12.27> PCI2S: I2S interface power/clock enable (bit 27)
-// <o12.28> PCSDC: SD Card interface power/clock enable (bit 28)
-// <o12.29> PCGPDMA: GPDMA function power/clock enable (bit 29)
-// <o12.30> PCENET: Ethernet block power/clock enable (bit 30)
-// <o12.31> PCUSB: USB interface power/clock enable (bit 31)
-// </h>
-//
-// <h> Clock Output Configuration Register (CLKOUTCFG)
-// <o13.0..3> CLKOUTSEL: Clock Source for CLKOUT Selection
-// <0=> CPU clock
-// <1=> Main Oscillator
-// <2=> Internal RC Oscillator
-// <3=> USB clock
-// <4=> RTC Oscillator
-// <5=> unused
-// <6=> Watchdog Oscillator
-//
-// <o13.4..7> CLKOUTDIV: Output Clock Divider
-// <1-16><#-1>
-//
-// <o13.8> CLKOUT_EN: CLKOUT enable
-// </h>
-//
-// </e>
-*/
-
-#define CLOCK_SETUP 1
-#define SCS_Val 0x00000020
-#define CLKSRCSEL_Val 0x00000001
-#define PLL0_SETUP 1
-#define PLL0CFG_Val 0x00000009
-#define PLL1_SETUP 1
-#define PLL1CFG_Val 0x00000023
-#define CCLKSEL_Val 0x00000101
-#define USBCLKSEL_Val 0x00000201
-#define EMCCLKSEL_Val 0x00000000
-#define PCLKSEL_Val 0x00000002
-#define SPIFICLKSEL_Val 0x00000002
-#define PCONP_Val 0x042887DE
-#define CLKOUTCFG_Val 0x00000100
-
-#ifdef CORE_M4
-#define LPC_CPACR 0xE000ED88
-
-#define SCB_MVFR0 0xE000EF40
-#define SCB_MVFR0_RESET 0x10110021
-
-#define SCB_MVFR1 0xE000EF44
-#define SCB_MVFR1_RESET 0x11000011
-#endif
-
-
-/*--------------------- Flash Accelerator Configuration ----------------------
-//
-// <e> Flash Accelerator Configuration register (FLASHCFG - address 0x400F C000)
-// <o1.12..15> FLASHTIM: Flash Access Time
-// <0=> 1 CPU clock (for CPU clock up to 20 MHz)
-// <1=> 2 CPU clocks (for CPU clock up to 40 MHz)
-// <2=> 3 CPU clocks (for CPU clock up to 60 MHz)
-// <3=> 4 CPU clocks (for CPU clock up to 80 MHz)
-// <4=> 5 CPU clocks (for CPU clock up to 100 MHz)
-// <5=> 6 CPU clocks (for any CPU clock)
-// </e>
-*/
-
-#define FLASH_SETUP 1
-#define FLASHCFG_Val 0x00005000
-
-/*----------------------------------------------------------------------------
- Check the register settings
- *----------------------------------------------------------------------------*/
-#define CHECK_RANGE(val, min, max) ((val < min) || (val > max))
-#define CHECK_RSVD(val, mask) (val & mask)
-
-/* Clock Configuration -------------------------------------------------------*/
-#if (CHECK_RSVD((SCS_Val), ~0x0000003F))
- #error "SCS: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RANGE((CLKSRCSEL_Val), 0, 1))
- #error "CLKSRCSEL: Value out of range!"
-#endif
-
-#if (CHECK_RSVD((PLL0CFG_Val), ~0x0000007F))
- #error "PLL0CFG: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PLL1CFG_Val), ~0x0000007F))
- #error "PLL1CFG: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((CCLKSEL_Val), ~0x0000011F))
- #error "CCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((USBCLKSEL_Val), ~0x0000031F))
- #error "USBCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((EMCCLKSEL_Val), ~0x00000001))
- #error "EMCCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PCLKSEL_Val), ~0x0000001F))
- #error "PCLKSEL: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((PCONP_Val), ~0xFFFEFFFF))
- #error "PCONP: Invalid values of reserved bits!"
-#endif
-
-#if (CHECK_RSVD((CLKOUTCFG_Val), ~0x000001FF))
- #error "CLKOUTCFG: Invalid values of reserved bits!"
-#endif
-
-/* Flash Accelerator Configuration -------------------------------------------*/
-#if (CHECK_RSVD((FLASHCFG_Val), ~0x0000F000))
- #error "FLASHCFG: Invalid values of reserved bits!"
-#endif
-
-
-/*----------------------------------------------------------------------------
- DEFINES
- *----------------------------------------------------------------------------*/
-/* pll_out_clk = F_cco / (2 ?P)
- F_cco = pll_in_clk ?M ?2 ?P */
-#define __M ((PLL0CFG_Val & 0x1F) + 1)
-#define __PLL0_CLK(__F_IN) (__F_IN * __M)
-#define __CCLK_DIV (CCLKSEL_Val & 0x1F)
-#define __PCLK_DIV (PCLKSEL_Val & 0x1F)
-#define __ECLK_DIV ((EMCCLKSEL_Val & 0x01) + 1)
-
-/* Determine core clock frequency according to settings */
-#if (CLOCK_SETUP) /* Clock Setup */
-
- #if ((CLKSRCSEL_Val & 0x01) == 1) && ((SCS_Val & 0x20)== 0)
- #error "Main Oscillator is selected as clock source but is not enabled!"
- #endif
-
- #if ((CCLKSEL_Val & 0x100) == 0x100) && (PLL0_SETUP == 0)
- #error "Main PLL is selected as clock source but is not enabled!"
- #endif
-
- #if ((CCLKSEL_Val & 0x100) == 0) /* cclk = sysclk */
- #if ((CLKSRCSEL_Val & 0x01) == 0) /* sysclk = irc_clk */
- #define __CORE_CLK (IRC_OSC / __CCLK_DIV)
- #define __PER_CLK (IRC_OSC/ __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK/ __ECLK_DIV)
- #else /* sysclk = osc_clk */
- #define __CORE_CLK (OSC_CLK / __CCLK_DIV)
- #define __PER_CLK (OSC_CLK/ __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK/ __ECLK_DIV)
- #endif
- #else /* cclk = pll_clk */
- #if ((CLKSRCSEL_Val & 0x01) == 0) /* sysclk = irc_clk */
- #define __CORE_CLK (__PLL0_CLK(IRC_OSC) / __CCLK_DIV)
- #define __PER_CLK (__PLL0_CLK(IRC_OSC) / __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK / __ECLK_DIV)
- #else /* sysclk = osc_clk */
- #define __CORE_CLK (__PLL0_CLK(OSC_CLK) / __CCLK_DIV)
- #define __PER_CLK (__PLL0_CLK(OSC_CLK) / __PCLK_DIV)
- #define __EMC_CLK (__CORE_CLK / __ECLK_DIV)
- #endif
- #endif
-
-#else
- #define __CORE_CLK (IRC_OSC)
- #define __PER_CLK (IRC_OSC)
- #define __EMC_CLK (__CORE_CLK)
-#endif
-
-/*----------------------------------------------------------------------------
- Clock Variable definitions
- *----------------------------------------------------------------------------*/
-uint32_t SystemCoreClock = __CORE_CLK;/*!< System Clock Frequency (Core Clock)*/
-uint32_t PeripheralClock = __PER_CLK; /*!< Peripheral Clock Frequency (Pclk) */
-uint32_t EMCClock = __EMC_CLK; /*!< EMC Clock Frequency */
-uint32_t USBClock = (48000000UL); /*!< USB Clock Frequency - this value will
- be updated after call SystemCoreClockUpdate, should be 48MHz*/
-
-
-/*----------------------------------------------------------------------------
- Clock functions
- *----------------------------------------------------------------------------*/
-void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
-{
- /* Determine clock frequency according to clock register values */
- if ((LPC_SC->CCLKSEL &0x100) == 0) { /* cclk = sysclk */
- if ((LPC_SC->CLKSRCSEL & 0x01) == 0) { /* sysclk = irc_clk */
- SystemCoreClock = __CLK_DIV(IRC_OSC , (LPC_SC->CCLKSEL & 0x1F));
- PeripheralClock = __CLK_DIV(IRC_OSC , (LPC_SC->PCLKSEL & 0x1F));
- EMCClock = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));
- }
- else { /* sysclk = osc_clk */
- if ((LPC_SC->SCS & 0x40) == 0) {
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- SystemCoreClock = __CLK_DIV(OSC_CLK , (LPC_SC->CCLKSEL & 0x1F));
- PeripheralClock = __CLK_DIV(OSC_CLK , (LPC_SC->PCLKSEL & 0x1F));
- EMCClock = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));
- }
- }
- }
- else { /* cclk = pll_clk */
- if ((LPC_SC->PLL0STAT & 0x100) == 0) { /* PLL0 not enabled */
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- if ((LPC_SC->CLKSRCSEL & 0x01) == 0) { /* sysclk = irc_clk */
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);
- uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);
- uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;
- SystemCoreClock = __CLK_DIV(IRC_OSC * mul , cpu_div);
- PeripheralClock = __CLK_DIV(IRC_OSC * mul , per_div);
- EMCClock = SystemCoreClock / emc_div;
- }
- else { /* sysclk = osc_clk */
- if ((LPC_SC->SCS & 0x40) == 0) {
- SystemCoreClock = 0; /* this should never happen! */
- PeripheralClock = 0;
- EMCClock = 0;
- }
- else {
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);
- uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);
- uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;
- SystemCoreClock = __CLK_DIV(OSC_CLK * mul , cpu_div);
- PeripheralClock = __CLK_DIV(OSC_CLK * mul , per_div);
- EMCClock = SystemCoreClock / emc_div;
- }
- }
- }
- }
- /* ---update USBClock------------------*/
- if(LPC_SC->USBCLKSEL & (0x01<<8))//Use PLL0 as the input to the USB clock divider
- {
- switch (LPC_SC->USBCLKSEL & 0x1F)
- {
- case 0:
- USBClock = 0; //no clock will be provided to the USB subsystem
- break;
- case 4:
- case 6:
- {
- uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);
- uint8_t usb_div = (LPC_SC->USBCLKSEL & 0x1F);
- if(LPC_SC->CLKSRCSEL & 0x01) //pll_clk_in = main_osc
- USBClock = OSC_CLK * mul / usb_div;
- else //pll_clk_in = irc_clk
- USBClock = IRC_OSC * mul / usb_div;
- }
- break;
- default:
- USBClock = 0; /* this should never happen! */
- }
- }
- else if(LPC_SC->USBCLKSEL & (0x02<<8))//usb_input_clk = alt_pll (pll1)
- {
- if(LPC_SC->CLKSRCSEL & 0x01) //pll1_clk_in = main_osc
- USBClock = (OSC_CLK * ((LPC_SC->PLL1STAT & 0x1F) + 1));
- else //pll1_clk_in = irc_clk
- USBClock = (IRC_OSC * ((LPC_SC->PLL0STAT & 0x1F) + 1));
- }
- else
- USBClock = 0; /* this should never happen! */
-}
-
- /* Determine clock frequency according to clock register values */
-
-#ifdef CORE_M4
-
-void fpu_init(void)
-{
- // from arm trm manual:
-// ; CPACR is located at address 0xE000ED88
-// LDR.W R0, =0xE000ED88
-// ; Read CPACR
-// LDR R1, [R0]
-// ; Set bits 20-23 to enable CP10 and CP11 coprocessors
-// ORR R1, R1, #(0xF << 20)
-// ; Write back the modified value to the CPACR
-// STR R1, [R0]
-
-
- volatile uint32_t* regCpacr = (uint32_t*) LPC_CPACR;
- volatile uint32_t* regMvfr0 = (uint32_t*) SCB_MVFR0;
- volatile uint32_t* regMvfr1 = (uint32_t*) SCB_MVFR1;
- volatile uint32_t Cpacr;
- volatile uint32_t Mvfr0;
- volatile uint32_t Mvfr1;
- char vfpPresent = 0;
-
- Mvfr0 = *regMvfr0;
- Mvfr1 = *regMvfr1;
-
- vfpPresent = ((SCB_MVFR0_RESET == Mvfr0) && (SCB_MVFR1_RESET == Mvfr1));
-
- if(vfpPresent)
- {
- Cpacr = *regCpacr;
- Cpacr |= (0xF << 20);
- *regCpacr = Cpacr; // enable CP10 and CP11 for full access
- }
-
-}
-#endif
-
-/**
- * Initialize the system
- *
- * @param none
- * @return none
- *
- * @brief Setup the microcontroller system.
- * Initialize the System.
- */
-void SystemInit (void)
-{
-#ifndef __CODE_RED
-#ifdef CORE_M4
-fpu_init();
-#endif
-#endif
-
-#if (CLOCK_SETUP) /* Clock Setup */
- LPC_SC->SCS = SCS_Val;
- if (SCS_Val & (1 << 5)) { /* If Main Oscillator is enabled */
- while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready */
- }
-
- LPC_SC->CLKSRCSEL = CLKSRCSEL_Val; /* Select Clock Source for sysclk/PLL0*/
-
-#if (PLL0_SETUP)
- LPC_SC->PLL0CFG = PLL0CFG_Val;
- LPC_SC->PLL0CON = 0x01; /* PLL0 Enable */
- LPC_SC->PLL0FEED = 0xAA;
- LPC_SC->PLL0FEED = 0x55;
- while (!(LPC_SC->PLL0STAT & (1<<10)));/* Wait for PLOCK0 */
-#endif
-
-#if (PLL1_SETUP)
- LPC_SC->PLL1CFG = PLL1CFG_Val;
- LPC_SC->PLL1CON = 0x01; /* PLL1 Enable */
- LPC_SC->PLL1FEED = 0xAA;
- LPC_SC->PLL1FEED = 0x55;
- while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1 */
-#endif
-
- LPC_SC->CCLKSEL = CCLKSEL_Val; /* Setup Clock Divider */
- LPC_SC->USBCLKSEL = USBCLKSEL_Val; /* Setup USB Clock Divider */
- LPC_SC->EMCCLKSEL = EMCCLKSEL_Val; /* EMC Clock Selection */
- LPC_SC->SPIFICLKSEL = SPIFICLKSEL_Val; /* SPIFI Clock Selection */
- LPC_SC->PCLKSEL = PCLKSEL_Val; /* Peripheral Clock Selection */
- LPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */
- LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */
-#endif
-
- LPC_SC->PBOOST |= 0x03; /* Power Boost control */
-
-#if (FLASH_SETUP == 1) /* Flash Accelerator Setup */
- LPC_SC->FLASHCFG = FLASHCFG_Val|0x03A;
-#endif
-#ifndef __CODE_RED
-#ifdef __RAM_MODE__
- SCB->VTOR = 0x10000000 & 0x3FFFFF80;
-#else
- SCB->VTOR = 0x00000000 & 0x3FFFFF80;
-#endif
-#endif
- SystemCoreClockUpdate();
-}
diff --git a/bsp/lpc408x/Libraries/Device/SConscript b/bsp/lpc408x/Libraries/Device/SConscript
deleted file mode 100644
index bb09284c42..0000000000
--- a/bsp/lpc408x/Libraries/Device/SConscript
+++ /dev/null
@@ -1,23 +0,0 @@
-# RT-Thread building script for component
-
-Import('rtconfig')
-from building import *
-
-cwd = GetCurrentDir()
-src = Split('''
-NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c
-''')
-CPPPATH = [cwd + '/NXP/LPC407x_8x_177x_8x/Include', cwd + '/../CMSIS/Include']
-CPPDEFINES = ['CORE_M4']
-
-# add for startup script
-if rtconfig.PLATFORM in ['gcc']:
- src += ['NXP/LPC407x_8x_177x_8x/Source/Templates/GCC/startup_LPC407x_8x_177x_8x.s']
-elif rtconfig.PLATFORM in ['armcc', 'armclang']:
- src += ['NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s']
-elif rtconfig.PLATFORM in ['iccarm']:
- src += ['NXP/LPC407x_8x_177x_8x/Source/Templates/IAR/startup_LPC407x_8x_177x_8x.s']
-
-group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
-
-Return('group')
diff --git a/bsp/lpc408x/Libraries/Drivers/SConscript b/bsp/lpc408x/Libraries/Drivers/SConscript
deleted file mode 100644
index ed77a5ca4f..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/SConscript
+++ /dev/null
@@ -1,39 +0,0 @@
-# RT-Thread building script for component
-
-Import('rtconfig')
-from building import *
-
-cwd = GetCurrentDir()
-src = Split('''
-source/lpc_adc.c
-source/lpc_bod.c
-source/lpc_can.c
-source/lpc_clkpwr.c
-source/lpc_crc.c
-source/lpc_dac.c
-source/lpc_eeprom.c
-source/lpc_emc.c
-source/lpc_exti.c
-source/lpc_gpdma.c
-source/lpc_gpio.c
-source/lpc_i2c.c
-source/lpc_i2s.c
-source/lpc_iap.c
-source/lpc_lcd.c
-source/lpc_mcpwm.c
-source/lpc_nvic.c
-source/lpc_pinsel.c
-source/lpc_pwm.c
-source/lpc_qei.c
-source/lpc_rtc.c
-source/lpc_ssp.c
-source/lpc_systick.c
-source/lpc_timer.c
-source/lpc_uart.c
-source/lpc_wwdt.c
-''')
-CPPPATH = [cwd + '/include']
-
-group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH)
-
-Return('group')
diff --git a/bsp/lpc408x/Libraries/Drivers/include/debug_frmwrk.h b/bsp/lpc408x/Libraries/Drivers/include/debug_frmwrk.h
deleted file mode 100644
index dc6bd823a9..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/debug_frmwrk.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/**********************************************************************
-* $Id$ debug_frmwrk.h 2011-06-02
-*//**
-* @file debug_frmwrk.h
-* @brief Contains some utilities that used for debugging through UART
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef __DEBUG_FRMWRK_H_
-#define __DEBUG_FRMWRK_H_
-
-#include "lpc_uart.h"
-
-#define USED_UART_DEBUG_PORT 0
-
-#define NUM_SKIPPED_ALLOWED (10)
-
-#define DBG_GETVAL_IN_DEC (0)
-#define DBG_GETVAL_IN_HEX (1)
-//#define DBG_GETVAL_IN_CHARS (2)
-
-#if (USED_UART_DEBUG_PORT == 0)
-#define DEBUG_UART_PORT (UART_0)
-#elif (USED_UART_DEBUG_PORT == 1)
-#define DEBUG_UART_PORT (UART_1)
-#elif (USED_UART_DEBUG_PORT == 2)
-#define DEBUG_UART_PORT (UART_2)
-#elif (USED_UART_DEBUG_PORT == 3)
-#define DEBUG_UART_PORT (UART_3)
-#elif (USED_UART_DEBUG_PORT == 4)
-#define DEBUG_UART_PORT (UART_4)
-#else
- #error "Invalid UART port selection!"
-#endif
-
-#define _DBG(x) _db_msg(DEBUG_UART_PORT, x)
-#define _DBG_(x) _db_msg_(DEBUG_UART_PORT, x)
-
-#define _DBC(x) _db_char(DEBUG_UART_PORT, x)
-
-#define _DBD(x) _db_dec(DEBUG_UART_PORT, x)
-#define _DBD16(x) _db_dec_16(DEBUG_UART_PORT, x)
-#define _DBD32(x) _db_dec_32(DEBUG_UART_PORT, x)
-
-#define _DBH(x) _db_hex(DEBUG_UART_PORT, x)
-#define _DBH16(x) _db_hex_16(DEBUG_UART_PORT, x)
-#define _DBH32(x) _db_hex_32(DEBUG_UART_PORT, x)
-
-#define _DBH_(x) _db_hex_(DEBUG_UART_PORT, x)
-#define _DBH16_(x) _db_hex_16_(DEBUG_UART_PORT, x)
-#define _DBH32_(x) _db_hex_32_(DEBUG_UART_PORT, x)
-
-#define _DG _db_get_char(DEBUG_UART_PORT)
-#define _DG_NONBLOCK(c) _db_get_char_nonblocking(DEBUG_UART_PORT,c)
-#define _DGV(option, numCh, val) _db_get_val(DEBUG_UART_PORT, option, numCh, val)
-
-//void _printf (const char *format, ...);
-
-extern void (*_db_msg)(UART_ID_Type UartID, const void *s);
-extern void (*_db_msg_)(UART_ID_Type UartID, const void *s);
-extern void (*_db_char)(UART_ID_Type UartID, uint8_t ch);
-extern void (*_db_dec)(UART_ID_Type UartID, uint8_t decn);
-extern void (*_db_dec_16)(UART_ID_Type UartID, uint16_t decn);
-extern void (*_db_dec_32)(UART_ID_Type UartID, uint32_t decn);
-extern void (*_db_hex)(UART_ID_Type UartID, uint8_t hexn);
-extern void (*_db_hex_16)(UART_ID_Type UartID, uint16_t hexn);
-extern void (*_db_hex_32)(UART_ID_Type UartID, uint32_t hexn);
-extern void (*_db_hex_)(UART_ID_Type UartID, uint8_t hexn);
-extern void (*_db_hex_16_)(UART_ID_Type UartID, uint16_t hexn);
-extern void (*_db_hex_32_)(UART_ID_Type UartID, uint32_t hexn);
-
-extern uint8_t (*_db_get_char)(UART_ID_Type UartID);
-extern Bool (*_db_get_char_nonblocking)(UART_ID_Type UartID, uint8_t* c);
-extern uint8_t (*_db_get_val)(UART_ID_Type UartID, uint8_t option, uint8_t numCh, uint32_t * val);
-
-uint8_t UARTGetValue (UART_ID_Type UartID, uint8_t option,
- uint8_t numCh, uint32_t* val);
-void UARTPutChar (UART_ID_Type UartID, uint8_t ch);
-void UARTPuts(UART_ID_Type UartID, const void *str);
-void UARTPuts_(UART_ID_Type UartID, const void *str);
-void UARTPutDec(UART_ID_Type UartID, uint8_t decnum);
-void UARTPutDec16(UART_ID_Type UartID, uint16_t decnum);
-void UARTPutDec32(UART_ID_Type UartID, uint32_t decnum);
-void UARTPutHex (UART_ID_Type UartID, uint8_t hexnum);
-void UARTPutHex16 (UART_ID_Type UartID, uint16_t hexnum);
-void UARTPutHex32 (UART_ID_Type UartID, uint32_t hexnum);
-uint8_t UARTGetChar (UART_ID_Type UartID);
-Bool UARTGetCharInNonBlock(UART_ID_Type UartID, uint8_t* c);
-void debug_frmwrk_init(void);
-
-#endif /* __DEBUG_FRMWRK_H_ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc177x_8x_libcfg_default.h b/bsp/lpc408x/Libraries/Drivers/include/lpc177x_8x_libcfg_default.h
deleted file mode 100644
index abea52a71c..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc177x_8x_libcfg_default.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**********************************************************************
-* $Id$ lpc17xx_libcfg.h 2010-05-21
-***
-* @file lpc17xx_libcfg.h
-* @brief Library configuration file
-* @version 2.0
-* @date 21. May. 2010
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2010, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef _LPC177x_8x_LIBCFG_H_
-#define _LPC177x_8x_LIBCFG_H_
-
-#include "lpc_types.h"
-
-
-/************************** DEBUG MODE DEFINITIONS *********************************/
-/* Un-comment the line below to compile the library in DEBUG mode, this will expanse
- the "CHECK_PARAM" macro in the FW library code */
-
-#define DEBUG
-
-
-/******************* PERIPHERAL FW LIBRARY CONFIGURATION DEFINITIONS ***********************/
-
-/* Comment the line below to disable the specific peripheral inclusion */
-
-/* DEBUG_FRAMWORK -------------------- */
-#define _DBGFWK
-
-/* Clock & Power -------------------- */
-#define _CLKPWR
-
-/* CRC -------------------- */
-#define _CRC
-
-/* GPIO ------------------------------- */
-#define _GPIO
-
-/* NVIC ------------------------------- */
-#define _NVIC
-
-/* PINSEL ------------------------------- */
-#define _PINSEL
-
-/* EXTI ------------------------------- */
-#define _EXTI
-
-/* EMC ------------------------------- */
-#define _EMC
-
-/* UART ------------------------------- */
-#define _UART
-
-/* SPI ------------------------------- */
-#define _SPI
-
-/* SYSTICK --------------------------- */
-#define _SYSTICK
-
-/* SSP ------------------------------- */
-#define _SSP
-
-
-/* I2C ------------------------------- */
-#define _I2C
-
-/* TIMER ------------------------------- */
-#define _TIM
-
-/* WDT ------------------------------- */
-#define _WDT
-
-
-/* GPDMA ------------------------------- */
-#define _GPDMA
-
-
-/* DAC ------------------------------- */
-#define _DAC
-
-/* ADC ------------------------------- */
-#define _ADC
-
-/* EEPROM ------------------------------- */
-#define _EEPROM
-
-/* PWM ------------------------------- */
-#define _PWM
-
-/* RTC ------------------------------- */
-#define _RTC
-
-/* I2S ------------------------------- */
-#define _I2S
-
-/* USB device ------------------------------- */
-#define _USBDEV
-#ifdef _USBDEV
-#define _USB_DEV_AUDIO
-#define _USB_DEV_MASS_STORAGE
-#define _USB_DEV_HID
-#define _USB_DEV_VIRTUAL_COM
-#endif /*_USBDEV*/
-
-/* USB Host ------------------------------- */
-#define _USBHost
-
-/* QEI ------------------------------- */
-#define _QEI
-
-/* MCPWM ------------------------------- */
-#define _MCPWM
-
-/* CAN--------------------------------*/
-#define _CAN
-
-/* EMAC ------------------------------ */
-#define _EMAC
-
-/* LCD ------------------------------ */
-#define _LCD
-
-/* MCI ------------------------------ */
-#define _MCI
-
-/* IAP------------------------------ */
-#define _IAP
-
-/* BOD------------------------------ */
-#define _BOD
-/************************** GLOBAL/PUBLIC MACRO DEFINITIONS *********************************/
-
-
-#endif /* _LPC177x_8x_LIBCFG_H_ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_adc.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_adc.h
deleted file mode 100644
index 0d0c1df9cf..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_adc.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_adc.h 2011-06-02
-*//**
-* @file lpc_adc.h
-* @brief Contains all macro definitions and function prototypes
-* support for ADC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup ADC ADC (Analog-to-Digital Converter)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_ADC_H_
-#define __LPC_ADC_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Private macros ------------------------------------------------------------- */
-/** @defgroup ADC_Private_Macros ADC Private Macros
- * @{
- */
-
-/* -------------------------- BIT DEFINITIONS ----------------------------------- */
-/*********************************************************************//**
- * Macro defines for ADC control register
- **********************************************************************/
-
-/** Selects which of the AD0.0:7 pins (channels) is (are) to be sampled and converted */
-#define ADC_CR_CH_SEL(n) ((1UL << n))
-
-/** The APB clock (PCLK) is divided by (this value plus one)
-* to produce the clock for the A/D */
-#define ADC_CR_CLKDIV(n) ((n<<8))
-
-/** Repeated conversions A/D enable bit */
-#define ADC_CR_BURST ((1UL<<16))
-
-/** ADC convert in power down mode; if 0, it's in power down mode; if 1, it's in normal
-* operation mode */
-#define ADC_CR_PDN ((1UL<<21))
-
-/** Start mask bits */
-#define ADC_CR_START_MASK ((7UL<<24))
-
-/** Select Start Mode controll the AD Converter in case the Burst bit is 0 (zero) */
-#define ADC_CR_START_MODE_SEL(SEL) ((SEL<<24))
-
-/** Start conversion now */
-#define ADC_CR_START_NOW ((1UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on P2.10/EINT0 */
-#define ADC_CR_START_EINT0 ((2UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on P1.27/CAP0.1 */
-#define ADC_CR_START_CAP01 ((3UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on MAT0.1 */
-#define ADC_CR_START_MAT01 ((4UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on MAT0.3 */
-#define ADC_CR_START_MAT03 ((5UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on MAT1.0 */
-#define ADC_CR_START_MAT10 ((6UL<<24))
-
-/** Start conversion when the edge selected by bit 27 occurs on MAT1.1 */
-#define ADC_CR_START_MAT11 ((7UL<<24))
-
-/** Start conversion on a falling edge on the selected CAP/MAT signal */
-#define ADC_CR_EDGE ((1UL<<27))
-
-/*********************************************************************//**
- * Macro defines for ADC Global Data register
- **********************************************************************/
-
-/** When DONE is 1, this field contains result value of ADC conversion
-* (in 12-bit value) */
-#define ADC_GDR_RESULT(n) (((n>>4)&0xFFF))
-
-/** These bits contain the channel from which the LS bits were converted */
-#define ADC_GDR_CH(n) (((n>>24)&0x7))
-
-/** This bits is used to mask for Channel */
-#define ADC_GDR_CH_MASK ((7UL<<24))
-
-/** This bit is 1 in burst mode if the results of one or
- * more conversions was (were) lost */
-#define ADC_GDR_OVERRUN_FLAG ((1UL<<30))
-
-/** This bit is set to 1 when an A/D conversion completes */
-#define ADC_GDR_DONE_FLAG ((1UL<<31))
-
-/*********************************************************************//**
- * Macro defines for ADC Interrupt register
- **********************************************************************/
-
-/** These bits allow control over which A/D channels generate
- * interrupts for conversion completion */
-#define ADC_INTEN_CH(n) ((1UL<<n))
-
-/** When 1, enables the global DONE flag in ADDR to generate an interrupt */
-#define ADC_INTEN_GLOBAL ((1UL<<8))
-
-/*********************************************************************//**
- * Macro defines for ADC Data register
- **********************************************************************/
-
-/** When DONE is 1, this field contains result value of ADC conversion */
-#define ADC_DR_RESULT(n) (((n>>4)&0xFFF))
-
-/** These bits mirror the OVERRRUN status flags that appear in the
- * result register for each A/D channel */
-#define ADC_DR_OVERRUN_FLAG ((1UL<<30))
-
-/** This bit is set to 1 when an A/D conversion completes. It is cleared
- * when this register is read */
-#define ADC_DR_DONE_FLAG ((1UL<<31))
-
-/*********************************************************************//**
- * Macro defines for ADC Status register
-**********************************************************************/
-
-/** These bits mirror the DONE status flags that appear in the result
- * register for each A/D channel */
-#define ADC_STAT_CH_DONE_FLAG(n) ((n&0xFF))
-
-/** These bits mirror the OVERRRUN status flags that appear in the
- * result register for each A/D channel */
-#define ADC_STAT_CH_OVERRUN_FLAG(n) (((n>>8)&0xFF))
-
-/** This bit is the A/D interrupt flag */
-#define ADC_STAT_INT_FLAG ((1UL<<16))
-
-/*********************************************************************//**
- * Macro defines for ADC Trim register
-**********************************************************************/
-
-/** Offset trim bits for ADC operation */
-#define ADC_ADCOFFS(n) (((n&0xF)<<4))
-
-/** Written to boot code*/
-#define ADC_TRIM(n) (((n&0xF)<<8))
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup ADC_Public_Types ADC Public Types
- * @{
- */
-
-/*********************************************************************//**
- * @brief ADC enumeration
- **********************************************************************/
-
-/** @brief Channel Selection */
-typedef enum
-{
- ADC_CHANNEL_0 = 0, /*!< Channel 0 */
- ADC_CHANNEL_1, /*!< Channel 1 */
- ADC_CHANNEL_2, /*!< Channel 2 */
- ADC_CHANNEL_3, /*!< Channel 3 */
- ADC_CHANNEL_4, /*!< Channel 4 */
- ADC_CHANNEL_5, /*!< Channel 5 */
- ADC_CHANNEL_6, /*!< Channel 6 */
- ADC_CHANNEL_7 /*!< Channel 7 */
-}ADC_CHANNEL_SELECTION;
-
-/** @brief Type of start option */
-typedef enum
-{
- ADC_START_CONTINUOUS = 0, /*!< Continuous mode */
-
- ADC_START_NOW, /*!< Start conversion now */
-
- ADC_START_ON_EINT0, /*!< Start conversion when the edge selected
- * by bit 27 occurs on P2.10/EINT0 */
- ADC_START_ON_CAP01, /*!< Start conversion when the edge selected
- * by bit 27 occurs on P1.27/CAP0.1 */
- ADC_START_ON_MAT01, /*!< Start conversion when the edge selected
- * by bit 27 occurs on MAT0.1 */
- ADC_START_ON_MAT03, /*!< Start conversion when the edge selected
- * by bit 27 occurs on MAT0.3 */
- ADC_START_ON_MAT10, /*!< Start conversion when the edge selected
- * by bit 27 occurs on MAT1.0 */
- ADC_START_ON_MAT11 /*!< Start conversion when the edge selected
- * by bit 27 occurs on MAT1.1 */
-} ADC_START_OPT;
-
-
-/** @brief Type of edge when start conversion on the selected CAP/MAT signal */
-typedef enum
-{
- ADC_START_ON_RISING = 0, /*!< Start conversion on a rising edge
- *on the selected CAP/MAT signal */
- ADC_START_ON_FALLING /*!< Start conversion on a falling edge
- *on the selected CAP/MAT signal */
-} ADC_START_ON_EDGE_OPT;
-
-/** @brief* ADC type interrupt enum */
-typedef enum
-{
- ADC_ADINTEN0 = 0, /*!< Interrupt channel 0 */
- ADC_ADINTEN1, /*!< Interrupt channel 1 */
- ADC_ADINTEN2, /*!< Interrupt channel 2 */
- ADC_ADINTEN3, /*!< Interrupt channel 3 */
- ADC_ADINTEN4, /*!< Interrupt channel 4 */
- ADC_ADINTEN5, /*!< Interrupt channel 5 */
- ADC_ADINTEN6, /*!< Interrupt channel 6 */
- ADC_ADINTEN7, /*!< Interrupt channel 7 */
- ADC_ADGINTEN /*!< Individual channel/global flag done generate an interrupt */
-}ADC_TYPE_INT_OPT;
-
-/** @brief ADC Data status */
-typedef enum
-{
- ADC_DATA_BURST = 0, /*Burst bit*/
- ADC_DATA_DONE /*Done bit*/
-}ADC_DATA_STATUS;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup ADC_Public_Functions ADC Public Functions
- * @{
- */
-
-/* Init/DeInit ADC peripheral ----------------*/
-void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t rate);
-void ADC_DeInit(LPC_ADC_TypeDef *ADCx);
-
-/* Enable/Disable ADC functions --------------*/
-void ADC_BurstCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState);
-void ADC_PowerdownCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState);
-void ADC_StartCmd(LPC_ADC_TypeDef *ADCx, uint8_t start_mode);
-void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState);
-
-/* Configure ADC functions -------------------*/
-void ADC_EdgeStartConfig(LPC_ADC_TypeDef *ADCx, uint8_t EdgeOption);
-void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState);
-
-/* Get ADC information functions -------------------*/
-uint16_t ADC_ChannelGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel);
-FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType);
-uint32_t ADC_GlobalGetData(LPC_ADC_TypeDef *ADCx);
-FlagStatus ADC_GlobalGetStatus(LPC_ADC_TypeDef *ADCx, uint32_t StatusType);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* LPC_ADC_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_bod.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_bod.h
deleted file mode 100644
index d5213d7aff..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_bod.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_bod.h 2011-12-09
-*//**
-* @file lpc_bod.h
-* @brief Contain definitions & functions related to BOD.
-* @version 1.0
-* @date 09 December. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup BOD BOD (Brown-Out Detector)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */#ifndef __LPC_BOD_H
-#define __LPC_BOD_H
-#include "lpc_types.h"
-/** @defgroup BOD_Private_Macros BOD Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/**********************************************************************
-** Power Mode Control register definitions
-**********************************************************************/
-#define BOD_PCON_BODRPM (0x01 << 2)
-#define BOD_PCON_BOGD (0x01 << 3)
-#define BOD_PCON_BORD (0x01 << 4)
-
-/**********************************************************************
-** Reset Source Identification Register definitions
-**********************************************************************/
-#define BOD_RSID_POR (0x01 << 0)
-#define BOD_RSID_BODR (0x01 << 3)
-
-/**
- * @}
- */
-
- /** @defgroup BOD_Public_Types BOD Public Types
- * @{
- */
-
-/**
- * @brief The field to configurate BOD
- */
-
-typedef struct
-{
- uint8_t Enabled; /**< Enable BOD Circuit */
- uint8_t PowerReduced; /**< if ENABLE, BOD will be turned off in Power-down mode or Deep Sleep mode */
- /**< So, BOD can't be used to wake-up from these mode. */
- uint8_t ResetOnVoltageDown; /**< if ENABLE, reset the device when the VDD(REG)(3V3) voltage < the BOD reset trip level */
-}BOD_Config_Type;
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup BOD_Public_Functions BOD Public Functions
- * @{
- */
-void BOD_Init( BOD_Config_Type* pConfig );
-int32_t BOD_ResetSourceStatus(void);
-void BOD_ResetSourceClr(void);
-/**
- * @}
- */
-#endif /* end __LPC_BOD_H */
-/**
- * @}
- */
-
-/*****************************************************************************
-** End Of File
-******************************************************************************/
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_can.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_can.h
deleted file mode 100644
index 2eceebeacd..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_can.h
+++ /dev/null
@@ -1,1014 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_can.h 2011-06-02
-*//**
-* @file lpc_can.h
-* @brief Contains all macro definitions and function prototypes
-* support for CAN firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup CAN CAN (Controller Area Network)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_CAN_H_
-#define __LPC_CAN_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-
-#include "lpc_types.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup CAN_Public_Macros CAN Public Macros
- * @{
- */
-
-/** Controller ID for CAN1 */
-#define CAN1_CTRL ((uint8_t)(0))
-
-/** Controller ID for CAN2 */
-#define CAN2_CTRL ((uint8_t)(1))
-
-/** Message(s) Acceptance is enabled */
-#define MSG_ENABLE ((uint8_t)(0))
-
-/** Message(s) Acceptance is disabled */
-#define MSG_DISABLE ((uint8_t)(1))
-
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup CAN_Private_Macros CAN Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/*********************************************************************//**
- * Macro defines for CAN Mode Register
- **********************************************************************/
-/** CAN Reset mode */
-#define CAN_MOD_RM ((uint32_t)(1<<0))
-
-/** CAN Listen Only Mode */
-#define CAN_MOD_LOM ((uint32_t)(1<<1))
-
-/** CAN Self Test mode */
-#define CAN_MOD_STM ((uint32_t)(1<<2))
-
-/** CAN Transmit Priority mode */
-#define CAN_MOD_TPM ((uint32_t)(1<<3))
-
-/** CAN Sleep mode */
-#define CAN_MOD_SM ((uint32_t)(1<<4))
-
-/** CAN Receive Polarity mode */
-#define CAN_MOD_RPM ((uint32_t)(1<<5))
-
-/** CAN Test mode */
-#define CAN_MOD_TM ((uint32_t)(1<<7))
-
-/*********************************************************************//**
- * Macro defines for CAN Command Register
- **********************************************************************/
-/** CAN Transmission Request */
-#define CAN_CMR_TR ((uint32_t)(1))
-
-/** CAN Abort Transmission */
-#define CAN_CMR_AT ((uint32_t)(1<<1))
-
-/** CAN Release Receive Buffer */
-#define CAN_CMR_RRB ((uint32_t)(1<<2))
-
-/** CAN Clear Data Overrun */
-#define CAN_CMR_CDO ((uint32_t)(1<<3))
-
-/** CAN Self Reception Request */
-#define CAN_CMR_SRR ((uint32_t)(1<<4))
-
-/** CAN Select Tx Buffer 1 */
-#define CAN_CMR_STB1 ((uint32_t)(1<<5))
-
-/** CAN Select Tx Buffer 2 */
-#define CAN_CMR_STB2 ((uint32_t)(1<<6))
-
-/** CAN Select Tx Buffer 3 */
-#define CAN_CMR_STB3 ((uint32_t)(1<<7))
-
-/*********************************************************************//**
- * Macro defines for CAN Global Status Register
- **********************************************************************/
-/** CAN Receive Buffer Status */
-#define CAN_GSR_RBS ((uint32_t)(1))
-
-/** CAN Data Overrun Status */
-#define CAN_GSR_DOS ((uint32_t)(1<<1))
-
-/** CAN Transmit Buffer Status */
-#define CAN_GSR_TBS ((uint32_t)(1<<2))
-
-/** CAN Transmit Complete Status */
-#define CAN_GSR_TCS ((uint32_t)(1<<3))
-
-/** CAN Receive Status */
-#define CAN_GSR_RS ((uint32_t)(1<<4))
-
-/** CAN Transmit Status */
-#define CAN_GSR_TS ((uint32_t)(1<<5))
-
-/** CAN Error Status */
-#define CAN_GSR_ES ((uint32_t)(1<<6))
-
-/** CAN Bus Status */
-#define CAN_GSR_BS ((uint32_t)(1<<7))
-
-/** CAN Current value of the Rx Error Counter */
-#define CAN_GSR_RXERR(n) ((uint32_t)((n&0xFF)<<16))
-
-/** CAN Current value of the Tx Error Counter */
-#define CAN_GSR_TXERR(n) ((uint32_t)(n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Interrupt and Capture Register
- **********************************************************************/
-/** CAN Receive Interrupt */
-#define CAN_ICR_RI ((uint32_t)(1))
-
-/** CAN Transmit Interrupt 1 */
-#define CAN_ICR_TI1 ((uint32_t)(1<<1))
-
-/** CAN Error Warning Interrupt */
-#define CAN_ICR_EI ((uint32_t)(1<<2))
-
-/** CAN Data Overrun Interrupt */
-#define CAN_ICR_DOI ((uint32_t)(1<<3))
-
-/** CAN Wake-Up Interrupt */
-#define CAN_ICR_WUI ((uint32_t)(1<<4))
-
-/** CAN Error Passive Interrupt */
-#define CAN_ICR_EPI ((uint32_t)(1<<5))
-
-/** CAN Arbitration Lost Interrupt */
-#define CAN_ICR_ALI ((uint32_t)(1<<6))
-
-/** CAN Bus Error Interrupt */
-#define CAN_ICR_BEI ((uint32_t)(1<<7))
-
-/** CAN ID Ready Interrupt */
-#define CAN_ICR_IDI ((uint32_t)(1<<8))
-
-/** CAN Transmit Interrupt 2 */
-#define CAN_ICR_TI2 ((uint32_t)(1<<9))
-
-/** CAN Transmit Interrupt 3 */
-#define CAN_ICR_TI3 ((uint32_t)(1<<10))
-
-/** CAN Error Code Capture */
-#define CAN_ICR_ERRBIT(n) ((uint32_t)((n&0x1F)<<16))
-
-/** CAN Error Direction */
-#define CAN_ICR_ERRDIR ((uint32_t)(1<<21))
-
-/** CAN Error Capture */
-#define CAN_ICR_ERRC(n) ((uint32_t)((n&0x3)<<22))
-
-/** CAN Arbitration Lost Capture */
-#define CAN_ICR_ALCBIT(n) ((uint32_t)((n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Interrupt Enable Register
- **********************************************************************/
-/** CAN Receive Interrupt Enable */
-#define CAN_IER_RIE ((uint32_t)(1))
-
-/** CAN Transmit Interrupt Enable for buffer 1 */
-#define CAN_IER_TIE1 ((uint32_t)(1<<1))
-
-/** CAN Error Warning Interrupt Enable */
-#define CAN_IER_EIE ((uint32_t)(1<<2))
-
-/** CAN Data Overrun Interrupt Enable */
-#define CAN_IER_DOIE ((uint32_t)(1<<3))
-
-/** CAN Wake-Up Interrupt Enable */
-#define CAN_IER_WUIE ((uint32_t)(1<<4))
-
-/** CAN Error Passive Interrupt Enable */
-#define CAN_IER_EPIE ((uint32_t)(1<<5))
-
-/** CAN Arbitration Lost Interrupt Enable */
-#define CAN_IER_ALIE ((uint32_t)(1<<6))
-
-/** CAN Bus Error Interrupt Enable */
-#define CAN_IER_BEIE ((uint32_t)(1<<7))
-
-/** CAN ID Ready Interrupt Enable */
-#define CAN_IER_IDIE ((uint32_t)(1<<8))
-
-/** CAN Transmit Enable Interrupt for Buffer 2 */
-#define CAN_IER_TIE2 ((uint32_t)(1<<9))
-
-/** CAN Transmit Enable Interrupt for Buffer 3 */
-#define CAN_IER_TIE3 ((uint32_t)(1<<10))
-
-/*********************************************************************//**
- * Macro defines for CAN Bus Timing Register
- **********************************************************************/
-/** CAN Baudrate Prescaler */
-#define CAN_BTR_BRP(n) ((uint32_t)(n&0x3FF))
-
-/** CAN Synchronization Jump Width */
-#define CAN_BTR_SJM(n) ((uint32_t)((n&0x3)<<14))
-
-/** CAN Time Segment 1 */
-#define CAN_BTR_TESG1(n) ((uint32_t)(n&0xF)<<16))
-
-/** CAN Time Segment 2 */
-#define CAN_BTR_TESG2(n) ((uint32_t)(n&0xF)<<20))
-
-/** CAN Sampling */
-#define CAN_BTR_SAM(n) ((uint32_t)(1<<23))
-
-/*********************************************************************//**
- * Macro defines for CAN Error Warning Limit Register
- **********************************************************************/
-/** CAN Error Warning Limit */
-#define CAN_EWL_EWL(n) ((uint32_t)(n&0xFF))
-
-/*********************************************************************//**
- * Macro defines for CAN Status Register
- **********************************************************************/
-/** CAN Receive Buffer Status */
-#define CAN_SR_RBS ((uint32_t)(1))
-
-/** CAN Data Overrun Status */
-#define CAN_SR_DOS ((uint32_t)(1<<1))
-
-/** CAN Transmit Buffer Status 1 */
-#define CAN_SR_TBS1 ((uint32_t)(1<<2))
-
-/** CAN Transmission Complete Status of Buffer 1 */
-#define CAN_SR_TCS1 ((uint32_t)(1<<3))
-
-/** CAN Receive Status */
-#define CAN_SR_RS ((uint32_t)(1<<4))
-
-/** CAN Transmit Status 1 */
-#define CAN_SR_TS1 ((uint32_t)(1<<5))
-
-/** CAN Error Status */
-#define CAN_SR_ES ((uint32_t)(1<<6))
-
-/** CAN Bus Status */
-#define CAN_SR_BS ((uint32_t)(1<<7))
-
-/** CAN Transmit Buffer Status 2 */
-#define CAN_SR_TBS2 ((uint32_t)(1<<10))
-
-/** CAN Transmission Complete Status of Buffer 2 */
-#define CAN_SR_TCS2 ((uint32_t)(1<<11))
-
-/** CAN Transmit Status 2 */
-#define CAN_SR_TS2 ((uint32_t)(1<<13))
-
-/** CAN Transmit Buffer Status 2 */
-#define CAN_SR_TBS3 ((uint32_t)(1<<18))
-
-/** CAN Transmission Complete Status of Buffer 2 */
-#define CAN_SR_TCS3 ((uint32_t)(1<<19))
-
-/** CAN Transmit Status 2 */
-#define CAN_SR_TS3 ((uint32_t)(1<<21))
-
-/*********************************************************************//**
- * Macro defines for CAN Receive Frame Status Register
- **********************************************************************/
-/** CAN ID Index */
-#define CAN_RFS_ID_INDEX(n) ((uint32_t)(n&0x3FF))
-
-/** CAN Bypass */
-#define CAN_RFS_BP ((uint32_t)(1<<10))
-
-/** CAN Data Length Code */
-#define CAN_RFS_DLC(n) ((uint32_t)((n&0xF)<<16)
-
-/** CAN Remote Transmission Request */
-#define CAN_RFS_RTR ((uint32_t)(1<<30))
-
-/** CAN control 11 bit or 29 bit Identifier */
-#define CAN_RFS_FF ((uint32_t)(1<<31))
-
-/*********************************************************************//**
- * Macro defines for CAN Receive Identifier Register
- **********************************************************************/
-/** CAN 11 bit Identifier */
-#define CAN_RID_ID_11(n) ((uint32_t)(n&0x7FF))
-
-/** CAN 29 bit Identifier */
-#define CAN_RID_ID_29(n) ((uint32_t)(n&0x1FFFFFFF))
-
-/*********************************************************************//**
- * Macro defines for CAN Receive Data A Register
- **********************************************************************/
-/** CAN Receive Data 1 */
-#define CAN_RDA_DATA1(n) ((uint32_t)(n&0xFF))
-
-/** CAN Receive Data 2 */
-#define CAN_RDA_DATA2(n) ((uint32_t)((n&0xFF)<<8))
-
-/** CAN Receive Data 3 */
-#define CAN_RDA_DATA3(n) ((uint32_t)((n&0xFF)<<16))
-
-/** CAN Receive Data 4 */
-#define CAN_RDA_DATA4(n) ((uint32_t)((n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Receive Data B Register
- **********************************************************************/
-/** CAN Receive Data 5 */
-#define CAN_RDB_DATA5(n) ((uint32_t)(n&0xFF))
-
-/** CAN Receive Data 6 */
-#define CAN_RDB_DATA6(n) ((uint32_t)((n&0xFF)<<8))
-
-/** CAN Receive Data 7 */
-#define CAN_RDB_DATA7(n) ((uint32_t)((n&0xFF)<<16))
-
-/** CAN Receive Data 8 */
-#define CAN_RDB_DATA8(n) ((uint32_t)((n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Transmit Frame Information Register
- **********************************************************************/
-/** CAN Priority */
-#define CAN_TFI_PRIO(n) ((uint32_t)(n&0xFF))
-
-/** CAN Data Length Code */
-#define CAN_TFI_DLC(n) ((uint32_t)((n&0xF)<<16))
-
-/** CAN Remote Frame Transmission */
-#define CAN_TFI_RTR ((uint32_t)(1<<30))
-
-/** CAN control 11-bit or 29-bit Identifier */
-#define CAN_TFI_FF ((uint32_t)(1<<31))
-
-/*********************************************************************//**
- * Macro defines for CAN Transmit Identifier Register
- **********************************************************************/
-/** CAN 11-bit Identifier */
-#define CAN_TID_ID11(n) ((uint32_t)(n&0x7FF))
-
-/** CAN 11-bit Identifier */
-#define CAN_TID_ID29(n) ((uint32_t)(n&0x1FFFFFFF))
-
-/*********************************************************************//**
- * Macro defines for CAN Transmit Data A Register
- **********************************************************************/
-/** CAN Transmit Data 1 */
-#define CAN_TDA_DATA1(n) ((uint32_t)(n&0xFF))
-
-/** CAN Transmit Data 2 */
-#define CAN_TDA_DATA2(n) ((uint32_t)((n&0xFF)<<8))
-
-/** CAN Transmit Data 3 */
-#define CAN_TDA_DATA3(n) ((uint32_t)((n&0xFF)<<16))
-
-/** CAN Transmit Data 4 */
-#define CAN_TDA_DATA4(n) ((uint32_t)((n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Transmit Data B Register
- **********************************************************************/
-/** CAN Transmit Data 5 */
-#define CAN_TDA_DATA5(n) ((uint32_t)(n&0xFF))
-
-/** CAN Transmit Data 6 */
-#define CAN_TDA_DATA6(n) ((uint32_t)((n&0xFF)<<8))
-
-/** CAN Transmit Data 7 */
-#define CAN_TDA_DATA7(n) ((uint32_t)((n&0xFF)<<16))
-
-/** CAN Transmit Data 8 */
-#define CAN_TDA_DATA8(n) ((uint32_t)((n&0xFF)<<24))
-
-/*********************************************************************//**
- * Macro defines for CAN Sleep Clear Register
- **********************************************************************/
-/** CAN1 Sleep mode */
-#define CAN1SLEEPCLR ((uint32_t)(1<<1))
-
-/** CAN2 Sleep Mode */
-#define CAN2SLEEPCLR ((uint32_t)(1<<2))
-
-/*********************************************************************//**
- * Macro defines for CAN Wake up Flags Register
- **********************************************************************/
-/** CAN1 Sleep mode */
-#define CAN_WAKEFLAGES_CAN1WAKE ((uint32_t)(1<<1))
-
-/** CAN2 Sleep Mode */
-#define CAN_WAKEFLAGES_CAN2WAKE ((uint32_t)(1<<2))
-
-/*********************************************************************//**
- * Macro defines for Central transmit Status Register
- **********************************************************************/
-/** CAN Transmit 1 */
-#define CAN_TSR_TS1 ((uint32_t)(1))
-
-/** CAN Transmit 2 */
-#define CAN_TSR_TS2 ((uint32_t)(1<<1))
-
-/** CAN Transmit Buffer Status 1 */
-#define CAN_TSR_TBS1 ((uint32_t)(1<<8))
-
-/** CAN Transmit Buffer Status 2 */
-#define CAN_TSR_TBS2 ((uint32_t)(1<<9))
-
-/** CAN Transmission Complete Status 1 */
-#define CAN_TSR_TCS1 ((uint32_t)(1<<16))
-
-/** CAN Transmission Complete Status 2 */
-#define CAN_TSR_TCS2 ((uint32_t)(1<<17))
-
-/*********************************************************************//**
- * Macro defines for Central Receive Status Register
- **********************************************************************/
-/** CAN Receive Status 1 */
-#define CAN_RSR_RS1 ((uint32_t)(1))
-
-/** CAN Receive Status 1 */
-#define CAN_RSR_RS2 ((uint32_t)(1<<1))
-
-/** CAN Receive Buffer Status 1*/
-#define CAN_RSR_RB1 ((uint32_t)(1<<8))
-
-/** CAN Receive Buffer Status 2*/
-#define CAN_RSR_RB2 ((uint32_t)(1<<9))
-
-/** CAN Data Overrun Status 1 */
-#define CAN_RSR_DOS1 ((uint32_t)(1<<16))
-
-/** CAN Data Overrun Status 1 */
-#define CAN_RSR_DOS2 ((uint32_t)(1<<17))
-
-/*********************************************************************//**
- * Macro defines for Central Miscellaneous Status Register
- **********************************************************************/
-/** Same CAN Error Status in CAN1GSR */
-#define CAN_MSR_E1 ((uint32_t)(1))
-
-/** Same CAN Error Status in CAN2GSR */
-#define CAN_MSR_E2 ((uint32_t)(1<<1))
-
-/** Same CAN Bus Status in CAN1GSR */
-#define CAN_MSR_BS1 ((uint32_t)(1<<8))
-
-/** Same CAN Bus Status in CAN2GSR */
-#define CAN_MSR_BS2 ((uint32_t)(1<<9))
-
-/*********************************************************************//**
- * Macro defines for Acceptance Filter Mode Register
- **********************************************************************/
-/** CAN Acceptance Filter Off mode */
-#define CAN_AFMR_AccOff ((uint32_t)(1))
-
-/** CAN Acceptance File Bypass mode */
-#define CAN_AFMR_AccBP ((uint32_t)(1<<1))
-
-/** FullCAN Mode Enhancements */
-#define CAN_AFMR_eFCAN ((uint32_t)(1<<2))
-
-/*********************************************************************//**
- * Macro defines for Standard Frame Individual Start Address Register
- **********************************************************************/
-/** The start address of the table of individual Standard Identifier */
-#define CAN_STT_sa(n) ((uint32_t)((n&1FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for Standard Frame Group Start Address Register
- **********************************************************************/
-/** The start address of the table of grouped Standard Identifier */
-#define CAN_SFF_GRP_sa(n) ((uint32_t)((n&3FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for Extended Frame Start Address Register
- **********************************************************************/
-/** The start address of the table of individual Extended Identifier */
-#define CAN_EFF_sa(n) ((uint32_t)((n&1FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for Extended Frame Group Start Address Register
- **********************************************************************/
-/** The start address of the table of grouped Extended Identifier */
-#define CAN_Eff_GRP_sa(n) ((uint32_t)((n&3FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for End Of AF Table Register
- **********************************************************************/
-/** The End of Table of AF LookUp Table */
-#define CAN_EndofTable(n) ((uint32_t)((n&3FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for LUT Error Address Register
- **********************************************************************/
-/** CAN Look-Up Table Error Address */
-#define CAN_LUTerrAd(n) ((uint32_t)((n&1FF)<<2))
-
-/*********************************************************************//**
- * Macro defines for LUT Error Register
- **********************************************************************/
-/** CAN Look-Up Table Error */
-#define CAN_LUTerr ((uint32_t)(1))
-
-/*********************************************************************//**
- * Macro defines for Global FullCANInterrupt Enable Register
- **********************************************************************/
-/** Global FullCANInterrupt Enable */
-#define CAN_FCANIE ((uint32_t)(1))
-
-/*********************************************************************//**
- * Macro defines for FullCAN Interrupt and Capture Register 0
- **********************************************************************/
-/** FullCAN Interrupt and Capture (0-31)*/
-#define CAN_FCANIC0_IntPnd(n) ((uint32_t)(1<<n))
-
-/*********************************************************************//**
- * Macro defines for FullCAN Interrupt and Capture Register 1
- **********************************************************************/
-/** FullCAN Interrupt and Capture (0-31)*/
-#define CAN_FCANIC1_IntPnd(n) ((uint32_t)(1<<(n-32)))
-
-
-/* ---------------- CHECK PARAMETER DEFINITIONS ---------------------------- */
-/** Macro to determine if it is valid CAN peripheral or not */
-#define PARAM_CANx(x) ((((uint32_t*)x)==((uint32_t *)LPC_CAN1)) \
- ||(((uint32_t*)x)==((uint32_t *)LPC_CAN2)))
-
-/* Macro to determine if it is valid CANAF or not*/
-#define PARAM_CANAFx(x) (((uint32_t*)x)== ((uint32_t*)LPC_CANAF))
-
-/* Macro to determine if it is valid CANAF RAM or not*/
-#define PARAM_CANAFRAMx(x) (((uint32_t*)x)== (uint32_t*)LPC_CANAF_RAM)
-
-/* Macro to determine if it is valid CANCR or not*/
-#define PARAM_CANCRx(x) (((uint32_t*)x)==((uint32_t*)LPC_CANCR))
-
-/** Macro to check Data to send valid */
-#define PARAM_I2S_DATA(data) ((data>=0)&&(data <= 0xFFFFFFFF))
-
-/** Macro to check frequency value */
-#define PRAM_I2S_FREQ(freq) ((freq>=16000)&&(freq <= 96000))
-
-/** Macro to check Frame Identifier */
-#define PARAM_ID_11(n) ((n>>11)==0) /*-- 11 bit --*/
-#define PARAM_ID_29(n) ((n>>29)==0) /*-- 29 bit --*/
-
-/** Macro to check DLC value */
-#define PARAM_DLC(n) ((n>>4)==0) /*-- 4 bit --*/
-
-/** Macro to check ID format type */
-#define PARAM_ID_FORMAT(n) ((n==STD_ID_FORMAT)||(n==EXT_ID_FORMAT))
-
-/** Macro to check Group identifier */
-#define PARAM_GRP_ID(x, y) ((x<=y))
-
-/** Macro to check Frame type */
-#define PARAM_FRAME_TYPE(n) ((n==DATA_FRAME)||(n==REMOTE_FRAME))
-
-/** Macro to check Control/Central Status type parameter */
-#define PARAM_CTRL_STS_TYPE(n) ((n==CANCTRL_GLOBAL_STS)||(n==CANCTRL_INT_CAP) \
- ||(n==CANCTRL_ERR_WRN)||(n==CANCTRL_STS))
-
-/** Macro to check CR status type */
-#define PARAM_CR_STS_TYPE(n) ((n==CANCR_TX_STS)||(n==CANCR_RX_STS) \
- ||(n==CANCR_MS))
-
-/** Macro to check AF Mode type parameter */
-#define PARAM_AFMODE_TYPE(n) ((n==CAN_NORMAL)||(n==CAN_ACC_OFF) \
- ||(n==CAN_ACC_BP)||(n==CAN_EFCAN))
-
-/** Macro to check Operation Mode */
-#define PARAM_MODE_TYPE(n) ((n==CAN_OPERATING_MODE)||(n==CAN_RESET_MODE) \
- ||(n==CAN_LISTENONLY_MODE)||(n==CAN_SELFTEST_MODE) \
- ||(n==CAN_TXPRIORITY_MODE)||(n==CAN_SLEEP_MODE) \
- ||(n==CAN_RXPOLARITY_MODE)||(n==CAN_TEST_MODE))
-
-/** Macro define for struct AF_Section parameter */
-#define PARAM_CTRL(n) ((n==CAN1_CTRL)|(n==CAN2_CTRL))
-
-/** Macro define for struct AF_Section parameter */
-#define PARAM_MSG_DISABLE(n) ((n==MSG_ENABLE)|(n==MSG_DISABLE))
-
-/**Macro to check Interrupt Type parameter */
-#define PARAM_INT_EN_TYPE(n) ((n==CANINT_RIE)||(n==CANINT_TIE1) \
- ||(n==CANINT_EIE)||(n==CANINT_DOIE) \
- ||(n==CANINT_WUIE)||(n==CANINT_EPIE) \
- ||(n==CANINT_ALIE)||(n==CANINT_BEIE) \
- ||(n==CANINT_IDIE)||(n==CANINT_TIE2) \
- ||(n==CANINT_TIE3)||(n==CANINT_FCE))
-
-/** Macro to check AFLUT Entry type */
-#define PARAM_AFLUT_ENTRY_TYPE(n) ((n==FULLCAN_ENTRY)||(n==EXPLICIT_STANDARD_ENTRY)\
- ||(n==GROUP_STANDARD_ENTRY)||(n==EXPLICIT_EXTEND_ENTRY) \
- ||(n==GROUP_EXTEND_ENTRY))
-
-/** Macro to check position */
-#define PARAM_POSITION(n) ((n>=0)&&(n<512))
-
-/**
- * @}
- */
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup CAN_Public_Types CAN Public Types
- * @{
- */
-
-
-/***********************************************************************
- * CAN device configuration commands (IOCTL commands and arguments)
- **********************************************************************/
-/** CAN peripheral ID 0 */
-#define CAN_1 0
-
-/** CAN peripheral ID 1 */
-#define CAN_2 1
-
-/**
- * @brief CAN peripheral ID no
- */
-typedef enum
-{
- CAN_ID_1 = CAN_1,
- CAN_ID_2 = CAN_2
-} en_CAN_unitId;
-
-/**
- * @brief CAN ID format definition
- */
-typedef enum
-{
- STD_ID_FORMAT = 0, /**< Use standard ID format (11 bit ID) */
- EXT_ID_FORMAT = 1 /**< Use extended ID format (29 bit ID) */
-} CAN_ID_FORMAT_Type;
-
-/**
- * @brief AFLUT Entry type definition
- */
-typedef enum
-{
- FULLCAN_ENTRY = 0,
- EXPLICIT_STANDARD_ENTRY,
- GROUP_STANDARD_ENTRY,
- EXPLICIT_EXTEND_ENTRY,
- GROUP_EXTEND_ENTRY,
-} AFLUT_ENTRY_Type;
-
-/**
- * @brief Symbolic names for type of CAN message
- */
-typedef enum
-{
- DATA_FRAME = 0, /**< Data frame */
- REMOTE_FRAME = 1 /**< Remote frame */
-} CAN_FRAME_Type;
-
-/**
- * @brief CAN Control status definition
- */
-typedef enum
-{
- CANCTRL_GLOBAL_STS = 0, /**< CAN Global Status */
- CANCTRL_INT_CAP, /**< CAN Interrupt and Capture */
- CANCTRL_ERR_WRN, /**< CAN Error Warning Limit */
- CANCTRL_STS /**< CAN Control Status */
-} CAN_CTRL_STS_Type;
-
-/**
- * @brief Central CAN status type definition
- */
-typedef enum
-{
- CANCR_TX_STS = 0, /**< Central CAN Tx Status */
- CANCR_RX_STS, /**< Central CAN Rx Status */
- CANCR_MS /**< Central CAN Miscellaneous Status */
-} CAN_CR_STS_Type;
-
-/**
- * @brief FullCAN Interrupt Capture type definition
- */
-typedef enum
-{
- FULLCAN_IC0, /**< FullCAN Interrupt and Capture 0 */
- FULLCAN_IC1 /**< FullCAN Interrupt and Capture 1 */
-}FullCAN_IC_Type;
-
-/**
- * @brief CAN interrupt enable type definition
- */
-typedef enum
-{
- CANINT_RIE = 0, /**< CAN Receiver Interrupt Enable */
- CANINT_TIE1, /**< CAN Transmit Interrupt Enable */
- CANINT_EIE, /**< CAN Error Warning Interrupt Enable */
- CANINT_DOIE, /**< CAN Data Overrun Interrupt Enable */
- CANINT_WUIE, /**< CAN Wake-Up Interrupt Enable */
- CANINT_EPIE, /**< CAN Error Passive Interrupt Enable */
- CANINT_ALIE, /**< CAN Arbitration Lost Interrupt Enable */
- CANINT_BEIE, /**< CAN Bus Error Inter rupt Enable */
- CANINT_IDIE, /**< CAN ID Ready Interrupt Enable */
- CANINT_TIE2, /**< CAN Transmit Interrupt Enable for Buffer2 */
- CANINT_TIE3, /**< CAN Transmit Interrupt Enable for Buffer3 */
- CANINT_FCE /**< FullCAN Interrupt Enable */
-} CAN_INT_EN_Type;
-
-/**
- * @brief Acceptance Filter Mode type definition
- */
-typedef enum
-{
- CAN_NORMAL = 0, /**< Normal Mode */
- CAN_ACC_OFF, /**< Acceptance Filter Off Mode */
- CAN_ACC_BP, /**< Acceptance Fileter Bypass Mode */
- CAN_EFCAN /**< FullCAN Mode Enhancement */
-} CAN_AFMODE_Type;
-
-/**
- * @brief CAN Mode Type definition
- */
-typedef enum
-{
- CAN_OPERATING_MODE = 0, /**< Operating Mode */
- CAN_RESET_MODE, /**< Reset Mode */
- CAN_LISTENONLY_MODE, /**< Listen Only Mode */
- CAN_SELFTEST_MODE, /**< Seft Test Mode */
- CAN_TXPRIORITY_MODE, /**< Transmit Priority Mode */
- CAN_SLEEP_MODE, /**< Sleep Mode */
- CAN_RXPOLARITY_MODE, /**< Receive Polarity Mode */
- CAN_TEST_MODE /**< Test Mode */
-} CAN_MODE_Type;
-
-/**
- * @brief Error values that functions can return
- */
-typedef enum
-{
- CAN_OK = 1, /**< No error */
- CAN_OBJECTS_FULL_ERROR, /**< No more rx or tx objects available */
- CAN_FULL_OBJ_NOT_RCV, /**< Full CAN object not received */
- CAN_NO_RECEIVE_DATA, /**< No have receive data available */
- CAN_AF_ENTRY_ERROR, /**< Entry load in AFLUT is unvalid */
- CAN_CONFLICT_ID_ERROR, /**< Conflict ID occur */
- CAN_ENTRY_NOT_EXIT_ERROR /**< Entry remove outo AFLUT is not exit */
-} CAN_ERROR;
-
-/**
- * @brief Pin Configuration structure
- */
-typedef struct
-{
- uint8_t RD; /**< Serial Inputs, from CAN transceivers, should be:
- ** For CAN1:
- - CAN_RD1_P0_0: RD pin is on P0.0
- - CAN_RD1_P0_21 : RD pin is on P0.21
- ** For CAN2:
- - CAN_RD2_P0_4: RD pin is on P0.4
- - CAN_RD2_P2_7: RD pin is on P2.7
- */
- uint8_t TD; /**< Serial Outputs, To CAN transceivers, should be:
- ** For CAN1:
- - CAN_TD1_P0_1: TD pin is on P0.1
- - CAN_TD1_P0_22: TD pin is on P0.22
- ** For CAN2:
- - CAN_TD2_P0_5: TD pin is on P0.5
- - CAN_TD2_P2_8: TD pin is on P2.8
- */
-} CAN_PinCFG_Type;
-
-/**
- * @brief CAN message object structure
- */
-typedef struct
-{
- uint32_t id; /**< 29 bit identifier, it depend on "format" value
- - if format = STD_ID_FORMAT, id should be 11 bit identifier
- - if format = EXT_ID_FORMAT, id should be 29 bit identifier
- */
- uint8_t dataA[4]; /**< Data field A */
- uint8_t dataB[4]; /**< Data field B */
- uint8_t len; /**< Length of data field in bytes, should be:
- - 0000b-0111b: 0-7 bytes
- - 1xxxb: 8 bytes
- */
- uint8_t format; /**< Identifier Format, should be:
- - STD_ID_FORMAT: Standard ID - 11 bit format
- - EXT_ID_FORMAT: Extended ID - 29 bit format
- */
- uint8_t type; /**< Remote Frame transmission, should be:
- - DATA_FRAME: the number of data bytes called out by the DLC
- field are send from the CANxTDA and CANxTDB registers
- - REMOTE_FRAME: Remote Frame is sent
- */
-} CAN_MSG_Type;
-
-/**
- * @brief FullCAN Entry structure
- */
-typedef struct
-{
- uint8_t controller; /**< CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint8_t disable; /**< Disable bit, should be:
- - MSG_ENABLE: disable bit = 0
- - MSG_DISABLE: disable bit = 1
- */
- uint16_t id_11; /**< Standard ID, should be 11-bit value */
-} FullCAN_Entry;
-
-/**
- * @brief Standard ID Frame Format Entry structure
- */
-typedef struct
-{
- uint8_t controller; /**< CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint8_t disable; /**< Disable bit, should be:
- - MSG_ENABLE: disable bit = 0
- - MSG_DISABLE: disable bit = 1
- */
- uint16_t id_11; /**< Standard ID, should be 11-bit value */
-} SFF_Entry;
-
-/**
- * @brief Group of Standard ID Frame Format Entry structure
- */
-typedef struct
-{
- uint8_t controller1; /**< First CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint8_t disable1; /**< First Disable bit, should be:
- - MSG_ENABLE: disable bit = 0)
- - MSG_DISABLE: disable bit = 1
- */
- uint16_t lowerID; /**< ID lower bound, should be 11-bit value */
- uint8_t controller2; /**< Second CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint8_t disable2; /**< Second Disable bit, should be:
- - MSG_ENABLE: disable bit = 0
- - MSG_DISABLE: disable bit = 1
- */
- uint16_t upperID; /**< ID upper bound, should be 11-bit value and
- equal or greater than lowerID
- */
-} SFF_GPR_Entry;
-
-/**
- * @brief Extended ID Frame Format Entry structure
- */
-typedef struct
-{
- uint8_t controller; /**< CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint32_t ID_29; /**< Extend ID, shoud be 29-bit value */
-} EFF_Entry;
-
-
-/**
- * @brief Group of Extended ID Frame Format Entry structure
- */
-typedef struct
-{
- uint8_t controller1; /**< First CAN Controller, should be:
- - CAN1_CTRL: CAN1 Controller
- - CAN2_CTRL: CAN2 Controller
- */
- uint8_t controller2; /**< Second Disable bit, should be:
- - MSG_ENABLE: disable bit = 0(default)
- - MSG_DISABLE: disable bit = 1
- */
- uint32_t lowerEID; /**< Extended ID lower bound, should be 29-bit value */
- uint32_t upperEID; /**< Extended ID upper bound, should be 29-bit value */
-} EFF_GPR_Entry;
-
-
-/**
- * @brief Acceptance Filter Section Table structure
- */
-typedef struct
-{
- FullCAN_Entry* FullCAN_Sec; /**< The pointer point to FullCAN_Entry */
- uint8_t FC_NumEntry; /**< FullCAN Entry Number */
- SFF_Entry* SFF_Sec; /**< The pointer point to SFF_Entry */
- uint8_t SFF_NumEntry; /**< Standard ID Entry Number */
- SFF_GPR_Entry* SFF_GPR_Sec; /**< The pointer point to SFF_GPR_Entry */
- uint8_t SFF_GPR_NumEntry; /**< Group Standard ID Entry Number */
- EFF_Entry* EFF_Sec; /**< The pointer point to EFF_Entry */
- uint8_t EFF_NumEntry; /**< Extended ID Entry Number */
- EFF_GPR_Entry* EFF_GPR_Sec; /**< The pointer point to EFF_GPR_Entry */
- uint8_t EFF_GPR_NumEntry; /**< Group Extended ID Entry Number */
-} AF_SectionDef;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup CAN_Public_Functions CAN Public Functions
- * @{
- */
-
-/* Init/DeInit CAN peripheral -----------*/
-void CAN_Init(uint8_t canId, uint32_t baudrate);
-void CAN_DeInit(uint8_t canId);
-
-/* CAN messages functions ---------------*/
-Status CAN_SendMsg(uint8_t canId, CAN_MSG_Type *CAN_Msg);
-Status CAN_ReceiveMsg(uint8_t canId, CAN_MSG_Type *CAN_Msg);
-CAN_ERROR FCAN_ReadObj(CAN_MSG_Type *CAN_Msg);
-
-/* CAN configure functions ---------------*/
-void CAN_ModeConfig(uint8_t canId, CAN_MODE_Type mode,
- FunctionalState NewState);
-void CAN_SetAFMode(CAN_AFMODE_Type AFmode);
-void CAN_SetCommand(uint8_t canId, uint32_t CMRType);
-
-/* AFLUT functions ---------------------- */
-CAN_ERROR CAN_SetupAFLUT(AF_SectionDef* AFSection);
-CAN_ERROR CAN_LoadFullCANEntry(uint8_t canId, uint16_t ID);
-CAN_ERROR CAN_LoadExplicitEntry(uint8_t canId, uint32_t ID,
- CAN_ID_FORMAT_Type format);
-CAN_ERROR CAN_LoadGroupEntry(uint8_t canId, uint32_t lowerID,
- uint32_t upperID, CAN_ID_FORMAT_Type format);
-CAN_ERROR CAN_RemoveEntry(AFLUT_ENTRY_Type EntryType, uint16_t position);
-
-/* CAN interrupt functions -----------------*/
-void CAN_IRQCmd(uint8_t canId, CAN_INT_EN_Type arg, FunctionalState NewState);
-uint32_t CAN_IntGetStatus(uint8_t canId);
-
-/* CAN get status functions ----------------*/
-IntStatus CAN_FullCANIntGetStatus (void);
-uint32_t CAN_FullCANPendGetStatus (FullCAN_IC_Type type);
-uint32_t CAN_GetCTRLStatus(uint8_t canId, CAN_CTRL_STS_Type arg);
-uint32_t CAN_GetCRStatus(CAN_CR_STS_Type arg);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LPC_CAN_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_clkpwr.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_clkpwr.h
deleted file mode 100644
index 5895d9dd59..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_clkpwr.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_clkpwr.h 2011-06-02
-*//**
-* @file lpc_clkpwr.h
-* @brief Contains all macro definitions and function prototypes
-* support for Clock and Power Control firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup CLKPWR CLKPWR (Clock Power)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_CLKPWR_H_
-#define __LPC_CLKPWR_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-#include "system_LPC407x_8x_177x_8x.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup CLKPWR_Public_Macros CLKPWR Public Macros
- * @{
- */
-
-/********************************************************************
-* Clock Source Selection Definitions
-**********************************************************************/
-#define CLKPWR_CLKSRCSEL_IRCOSC ((uint32_t)(0))
-#define CLKPWR_CLKSRCSEL_MAINOSC ((uint32_t)(1))
-
-/********************************************************************
-* Clock type/domain Definitions (calculated from input and pre-configuration
-* parameter(s)
-**********************************************************************/
-#define CLKPWR_CLKTYPE_CPU ((uint32_t)(0))
-#define CLKPWR_CLKTYPE_PER ((uint32_t)(1))
-#define CLKPWR_CLKTYPE_EMC ((uint32_t)(2))
-#define CLKPWR_CLKTYPE_USB ((uint32_t)(3))
-
-/********************************************************************
-* Power Control for Peripherals Definitions
-**********************************************************************/
-/** LCD controller power/clock control bit */
-#define CLKPWR_PCONP_PCLCD ((uint32_t)(1<<0))
-
-/** Timer/Counter 0 power/clock control bit */
-#define CLKPWR_PCONP_PCTIM0 ((uint32_t)(1<<1))
-
-/* Timer/Counter 1 power/clock control bit */
-#define CLKPWR_PCONP_PCTIM1 ((uint32_t)(1<<2))
-
-/** UART0 power/clock control bit */
-#define CLKPWR_PCONP_PCUART0 ((uint32_t)(1<<3))
-
-/** UART1 power/clock control bit */
-#define CLKPWR_PCONP_PCUART1 ((uint32_t)(1<<4))
-
-/** PWM0 power/clock control bit */
-#define CLKPWR_PCONP_PCPWM0 ((uint32_t)(1<<5))
-
-/** PWM1 power/clock control bit */
-#define CLKPWR_PCONP_PCPWM1 ((uint32_t)(1<<6))
-
-/** The I2C0 interface power/clock control bit */
-#define CLKPWR_PCONP_PCI2C0 ((uint32_t)(1<<7))
-
-/** UART4 power/clock control bit */
-#define CLKPWR_PCONP_PCUART4 ((uint32_t)(1<<8))
-
-/** The RTC power/clock control bit */
-#define CLKPWR_PCONP_PCRTC ((uint32_t)(1<<9))
-
-/** The SSP1 interface power/clock control bit */
-#define CLKPWR_PCONP_PCSSP1 ((uint32_t)(1<<10))
-
-/** External Memory controller power/clock control bit */
-#define CLKPWR_PCONP_PCEMC ((uint32_t)(1<<11))
-
-/** A/D converter 0 (ADC0) power/clock control bit */
-#define CLKPWR_PCONP_PCADC ((uint32_t)(1<<12))
-
-/** CAN Controller 1 power/clock control bit */
-#define CLKPWR_PCONP_PCAN1 ((uint32_t)(1<<13))
-
-/** CAN Controller 2 power/clock control bit */
-#define CLKPWR_PCONP_PCAN2 ((uint32_t)(1<<14))
-
-/** GPIO power/clock control bit */
-#define CLKPWR_PCONP_PCGPIO ((uint32_t)(1<<15))
-
-/** Motor Control PWM */
-#define CLKPWR_PCONP_PCMCPWM ((uint32_t)(1<<17))
-
-/** Quadrature Encoder Interface power/clock control bit */
-#define CLKPWR_PCONP_PCQEI ((uint32_t)(1<<18))
-
-/** The I2C1 interface power/clock control bit */
-#define CLKPWR_PCONP_PCI2C1 ((uint32_t)(1<<19))
-
-/** The SSP2 interface power/clock control bit */
-#define CLKPWR_PCONP_PCSSP2 ((uint32_t)(1<<20))
-
-/** The SSP0 interface power/clock control bit */
-#define CLKPWR_PCONP_PCSSP0 ((uint32_t)(1<<21))
-
-/** Timer 2 power/clock control bit */
-#define CLKPWR_PCONP_PCTIM2 ((uint32_t)(1<<22))
-
-/** Timer 3 power/clock control bit */
-#define CLKPWR_PCONP_PCTIM3 ((uint32_t)(1<<23))
-
-/** UART 2 power/clock control bit */
-#define CLKPWR_PCONP_PCUART2 ((uint32_t)(1<<24))
-
-/** UART 3 power/clock control bit */
-#define CLKPWR_PCONP_PCUART3 ((uint32_t)(1<<25))
-
-/** I2C interface 2 power/clock control bit */
-#define CLKPWR_PCONP_PCI2C2 ((uint32_t)(1<<26))
-
-/** I2S interface power/clock control bit*/
-#define CLKPWR_PCONP_PCI2S ((uint32_t)(1<<27))
-
-/** SD card interface power/clock control bit */
-#define CLKPWR_PCONP_PCSDC ((uint32_t)(1<<28))
-
-/** GP DMA function power/clock control bit*/
-#define CLKPWR_PCONP_PCGPDMA ((uint32_t)(1<<29))
-
-/** Ethernet block power/clock control bit*/
-#define CLKPWR_PCONP_PCENET ((uint32_t)(1<<30))
-
-/** USB interface power/clock control bit*/
-#define CLKPWR_PCONP_PCUSB ((uint32_t)(1<<31))
-
-/********************************************************************
-* Power Control for Peripherals Definitions
-**********************************************************************/
-#define CLKPWR_RSTCON0_LCD ((uint32_t)(0))
-#define CLKPWR_RSTCON0_TIM0 ((uint32_t)(1))
-#define CLKPWR_RSTCON0_TIM1 ((uint32_t)(2))
-#define CLKPWR_RSTCON0_UART0 ((uint32_t)(3))
-#define CLKPWR_RSTCON0_UART1 ((uint32_t)(4))
-#define CLKPWR_RSTCON0_PWM0 ((uint32_t)(5))
-#define CLKPWR_RSTCON0_PWM1 ((uint32_t)(6))
-#define CLKPWR_RSTCON0_I2C0 ((uint32_t)(7))
-#define CLKPWR_RSTCON0_UART4 ((uint32_t)(8))
-#define CLKPWR_RSTCON0_RTC ((uint32_t)(9))
-#define CLKPWR_RSTCON0_SSP1 ((uint32_t)(10))
-#define CLKPWR_RSTCON0_EMC ((uint32_t)(11))
-#define CLKPWR_RSTCON0_ADC ((uint32_t)(12))
-#define CLKPWR_RSTCON0_CAN1 ((uint32_t)(13))
-#define CLKPWR_RSTCON0_CAN2 ((uint32_t)(14))
-#define CLKPWR_RSTCON0_GPIO ((uint32_t)(15))
-#define CLKPWR_RSTCON0_MCPWM ((uint32_t)(17))
-#define CLKPWR_RSTCON0_QEI ((uint32_t)(18))
-#define CLKPWR_RSTCON0_I2C1 ((uint32_t)(19))
-#define CLKPWR_RSTCON0_SSP2 ((uint32_t)(20))
-#define CLKPWR_RSTCON0_SSP0 ((uint32_t)(21))
-#define CLKPWR_RSTCON0_TIM2 ((uint32_t)(22))
-#define CLKPWR_RSTCON0_TIM3 ((uint32_t)(23))
-#define CLKPWR_RSTCON0_UART2 ((uint32_t)(24))
-#define CLKPWR_RSTCON0_UART3 ((uint32_t)(25))
-#define CLKPWR_RSTCON0_I2C2 ((uint32_t)(26))
-#define CLKPWR_RSTCON0_I2S ((uint32_t)(27))
-#define CLKPWR_RSTCON0_SDC ((uint32_t)(28))
-#define CLKPWR_RSTCON0_GPDMA ((uint32_t)(29))
-#define CLKPWR_RSTCON0_ENET ((uint32_t)(30))
-#define CLKPWR_RSTCON0_USB ((uint32_t)(31))
-
-#define CLKPWR_RSTCON1_IOCON ((uint32_t)(32))
-#define CLKPWR_RSTCON1_DAC ((uint32_t)(33))
-#define CLKPWR_RSTCON1_CANACC ((uint32_t)(34))
-/**
- * @}
- */
-
-/* External clock variable from system_LPC407x_8x_177x_8x.h */
-extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
-extern uint32_t PeripheralClock; /*!< Peripheral Clock Frequency (Pclk) */
-extern uint32_t EMCClock; /*!< EMC Clock Frequency */
-
-/* External clock variable from lpc_clkpwr.h */
-extern uint32_t USBClock; /*!< USB Frequency */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup CLKPWR_Public_Functions CLKPWR Public Functions
- * @{
- */
-
-void CLKPWR_SetCLKDiv(uint8_t ClkType, uint8_t DivVal);
-uint32_t CLKPWR_GetCLK(uint8_t ClkType);
-void CLKPWR_ConfigPPWR(uint32_t PPType, FunctionalState NewState);
-void CLKPWR_ConfigReset(uint8_t PType, FunctionalState NewState);
-void CLKPWR_Sleep(void);
-void CLKPWR_DeepSleep(void);
-void CLKPWR_PowerDown(void);
-void CLKPWR_DeepPowerDown(void);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_CLKPWR_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_crc.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_crc.h
deleted file mode 100644
index acbfbd57bd..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_crc.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_crc.h 2011-06-02
-*//**
-* @file lpc_crc.h
-* @brief Contains all macro definitions and function prototypes
-* support for CRC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup CRC CRC (Cyclic Redundancy Check)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC__CRC_H_
-#define __LPC__CRC_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Private macros ------------------------------------------------------------- */
-/** @defgroup CRC_Private_Macros CRC Private Macros
- * @{
- */
-
-/* -------------------------- BIT DEFINITIONS ----------------------------------- */
-/*********************************************************************//**
- * Macro defines for CRC mode register
- **********************************************************************/
-#define CRC_BIT_RVS_WR (1<<2)
-#define CRC_CMPL_WR (1<<3)
-#define CRC_BIT_RVS_SUM (1<<4)
-#define CRC_CMPL_SUM (1<<5)
-
-
-/**
- * @}
- */
-/* Private types ------------------------------------------------------------- */
-typedef enum
-{
- CRC_POLY_CRCCCITT = 0, /** CRC CCITT polynomial */
- CRC_POLY_CRC16, /** CRC-16 polynomial */
- CRC_POLY_CRC32 /** CRC-32 polynomial */
-}CRC_Type;
-
-typedef enum
-{
- CRC_WR_8BIT = 1, /** 8-bit write: 1-cycle operation */
- CRC_WR_16BIT = 2, /** 16-bit write: 2-cycle operation */
- CRC_WR_32BIT = 4, /** 32-bit write: 4-cycle operation */
-}CRC_WR_SIZE;
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup CRC_Public_Functions CRC Public Functions
- * @{
- */
-void CRC_Init(CRC_Type CRCType);
-void CRC_Reset(void);
-uint32_t CRC_CalcDataChecksum(uint32_t data, CRC_WR_SIZE SizeType);
-uint32_t CRC_CalcBlockChecksum(void *blockdata, uint32_t blocksize, CRC_WR_SIZE SizeType);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_CRC_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_dac.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_dac.h
deleted file mode 100644
index 1cb376b3c3..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_dac.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_dac.h 2011-06-02
-*//**
-* @file lpc_dac.h
-* @brief Contains all macro definitions and function prototypes
-* support for DAC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup DAC DAC (Digital-to-Analog Converter)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_DAC_H_
-#define __LPC_DAC_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup DAC_Private_Macros DAC Private Macros
- * @{
- */
-
-/** After the selected settling time after this field is written with a
-new VALUE, the voltage on the AOUT pin (with respect to VSSA)
-is VALUE/1024 � VREF */
-#define DAC_VALUE(n) ((uint32_t)((n&0x3FF)<<6))
-
-/** If this bit = 0: The settling time of the DAC is 1 microsecond max,
- * and the maximum current is 700 microAmpere
- * If this bit = 1: The settling time of the DAC is 2.5 microsecond
- * and the maximum current is 350 microAmpere */
-#define DAC_BIAS_EN ((uint32_t)(1<<16))
-
-/** Value to reload interrupt DMA counter */
-#define DAC_CCNT_VALUE(n) ((uint32_t)(n&0xffff))
-
-/** DCAR double buffering */
-#define DAC_DBLBUF_ENA ((uint32_t)(1<<1))
-
-/** DCAR Time out count enable */
-#define DAC_CNT_ENA ((uint32_t)(1<<2))
-
-/** DCAR DMA access */
-#define DAC_DMA_ENA ((uint32_t)(1<<3))
-
-/** DCAR DACCTRL mask bit */
-#define DAC_DACCTRL_MASK ((uint32_t)(0x0F))
-
-/** Macro to determine if it is valid DAC peripheral */
-#define PARAM_DACx(n) (((uint32_t *)n)==((uint32_t *)LPC_DAC))
-
-/** Macro to check DAC current optional parameter */
-#define PARAM_DAC_CURRENT_OPT(OPTION) ((OPTION == DAC_MAX_CURRENT_700uA)\
- ||(OPTION == DAC_MAX_CURRENT_350uA))
-/**
- * @}
- */
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup DAC_Public_Types DAC Public Types
- * @{
- */
-
-/**
- * @brief Current option in DAC configuration option */
-typedef enum
-{
- DAC_MAX_CURRENT_700uA = 0, /*!< The settling time of the DAC is 1 us max,
- and the maximum current is 700 uA */
- DAC_MAX_CURRENT_350uA /*!< The settling time of the DAC is 2.5 us
- and the maximum current is 350 uA */
-} DAC_CURRENT_OPT;
-
-/**
- * @brief Configuration for DAC converter control register */
-typedef struct
-{
-
- uint8_t DBLBUF_ENA; /**<
- - If 0: Disable DACR double buffering
-
- - If 1: when bit CNT_ENA, enable DACR double buffering feature
- */
- uint8_t CNT_ENA; /*!<
- - If 0: Time out counter is disable
-
- -1: Time out conter is enable
- */
- uint8_t DMA_ENA; /*!<
- - If 0: DMA access is disable
-
- - If 1: DMA burst request
- */
- uint8_t RESERVED;
-
-} DAC_CONVERTER_CFG_Type;
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup DAC_Public_Functions DAC Public Functions
- * @{
- */
-
-void DAC_Init(uint8_t DAC_Id);
-void DAC_UpdateValue (uint8_t DAC_Id, uint32_t dac_value);
-void DAC_SetBias (uint8_t DAC_Id,uint32_t bias);
-void DAC_ConfigDAConverterControl (uint8_t DAC_Id,DAC_CONVERTER_CFG_Type *DAC_ConverterConfigStruct);
-void DAC_SetDMATimeOut(uint8_t DAC_Id,uint32_t time_out);
-uint8_t DAC_IsIntRequested(uint8_t DAC_Id);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_DAC_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_eeprom.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_eeprom.h
deleted file mode 100644
index 56acda355e..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_eeprom.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_eeprom.h 2011-06-02
-*//**
-* @file lpc_eeprom.h
-* @brief Contains all macro definitions and function prototypes
-* support for EEPROM firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup EEPROM EEPROM (Electrically Erasable Programmable Read-Only Memory)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_EEPROM_H_
-#define __LPC_EEPROM_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Private macros ------------------------------------------------------------- */
-/** @defgroup EEPROM_Private_Macros EEPROM Private Macros
- * @{
- */
-
-/* -------------------------- BIT DEFINITIONS --------------------------------- */
-/*********************************************************************//**
- * Macro defines for EEPROM command register
- **********************************************************************/
-#define EEPROM_CMD_8_BIT_READ (0)
-#define EEPROM_CMD_16_BIT_READ (1)
-#define EEPROM_CMD_32_BIT_READ (2)
-#define EEPROM_CMD_8_BIT_WRITE (3)
-#define EEPROM_CMD_16_BIT_WRITE (4)
-#define EEPROM_CMD_32_BIT_WRITE (5)
-#define EEPROM_CMD_ERASE_PRG_PAGE (6)
-
-#define EEPROM_CMD_RDPREFETCH (1<<3)
-
-#define EEPROM_PAGE_SIZE 64
-#define EEPROM_PAGE_NUM 63
-
-/*********************************************************************//**
- * Macro defines for EEPROM address register
- **********************************************************************/
-#define EEPROM_PAGE_OFFSET(n) (n&0x3F)
-#define EEPROM_PAGE_ADRESS(n) ((n&0x3F)<<6)
-
-/*********************************************************************//**
- * Macro defines for EEPROM write data register
- **********************************************************************/
-#define EEPROM_WDATA_8_BIT(n) (n&0x000000FF)
-#define EEPROM_WDATA_16_BIT(n) (n&0x0000FFFF)
-#define EEPROM_WDATA_32_BIT(n) (n&0xFFFFFFFF)
-
-/*********************************************************************//**
- * Macro defines for EEPROM read data register
- **********************************************************************/
-#define EEPROM_RDATA_8_BIT(n) (n&0x000000FF)
-#define EEPROM_RDATA_16_BIT(n) (n&0x0000FFFF)
-#define EEPROM_RDATA_32_BIT(n) (n&0xFFFFFFFF)
-
-/*********************************************************************//**
- * Macro defines for EEPROM power down register
- **********************************************************************/
-#define EEPROM_PWRDWN (1<<0)
-
-#define EEPROM_ENDOF_RW (26)
-#define EEPROM_ENDOF_PROG (28)
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup EEPROM_Public_Types EEPROM Public Types
- * @{
- */
-
-typedef enum
-{
- MODE_8_BIT = 0,
- MODE_16_BIT,
- MODE_32_BIT
-}EEPROM_Mode_Type;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup EEPROM_Public_Functions EEPROM Public Functions
- * @{
- */
-
-void EEPROM_Init(void);
-void EEPROM_Write(uint16_t page_offset, uint16_t page_address, void* data, EEPROM_Mode_Type mode, uint32_t size);
-void EEPROM_Read(uint16_t page_offset, uint16_t page_address, void* data, EEPROM_Mode_Type mode, uint32_t size);
-void EEPROM_Erase(uint16_t address);
-void EEPROM_PowerDown(FunctionalState NewState);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_EEPROM_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_emac.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_emac.h
deleted file mode 100644
index 3d18f31b45..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_emac.h
+++ /dev/null
@@ -1,616 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_emac.h 2011-06-02
-*//**
-* @file lpc_emac.h
-* @brief Contains all macro definitions and function prototypes
-* support for Ethernet MAC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup EMAC EMAC (Ethernet Media Access Controller)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_EMAC_H_
-#define __LPC_EMAC_H_
-
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/** @defgroup EMAC_Private_Macros EMAC Private Macros
- * @{
- */
-
-/* Ethernet MAC register definitions --------------------------------------------------------------------- */
-/* MAC Configuration Register 1 */
-#define EMAC_MAC1_MASK 0xcf1f /*MAC1 register mask*/
-#define EMAC_MAC1_REC_EN 0x00000001 /**< Receive Enable */
-#define EMAC_MAC1_PASS_ALL 0x00000002 /**< Pass All Receive Frames */
-#define EMAC_MAC1_RX_FLOWC 0x00000004 /**< RX Flow Control */
-#define EMAC_MAC1_TX_FLOWC 0x00000008 /**< TX Flow Control */
-#define EMAC_MAC1_LOOPB 0x00000010 /**< Loop Back Mode */
-#define EMAC_MAC1_RES_TX 0x00000100 /**< Reset TX Logic */
-#define EMAC_MAC1_RES_MCS_TX 0x00000200 /**< Reset MAC TX Control Sublayer */
-#define EMAC_MAC1_RES_RX 0x00000400 /**< Reset RX Logic */
-#define EMAC_MAC1_RES_MCS_RX 0x00000800 /**< Reset MAC RX Control Sublayer */
-#define EMAC_MAC1_SIM_RES 0x00004000 /**< Simulation Reset */
-#define EMAC_MAC1_SOFT_RES 0x00008000 /**< Soft Reset MAC */
-
-/* MAC Configuration Register 2 */
-#define EMAC_MAC2_MASK 0x73ff /*MAC2 register mask*/
-#define EMAC_MAC2_FULL_DUP 0x00000001 /**< Full-Duplex Mode */
-#define EMAC_MAC2_FRM_LEN_CHK 0x00000002 /**< Frame Length Checking */
-#define EMAC_MAC2_HUGE_FRM_EN 0x00000004 /**< Huge Frame Enable */
-#define EMAC_MAC2_DLY_CRC 0x00000008 /**< Delayed CRC Mode */
-#define EMAC_MAC2_CRC_EN 0x00000010 /**< Append CRC to every Frame */
-#define EMAC_MAC2_PAD_EN 0x00000020 /**< Pad all Short Frames */
-#define EMAC_MAC2_VLAN_PAD_EN 0x00000040 /**< VLAN Pad Enable */
-#define EMAC_MAC2_ADET_PAD_EN 0x00000080 /**< Auto Detect Pad Enable */
-#define EMAC_MAC2_PPREAM_ENF 0x00000100 /**< Pure Preamble Enforcement */
-#define EMAC_MAC2_LPREAM_ENF 0x00000200 /**< Long Preamble Enforcement */
-#define EMAC_MAC2_NO_BACKOFF 0x00001000 /**< No Backoff Algorithm */
-#define EMAC_MAC2_BACK_PRESSURE 0x00002000 /**< Backoff Presurre / No Backoff */
-#define EMAC_MAC2_EXCESS_DEF 0x00004000 /**< Excess Defer */
-
-/* Back-to-Back Inter-Packet-Gap Register */
-/** Programmable field representing the nibble time offset of the minimum possible period
- * between the end of any transmitted packet to the beginning of the next */
-#define EMAC_IPGT_BBIPG(n) (n&0x7F)
-
-/** Recommended value for Full Duplex of Programmable field representing the nibble time
- * offset of the minimum possible period between the end of any transmitted packet to the
- * beginning of the next */
-#define EMAC_IPGT_FULL_DUP (EMAC_IPGT_BBIPG(0x15))
-
-/** Recommended value for Half Duplex of Programmable field representing the nibble time
- * offset of the minimum possible period between the end of any transmitted packet to the
- * beginning of the next */
-#define EMAC_IPGT_HALF_DUP (EMAC_IPGT_BBIPG(0x12))
-
-/* Non Back-to-Back Inter-Packet-Gap Register */
-/** Programmable field representing the Non-Back-to-Back Inter-Packet-Gap */
-#define EMAC_IPGR_NBBIPG_P2(n) (n&0x7F)
-
-/** Recommended value for Programmable field representing the Non-Back-to-Back Inter-Packet-Gap Part 1 */
-#define EMAC_IPGR_P2_DEF (EMAC_IPGR_NBBIPG_P2(0x12))
-
-/** Programmable field representing the optional carrierSense window referenced in
- * IEEE 802.3/4.2.3.2.1 'Carrier Deference' */
-#define EMAC_IPGR_NBBIPG_P1(n) ((n&0x7F)<<8)
-
-/** Recommended value for Programmable field representing the Non-Back-to-Back Inter-Packet-Gap Part 2 */
-#define EMAC_IPGR_P1_DEF EMAC_IPGR_NBBIPG_P1(0x0C)
-
-/* Collision Window/Retry Register */
-/** Programmable field specifying the number of retransmission attempts following a collision before
- * aborting the packet due to excessive collisions */
-#define EMAC_CLRT_MAX_RETX(n) (n&0x0F)
-
-/** Programmable field representing the slot time or collision window during which collisions occur
- * in properly configured networks */
-#define EMAC_CLRT_COLL(n) ((n&0x3F)<<8)
-
-/** Default value for Collision Window / Retry register */
-#define EMAC_CLRT_DEF ((EMAC_CLRT_MAX_RETX(0x0F))|(EMAC_CLRT_COLL(0x37)))
-
-/* Maximum Frame Register */
-/** Represents a maximum receive frame of 1536 octets */
-#define EMAC_MAXF_MAXFRMLEN(n) (n&0xFFFF)
-#define EMAC_MAXF_MAXFRMLEN_DEF (0x6000)
-
-/* PHY Support Register */
-#define EMAC_SUPP_SPEED 0x00000100 /**< Reduced MII Logic Current Speed */
-//#define EMAC_SUPP_RES_RMII 0x00000800 /**< Reset Reduced MII Logic */
-
-/* Test Register */
-#define EMAC_TEST_SHCUT_PQUANTA 0x00000001 /**< Shortcut Pause Quanta */
-#define EMAC_TEST_TST_PAUSE 0x00000002 /**< Test Pause */
-#define EMAC_TEST_TST_BACKP 0x00000004 /**< Test Back Pressure */
-
-/* MII Management Configuration Register */
-#define EMAC_MCFG_SCAN_INC 0x00000001 /**< Scan Increment PHY Address */
-#define EMAC_MCFG_SUPP_PREAM 0x00000002 /**< Suppress Preamble */
-#define EMAC_MCFG_CLK_SEL(n) ((n&0x0F)<<2) /**< Clock Select Field */
-#define EMAC_MCFG_RES_MII 0x00008000 /**< Reset MII Management Hardware */
-#define EMAC_MCFG_MII_MAXCLK 2500000UL /**< MII Clock max */
-
-/* MII Management Command Register */
-#define EMAC_MCMD_READ 0x00000001 /**< MII Read */
-#define EMAC_MCMD_SCAN 0x00000002 /**< MII Scan continuously */
-
-#define EMAC_MII_WR_TOUT 0x00050000 /**< MII Write timeout count */
-#define EMAC_MII_RD_TOUT 0x00050000 /**< MII Read timeout count */
-
-/* MII Management Address Register */
-#define EMAC_MADR_REG_ADR(n) (n&0x1F) /**< MII Register Address field */
-#define EMAC_MADR_PHY_ADR(n) ((n&0x1F)<<8) /**< PHY Address Field */
-
-/* MII Management Write Data Register */
-#define EMAC_MWTD_DATA(n) (n&0xFFFF) /**< Data field for MMI Management Write Data register */
-
-/* MII Management Read Data Register */
-#define EMAC_MRDD_DATA(n) (n&0xFFFF) /**< Data field for MMI Management Read Data register */
-
-/* MII Management Indicators Register */
-#define EMAC_MIND_BUSY 0x00000001 /**< MII is Busy */
-#define EMAC_MIND_SCAN 0x00000002 /**< MII Scanning in Progress */
-#define EMAC_MIND_NOT_VAL 0x00000004 /**< MII Read Data not valid */
-#define EMAC_MIND_MII_LINK_FAIL 0x00000008 /**< MII Link Failed */
-
-/* Station Address 0 Register */
-/* Station Address 1 Register */
-/* Station Address 2 Register */
-
-
-/* Control register definitions --------------------------------------------------------------------------- */
-/* Command Register */
-#define EMAC_CR_RX_EN 0x00000001 /**< Enable Receive */
-#define EMAC_CR_TX_EN 0x00000002 /**< Enable Transmit */
-#define EMAC_CR_REG_RES 0x00000008 /**< Reset Host Registers */
-#define EMAC_CR_TX_RES 0x00000010 /**< Reset Transmit Datapath */
-#define EMAC_CR_RX_RES 0x00000020 /**< Reset Receive Datapath */
-#define EMAC_CR_PASS_RUNT_FRM 0x00000040 /**< Pass Runt Frames */
-#define EMAC_CR_PASS_RX_FILT 0x00000080 /**< Pass RX Filter */
-#define EMAC_CR_TX_FLOW_CTRL 0x00000100 /**< TX Flow Control */
-#define EMAC_CR_RMII 0x00000200 /**< Reduced MII Interface */
-#define EMAC_CR_FULL_DUP 0x00000400 /**< Full Duplex */
-
-/* Status Register */
-#define EMAC_SR_RX_EN 0x00000001 /**< Enable Receive */
-#define EMAC_SR_TX_EN 0x00000002 /**< Enable Transmit */
-
-/* Receive Descriptor Base Address Register */
-//
-
-/* Receive Status Base Address Register */
-//
-
-/* Receive Number of Descriptors Register */
-//
-
-/* Receive Produce Index Register */
-//
-
-/* Receive Consume Index Register */
-//
-
-/* Transmit Descriptor Base Address Register */
-//
-
-/* Transmit Status Base Address Register */
-//
-
-/* Transmit Number of Descriptors Register */
-//
-
-/* Transmit Produce Index Register */
-//
-
-/* Transmit Consume Index Register */
-//
-
-/* Transmit Status Vector 0 Register */
-#define EMAC_TSV0_CRC_ERR 0x00000001 /**< CRC error */
-#define EMAC_TSV0_LEN_CHKERR 0x00000002 /**< Length Check Error */
-#define EMAC_TSV0_LEN_OUTRNG 0x00000004 /**< Length Out of Range */
-#define EMAC_TSV0_DONE 0x00000008 /**< Tramsmission Completed */
-#define EMAC_TSV0_MCAST 0x00000010 /**< Multicast Destination */
-#define EMAC_TSV0_BCAST 0x00000020 /**< Broadcast Destination */
-#define EMAC_TSV0_PKT_DEFER 0x00000040 /**< Packet Deferred */
-#define EMAC_TSV0_EXC_DEFER 0x00000080 /**< Excessive Packet Deferral */
-#define EMAC_TSV0_EXC_COLL 0x00000100 /**< Excessive Collision */
-#define EMAC_TSV0_LATE_COLL 0x00000200 /**< Late Collision Occured */
-#define EMAC_TSV0_GIANT 0x00000400 /**< Giant Frame */
-#define EMAC_TSV0_UNDERRUN 0x00000800 /**< Buffer Underrun */
-#define EMAC_TSV0_BYTES 0x0FFFF000 /**< Total Bytes Transferred */
-#define EMAC_TSV0_CTRL_FRAME 0x10000000 /**< Control Frame */
-#define EMAC_TSV0_PAUSE 0x20000000 /**< Pause Frame */
-#define EMAC_TSV0_BACK_PRESS 0x40000000 /**< Backpressure Method Applied */
-#define EMAC_TSV0_VLAN 0x80000000 /**< VLAN Frame */
-
-/* Transmit Status Vector 1 Register */
-#define EMAC_TSV1_BYTE_CNT 0x0000FFFF /**< Transmit Byte Count */
-#define EMAC_TSV1_COLL_CNT 0x000F0000 /**< Transmit Collision Count */
-
-/* Receive Status Vector Register */
-#define EMAC_RSV_BYTE_CNT 0x0000FFFF /**< Receive Byte Count */
-#define EMAC_RSV_PKT_IGNORED 0x00010000 /**< Packet Previously Ignored */
-#define EMAC_RSV_RXDV_SEEN 0x00020000 /**< RXDV Event Previously Seen */
-#define EMAC_RSV_CARR_SEEN 0x00040000 /**< Carrier Event Previously Seen */
-#define EMAC_RSV_REC_CODEV 0x00080000 /**< Receive Code Violation */
-#define EMAC_RSV_CRC_ERR 0x00100000 /**< CRC Error */
-#define EMAC_RSV_LEN_CHKERR 0x00200000 /**< Length Check Error */
-#define EMAC_RSV_LEN_OUTRNG 0x00400000 /**< Length Out of Range */
-#define EMAC_RSV_REC_OK 0x00800000 /**< Frame Received OK */
-#define EMAC_RSV_MCAST 0x01000000 /**< Multicast Frame */
-#define EMAC_RSV_BCAST 0x02000000 /**< Broadcast Frame */
-#define EMAC_RSV_DRIB_NIBB 0x04000000 /**< Dribble Nibble */
-#define EMAC_RSV_CTRL_FRAME 0x08000000 /**< Control Frame */
-#define EMAC_RSV_PAUSE 0x10000000 /**< Pause Frame */
-#define EMAC_RSV_UNSUPP_OPC 0x20000000 /**< Unsupported Opcode */
-#define EMAC_RSV_VLAN 0x40000000 /**< VLAN Frame */
-
-/* Flow Control Counter Register */
-#define EMAC_FCC_MIRR_CNT(n) (n&0xFFFF) /**< Mirror Counter */
-#define EMAC_FCC_PAUSE_TIM(n) ((n&0xFFFF)<<16) /**< Pause Timer */
-
-/* Flow Control Status Register */
-#define EMAC_FCS_MIRR_CNT(n) (n&0xFFFF) /**< Mirror Counter Current */
-
-
-/* Receive filter register definitions -------------------------------------------------------- */
-/* Receive Filter Control Register */
-#define EMAC_RFC_UCAST_EN 0x00000001 /**< Accept Unicast Frames Enable */
-#define EMAC_RFC_BCAST_EN 0x00000002 /**< Accept Broadcast Frames Enable */
-#define EMAC_RFC_MCAST_EN 0x00000004 /**< Accept Multicast Frames Enable */
-#define EMAC_RFC_UCAST_HASH_EN 0x00000008 /**< Accept Unicast Hash Filter Frames */
-#define EMAC_RFC_MCAST_HASH_EN 0x00000010 /**< Accept Multicast Hash Filter Fram.*/
-#define EMAC_RFC_PERFECT_EN 0x00000020 /**< Accept Perfect Match Enable */
-#define EMAC_RFC_MAGP_WOL_EN 0x00001000 /**< Magic Packet Filter WoL Enable */
-#define EMAC_RFC_PFILT_WOL_EN 0x00002000 /**< Perfect Filter WoL Enable */
-
-/* Receive Filter WoL Status/Clear Registers */
-#define EMAC_WOL_UCAST 0x00000001 /**< Unicast Frame caused WoL */
-#define EMAC_WOL_BCAST 0x00000002 /**< Broadcast Frame caused WoL */
-#define EMAC_WOL_MCAST 0x00000004 /**< Multicast Frame caused WoL */
-#define EMAC_WOL_UCAST_HASH 0x00000008 /**< Unicast Hash Filter Frame WoL */
-#define EMAC_WOL_MCAST_HASH 0x00000010 /**< Multicast Hash Filter Frame WoL */
-#define EMAC_WOL_PERFECT 0x00000020 /**< Perfect Filter WoL */
-#define EMAC_WOL_RX_FILTER 0x00000080 /**< RX Filter caused WoL */
-#define EMAC_WOL_MAG_PACKET 0x00000100 /**< Magic Packet Filter caused WoL */
-#define EMAC_WOL_BITMASK 0x01BF /**< Receive Filter WoL Status/Clear bitmasl value */
-
-/* Hash Filter Table LSBs Register */
-//
-
-/* Hash Filter Table MSBs Register */
-//
-
-
-/* Module control register definitions ---------------------------------------------------- */
-/* Interrupt Status/Enable/Clear/Set Registers */
-#define EMAC_INT_RX_OVERRUN 0x00000001 /**< Overrun Error in RX Queue */
-#define EMAC_INT_RX_ERR 0x00000002 /**< Receive Error */
-#define EMAC_INT_RX_FIN 0x00000004 /**< RX Finished Process Descriptors */
-#define EMAC_INT_RX_DONE 0x00000008 /**< Receive Done */
-#define EMAC_INT_TX_UNDERRUN 0x00000010 /**< Transmit Underrun */
-#define EMAC_INT_TX_ERR 0x00000020 /**< Transmit Error */
-#define EMAC_INT_TX_FIN 0x00000040 /**< TX Finished Process Descriptors */
-#define EMAC_INT_TX_DONE 0x00000080 /**< Transmit Done */
-#define EMAC_INT_SOFT_INT 0x00001000 /**< Software Triggered Interrupt */
-#define EMAC_INT_WAKEUP 0x00002000 /**< Wakeup Event Interrupt */
-
-/* Power Down Register */
-#define EMAC_PD_POWER_DOWN 0x80000000 /**< Power Down MAC */
-
-
-/* Descriptor and status formats ------------------------------------------------------ */
-/* RX and TX descriptor and status definitions. */
-
-/* EMAC Memory Buffer configuration for 16K Ethernet RAM */
-#define EMAC_NUM_RX_FRAG 4 /**< Num.of RX Fragments 4*1536= 6.0kB */
-#define EMAC_NUM_TX_FRAG 3 /**< Num.of TX Fragments 3*1536= 4.6kB */
-#define EMAC_ETH_MAX_FLEN 1536 /**< Max. Ethernet Frame Size */
-#define EMAC_TX_FRAME_TOUT 0x00100000 /**< Frame Transmit timeout count */
-
-/* EMAC variables located in 16K Ethernet SRAM */
-#define RX_DESC_BASE LPC_PERI_RAM_BASE
-#define RX_STAT_BASE (RX_DESC_BASE + EMAC_NUM_RX_FRAG*8)
-#define TX_DESC_BASE (RX_STAT_BASE + EMAC_NUM_RX_FRAG*8)
-#define TX_STAT_BASE (TX_DESC_BASE + EMAC_NUM_TX_FRAG*8)
-#define RX_BUF_BASE (TX_STAT_BASE + EMAC_NUM_TX_FRAG*4)
-#define TX_BUF_BASE (RX_BUF_BASE + EMAC_NUM_RX_FRAG*EMAC_ETH_MAX_FLEN)
-
-/**
- * @brief RX Descriptor structure type definition
- */
-#define RX_DESC_PACKET(i) (*(uint32_t *)(RX_DESC_BASE + 8*i))
-#define RX_DESC_CTRL(i) (*(uint32_t *)(RX_DESC_BASE+4 + 8*i))
-
-/**
- * @brief RX Status structure type definition
- */
-#define RX_STAT_INFO(i) (*(uint32_t *)(RX_STAT_BASE + 8*i))
-#define RX_STAT_HASHCRC(i) (*(uint32_t *)(RX_STAT_BASE+4 + 8*i))
-
-/**
- * @brief TX Descriptor structure type definition
- */
-#define TX_DESC_PACKET(i) (*(uint32_t *)(TX_DESC_BASE + 8*i))
-#define TX_DESC_CTRL(i) (*(uint32_t *)(TX_DESC_BASE+4 + 8*i))
-
-/**
- * @brief TX Status structure type definition
- */
-#define TX_STAT_INFO(i) (*(uint32_t *)(TX_STAT_BASE + 4*i))
-
-
-/**
- * @brief TX Data Buffer structure definition
- */
-#define RX_BUF(i) (RX_BUF_BASE + EMAC_ETH_MAX_FLEN*i)
-#define TX_BUF(i) (TX_BUF_BASE + EMAC_ETH_MAX_FLEN*i)
-
-/* RX Descriptor Control Word */
-#define EMAC_RCTRL_SIZE(n) (n&0x7FF) /**< Buffer size field */
-#define EMAC_RCTRL_INT 0x80000000 /**< Generate RxDone Interrupt */
-
-/* RX Status Hash CRC Word */
-#define EMAC_RHASH_SA 0x000001FF /**< Hash CRC for Source Address */
-#define EMAC_RHASH_DA 0x001FF000 /**< Hash CRC for Destination Address */
-
-/* RX Status Information Word */
-#define EMAC_RINFO_SIZE 0x000007FF /**< Data size in bytes */
-#define EMAC_RINFO_CTRL_FRAME 0x00040000 /**< Control Frame */
-#define EMAC_RINFO_VLAN 0x00080000 /**< VLAN Frame */
-#define EMAC_RINFO_FAIL_FILT 0x00100000 /**< RX Filter Failed */
-#define EMAC_RINFO_MCAST 0x00200000 /**< Multicast Frame */
-#define EMAC_RINFO_BCAST 0x00400000 /**< Broadcast Frame */
-#define EMAC_RINFO_CRC_ERR 0x00800000 /**< CRC Error in Frame */
-#define EMAC_RINFO_SYM_ERR 0x01000000 /**< Symbol Error from PHY */
-#define EMAC_RINFO_LEN_ERR 0x02000000 /**< Length Error */
-#define EMAC_RINFO_RANGE_ERR 0x04000000 /**< Range Error (exceeded max. size) */
-#define EMAC_RINFO_ALIGN_ERR 0x08000000 /**< Alignment Error */
-#define EMAC_RINFO_OVERRUN 0x10000000 /**< Receive overrun */
-#define EMAC_RINFO_NO_DESCR 0x20000000 /**< No new Descriptor available */
-#define EMAC_RINFO_LAST_FLAG 0x40000000 /**< Last Fragment in Frame */
-#define EMAC_RINFO_ERR 0x80000000 /**< Error Occured (OR of all errors) */
-
-/** RX Status Information word mask */
-#define EMAC_RINFO_ERR_MASK (EMAC_RINFO_FAIL_FILT | EMAC_RINFO_CRC_ERR | EMAC_RINFO_SYM_ERR | \
- EMAC_RINFO_LEN_ERR | EMAC_RINFO_ALIGN_ERR | EMAC_RINFO_OVERRUN)
-
-/* TX Descriptor Control Word */
-#define EMAC_TCTRL_SIZE 0x000007FF /**< Size of data buffer in bytes */
-#define EMAC_TCTRL_OVERRIDE 0x04000000 /**< Override Default MAC Registers */
-#define EMAC_TCTRL_HUGE 0x08000000 /**< Enable Huge Frame */
-#define EMAC_TCTRL_PAD 0x10000000 /**< Pad short Frames to 64 bytes */
-#define EMAC_TCTRL_CRC 0x20000000 /**< Append a hardware CRC to Frame */
-#define EMAC_TCTRL_LAST 0x40000000 /**< Last Descriptor for TX Frame */
-#define EMAC_TCTRL_INT 0x80000000 /**< Generate TxDone Interrupt */
-
-/* TX Status Information Word */
-#define EMAC_TINFO_COL_CNT 0x01E00000 /**< Collision Count */
-#define EMAC_TINFO_DEFER 0x02000000 /**< Packet Deferred (not an error) */
-#define EMAC_TINFO_EXCESS_DEF 0x04000000 /**< Excessive Deferral */
-#define EMAC_TINFO_EXCESS_COL 0x08000000 /**< Excessive Collision */
-#define EMAC_TINFO_LATE_COL 0x10000000 /**< Late Collision Occured */
-#define EMAC_TINFO_UNDERRUN 0x20000000 /**< Transmit Underrun */
-#define EMAC_TINFO_NO_DESCR 0x40000000 /**< No new Descriptor available */
-#define EMAC_TINFO_ERR 0x80000000 /**< Error Occured (OR of all errors) */
-
-
-/* DP83848C PHY definition ------------------------------------------------------------ */
-
-/** PHY device reset time out definition */
-#define EMAC_PHY_RESP_TOUT 0x100000UL
-
-/* ENET Device Revision ID */
-#define EMAC_OLD_EMAC_MODULE_ID 0x39022000 /**< Rev. ID for first rev '-' */
-
-
-/* PHY Basic Mode Control Register (BMCR) bitmap definitions */
-#define EMAC_PHY_BMCR_LOOPBACK (1<<14) /**< Loop back */
-//#define EMAC_PHY_BMCR_AN (1<<12) /**< Auto Negotiation */
-
-#define EMAC_PHY_BMCR_ISOLATE (1<<10) /**< Isolate */
-#define EMAC_PHY_BMCR_RE_AN (1<<9) /**< Restart auto negotiation */
-
-#define EMAC_PHY_BMSR_NOPREAM (1<<6) /**< MF Preamable Supress */
-#define EMAC_PHY_BMSR_AUTO_DONE (1<<5) /**< Auto negotiation complete */
-
-
-#define EMAC_PHY_FULLD_100M (EMAC_PHY_BMCR_SPEED_SEL | EMAC_PHY_BMCR_DUPLEX) // Full Duplex 100Mbit
-#define EMAC_PHY_HALFD_100M (EMAC_PHY_BMCR_SPEED_SEL | (~ EMAC_PHY_BMCR_DUPLEX)) // Half Duplex 100Mbit
-#define EMAC_PHY_FULLD_10M ((~ EMAC_PHY_BMCR_SPEED_SEL) | EMAC_PHY_BMCR_DUPLEX) // Full Duplex 10Mbit
-#define EMAC_PHY_HALFD_10M ((~ EMAC_PHY_BMCR_SPEED_SEL) | (~EMAC_PHY_BMCR_DUPLEX)) // Half Duplex 10MBit
-#define EMAC_PHY_AUTO_NEG (EMAC_PHY_BMCR_SPEED_SEL | EMAC_PHY_BMCR_AN) // Select Auto Negotiation
-
-
-
-/* EMAC PHY status type definitions */
-#define EMAC_PHY_STAT_LINK (0) /**< Link Status */
-#define EMAC_PHY_STAT_SPEED (1) /**< Speed Status */
-#define EMAC_PHY_STAT_DUP (2) /**< Duplex Status */
-
-/* EMAC PHY device Speed definitions */
-#define EMAC_MODE_AUTO (0) /**< Auto-negotiation mode */
-#define EMAC_MODE_10M_FULL (1) /**< 10Mbps FullDuplex mode */
-#define EMAC_MODE_10M_HALF (2) /**< 10Mbps HalfDuplex mode */
-#define EMAC_MODE_100M_FULL (3) /**< 100Mbps FullDuplex mode */
-#define EMAC_MODE_100M_HALF (4) /**< 100Mbps HalfDuplex mode */
-
-/* EMAC User Buffers*/
-#define EMAC_MAX_FRAME_SIZE (0x600) /* 1536 */
-#define EMAC_MAX_FRAME_NUM (2)
-
-/* EMAC Error Codes */
-#define EMAC_ALIGN_ERR ( 1 << 0)
-#define EMAC_RANGE_ERR ( 1 << 1)
-#define EMAC_LENGTH_ERR ( 1 << 2)
-#define EMAC_SYMBOL_ERR ( 1 << 3)
-#define EMAC_CRC_ERR ( 1 << 4)
-#define EMAC_RX_NO_DESC_ERR ( 1 << 5)
-#define EMAC_OVERRUN_ERR ( 1 << 6)
-#define EMAC_LATE_COLLISION_ERR ( 1 << 7)
-#define EMAC_EXCESSIVE_COLLISION_ERR ( 1 << 8)
-#define EMAC_EXCESSIVE_DEFER_ERR ( 1 << 9)
-#define EMAC_UNDERRUN_ERR ( 1 << 10)
-#define EMAC_TX_NO_DESC_ERR ( 1 << 11)
-#define EMAC_FILTER_FAILED_ERR ( 1 << 12)
-
-
-/**
- * @}
- */
-
-
-/**************************** GLOBAL/PUBLIC TYPES ***************************/
-
-/** @defgroup EMAC_Public_Types EMAC Public Types
- * @{
- */
-
-/**
- * @brief TX Data Buffer structure definition
- */
-typedef struct {
- uint32_t ulDataLen; /**< Data length */
- uint32_t *pbDataBuf; /**< A word-align data pointer to data buffer */
-} EMAC_PACKETBUF_Type;
-
-/**
- * @brief PHY Configuration structure definition
- */
-typedef struct {
- uint32_t Mode; /**< Supported EMAC PHY device speed, should be one of the following:
- - EMAC_MODE_AUTO
- - EMAC_MODE_10M_FULL
- - EMAC_MODE_10M_HALF
- - EMAC_MODE_100M_FULL
- - EMAC_MODE_100M_HALF
- */
-} EMAC_PHY_CFG_Type;
-
-
-/** EMAC Call back function type definition */
-typedef int32_t (PHY_INIT_FUNC)(EMAC_PHY_CFG_Type* pPhyCfg);
-typedef int32_t (PHY_RESET_FUNC)(void);
-typedef void (EMAC_FRAME_RECV_FUNC)(uint16_t* pData, uint32_t size);
-typedef void (EMAC_TRANSMIT_FINISH_FUNC)(void);
-typedef void (EMAC_ERR_RECV_FUNC)(int32_t ulErrCode);
-typedef void (EMAC_WAKEUP_FUNC)(void);
-typedef void (SOFT_INT_FUNC)(void);
-
-/**
- * @brief EMAC configuration structure definition
- */
-typedef struct {
- EMAC_PHY_CFG_Type PhyCfg; /* PHY Configuration */
- uint8_t bPhyAddr; /* 5-bit PHY Address field */
- uint8_t *pbEMAC_Addr; /**< Pointer to EMAC Station address that contains 6-bytes
- of MAC address, it must be sorted in order (bEMAC_Addr[0]..[5])
- */
- uint16_t nMaxFrameSize; /* maximum frame length */
- PHY_INIT_FUNC *pfnPHYInit; /* point to the funtion which will be called to initialize PHY */
- PHY_RESET_FUNC *pfnPHYReset; /* point to the function which will be called to reset PHY */
- EMAC_FRAME_RECV_FUNC *pfnFrameReceive; /* point to the function which will be called when a frame is received*/
- EMAC_TRANSMIT_FINISH_FUNC* pfnTransmitFinish; /*point to the function which will be called when transmit finished*/
- EMAC_ERR_RECV_FUNC *pfnErrorReceive; /* point to an array of functions which will be called error occur. */
- /* Errors:
- EMAC_ALIGN_ERR
- EMAC_RANGE_ERR
- EMAC_LENGTH_ERR
- EMAC_SYMBOL_ERR
- EMAC_CRC_ERR
- EMAC_RX_NO_DESC_ERR
- EMAC_OVERRUN_ERR
- EMAC_LATE_COLLISION_ERR
- EMAC_EXCESSIVE_COLLISION_ERR
- EMAC_EXCESSIVE_DEFER_ERR
- EMAC_UNDERRUN_ERR
- EMAC_TX_NO_DESC_ERR
- */
- EMAC_WAKEUP_FUNC *pfnWakeup; /* point to the function which will be called when receiving wakeup interrupt */
- SOFT_INT_FUNC *pfnSoftInt; /* point to the function which will be called when the interrupt caused by software occurs */
-} EMAC_CFG_Type;
-
-/**
- * @brief EMAC Buffer status definition
- */
-typedef enum {
- EMAC_BUFF_EMPTY, /* buffer is empty */
- EMAC_BUFF_PARTIAL_FULL, /* buffer contains some packets */
- EMAC_BUFF_FULL, /* buffer is full */
-} EMAC_BUFF_STATUS;
-
-/**
- * @brief EMAC Buffer Index definition
- */
-
-typedef enum {
- EMAC_TX_BUFF, /* transmit buffer */
- EMAC_RX_BUFF, /* receive buffer */
-} EMAC_BUFF_IDX;
-
-/**
- * @}
- */
-
-
-/** @defgroup EMAC_Public_Functions EMAC Public Functions
- * @{
- */
-
-/** Init/DeInit */
-int32_t EMAC_Init(EMAC_CFG_Type *EMAC_ConfigStruct);
-void EMAC_DeInit(void);
-
-/** Send/Receive data */
-void EMAC_TxEnable( void );
-void EMAC_RxEnable( void );
-void EMAC_SetHashFilter(uint8_t dstMAC_addr[], FunctionalState NewState);
-int32_t EMAC_CRCCalc(uint8_t frame_no_fcs[], int32_t frame_len);
-void EMAC_WritePacketBuffer(EMAC_PACKETBUF_Type *pDataStruct);
-
-/** PHY Setup */
-void EMAC_Write_PHY (uint8_t PhyReg, uint16_t Value);
-uint16_t EMAC_Read_PHY (uint8_t PhyReg);
-void EMAC_SetFullDuplexMode(uint8_t full_duplex);
-void EMAC_SetPHYSpeed(uint8_t mode_100Mbps);
-
-/** Filter */
-void EMAC_SetFilterMode(uint32_t ulFilterMode, FunctionalState NewState);
-FlagStatus EMAC_GetWoLStatus(uint32_t ulWoLMode);
-void EMAC_IntCmd(uint32_t ulIntType, FunctionalState NewState);
-IntStatus EMAC_IntGetStatus(uint32_t ulIntType);
-EMAC_BUFF_STATUS EMAC_GetBufferSts(EMAC_BUFF_IDX idx);
-
-
-/**
- * @}
- */
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_EMAC_DRIVER_H_ */
-
-/**
- * @}
- */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_emc.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_emc.h
deleted file mode 100644
index 6bcc18d476..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_emc.h
+++ /dev/null
@@ -1,549 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_emc.h 2011-06-02
-*//**
-* @file lpc_emc.h
-* @brief Contains all macro definitions and function prototypes
-* support for EMC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup EMC EMC (External Memory Controller)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_EMC_H_
-#define __LPC_EMC_H_
-
-#include "lpc_types.h"
-#include "LPC407x_8x_177x_8x.h"
-
-
-/** @defgroup EMC_Private_Macros EMC Private Macros
- * @{
- */
-
-/***********************************************************************
- * EMC Control Register (EMCControl)
- **********************************************************************/
-/* Control register mask */
-#define EMC_Control_MASK ((uint32_t )0x07)
-/* Control register EMC: Enable control. */
-#define EMC_Control_E ((uint32_t )(1<<0))
-/* Control register EMC: Address mirror control. */
-#define EMC_Control_M ((uint32_t )(1<<1))
-/* Control register EMC: Low-power mode control. */
-#define EMC_Control_L ((uint32_t )(1<<2))
-
-/***********************************************************************
- * EMC Status Register (EMCStatus)
- **********************************************************************/
-/* Status register mask */
-#define EMC_Status_MASK ((uint32_t )0x07)
-/* Status register EMC: Busy. */
-#define EMC_Status_B ((uint32_t )(1<<0))
-/* Status register EMC: Write buffer status. */
-#define EMC_Status_S ((uint32_t )(1<<1))
-/* Status register EMC: Self-refresh acknowledge.. */
-#define EMC_Status_SA ((uint32_t )(1<<2))
-
-/***********************************************************************
- * EMC Configuration register (EMCConfig)
- **********************************************************************/
-/* EMC Configuration register : Little Endian. */
-#define EMC_Config_Little_Endian_Mode ((uint32_t )(0<<0))
-/* EMC Configuration register : Big Endian. */
-#define EMC_Config_Big_Endian_Mode ((uint32_t )(1<<0))
-/* EMC Configuration: Endian Mask */
-#define EMC_Config_Endian_Mask (0x01<<0)
-
-/* EMC Configuration register: CLKOUT ratio 1:1. */
-#define EMC_Config_CCLK_1_1 ((uinr32_t)(0<<8))
-/* EMC Configuration register: CLKOUT ratio 1:1. */
-#define EMC_Config_CCLK_1_2 ((uinr32_t)(1<<8))
-
-/* EMC Configuration register mask */
-#define EMC_Config_MASK ((uint32_t)(0x101))
-
-
-/***********************************************************************
- * Dynamic Memory Control register (EMCDynamicControl)
- **********************************************************************/
-/* Dynamic Memory Control register EMC: Dynamic memory clock enable. */
-#define EMC_DYNAMIC_CTRL_MEMCLK_EN_POS (0)
-#define EMC_DYNAMIC_CTRL_MEMCLK_EN_BMASK (1<<EMC_DYNAMIC_CTRL_MEMCLK_EN_POS)
-
-#define EMC_DYNAMIC_CTRL_CE_SAVEPWR (0<<EMC_DYNAMIC_CTRL_MEMCLK_EN_POS)
-#define EMC_DYNAMIC_CTRL_CE_ALLCLK_HI (1<<EMC_DYNAMIC_CTRL_MEMCLK_EN_POS)
-
-/* Dynamic Memory Control register EMC: Dynamic memory clock control */
-#define EMC_DYNAMIC_CTRL_CLKCTRL_POS (1)
-#define EMC_DYNAMIC_CTRL_CLKCTRL_BMASK (1<<EMC_DYNAMIC_CTRL_CLKCTRL_POS)
-
-#define EMC_DYNAMIC_CTRL_CS_CLKOUT_STOP (0<<EMC_DYNAMIC_CTRL_CLKCTRL_POS)
-#define EMC_DYNAMIC_CTRL_CE_CLKOUT_CONT (1<<EMC_DYNAMIC_CTRL_CLKCTRL_POS)
-
-/* Dynamic Memory Control register EMC: Self-refresh request, EMCSREFREQ*/
-#define EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_POS (2)
-#define EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_BMASK (1<<EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_POS)
-
-#define EMC_DYNAMIC_CTRL_SR_NORMALMODE (0<<EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_POS)
-#define EMC_DYNAMIC_CTRL_SR_SELFREFRESH (1<<EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_POS)
-
-/* Dynamic Memory Control register EMC: Memory clock control (MMC)*/
-#define EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_POS (5)
-#define EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_BMASK (1<<EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_POS)
-
-#define EMC_DYNAMIC_CTRL_MMC_CLKOUT_ENABLED (0<<EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_POS)
-#define EMC_DYNAMIC_CTRL_MMC_CLKOUT_DISABLED (1<<EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_POS)
-
-
-/* Dynamic Memory Control register EMC: SDRAM initialization*/
-#define EMC_DYNAMIC_CTRL_SDRAM_INIT_POS (7)
-#define EMC_DYNAMIC_CTRL_SDRAM_INIT_BMASK (0x03<<EMC_DYNAMIC_CTRL_SDRAM_INIT_POS)
-
-#define EMC_DYNAMIC_CTRL_SDRAM_NORMAL (0<<EMC_DYNAMIC_CTRL_SDRAM_INIT_POS)
-#define EMC_DYNAMIC_CTRL_SDRAM_MODE (1<<EMC_DYNAMIC_CTRL_SDRAM_INIT_POS)
-#define EMC_DYNAMIC_CTRL_SDRAM_PALL (2<<EMC_DYNAMIC_CTRL_SDRAM_INIT_POS)
-#define EMC_DYNAMIC_CTRL_SDRAM_NOP (3<<EMC_DYNAMIC_CTRL_SDRAM_INIT_POS)
-
-/* Dynamic Memory Control register EMC: Low-power SDRAM deep-sleep mode (DP)*/
-#define EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_POS (13)
-#define EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_BMASK (0x01<<EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_POS)
-
-#define EMC_DYNAMIC_CTRL_DP_NORMAL (0<<EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_POS)
-#define EMC_DYNAMIC_CTRL_DP_DEEPSLEEP (1<<EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_POS)
-
-
-/***********************************************************************
- * Dynamic Memory Refresh Timer register (EMCDynamicRefresh)
- **********************************************************************/
-/* Dynamic Memory Refresh Timer register EMC: Refresh timer (REFRESH) */
-#define EMC_DynamicRefresh_REFRESH(n) ((uint32_t ) (n & 0x3ff))
-
-/***********************************************************************
- * Dynamic Memory Read Configuration register (EMCDynamicReadConfig)
- **********************************************************************/
-/* EMCDynamicReadConfig register EMC:Read data strategy (RD) */
-#define EMC_DynamicReadConfig_RD(n) ((uint32_t )(n & 0x03))
-
-/***********************************************************************
- * Dynamic Memory Percentage Command Period register (EMCDynamictRP)
- **********************************************************************/
-/* EMCDynamictRP register EMC: Precharge command period (tRP). */
-#define EMC_DynamictRP_tRP(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Dynamic Memory Active to Precharge Command Period register (EMCDynamictRAS)
- **********************************************************************/
-/* EMCDynamictRAS register EMC: Active to precharge command period (tRAS) */
-#define EMC_DynamictRP_tRAS(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Dynamic Memory Self-refresh Exit Time register (EMCDynamictSREX)
- **********************************************************************/
-/* EMCDynamictSREX register EMC: self-refresh exit time (tSREX)) */
-
-#define EMC_DynamictRP_tSREX(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Dynamic Memory Last Data Out to Active Time register (EMCDynamictAPR)
- **********************************************************************/
-/* EMCDynamictAPR register EMC: Last-data-out to active command time (tAPR) */
-#define EMC_DynamictAPR_tAPR(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Dynamic Memory Data-in to Active Command Time register (EMCDynamictDAL)
- **********************************************************************/
-/* EMCDynamictDAL register EMC: Data-in to active command (tDAL)*/
-#define EMC_DynamictDAL_tDAL(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Dynamic Memory Write Recovery Time register (EMCDynamictWR)
- **********************************************************************/
-/* EMCDynamictWR register EMC: Write recovery time (tWR)*/
-#define EMC_DynamictWR_tWR(n) (uint32_t )(n & 0x0f)
-
-/***********************************************************************
- * Dynamic Memory Active to Active Command Period register (EMCDynamictRC)
- **********************************************************************/
-/* EMCDynamictRC register EMC: Active to active command period (tRC)*/
-#define EMC_DynamictRC_tRC(n) (uint32_t )(n & 0x1f)
-
-/***********************************************************************
- * Dynamic Memory Auto-refresh Period register (EMCDynamictRFC)
- **********************************************************************/
-/* EMCDynamictRFC register EMC: Auto-refresh period and auto-refresh to active command period (tRFC)*/
-#define EMC_DynamictRFC_tRFC(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Dynamic Memory Exit Self-refresh register (EMCDynamictXSR)
- **********************************************************************/
-/* EMCDynamictXSR register EMC: Exit self-refresh to active command time (tXSR)*/
-#define EMC_DynamictXSR_tXSR(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Dynamic Memory Active Bank A to Active Bank B Time register (EMCDynamictRRD)
- **********************************************************************/
-/* EMCDynamictRRD register EMC: Active bank A to active bank B latency (tRRD )*/
-#define EMC_DynamictRRD_tRRD(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- Dynamic Memory Load Mode register to Active Command Time (EMCDynamictMRD)
- **********************************************************************/
-/* EMCDynamictMRD register EMC: Load mode register to active command time (tMRD)*/
-#define EMC_DynamictMRD_tMRD(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Static Memory Extended Wait Register (EMCStaticExtendedWait)
- **********************************************************************/
-/* StaticExtendedWait register EMC: External wait time out. */
-#define EMC_StaticExtendedWait_EXTENDEDWAIT(n) ((uint32_t )(n & 0x3ff))
-
-
-/***********************************************************************
- * Dynamic Memory Configuration registers (EMCDynamicConfig0-3)
- **********************************************************************/
-/* DynamicConfig register EMC: Memory device (MD). */
-#define EMC_DYNAMIC_CFG_MEMDEV_POS (3)
-#define EMC_DYNAMIC_CFG_MEMDEV_BMASK (0x03 << EMC_DYNAMIC_CFG_MEMDEV_POS)
-
-#define EMC_DYNAMIC_CFG_MEMDEV_SDRAM (0 << EMC_DYNAMIC_CFG_MEMDEV_POS)
-#define EMC_DYNAMIC_CFG_MEMDEV_LOWPWR_SDRAM (1 << EMC_DYNAMIC_CFG_MEMDEV_POS)
-
-/* DynamicConfig register EMC: Address mapping (AM) */
-#define EMC_DYNAMIC_CFG_ADD_MAP_P1_POS (7)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK (0x3F<<EMC_DYNAMIC_CFG_ADD_MAP_P1_POS)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P2_POS (12)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK (0x01 << EMC_DYNAMIC_CFG_ADD_MAP_P2_POS)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P3_POS (14)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK (0x01 << EMC_DYNAMIC_CFG_ADD_MAP_P3_POS)
-
-#define EMC_DYNAMIC_CFG_ADD_MAP_P1(n) ( (n<<EMC_DYNAMIC_CFG_ADD_MAP_P1_POS)&EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P2(n) ( (n<<EMC_DYNAMIC_CFG_ADD_MAP_P2_POS)&EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK)
-#define EMC_DYNAMIC_CFG_ADD_MAP_P3(n) ( (n<<EMC_DYNAMIC_CFG_ADD_MAP_P3_POS)&EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK)
-
-#define EMC_ADD_MAP_ROW_BANK_COL (0)
-#define EMC_ADD_MAP_BANK_ROW_COL (1)
-
-
-/* DynamicConfig register EMC: Buffer enable */
-#define EMC_DYNAMIC_CFG_BUFFENABLE_POS (19)
-#define EMC_DYNAMIC_CFG_BUFFENABLE_BMASK (0x01<<EMC_DYNAMIC_CFG_BUFFENABLE_POS)
-
-#define EMC_DYNAMIC_CFG_BUFF_DISABLED (0<<EMC_DYNAMIC_CFG_BUFFENABLE_POS)
-#define EMC_DYNAMIC_CFG_BUFF_ENABLED (1<<EMC_DYNAMIC_CFG_BUFFENABLE_POS)
-
-
-/* DynamicConfig register EMC: Write protect (P) */
-#define EMC_DYNAMIC_CFG_WRPROTECT_POS (20)
-#define EMC_DYNAMIC_CFG_WRPROTECT_BMASK (0x01<<EMC_DYNAMIC_CFG_WRPROTECT_POS)
-
-#define EMC_DYNAMIC_CFG_WR_UNPROTECTED (0<<EMC_DYNAMIC_CFG_WRPROTECT_POS)
-#define EMC_DYNAMIC_CFG_WR_PROTECTED (1<<EMC_DYNAMIC_CFG_WRPROTECT_POS)
-
-/***********************************************************************
- * Dynamic Memory RAS & CAS Delay registers (EMCDynamicRASCAS0-3)
- **********************************************************************/
-/* DynamicRASCAS register EMC: RAS latency (active to read/write delay) (RAS). */
-#define EMC_DYNAMIC_RASCAS_RASCFG_POS (0)
-#define EMC_DYNAMIC_RASCAS_RASCFG_BMASK (0x03<<EMC_DYNAMIC_RASCAS_RASCFG_POS)
-
-#define EMC_DYNAMIC_RASCAS_RASLATENCY_RESVD (0<<EMC_DYNAMIC_RASCAS_RASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_RASLATENCY_1CLK (1<<EMC_DYNAMIC_RASCAS_RASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_RASLATENCY_2CLK (2<<EMC_DYNAMIC_RASCAS_RASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_RASLATENCY_3CLK (3<<EMC_DYNAMIC_RASCAS_RASCFG_POS)
-
-
-/* DynamicRASCAS register EMC: CAS latency (CAS)*/
-#define EMC_DYNAMIC_RASCAS_CASCFG_POS (8)
-#define EMC_DYNAMIC_RASCAS_CASCFG_BMASK (0x03<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
-
-#define EMC_DYNAMIC_RASCAS_CASLATENCY_RESVD (0<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_CASLATENCY_1CLK (1<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_CASLATENCY_2CLK (2<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
-#define EMC_DYNAMIC_RASCAS_CASLATENCY_3CLK (3<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
-
-/***********************************************************************
- * Static Memory Configuration registers (EMCStaticConfig0-3)
- **********************************************************************/
-/* StaticConfig register EMC: Memory width (MW). */
-#define EMC_STATIC_CFG_MEMWIDTH_POS (0)
-#define EMC_STATIC_CFG_MEMWIDTH_BMASK (0x03<<EMC_STATIC_CFG_MEMWIDTH_POS)
-#define EMC_StaticConfig_MW(n) ((uint32_t )((n<<EMC_STATIC_CFG_MEMWIDTH_POS) & EMC_STATIC_CFG_MEMWIDTH_BMASK))
-
-/* StaticConfig register EMC: Memory width 8bit . */
-#define EMC_STATIC_CFG_MW_8BITS (EMC_StaticConfig_MW(0))
-
-/* StaticConfig register EMC: Memory width 16bit . */
-#define EMC_STATIC_CFG_MW_16BITS (EMC_StaticConfig_MW(1))
-
-/* StaticConfig register EMC: Memory width 32bit . */
-#define EMC_STATIC_CFG_MW_32BITS (EMC_StaticConfig_MW(2))
-
-/* StaticConfig register EMC: Page mode (PM) */
-#define EMC_STATIC_CFG_PAGEMODE_POS (3)
-#define EMC_STATIC_CFG_PAGEMODE_MASK (1<<EMC_STATIC_CFG_PAGEMODE_POS)
-
-#define EMC_CFG_PM_DISABLE (0<<EMC_STATIC_CFG_PAGEMODE_POS)
-#define EMC_CFG_PM_ASYNC_ENABLE (1<<EMC_STATIC_CFG_PAGEMODE_POS)
-
-
-/* StaticConfig register EMC: Chip select polarity (PC) */
-#define EMC_STATIC_CFG_CHIPPOLARITY_POS (6)
-#define EMC_STATIC_CFG_CHIPPOLARITY_MASK (1<<EMC_STATIC_CFG_CHIPPOLARITY_POS)
-
-#define EMC_CFG_BYTELAND_PC_ACTIVE_LO (0<<EMC_STATIC_CFG_CHIPPOLARITY_POS)
-#define EMC_CFG_BYTELAND_PC_ACTIVE_HI (1<<EMC_STATIC_CFG_CHIPPOLARITY_POS)
-
-
-/* StaticConfig register EMC: Byte lane state (PB) */
-#define EMC_STATIC_CFG_BYTELAND_POS (7)
-#define EMC_STATIC_CFG_BYTELAND_MASK (1<<EMC_STATIC_CFG_BYTELAND_POS)
-
-#define EMC_CFG_BYTELAND_READ_BITSHIGH (0<<EMC_STATIC_CFG_BYTELAND_POS)
-#define EMC_CFG_BYTELAND_READ_BITSLOW (1<<EMC_STATIC_CFG_BYTELAND_POS)
-
-
-/* StaticConfig register EMC: Extended wait (EW) */
-#define EMC_STATIC_CFG_EXTWAIT_POS (8)
-#define EMC_STATIC_CFG_EXTWAIT_MASK (1<<EMC_STATIC_CFG_EXTWAIT_POS)
-
-#define EMC_CFG_EW_DISABLED (0<<EMC_STATIC_CFG_EXTWAIT_POS)
-#define EMC_CFG_EW_ENABLED (1<<EMC_STATIC_CFG_EXTWAIT_POS)
-
-
-/* StaticConfig register EMC: Buffer enable (B) */
-#define EMC_STATIC_CFG_BUFENABLE_POS (19)
-#define EMC_STATIC_CFG_BUFENABLE_MASK (1<<EMC_STATIC_CFG_BUFENABLE_POS)
-
-#define EMC_CFG_BUF_DISABLED (0<<EMC_STATIC_CFG_BUFENABLE_POS)
-#define EMC_CFG_BUF_ENABLED (1<<EMC_STATIC_CFG_BUFENABLE_POS)
-
-/* StaticConfig register EMC: Write protect (P) */
-#define EMC_STATIC_CFG_WRIEPROTECT_POS (20)
-#define EMC_STATIC_CFG_WRIEPROTECT_MASK (1<<EMC_STATIC_CFG_WRIEPROTECT_POS)
-
-#define EMC_CFG_WRITEPROTECT_DISABLED (0<<EMC_STATIC_CFG_WRIEPROTECT_POS)
-#define EMC_CFG_WRITEPROTECT_ENABLED (1<<EMC_STATIC_CFG_WRIEPROTECT_POS)
-
-/***********************************************************************
- * Static Memory Write Enable Delay registers (EMCStaticWaitWen0-3)
- **********************************************************************/
-/* StaticWaitWen register EMC: Wait write enable (WAITWEN). */
-#define EMC_StaticWaitWen_WAITWEN(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Static Memory Output Enable Delay registers (EMCStaticWaitOen0-3)
- **********************************************************************/
-/* StaticWaitOen register EMC: Wait output enable (WAITOEN). */
-#define EMC_StaticWaitOen_WAITOEN(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Static Memory Read Delay registers (EMCStaticWaitRd0-3)
- **********************************************************************/
-/* StaticWaitRd register EMC: Non-page mode read wait states or asynchronous page mode
-read first access wait state (WAITRD) */
-#define EMC_StaticWaitRd_WAITRD(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Static Memory Page Mode Read Delay registers (EMCStaticwaitPage0-3)
- **********************************************************************/
-/* StaticwaitPage register EMC: Asynchronous page mode read after the first
-read wait states (WAITPAGE). */
-#define EMC_StaticwaitPage_WAITPAGE(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Static Memory Write Delay registers (EMCStaticWaitwr0-3)
- **********************************************************************/
-/* StaticWaitwr register EMC: Write wait states (WAITWR). */
-#define EMC_StaticWaitwr_WAITWR(n) ((uint32_t )(n & 0x1f))
-
-/***********************************************************************
- * Static Memory Turn Round Delay registers (EMCStaticWaitTurn0-3)
- **********************************************************************/
-/* StaticWaitTurn register EMC: Bus turnaround cycles (WAITTURN). */
-#define EMC_StaticWaitTurn_WAITTURN(n) ((uint32_t )(n & 0x0f))
-
-/***********************************************************************
- * Delay Control register (EMCDLYCTL)
- **********************************************************************/
-#define EMC_DLYCTL_CMDDLY(n) ((uint32_t)(n&0x1F))
-#define EMC_DLYCTL_FBCLKDLY(n) ((uint32_t)((n&0x1F)<<8))
-#define EMC_DLYCTL_CLKOUT0DLY(n) ((uint32_t)((n&0x1F)<<16))
-#define EMC_DLYCTL_CLKOUT1DLY(n) ((uint32_t)((n&0x1F)<<24))
-
-/***********************************************************************
- * EMC Calibration register (EMCCAL)
- **********************************************************************/
-#define EMC_CAL_CALVALUE(n) ((uint32_t)(n&0xFF))
-#define EMC_CAL_START ((uint32_t)(1<<14))
-#define EMC_CAL_DONE ((uint32_t)(1<<15))
-
-/***********************************************************************
- * EMC Function Return codes
- **********************************************************************/
- typedef int32_t EMC_FUNC_CODE;
-#define EMC_FUNC_OK (0)
-#define EMC_FUNC_ERR (0x01)
-#define EMC_FUNC_INVALID_PARAM (0x02)
-
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup EMC_Public_Types EMC Public Types
- * @{
- */
-/*EMC dynamic memory registers enum*/
-typedef enum
-{
- EMC_DYN_MEM_REFRESH_TIMER,
- EMC_DYN_MEM_READ_CONFIG,
- EMC_DYN_MEM_TRP,
- EMC_DYN_MEM_TRAS,
- EMC_DYN_MEM_TSREX,
- EMC_DYN_MEM_TAPR,
- EMC_DYN_MEM_TDAL,
- EMC_DYN_MEM_TWR,
- EMC_DYN_MEM_TRC,
- EMC_DYN_MEM_TRFC,
- EMC_DYN_MEM_TXSR,
- EMC_DYN_MEM_TRRD,
- EMC_DYN_MEM_TMRD
-} EMC_DYN_MEM_PAR;
-
-/*EMC static memory registers enum*/
-typedef enum
-{
- EMC_STA_MEM_WAITWEN,
- EMC_STA_MEM_WAITOEN,
- EMC_STA_MEM_WAITRD,
- EMC_STA_MEM_WAITPAGE,
- EMC_STA_MEM_WAITWR,
- EMC_STA_MEM_WAITTURN,
-} EMC_STA_MEM_PAR;
-
-/* SDRAM Config Struct */
-typedef struct
-{
- uint8_t CSn; // 0/1/2/3
- uint32_t TotalSize; // SDRAM TotalSize
- uint16_t ChipSize; // chip size(Mb): 16Mb, 64Mb, 128Mb, 256Mb, 512Mb
- uint8_t DataWidth; // 8bit, 16 bit, 32bit
- uint8_t AddrBusWidth; // 16bit, 32bit
- uint8_t AddrMap; // EMC_ADD_MAP_BANK_ROW_COL/ EMC_ADD_MAP_ROW_BANK_COL
-
- /* timming */
- uint16_t RefreshTime; // Dynamic Refresh Time
- uint8_t ReadConfig; // Read Config Strategy
- uint8_t PrechargeCmdPeriod; // Precharge Command Period (tRP)
- uint8_t SeftRefreshExitTime; // Self-Refresh Exit Time (tSREX)
- uint8_t DataOut2ActiveTime; // the last-data-out to active command time (tAPR)
- uint8_t DataIn2ActiveTime; // the data-in to active command time (tDAL, or tAPW)
- uint8_t WriteRecoveryTime; // the write recovery time (tWR, tDPL, tRWL, or tRDL)
- uint8_t Active2ActivePeriod; // the active to active command period (tRC)
- uint8_t AutoRefrehPeriod; // the auto-refresh period and auto-refresh to active command period (tRFC/tRC)
- uint8_t ExitSelfRefreshTime; // the exit self-refresh to active command time (tXSR)
- uint8_t ActiveBankLatency; // the active bank A to active bank B latency (tRRD)
- uint8_t LoadModeReg2Active; // the load mode register to active command time (tMRD)
- uint8_t Active2PreChargeTime; // Active to precharge command period (tRAS)
- uint8_t RASLatency; // RAS Delay
- uint8_t CASLatency; // CAS Delay
-
-} EMC_DYN_MEM_Config_Type;
-
-typedef struct
-{
- uint8_t CSn; // 0/1/2/3
- uint8_t DataWidth; // 8bit, 16bit, 32bit
- uint8_t PageMode; // 1: asynchronous page mode enabled
- uint8_t ByteLane; // 1: Read when active bits are low, 0: read when acrive bits are High
- uint8_t ExtendedWait; //1: enabled
- uint8_t AddressMirror; // 1: reset memory map, 0: normal memory map
-
- uint8_t WaitWEn; // Delay from the chip select to the write enable (CCLK cycles)
- uint8_t WaitOEn; // Delay from the chip select or address change to output enable (CCLK cycles)
- uint8_t WaitRd; // Delay from the chip select to the read access (CCLK cycles)
- uint8_t WaitPage; // Delay for asynchronous page mode sequential accesses (CCLK cycles)
- uint8_t WaitWr; // Delay from the chip select to the write access (CCLK cycles)
- uint8_t WaitTurn; // The number of bus turnaround cycles
-} EMC_STATIC_MEM_Config_Type;
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup EMC_Public_Functions EMC Public Functions
- * @{
- */
- uint32_t EMC_SDRAM_REFRESH(uint32_t time);
- uint32_t EMC_NS2CLK(uint32_t time);
- EMC_FUNC_CODE DynMem_Init(EMC_DYN_MEM_Config_Type* pConfig);
- EMC_FUNC_CODE StaticMem_Init(EMC_STATIC_MEM_Config_Type* pConfig);
- EMC_FUNC_CODE EMC_Init(void);
- EMC_FUNC_CODE EMC_ConfigEndianMode(uint32_t endian_mode);
- EMC_FUNC_CODE EMC_DynCtrlClockEnable(uint32_t clock_enable);
- EMC_FUNC_CODE EMC_DynCtrlClockControl(int32_t clock_control);
- EMC_FUNC_CODE EMC_DynCtrlSelfRefresh(uint32_t self_refresh_mode);
- EMC_FUNC_CODE EMC_DynCtrlMMC(uint32_t MMC_val);
- EMC_FUNC_CODE EMC_DynCtrlSDRAMInit(uint32_t SDRAM_command);
- EMC_FUNC_CODE EMC_DynCtrlPowerDownMode(uint32_t SDRAM_command);
- EMC_FUNC_CODE EMC_SetDynMemoryParameter(EMC_DYN_MEM_PAR par, uint32_t val);
- EMC_FUNC_CODE EMC_StaticExtendedWait(uint32_t Extended_wait_time_out);
- EMC_FUNC_CODE EMC_DynMemConfigMD(uint32_t index , uint32_t mem_dev);
- EMC_FUNC_CODE EMC_DynMemConfigAM(uint32_t index , uint8_t addr_bus_width, uint8_t addr_map,uint8_t data_bus_width,uint16_t chip_size);
- EMC_FUNC_CODE EMC_DynMemConfigB(uint32_t index , uint32_t buff_control);
- EMC_FUNC_CODE EMC_DynMemConfigP(uint32_t index , uint32_t permission);
- EMC_FUNC_CODE EMC_DynMemRAS(uint32_t index , uint32_t ras_val);
- EMC_FUNC_CODE EMC_DynMemCAS(uint32_t index , uint32_t cas_val);
- EMC_FUNC_CODE EMC_StaMemConfigMW(uint32_t index , uint32_t mem_width);
- EMC_FUNC_CODE EMC_StaMemConfigPM(uint32_t index , uint32_t page_mode);
- EMC_FUNC_CODE EMC_StaMemConfigPC(uint32_t index , uint32_t pol_val);
- EMC_FUNC_CODE EMC_StaMemConfigPB(uint32_t index , uint32_t pb_val);
- EMC_FUNC_CODE EMC_StaMemConfigEW(uint32_t index , uint32_t ex_wait);
- EMC_FUNC_CODE EMC_StaMemConfigB(uint32_t index , uint32_t buf_val);
- EMC_FUNC_CODE EMC_StaMemConfigpP(uint32_t index , uint32_t per_val);
- EMC_FUNC_CODE EMC_SetStaMemoryParameter(uint32_t index ,EMC_STA_MEM_PAR par, uint32_t val);
-
-/**
- * @}
- */
-
-
-#endif /* __LPC_EMC_H_ */
-
-/**
- * @}
- */
-
-
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_exti.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_exti.h
deleted file mode 100644
index 5148bb231e..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_exti.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_exti.h 2011-06-02
-*//**
-* @file lpc_exti.h
-* @brief Contains all macro definitions and function prototypes
-* support for External Interrupt firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup EXTI EXTI (External Interrupt)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_EXTI_H_
-#define __LPC_EXTI_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup EXTI_Private_Macros EXTI Private Macros
- * @{
- */
-/*********************************************************************//**
- * Macro defines for EXTI control register
- **********************************************************************/
-#define EXTI_EINT0_BIT_MARK 0x01
-#define EXTI_EINT1_BIT_MARK 0x02
-#define EXTI_EINT2_BIT_MARK 0x04
-#define EXTI_EINT3_BIT_MARK 0x08
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup EXTI_Public_Types EXTI Public Types
- * @{
- */
-
-/**
- * @brief EXTI external interrupt line option
- */
-typedef enum
-{
- EXTI_EINT0, /*!< External interrupt 0, P2.10 */
- EXTI_EINT1, /*!< External interrupt 0, P2.11 */
- EXTI_EINT2, /*!< External interrupt 0, P2.12 */
- EXTI_EINT3 /*!< External interrupt 0, P2.13 */
-} EXTI_LINE_ENUM;
-
-/**
- * @brief EXTI mode option
- */
-typedef enum
-{
- EXTI_MODE_LEVEL_SENSITIVE, /*!< Level sensitivity is selected */
- EXTI_MODE_EDGE_SENSITIVE /*!< Edge sensitivity is selected */
-} EXTI_MODE_ENUM;
-
-/**
- * @brief EXTI polarity option
- */
-typedef enum
-{
- EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE, /*!< Low active or falling edge sensitive
- depending on pin mode */
- EXTI_POLARITY_HIGH_ACTIVE_OR_RISING_EDGE /*!< High active or rising edge sensitive
- depending on pin mode */
-} EXTI_POLARITY_ENUM;
-
-/**
- * @brief EXTI Initialize structure
- */
-typedef struct
-{
- /** Select external interrupt pin (EINT0, EINT1, EINT 2, EINT3) */
- EXTI_LINE_ENUM EXTI_Line;
-
- /** Choose between Level-sensitivity or Edge sensitivity */
- EXTI_MODE_ENUM EXTI_Mode;
-
- /** If EXTI mode is level-sensitive: this element use to select low or high active level
- if EXTI mode is polarity-sensitive: this element use to select falling or rising edge */
- EXTI_POLARITY_ENUM EXTI_polarity;
-
-}EXTI_InitTypeDef;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup EXTI_Public_Functions EXTI Public Functions
- * @{
- */
-
-void EXTI_Init(void);
-void EXTI_DeInit(void);
-
-void EXTI_Config(EXTI_InitTypeDef *EXTICfg);
-void EXTI_SetMode(EXTI_LINE_ENUM EXTILine, EXTI_MODE_ENUM mode);
-void EXTI_SetPolarity(EXTI_LINE_ENUM EXTILine, EXTI_POLARITY_ENUM polarity);
-void EXTI_ClearEXTIFlag(EXTI_LINE_ENUM EXTILine);
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_EXTI_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_gpdma.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_gpdma.h
deleted file mode 100644
index 20f7d90d15..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_gpdma.h
+++ /dev/null
@@ -1,418 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_gpdma.h 2011-06-02
-*//**
-* @file lpc_gpdma.h
-* @brief Contains all macro definitions and function prototypes
-* support for GPDMA firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup GPDMA GPDMA (General Purpose Direct Memory Access)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_GPDMA_H_
-#define __LPC_GPDMA_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup GPDMA_Public_Macros GPDMA Public Macros
- * @{
- */
-
-/** DMA Connection number definitions */
-#define GPDMA_CONN_MCI ((1UL)) /** SD card */
-#define GPDMA_CONN_SSP0_Tx ((2UL)) /**< SSP0 Tx */
-#define GPDMA_CONN_SSP0_Rx ((3UL)) /**< SSP0 Rx */
-#define GPDMA_CONN_SSP1_Tx ((4UL)) /**< SSP1 Tx */
-#define GPDMA_CONN_SSP1_Rx ((5UL)) /**< SSP1 Rx */
-#define GPDMA_CONN_SSP2_Tx ((6UL)) /**< SSP2 Tx */
-#define GPDMA_CONN_SSP2_Rx ((7UL)) /**< SSP2 Rx */
-#define GPDMA_CONN_ADC ((8UL)) /**< ADC */
-#define GPDMA_CONN_DAC ((9UL)) /**< DAC */
-#define GPDMA_CONN_UART0_Tx ((10UL)) /**< UART0 Tx */
-#define GPDMA_CONN_UART0_Rx ((11UL)) /**< UART0 Rx */
-#define GPDMA_CONN_UART1_Tx ((12UL)) /**< UART1 Tx */
-#define GPDMA_CONN_UART1_Rx ((13UL)) /**< UART1 Rx */
-#define GPDMA_CONN_UART2_Tx ((14UL)) /**< UART2 Tx */
-#define GPDMA_CONN_UART2_Rx ((15UL)) /**< UART2 Rx */
-#define GPDMA_CONN_MAT0_0 ((16UL)) /**< MAT0.0 */
-#define GPDMA_CONN_MAT0_1 ((17UL)) /**< MAT0.1 */
-#define GPDMA_CONN_MAT1_0 ((18UL)) /**< MAT1.0 */
-#define GPDMA_CONN_MAT1_1 ((19UL)) /**< MAT1.1 */
-#define GPDMA_CONN_MAT2_0 ((20UL)) /**< MAT2.0 */
-#define GPDMA_CONN_MAT2_1 ((21UL)) /**< MAT2.1 */
-#define GPDMA_CONN_I2S_Channel_0 ((22UL)) /**< I2S channel 0 */
-#define GPDMA_CONN_I2S_Channel_1 ((23UL)) /**< I2S channel 1 */
-#define GPDMA_CONN_UART3_Tx ((26UL)) /**< UART3 Tx */
-#define GPDMA_CONN_UART3_Rx ((27UL)) /**< UART3 Rx */
-#define GPDMA_CONN_UART4_Tx ((28UL)) /**< UART3 Tx */
-#define GPDMA_CONN_UART4_Rx ((29UL)) /**< UART3 Rx */
-#define GPDMA_CONN_MAT3_0 ((30UL)) /**< MAT3.0 */
-#define GPDMA_CONN_MAT3_1 ((31UL)) /**< MAT3.1 */
-
-/** GPDMA Transfer type definitions: Memory to memory - DMA control */
-#define GPDMA_TRANSFERTYPE_M2M ((0UL))
-/** GPDMA Transfer type definitions: Memory to peripheral - DMA control */
-#define GPDMA_TRANSFERTYPE_M2P ((1UL))
-/** GPDMA Transfer type definitions: Peripheral to memory - DMA control */
-#define GPDMA_TRANSFERTYPE_P2M ((2UL))
-/** Source peripheral to destination peripheral - DMA control */
-#define GPDMA_TRANSFERTYPE_P2P ((3UL))
-/** Memory to peripheral - Destination peripheral control */
-#define GPDMA_TRANSFERTYPE_M2P_DEST_CTRL ((5UL))
-/** Peripheral to memory - Source peripheral control */
-#define GPDMA_TRANSFERTYPE_P2M_SRC_CTRL ((6UL))
-
-/** Burst size in Source and Destination definitions */
-#define GPDMA_BSIZE_1 ((0UL)) /**< Burst size = 1 */
-#define GPDMA_BSIZE_4 ((1UL)) /**< Burst size = 4 */
-#define GPDMA_BSIZE_8 ((2UL)) /**< Burst size = 8 */
-#define GPDMA_BSIZE_16 ((3UL)) /**< Burst size = 16 */
-#define GPDMA_BSIZE_32 ((4UL)) /**< Burst size = 32 */
-#define GPDMA_BSIZE_64 ((5UL)) /**< Burst size = 64 */
-#define GPDMA_BSIZE_128 ((6UL)) /**< Burst size = 128 */
-#define GPDMA_BSIZE_256 ((7UL)) /**< Burst size = 256 */
-
-/** Width in Source transfer width and Destination transfer width definitions */
-#define GPDMA_WIDTH_BYTE ((0UL)) /**< Width = 1 byte */
-#define GPDMA_WIDTH_HALFWORD ((1UL)) /**< Width = 2 bytes */
-#define GPDMA_WIDTH_WORD ((2UL)) /**< Width = 4 bytes */
-
-/** DMA Request Select Mode definitions */
-#define GPDMA_REQSEL_UART ((0UL)) /**< UART TX/RX is selected */
-#define GPDMA_REQSEL_TIMER ((1UL)) /**< Timer match is selected */
-
-/**
- * @}
- */
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup GPDMA_Private_Macros GPDMA Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/*********************************************************************//**
- * Macro defines for DMA Interrupt Status register
- **********************************************************************/
-#define GPDMA_DMACIntStat_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACIntStat_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Interrupt Terminal Count Request Status register
- **********************************************************************/
-#define GPDMA_DMACIntTCStat_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACIntTCStat_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Interrupt Terminal Count Request Clear register
- **********************************************************************/
-#define GPDMA_DMACIntTCClear_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACIntTCClear_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Interrupt Error Status register
- **********************************************************************/
-#define GPDMA_DMACIntErrStat_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACIntErrStat_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Interrupt Error Clear register
- **********************************************************************/
-#define GPDMA_DMACIntErrClr_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACIntErrClr_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Raw Interrupt Terminal Count Status register
- **********************************************************************/
-#define GPDMA_DMACRawIntTCStat_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACRawIntTCStat_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Raw Error Interrupt Status register
- **********************************************************************/
-#define GPDMA_DMACRawIntErrStat_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACRawIntErrStat_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Enabled Channel register
- **********************************************************************/
-#define GPDMA_DMACEnbldChns_Ch(n) (((1UL<<n)&0xFF))
-#define GPDMA_DMACEnbldChns_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Software Burst Request register
- **********************************************************************/
-#define GPDMA_DMACSoftBReq_Src(n) (((1UL<<n)&0xFFFF))
-#define GPDMA_DMACSoftBReq_BITMASK ((0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Software Single Request register
- **********************************************************************/
-#define GPDMA_DMACSoftSReq_Src(n) (((1UL<<n)&0xFFFF))
-#define GPDMA_DMACSoftSReq_BITMASK ((0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Software Last Burst Request register
- **********************************************************************/
-#define GPDMA_DMACSoftLBReq_Src(n) (((1UL<<n)&0xFFFF))
-#define GPDMA_DMACSoftLBReq_BITMASK ((0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Software Last Single Request register
- **********************************************************************/
-#define GPDMA_DMACSoftLSReq_Src(n) (((1UL<<n)&0xFFFF))
-#define GPDMA_DMACSoftLSReq_BITMASK ((0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Configuration register
- **********************************************************************/
-#define GPDMA_DMACConfig_E ((0x01)) /**< DMA Controller enable*/
-#define GPDMA_DMACConfig_M ((0x02)) /**< AHB Master endianness configuration*/
-#define GPDMA_DMACConfig_BITMASK ((0x03))
-
-/*********************************************************************//**
- * Macro defines for DMA Synchronization register
- **********************************************************************/
-#define GPDMA_DMACSync_Src(n) (((1UL<<n)&0xFFFF))
-#define GPDMA_DMACSync_BITMASK ((0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Request Select register
- **********************************************************************/
-#define GPDMA_DMAReqSel_Input(n) (((1UL<<(n-8))&0xFF))
-#define GPDMA_DMAReqSel_BITMASK ((0xFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Channel Linked List Item registers
- **********************************************************************/
-/** DMA Channel Linked List Item registers bit mask*/
-#define GPDMA_DMACCxLLI_BITMASK ((0xFFFFFFFC))
-
-/*********************************************************************//**
- * Macro defines for DMA channel control registers
- **********************************************************************/
-/** Transfer size*/
-#define GPDMA_DMACCxControl_TransferSize(n) (((n&0xFFF)<<0))
-/** Source burst size*/
-#define GPDMA_DMACCxControl_SBSize(n) (((n&0x07)<<12))
-/** Destination burst size*/
-#define GPDMA_DMACCxControl_DBSize(n) (((n&0x07)<<15))
-/** Source transfer width*/
-#define GPDMA_DMACCxControl_SWidth(n) (((n&0x07)<<18))
-/** Destination transfer width*/
-#define GPDMA_DMACCxControl_DWidth(n) (((n&0x07)<<21))
-/** Source increment*/
-#define GPDMA_DMACCxControl_SI ((1UL<<26))
-/** Destination increment*/
-#define GPDMA_DMACCxControl_DI ((1UL<<27))
-/** Indicates that the access is in user mode or privileged mode*/
-#define GPDMA_DMACCxControl_Prot1 ((1UL<<28))
-/** Indicates that the access is bufferable or not bufferable*/
-#define GPDMA_DMACCxControl_Prot2 ((1UL<<29))
-/** Indicates that the access is cacheable or not cacheable*/
-#define GPDMA_DMACCxControl_Prot3 ((1UL<<30))
-/** Terminal count interrupt enable bit */
-#define GPDMA_DMACCxControl_I ((1UL<<31))
-/** DMA channel control registers bit mask */
-#define GPDMA_DMACCxControl_BITMASK ((0xFCFFFFFF))
-
-/*********************************************************************//**
- * Macro defines for DMA Channel Configuration registers
- **********************************************************************/
-/** DMA control enable*/
-#define GPDMA_DMACCxConfig_E ((1UL<<0))
-/** Source peripheral*/
-#define GPDMA_DMACCxConfig_SrcPeripheral(n) (((n&0x1F)<<1))
-/** Destination peripheral*/
-#define GPDMA_DMACCxConfig_DestPeripheral(n) (((n&0x1F)<<6))
-/** This value indicates the type of transfer*/
-#define GPDMA_DMACCxConfig_TransferType(n) (((n&0x7)<<11))
-/** Interrupt error mask*/
-#define GPDMA_DMACCxConfig_IE ((1UL<<14))
-/** Terminal count interrupt mask*/
-#define GPDMA_DMACCxConfig_ITC ((1UL<<15))
-/** Lock*/
-#define GPDMA_DMACCxConfig_L ((1UL<<16))
-/** Active*/
-#define GPDMA_DMACCxConfig_A ((1UL<<17))
-/** Halt*/
-#define GPDMA_DMACCxConfig_H ((1UL<<18))
-/** DMA Channel Configuration registers bit mask */
-#define GPDMA_DMACCxConfig_BITMASK ((0x7FFFF))
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup GPDMA_Public_Types GPDMA Public Types
- * @{
- */
-
-/**
- * @brief GPDMA Status enumeration
- */
-typedef enum {
- GPDMA_STAT_INT, /**< GPDMA Interrupt Status */
- GPDMA_STAT_INTTC, /**< GPDMA Interrupt Terminal Count Request Status */
- GPDMA_STAT_INTERR, /**< GPDMA Interrupt Error Status */
- GPDMA_STAT_RAWINTTC, /**< GPDMA Raw Interrupt Terminal Count Status */
- GPDMA_STAT_RAWINTERR, /**< GPDMA Raw Error Interrupt Status */
- GPDMA_STAT_ENABLED_CH /**< GPDMA Enabled Channel Status */
-} GPDMA_Status_Type;
-
-/**
- * @brief GPDMA Interrupt clear status enumeration
- */
-typedef enum{
- GPDMA_STATCLR_INTTC, /**< GPDMA Interrupt Terminal Count Request Clear */
- GPDMA_STATCLR_INTERR /**< GPDMA Interrupt Error Clear */
-}GPDMA_StateClear_Type;
-
-/**
- * @brief GPDMA Channel configuration structure type definition
- */
-typedef struct {
- uint32_t ChannelNum; /**< DMA channel number, should be in
- range from 0 to 7.
- Note: DMA channel 0 has the highest priority
- and DMA channel 7 the lowest priority.
- */
- uint32_t TransferSize; /**< Length/Size of transfer */
- uint32_t TransferWidth; /**< Transfer width - used for TransferType is GPDMA_TRANSFERTYPE_M2M only */
- uint32_t SrcMemAddr; /**< Physical Source Address, used in case TransferType is chosen as
- GPDMA_TRANSFERTYPE_M2M or GPDMA_TRANSFERTYPE_M2P */
- uint32_t DstMemAddr; /**< Physical Destination Address, used in case TransferType is chosen as
- GPDMA_TRANSFERTYPE_M2M or GPDMA_TRANSFERTYPE_P2M */
- uint32_t TransferType; /**< Transfer Type, should be one of the following:
- - GPDMA_TRANSFERTYPE_M2M: Memory to memory - DMA control
- - GPDMA_TRANSFERTYPE_M2P: Memory to peripheral - DMA control
- - GPDMA_TRANSFERTYPE_P2M: Peripheral to memory - DMA control
- - GPDMA_TRANSFERTYPE_P2P: Source peripheral to destination peripheral - DMA control
- */
- uint32_t SrcConn; /**< Peripheral Source Connection type, used in case TransferType is chosen as
- GPDMA_TRANSFERTYPE_P2M or GPDMA_TRANSFERTYPE_P2P, should be one of
- following:
- - GPDMA_CONN_SSP0_Tx: SSP0, Tx
- - GPDMA_CONN_SSP0_Rx: SSP0, Rx
- - GPDMA_CONN_SSP1_Tx: SSP1, Tx
- - GPDMA_CONN_SSP1_Rx: SSP1, Rx
- - GPDMA_CONN_ADC: ADC
- - GPDMA_CONN_I2S_Channel_0: I2S Channel 0
- - GPDMA_CONN_I2S_Channel_1: I2S Channel 1
- - GPDMA_CONN_DAC: DAC
- - GPDMA_CONN_UART0_Tx_MAT0_0: UART0 Tx / MAT0.0
- - GPDMA_CONN_UART0_Rx_MAT0_1: UART0 Rx / MAT0.1
- - GPDMA_CONN_UART1_Tx_MAT1_0: UART1 Tx / MAT1.0
- - GPDMA_CONN_UART1_Rx_MAT1_1: UART1 Rx / MAT1.1
- - GPDMA_CONN_UART2_Tx_MAT2_0: UART2 Tx / MAT2.0
- - GPDMA_CONN_UART2_Rx_MAT2_1: UART2 Rx / MAT2.1
- - GPDMA_CONN_UART3_Tx_MAT3_0: UART3 Tx / MAT3.0
- - GPDMA_CONN_UART3_Rx_MAT3_1: UART3 Rx / MAT3.1
- */
- uint32_t DstConn; /**< Peripheral Destination Connection type, used in case TransferType is chosen as
- GPDMA_TRANSFERTYPE_M2P or GPDMA_TRANSFERTYPE_P2P, should be one of
- following:
- - GPDMA_CONN_SSP0_Tx: SSP0, Tx
- - GPDMA_CONN_SSP0_Rx: SSP0, Rx
- - GPDMA_CONN_SSP1_Tx: SSP1, Tx
- - GPDMA_CONN_SSP1_Rx: SSP1, Rx
- - GPDMA_CONN_ADC: ADC
- - GPDMA_CONN_I2S_Channel_0: I2S Channel 0
- - GPDMA_CONN_I2S_Channel_1: I2S Channel 1
- - GPDMA_CONN_DAC: DAC
- - GPDMA_CONN_UART0_Tx_MAT0_0: UART0 Tx / MAT0.0
- - GPDMA_CONN_UART0_Rx_MAT0_1: UART0 Rx / MAT0.1
- - GPDMA_CONN_UART1_Tx_MAT1_0: UART1 Tx / MAT1.0
- - GPDMA_CONN_UART1_Rx_MAT1_1: UART1 Rx / MAT1.1
- - GPDMA_CONN_UART2_Tx_MAT2_0: UART2 Tx / MAT2.0
- - GPDMA_CONN_UART2_Rx_MAT2_1: UART2 Rx / MAT2.1
- - GPDMA_CONN_UART3_Tx_MAT3_0: UART3 Tx / MAT3.0
- - GPDMA_CONN_UART3_Rx_MAT3_1: UART3 Rx / MAT3.1
- */
- uint32_t DMALLI; /**< Linker List Item structure data address
- if there's no Linker List, set as '0'
- */
-} GPDMA_Channel_CFG_Type;
-
-/**
- * @brief GPDMA Linker List Item structure type definition
- */
-typedef struct {
- uint32_t SrcAddr; /**< Source Address */
- uint32_t DstAddr; /**< Destination address */
- uint32_t NextLLI; /**< Next LLI address, otherwise set to '0' */
- uint32_t Control; /**< GPDMA Control of this LLI */
-} GPDMA_LLI_Type;
-
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup GPDMA_Public_Functions GPDMA Public Functions
- * @{
- */
-
-void GPDMA_Init(void);
-Status GPDMA_Setup(GPDMA_Channel_CFG_Type *GPDMAChannelConfig);
-IntStatus GPDMA_IntGetStatus(GPDMA_Status_Type type, uint8_t channel);
-void GPDMA_ClearIntPending(GPDMA_StateClear_Type type, uint8_t channel);
-void GPDMA_ChannelCmd(uint8_t channelNum, FunctionalState NewState);
-//void GPDMA_IntHandler(void);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_GPDMA_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_gpio.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_gpio.h
deleted file mode 100644
index 5a15ec6595..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_gpio.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_gpio.h 2011-06-02
-*//**
-* @file lpc_gpio.h
-* @brief Contains all macro definitions and function prototypes
-* support for GPIO firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup GPIO GPIO (General Purpose Input/Output)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_GPIO_H_
-#define __LPC_GPIO_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup GPIO_Public_Macros GPIO Public Macros
- * @{
- */
-
-#define GPIO_DIRECTION_INPUT (0)
-#define GPIO_DIRECTION_OUTPUT (1)
-
-/** Fast GPIO port 0 byte accessible definition */
-#define GPIO0_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO0_BASE))
-/** Fast GPIO port 1 byte accessible definition */
-#define GPIO1_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO1_BASE))
-/** Fast GPIO port 2 byte accessible definition */
-#define GPIO2_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO2_BASE))
-/** Fast GPIO port 3 byte accessible definition */
-#define GPIO3_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO3_BASE))
-/** Fast GPIO port 4 byte accessible definition */
-#define GPIO4_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO4_BASE))
-/** Fast GPIO port 4 byte accessible definition */
-#define GPIO5_Byte ((GPIO_Byte_TypeDef *)(LPC_GPIO5_BASE))
-
-
-
-/** Fast GPIO port 0 half-word accessible definition */
-#define GPIO0_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO0_BASE))
-/** Fast GPIO port 1 half-word accessible definition */
-#define GPIO1_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO1_BASE))
-/** Fast GPIO port 2 half-word accessible definition */
-#define GPIO2_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO2_BASE))
-/** Fast GPIO port 3 half-word accessible definition */
-#define GPIO3_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO3_BASE))
-/** Fast GPIO port 4 half-word accessible definition */
-#define GPIO4_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO4_BASE))
-/** Fast GPIO port 4 half-word accessible definition */
-#define GPIO5_HalfWord ((GPIO_HalfWord_TypeDef *)(LPC_GPIO5_BASE))
-
-/**
- * @}
- */
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup GPIO_Public_Types GPIO Public Types
- * @{
- */
-
-/**
- * @brief Fast GPIO port byte type definition
- */
-typedef struct {
- __IO uint8_t FIODIR[4]; /**< FIO direction register in byte-align */
- uint32_t RESERVED0[3]; /**< Reserved */
- __IO uint8_t FIOMASK[4]; /**< FIO mask register in byte-align */
- __IO uint8_t FIOPIN[4]; /**< FIO pin register in byte align */
- __IO uint8_t FIOSET[4]; /**< FIO set register in byte-align */
- __O uint8_t FIOCLR[4]; /**< FIO clear register in byte-align */
-} GPIO_Byte_TypeDef;
-
-
-/**
- * @brief Fast GPIO port half-word type definition
- */
-typedef struct {
- __IO uint16_t FIODIRL; /**< FIO direction register lower halfword part */
- __IO uint16_t FIODIRU; /**< FIO direction register upper halfword part */
- uint32_t RESERVED0[3]; /**< Reserved */
- __IO uint16_t FIOMASKL; /**< FIO mask register lower halfword part */
- __IO uint16_t FIOMASKU; /**< FIO mask register upper halfword part */
- __IO uint16_t FIOPINL; /**< FIO pin register lower halfword part */
- __IO uint16_t FIOPINU; /**< FIO pin register upper halfword part */
- __IO uint16_t FIOSETL; /**< FIO set register lower halfword part */
- __IO uint16_t FIOSETU; /**< FIO set register upper halfword part */
- __O uint16_t FIOCLRL; /**< FIO clear register lower halfword part */
- __O uint16_t FIOCLRU; /**< FIO clear register upper halfword part */
-} GPIO_HalfWord_TypeDef;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup GPIO_Public_Functions GPIO Public Functions
- * @{
- */
-
-/* GPIO style ------------------------------- */
-void GPIO_Init(void);
-void GPIO_Deinit(void);
-void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir);
-void GPIO_SetValue(uint8_t portNum, uint32_t bitValue);
-void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue);
-void GPIO_OutputValue(uint8_t portNum, uint32_t bitMask, uint8_t value);
-uint32_t GPIO_ReadValue(uint8_t portNum);
-void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState);
-FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState);
-void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue);
-
-/* FIO (word-accessible) style ------------------------------- */
-void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir);
-void FIO_SetValue(uint8_t portNum, uint32_t bitValue);
-void FIO_ClearValue(uint8_t portNum, uint32_t bitValue);
-uint32_t FIO_ReadValue(uint8_t portNum);
-void FIO_SetMask(uint8_t portNum, uint32_t bitValue, uint8_t maskValue);
-void FIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState);
-FunctionalState FIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState);
-void FIO_ClearInt(uint8_t portNum, uint32_t pinNum);
-
-/* FIO (halfword-accessible) style ------------------------------- */
-void FIO_HalfWordSetDir(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t dir);
-void FIO_HalfWordSetMask(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t maskValue);
-void FIO_HalfWordSetValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue);
-void FIO_HalfWordClearValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue);
-uint16_t FIO_HalfWordReadValue(uint8_t portNum, uint8_t halfwordNum);
-
-/* FIO (byte-accessible) style ------------------------------- */
-void FIO_ByteSetDir(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t dir);
-void FIO_ByteSetMask(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue);
-void FIO_ByteSetValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue);
-void FIO_ByteClearValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue);
-uint8_t FIO_ByteReadValue(uint8_t portNum, uint8_t byteNum);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_GPIO_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_i2c.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_i2c.h
deleted file mode 100644
index 15a6a8b147..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_i2c.h
+++ /dev/null
@@ -1,420 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_i2c.h 2011-06-02
-*//**
-* @file lpc_i2c.h
-* @brief Contains all macro definitions and function prototypes
-* support for I2C firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup I2C I2C (Inter-IC Control bus)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_I2C_H_
-#define __LPC_I2C_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup I2C_Private_Macros I2C Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/*******************************************************************//**
- * I2C Control Set register description
- *********************************************************************/
-#define I2C_I2CONSET_AA ((0x04)) /*!< Assert acknowledge flag */
-#define I2C_I2CONSET_SI ((0x08)) /*!< I2C interrupt flag */
-#define I2C_I2CONSET_STO ((0x10)) /*!< STOP flag */
-#define I2C_I2CONSET_STA ((0x20)) /*!< START flag */
-#define I2C_I2CONSET_I2EN ((0x40)) /*!< I2C interface enable */
-
-/*******************************************************************//**
- * I2C Control Clear register description
- *********************************************************************/
-/** Assert acknowledge Clear bit */
-#define I2C_I2CONCLR_AAC ((1<<2))
-/** I2C interrupt Clear bit */
-#define I2C_I2CONCLR_SIC ((1<<3))
-/** I2C STOP Clear bit */
-#define I2C_I2CONCLR_STOC ((1<<4))
-/** START flag Clear bit */
-#define I2C_I2CONCLR_STAC ((1<<5))
-/** I2C interface Disable bit */
-#define I2C_I2CONCLR_I2ENC ((1<<6))
-
-/********************************************************************//**
- * I2C Status Code definition (I2C Status register)
- *********************************************************************/
-/* Return Code in I2C status register */
-#define I2C_STAT_CODE_BITMASK ((0xF8))
-
-/* I2C return status code definitions ----------------------------- */
-
-/** No relevant information */
-#define I2C_I2STAT_NO_INF ((0xF8))
-
-/** Bus Error */
-#define I2C_I2STAT_BUS_ERROR ((0x00))
-
-/* Master transmit mode -------------------------------------------- */
-/** A start condition has been transmitted */
-#define I2C_I2STAT_M_TX_START ((0x08))
-
-/** A repeat start condition has been transmitted */
-#define I2C_I2STAT_M_TX_RESTART ((0x10))
-
-/** SLA+W has been transmitted, ACK has been received */
-#define I2C_I2STAT_M_TX_SLAW_ACK ((0x18))
-
-/** SLA+W has been transmitted, NACK has been received */
-#define I2C_I2STAT_M_TX_SLAW_NACK ((0x20))
-
-/** Data has been transmitted, ACK has been received */
-#define I2C_I2STAT_M_TX_DAT_ACK ((0x28))
-
-/** Data has been transmitted, NACK has been received */
-#define I2C_I2STAT_M_TX_DAT_NACK ((0x30))
-
-/** Arbitration lost in SLA+R/W or Data bytes */
-#define I2C_I2STAT_M_TX_ARB_LOST ((0x38))
-
-/* Master receive mode -------------------------------------------- */
-/** A start condition has been transmitted */
-#define I2C_I2STAT_M_RX_START ((0x08))
-
-/** A repeat start condition has been transmitted */
-#define I2C_I2STAT_M_RX_RESTART ((0x10))
-
-/** Arbitration lost */
-#define I2C_I2STAT_M_RX_ARB_LOST ((0x38))
-
-/** SLA+R has been transmitted, ACK has been received */
-#define I2C_I2STAT_M_RX_SLAR_ACK ((0x40))
-
-/** SLA+R has been transmitted, NACK has been received */
-#define I2C_I2STAT_M_RX_SLAR_NACK ((0x48))
-
-/** Data has been received, ACK has been returned */
-#define I2C_I2STAT_M_RX_DAT_ACK ((0x50))
-
-/** Data has been received, NACK has been return */
-#define I2C_I2STAT_M_RX_DAT_NACK ((0x58))
-
-/* Slave receive mode -------------------------------------------- */
-/** Own slave address has been received, ACK has been returned */
-#define I2C_I2STAT_S_RX_SLAW_ACK ((0x60))
-
-/** Arbitration lost in SLA+R/W as master */
-#define I2C_I2STAT_S_RX_ARB_LOST_M_SLA ((0x68))
-
-/** General call address has been received, ACK has been returned */
-#define I2C_I2STAT_S_RX_GENCALL_ACK ((0x70))
-
-/** Arbitration lost in SLA+R/W (GENERAL CALL) as master */
-#define I2C_I2STAT_S_RX_ARB_LOST_M_GENCALL ((0x78))
-
-/** Previously addressed with own SLV address;
- * Data has been received, ACK has been return */
-#define I2C_I2STAT_S_RX_PRE_SLA_DAT_ACK ((0x80))
-
-/** Previously addressed with own SLA;
- * Data has been received and NOT ACK has been return */
-#define I2C_I2STAT_S_RX_PRE_SLA_DAT_NACK ((0x88))
-
-/** Previously addressed with General Call;
- * Data has been received and ACK has been return */
-#define I2C_I2STAT_S_RX_PRE_GENCALL_DAT_ACK ((0x90))
-
-/** Previously addressed with General Call;
- * Data has been received and NOT ACK has been return */
-#define I2C_I2STAT_S_RX_PRE_GENCALL_DAT_NACK ((0x98))
-
-/** A STOP condition or repeated START condition has
- * been received while still addressed as SLV/REC
- * (Slave Receive) or SLV/TRX (Slave Transmit) */
-#define I2C_I2STAT_S_RX_STA_STO_SLVREC_SLVTRX ((0xA0))
-
-/** Slave transmit mode */
-/** Own SLA+R has been received, ACK has been returned */
-#define I2C_I2STAT_S_TX_SLAR_ACK ((0xA8))
-
-/** Arbitration lost in SLA+R/W as master */
-#define I2C_I2STAT_S_TX_ARB_LOST_M_SLA ((0xB0))
-
-/** Data has been transmitted, ACK has been received */
-#define I2C_I2STAT_S_TX_DAT_ACK ((0xB8))
-
-/** Data has been transmitted, NACK has been received */
-#define I2C_I2STAT_S_TX_DAT_NACK ((0xC0))
-
-/** Last data byte in I2DAT has been transmitted (AA = 0);
- ACK has been received */
-#define I2C_I2STAT_S_TX_LAST_DAT_ACK ((0xC8))
-
-/** Time out in case of using I2C slave mode */
-#define I2C_SLAVE_TIME_OUT 0x10000UL
-
-/********************************************************************//**
- * I2C Data register definition
- *********************************************************************/
-/** Mask for I2DAT register*/
-#define I2C_I2DAT_BITMASK ((0xFF))
-
-/** Idle data value will be send out in slave mode in case of the actual
- * expecting data requested from the master is greater than its sending data
- * length that can be supported */
-#define I2C_I2DAT_IDLE_CHAR (0xFF)
-
-/********************************************************************//**
- * I2C Monitor mode control register description
- *********************************************************************/
-#define I2C_I2MMCTRL_MM_ENA ((1<<0)) /**< Monitor mode enable */
-#define I2C_I2MMCTRL_ENA_SCL ((1<<1)) /**< SCL output enable */
-#define I2C_I2MMCTRL_MATCH_ALL ((1<<2)) /**< Select interrupt register match */
-#define I2C_I2MMCTRL_BITMASK ((0x07)) /**< Mask for I2MMCTRL register */
-
-/********************************************************************//**
- * I2C Data buffer register description
- *********************************************************************/
-/** I2C Data buffer register bit mask */
-#define I2DATA_BUFFER_BITMASK ((0xFF))
-
-/********************************************************************//**
- * I2C Slave Address registers definition
- *********************************************************************/
-/** General Call enable bit */
-#define I2C_I2ADR_GC ((1<<0))
-
-/** I2C Slave Address registers bit mask */
-#define I2C_I2ADR_BITMASK ((0xFF))
-
-/********************************************************************//**
- * I2C Mask Register definition
- *********************************************************************/
-/** I2C Mask Register mask field */
-#define I2C_I2MASK_MASK(n) ((n&0xFE))
-
-/********************************************************************//**
- * I2C SCL HIGH duty cycle Register definition
- *********************************************************************/
-/** I2C SCL HIGH duty cycle Register bit mask */
-#define I2C_I2SCLH_BITMASK ((0xFFFF))
-
-/********************************************************************//**
- * I2C SCL LOW duty cycle Register definition
- *********************************************************************/
-/** I2C SCL LOW duty cycle Register bit mask */
-#define I2C_I2SCLL_BITMASK ((0xFFFF))
-
-
-/* I2C status values */
-#define I2C_SETUP_STATUS_ARBF (1<<8) /**< Arbitration false */
-#define I2C_SETUP_STATUS_NOACKF (1<<9) /**< No ACK returned */
-#define I2C_SETUP_STATUS_DONE (1<<10) /**< Status DONE */
-
-
-/* I2C state handle return values */
-#define I2C_OK 0x00
-#define I2C_BYTE_SENT 0x01
-#define I2C_BYTE_RECV 0x02
-#define I2C_LAST_BYTE_RECV 0x04
-#define I2C_SEND_END 0x08
-#define I2C_RECV_END 0x10
-#define I2C_STA_STO_RECV 0x20
-
-
-#define I2C_ERR (0x10000000)
-#define I2C_NAK_RECV (0x10000000 |0x01)
-
-#define I2C_CheckError(ErrorCode) (ErrorCode & 0x10000000)
-
-/**
- * @}
- */
-
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup I2C_Public_Types I2C Public Types
- * @{
- */
-
-typedef enum
-{
- I2C_0 = 0,
- I2C_1,
- I2C_2
-} en_I2C_unitId;
-
-typedef enum
-{
- I2C_MASTER_MODE,
- I2C_SLAVE_MODE,
- I2C_GENERAL_MODE,
-} en_I2C_Mode;
-/**
- * @brief I2C Own slave address setting structure
- */
-typedef struct
-{
- uint8_t SlaveAddrChannel; /**< Slave Address channel in I2C control,
- should be in range from 0..3
- */
- uint8_t SlaveAddr_7bit; /**< Value of 7-bit slave address */
- uint8_t GeneralCallState; /**< Enable/Disable General Call Functionality
- when I2C control being in Slave mode, should be:
- - ENABLE: Enable General Call function.
- - DISABLE: Disable General Call function.
- */
- uint8_t SlaveAddrMaskValue; /**< Any bit in this 8-bit value (bit 7:1)
- which is set to '1' will cause an automatic compare on
- the corresponding bit of the received address when it
- is compared to the SlaveAddr_7bit value associated with this
- mask register. In other words, bits in SlaveAddr_7bit value
- which are masked are not taken into account in determining
- an address match
- */
-} I2C_OWNSLAVEADDR_CFG_Type;
-
-
-/**
- * @brief Master transfer setup data structure definitions
- */
-typedef struct
-{
- uint32_t sl_addr7bit; /**< Slave address in 7bit mode */
- __IO uint8_t* tx_data; /**< Pointer to Transmit data - NULL if data transmit
- is not used */
- uint32_t tx_length; /**< Transmit data length - 0 if data transmit
- is not used*/
- __IO uint32_t tx_count; /**< Current Transmit data counter */
- __IO uint8_t* rx_data; /**< Pointer to Receive data - NULL if data receive
- is not used */
- uint32_t rx_length; /**< Receive data length - 0 if data receive is
- not used */
- __IO uint32_t rx_count; /**< Current Receive data counter */
- uint32_t retransmissions_max; /**< Max Re-Transmission value */
- uint32_t retransmissions_count; /**< Current Re-Transmission counter */
- __IO uint32_t status; /**< Current status of I2C activity */
- void (*callback)(void); /**< Pointer to Call back function when transmission complete
- used in interrupt transfer mode */
-} I2C_M_SETUP_Type;
-
-
-/**
- * @brief Slave transfer setup data structure definitions
- */
-typedef struct
-{
- __IO uint8_t* tx_data;
- uint32_t tx_length;
- __IO uint32_t tx_count;
- __IO uint8_t* rx_data;
- uint32_t rx_length;
- __IO uint32_t rx_count;
- __IO uint32_t status;
- void (*callback)(void);
-} I2C_S_SETUP_Type;
-
-/**
- * @brief Transfer option type definitions
- */
-typedef enum
-{
- I2C_TRANSFER_POLLING = 0, /**< Transfer in polling mode */
- I2C_TRANSFER_INTERRUPT /**< Transfer in interrupt mode */
-} I2C_TRANSFER_OPT_Type;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup I2C_Public_Functions I2C Public Functions
- * @{
- */
-
-/* I2C Init/DeInit functions ---------- */
-void I2C_Init(en_I2C_unitId i2cId, uint32_t clockrate);
-void I2C_DeInit(en_I2C_unitId i2cId);
-void I2C_Cmd(en_I2C_unitId i2cId, en_I2C_Mode Mode, FunctionalState NewState);
-
-/* I2C transfer data functions -------- */
-Status I2C_MasterTransferData(en_I2C_unitId i2cId,
- I2C_M_SETUP_Type *TransferCfg, I2C_TRANSFER_OPT_Type Opt);
-Status I2C_SlaveTransferData(en_I2C_unitId i2cId,
- I2C_S_SETUP_Type *TransferCfg, I2C_TRANSFER_OPT_Type Opt);
-uint32_t I2C_MasterTransferComplete(en_I2C_unitId i2cId);
-uint32_t I2C_SlaveTransferComplete(en_I2C_unitId i2cId);
-
-
-void I2C_SetOwnSlaveAddr(en_I2C_unitId i2cId, I2C_OWNSLAVEADDR_CFG_Type *OwnSlaveAddrConfigStruct);
-uint8_t I2C_GetLastStatusCode(en_I2C_unitId i2cId);
-
-/* I2C Monitor functions ---------------*/
-void I2C_MonitorModeConfig(en_I2C_unitId i2cId, uint32_t MonitorCfgType, FunctionalState NewState);
-void I2C_MonitorModeCmd(en_I2C_unitId i2cId, FunctionalState NewState);
-uint8_t I2C_MonitorGetDatabuffer(en_I2C_unitId i2cId);
-BOOL_8 I2C_MonitorHandler(en_I2C_unitId i2cId, uint8_t *buffer, uint32_t size);
-
-/* I2C Interrupt handler functions ------*/
-void I2C_IntCmd (en_I2C_unitId i2cId, Bool NewState);
-void I2C_MasterHandler (en_I2C_unitId i2cId);
-void I2C_SlaveHandler (en_I2C_unitId i2cId);
-
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_I2C_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_i2s.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_i2s.h
deleted file mode 100644
index 69951d32cc..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_i2s.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_i2s.h 2011-06-02
-*//**
-* @file lpc_i2s.h
-* @brief Contains all macro definitions and function prototypes
-* support for I2S firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup I2S I2S (Inter-IC Sound bus)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_I2S_H_
-#define __LPC_I2S_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup I2S_Public_Macros I2S Public Macros
- * @{
- */
-
-/*********************************************************************//**
- * I2S configuration parameter defines
- **********************************************************************/
-/** I2S Wordwidth bit */
-#define I2S_WORDWIDTH_8 ((uint32_t)(0))
-#define I2S_WORDWIDTH_16 ((uint32_t)(1))
-#define I2S_WORDWIDTH_32 ((uint32_t)(3))
-/** I2S Channel bit */
-#define I2S_STEREO ((uint32_t)(0))
-#define I2S_MONO ((uint32_t)(1))
-/** I2S Master/Slave mode bit */
-#define I2S_MASTER_MODE ((uint8_t)(0))
-#define I2S_SLAVE_MODE ((uint8_t)(1))
-/** I2S Stop bit */
-#define I2S_STOP_ENABLE ((uint8_t)(1))
-#define I2S_STOP_DISABLE ((uint8_t)(0))
-/** I2S Reset bit */
-#define I2S_RESET_ENABLE ((uint8_t)(1))
-#define I2S_RESET_DISABLE ((uint8_t)(0))
-/** I2S Mute bit */
-#define I2S_MUTE_ENABLE ((uint8_t)(1))
-#define I2S_MUTE_DISABLE ((uint8_t)(0))
-/** I2S Transmit/Receive bit */
-#define I2S_TX_MODE ((uint8_t)(0))
-#define I2S_RX_MODE ((uint8_t)(1))
-/** I2S Clock Select bit */
-#define I2S_CLKSEL_FRDCLK ((uint8_t)(0))
-#define I2S_CLKSEL_MCLK ((uint8_t)(2))
-/** I2S 4-pin Mode bit */
-#define I2S_4PIN_ENABLE ((uint8_t)(1))
-#define I2S_4PIN_DISABLE ((uint8_t)(0))
-/** I2S MCLK Enable bit */
-#define I2S_MCLK_ENABLE ((uint8_t)(1))
-#define I2S_MCLK_DISABLE ((uint8_t)(0))
-/** I2S select DMA bit */
-#define I2S_DMA_1 ((uint8_t)(0))
-#define I2S_DMA_2 ((uint8_t)(1))
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup I2S_Private_Macros I2S Private Macros
- * @{
- */
-
-/*********************************************************************//**
- * Macro defines for DAO-Digital Audio Output register
- **********************************************************************/
-/** I2S wordwide - the number of bytes in data output - 8 bits*/
-#define I2S_DAO_WORDWIDTH_8 ((uint32_t)(0))
-/** I2S wordwide - the number of bytes in data output - 16 bits*/
-#define I2S_DAO_WORDWIDTH_16 ((uint32_t)(1))
-/** I2S wordwide - the number of bytes in data output - 32 bits*/
-#define I2S_DAO_WORDWIDTH_32 ((uint32_t)(3))
-/** I2S control mono or stereo format */
-#define I2S_DAO_MONO ((uint32_t)(1<<2))
-/** I2S control stop mode */
-#define I2S_DAO_STOP ((uint32_t)(1<<3))
-/** I2S control reset mode */
-#define I2S_DAO_RESET ((uint32_t)(1<<4))
-/** I2S control master/slave mode */
-#define I2S_DAO_SLAVE ((uint32_t)(1<<5))
-/** I2S word select half period minus one */
-#define I2S_DAO_WS_HALFPERIOD(n) ((uint32_t)(n<<6))
-/** I2S control mute mode */
-#define I2S_DAO_MUTE ((uint32_t)(1<<15))
-
-/*********************************************************************//**
- * Macro defines for DAI-Digital Audio Input register
-**********************************************************************/
-/** I2S wordwide - the number of bytes in data input - 8 bit*/
-#define I2S_DAI_WORDWIDTH_8 ((uint32_t)(0))
-/** I2S wordwide - the number of bytes in data input - 16 bit*/
-#define I2S_DAI_WORDWIDTH_16 ((uint32_t)(1))
-/** I2S wordwide - the number of bytes in data input - 32 bit*/
-#define I2S_DAI_WORDWIDTH_32 ((uint32_t)(3))
-/** I2S control mono or stereo format */
-#define I2S_DAI_MONO ((uint32_t)(1<<2))
-/** I2S control stop mode */
-#define I2S_DAI_STOP ((uint32_t)(1<<3))
-/** I2S control reset mode */
-#define I2S_DAI_RESET ((uint32_t)(1<<4))
-/** I2S control master/slave mode */
-#define I2S_DAI_SLAVE ((uint32_t)(1<<5))
-/** I2S word select half period minus one (9 bits)*/
-#define I2S_DAI_WS_HALFPERIOD(n) ((uint32_t)((n&0x1FF)<<6))
-/** I2S control mute mode */
-#define I2S_DAI_MUTE ((uint32_t)(1<<15))
-
-/*********************************************************************//**
- * Macro defines for STAT register (Status Feedback register)
-**********************************************************************/
-/** I2S Status Receive or Transmit Interrupt */
-#define I2S_STATE_IRQ ((uint32_t)(1))
-/** I2S Status Receive or Transmit DMA1 */
-#define I2S_STATE_DMA1 ((uint32_t)(1<<1))
-/** I2S Status Receive or Transmit DMA2 */
-#define I2S_STATE_DMA2 ((uint32_t)(1<<2))
-/** I2S Status Current level of the Receive FIFO (5 bits)*/
-#define I2S_STATE_RX_LEVEL(n) ((uint32_t)((n&1F)<<8))
-/** I2S Status Current level of the Transmit FIFO (5 bits)*/
-#define I2S_STATE_TX_LEVEL(n) ((uint32_t)((n&1F)<<16))
-
-/*********************************************************************//**
- * Macro defines for DMA1 register (DMA1 Configuration register)
-**********************************************************************/
-/** I2S control DMA1 for I2S receive */
-#define I2S_DMA1_RX_ENABLE ((uint32_t)(1))
-/** I2S control DMA1 for I2S transmit */
-#define I2S_DMA1_TX_ENABLE ((uint32_t)(1<<1))
-/** I2S set FIFO level that trigger a receive DMA request on DMA1 */
-#define I2S_DMA1_RX_DEPTH(n) ((uint32_t)((n&0x1F)<<8))
-/** I2S set FIFO level that trigger a transmit DMA request on DMA1 */
-#define I2S_DMA1_TX_DEPTH(n) ((uint32_t)((n&0x1F)<<16))
-
-/*********************************************************************//**
- * Macro defines for DMA2 register (DMA2 Configuration register)
-**********************************************************************/
-/** I2S control DMA2 for I2S receive */
-#define I2S_DMA2_RX_ENABLE ((uint32_t)(1))
-/** I2S control DMA1 for I2S transmit */
-#define I2S_DMA2_TX_ENABLE ((uint32_t)(1<<1))
-/** I2S set FIFO level that trigger a receive DMA request on DMA1 */
-#define I2S_DMA2_RX_DEPTH(n) ((uint32_t)((n&0x1F)<<8))
-/** I2S set FIFO level that trigger a transmit DMA request on DMA1 */
-#define I2S_DMA2_TX_DEPTH(n) ((uint32_t)((n&0x1F)<<16))
-
-/*********************************************************************//**
-* Macro defines for IRQ register (Interrupt Request Control register)
-**********************************************************************/
-/** I2S control I2S receive interrupt */
-#define I2S_IRQ_RX_ENABLE ((uint32_t)(1))
-/** I2S control I2S transmit interrupt */
-#define I2S_IRQ_TX_ENABLE ((uint32_t)(1<<1))
-/** I2S set the FIFO level on which to create an irq request */
-#define I2S_IRQ_RX_DEPTH(n) ((uint32_t)((n&0x1F)<<8))
-/** I2S set the FIFO level on which to create an irq request */
-#define I2S_IRQ_TX_DEPTH(n) ((uint32_t)((n&0x1F)<<16))
-
-/********************************************************************************//**
- * Macro defines for TXRATE/RXRATE register (Transmit/Receive Clock Rate register)
-*********************************************************************************/
-/** I2S Transmit MCLK rate denominator */
-#define I2S_TXRATE_Y_DIVIDER(n) ((uint32_t)(n&0xFF))
-/** I2S Transmit MCLK rate denominator */
-#define I2S_TXRATE_X_DIVIDER(n) ((uint32_t)((n&0xFF)<<8))
-/** I2S Receive MCLK rate denominator */
-#define I2S_RXRATE_Y_DIVIDER(n) ((uint32_t)(n&0xFF))
-/** I2S Receive MCLK rate denominator */
-#define I2S_RXRATE_X_DIVIDER(n) ((uint32_t)((n&0xFF)<<8))
-
-/*************************************************************************************//**
- * Macro defines for TXBITRATE & RXBITRATE register (Transmit/Receive Bit Rate register)
-**************************************************************************************/
-#define I2S_TXBITRATE(n) ((uint32_t)(n&0x3F))
-#define I2S_RXBITRATE(n) ((uint32_t)(n&0x3F))
-
-/**********************************************************************************//**
- * Macro defines for TXMODE/RXMODE register (Transmit/Receive Mode Control register)
-************************************************************************************/
-/** I2S Transmit select clock source (2 bits)*/
-#define I2S_TXMODE_CLKSEL(n) ((uint32_t)(n&0x03))
-/** I2S Transmit control 4-pin mode */
-#define I2S_TXMODE_4PIN_ENABLE ((uint32_t)(1<<2))
-/** I2S Transmit control the TX_MCLK output */
-#define I2S_TXMODE_MCENA ((uint32_t)(1<<3))
-/** I2S Receive select clock source */
-#define I2S_RXMODE_CLKSEL(n) ((uint32_t)(n&0x03))
-/** I2S Receive control 4-pin mode */
-#define I2S_RXMODE_4PIN_ENABLE ((uint32_t)(1<<2))
-/** I2S Receive control the TX_MCLK output */
-#define I2S_RXMODE_MCENA ((uint32_t)(1<<3))
-
-/**
- * @}
- */
-
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup I2S_Public_Types I2S Public Types
- * @{
- */
-
-/**
- * @brief I2S configuration structure definition
- */
-typedef struct {
- uint8_t wordwidth; /** the number of bytes in data as follow:
- -I2S_WORDWIDTH_8: 8 bit data
- -I2S_WORDWIDTH_16: 16 bit data
- -I2S_WORDWIDTH_32: 32 bit data */
- uint8_t mono; /** Set mono/stereo mode, should be:
- - I2S_STEREO: stereo mode
- - I2S_MONO: mono mode */
- uint8_t stop; /** Disables accesses on FIFOs, should be:
- - I2S_STOP_ENABLE: enable stop mode
- - I2S_STOP_DISABLE: disable stop mode */
- uint8_t reset; /** Asynchronously reset tje transmit channel and FIFO, should be:
- - I2S_RESET_ENABLE: enable reset mode
- - I2S_RESET_DISABLE: disable reset mode */
- uint8_t ws_sel; /** Set Master/Slave mode, should be:
- - I2S_MASTER_MODE: I2S master mode
- - I2S_SLAVE_MODE: I2S slave mode */
- uint8_t mute; /** MUTE mode: when true, the transmit channel sends only zeroes, shoule be:
- - I2S_MUTE_ENABLE: enable mute mode
- - I2S_MUTE_DISABLE: disable mute mode */
- uint8_t Reserved0[2];
-} I2S_CFG_Type;
-
-/**
- * @brief I2S DMA configuration structure definition
- */
-typedef struct {
- uint8_t DMAIndex; /** Select DMA1 or DMA2, should be:
- - I2S_DMA_1: DMA1
- - I2S_DMA_2: DMA2 */
- uint8_t depth; /** FIFO level that triggers a DMA request */
- uint8_t Reserved0[2];
-}I2S_DMAConf_Type;
-
-/**
- * @brief I2S mode configuration structure definition
- */
-typedef struct{
- uint8_t clksel; /** Clock source selection, should be:
- - I2S_CLKSEL_FRDCLK: Select the fractional rate divider clock output
- - I2S_CLKSEL_MCLK: Select the MCLK signal as the clock source */
- uint8_t fpin; /** Select four pin mode, should be:
- - I2S_4PIN_ENABLE: 4-pin enable
- - I2S_4PIN_DISABLE: 4-pin disable */
- uint8_t mcena; /** Select MCLK mode, should be:
- - I2S_MCLK_ENABLE: MCLK enable for output
- - I2S_MCLK_DISABLE: MCLK disable for output */
- uint8_t Reserved;
-}I2S_MODEConf_Type;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup I2S_Public_Functions I2S Public Functions
- * @{
- */
-/* I2S Init/DeInit functions ---------*/
-void I2S_Init(LPC_I2S_TypeDef *I2Sx);
-void I2S_DeInit(LPC_I2S_TypeDef *I2Sx);
-
-/* I2S configuration functions --------*/
-void I2S_Config(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, I2S_CFG_Type* ConfigStruct);
-Status I2S_FreqConfig(LPC_I2S_TypeDef *I2Sx, uint32_t Freq, uint8_t TRMode);
-void I2S_SetBitRate(LPC_I2S_TypeDef *I2Sx, uint8_t bitrate, uint8_t TRMode);
-void I2S_ModeConfig(LPC_I2S_TypeDef *I2Sx, I2S_MODEConf_Type* ModeConfig, uint8_t TRMode);
-uint8_t I2S_GetLevel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-
-/* I2S operate functions -------------*/
-void I2S_Send(LPC_I2S_TypeDef *I2Sx, uint32_t BufferData);
-uint32_t I2S_Receive(LPC_I2S_TypeDef* I2Sx);
-void I2S_Start(LPC_I2S_TypeDef *I2Sx);
-void I2S_Pause(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-void I2S_Mute(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-void I2S_Stop(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-
-/* I2S DMA functions ----------------*/
-void I2S_DMAConfig(LPC_I2S_TypeDef *I2Sx, I2S_DMAConf_Type* DMAConfig, uint8_t TRMode);
-void I2S_DMACmd(LPC_I2S_TypeDef *I2Sx, uint8_t DMAIndex,uint8_t TRMode, FunctionalState NewState);
-
-/* I2S IRQ functions ----------------*/
-void I2S_IRQCmd(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode, FunctionalState NewState);
-void I2S_IRQConfig(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, uint8_t level);
-FunctionalState I2S_GetIRQStatus(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode);
-uint8_t I2S_GetIRQDepth(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_SSP_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_iap.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_iap.h
deleted file mode 100644
index 6dd6f0751c..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_iap.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_iap.h 2011-11-21
-*//**
-* @file lpc_iap.h
-* @brief Contains all functions support for IAP
-* on LPC
-* @version 1.0
-* @date 21. November. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef _LPC_IAP_H
-#define _LPC_IAP_H
-#include "lpc_types.h"
-
-/** @defgroup IAP IAP (In Application Programming)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-/** @defgroup IAP_Public_Macros IAP Public Macros
- * @{
- */
-
-/** IAP entry location */
-#define IAP_LOCATION (0x1FFF1FF1UL)
-
-/**
- * @}
- */
-
-/** @defgroup IAP_Public_Types IAP Public Types
- * @{
- */
-
-/**
- * @brief IAP command code definitions
- */
-typedef enum
-{
- IAP_PREPARE = 50, // Prepare sector(s) for write operation
- IAP_COPY_RAM2FLASH = 51, // Copy RAM to Flash
- IAP_ERASE = 52, // Erase sector(s)
- IAP_BLANK_CHECK = 53, // Blank check sector(s)
- IAP_READ_PART_ID = 54, // Read chip part ID
- IAP_READ_BOOT_VER = 55, // Read chip boot code version
- IAP_COMPARE = 56, // Compare memory areas
- IAP_REINVOKE_ISP = 57, // Reinvoke ISP
- IAP_READ_SERIAL_NUMBER = 58, // Read serial number
-} IAP_COMMAND_CODE;
-
-/**
- * @brief IAP status code definitions
- */
-typedef enum
-{
- CMD_SUCCESS, // Command is executed successfully.
- INVALID_COMMAND, // Invalid command.
- SRC_ADDR_ERROR, // Source address is not on a word boundary.
- DST_ADDR_ERROR, // Destination address is not on a correct boundary.
- SRC_ADDR_NOT_MAPPED, // Source address is not mapped in the memory map.
- DST_ADDR_NOT_MAPPED, // Destination address is not mapped in the memory map.
- COUNT_ERROR, // Byte count is not multiple of 4 or is not a permitted value.
- INVALID_SECTOR, // Sector number is invalid.
- SECTOR_NOT_BLANK, // Sector is not blank.
- SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION, // Command to prepare sector for write operation was not executed.
- COMPARE_ERROR, // Source and destination data is not same.
- BUSY, // Flash programming hardware interface is busy.
-} IAP_STATUS_CODE;
-
-/**
- * @brief IAP write length definitions
- */
-typedef enum {
- IAP_WRITE_256 = 256,
- IAP_WRITE_512 = 512,
- IAP_WRITE_1024 = 1024,
- IAP_WRITE_4096 = 4096,
-} IAP_WRITE_SIZE;
-
-/**
- * @brief IAP command structure
- */
-typedef struct {
- uint32_t cmd; // Command
- uint32_t param[4]; // Parameters
- uint32_t status; // status code
- uint32_t result[4]; // Result
-} IAP_COMMAND_Type;
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup IAP_Public_Functions IAP Public Functions
- * @{
- */
-
-/** Get sector number of an address */
-uint32_t GetSecNum (uint32_t adr);
-/** Prepare sector(s) for write operation */
-IAP_STATUS_CODE PrepareSector(uint32_t start_sec, uint32_t end_sec);
-/** Copy RAM to Flash */
-IAP_STATUS_CODE CopyRAM2Flash(uint8_t * dest, uint8_t* source, IAP_WRITE_SIZE size);
-/** Prepare sector(s) for write operation */
-IAP_STATUS_CODE EraseSector(uint32_t start_sec, uint32_t end_sec);
-/** Blank check sectors */
-IAP_STATUS_CODE BlankCheckSector(uint32_t start_sec, uint32_t end_sec,
- uint32_t *first_nblank_loc,
- uint32_t *first_nblank_val);
-/** Read part identification number */
-IAP_STATUS_CODE ReadPartID(uint32_t *partID);
-/** Read boot code version */
-IAP_STATUS_CODE ReadBootCodeVer(uint8_t *major, uint8_t* minor);
-/** Read Device serial number */
-IAP_STATUS_CODE ReadDeviceSerialNum(uint32_t *uid);
-/** Compare memory */
-IAP_STATUS_CODE Compare(uint8_t *addr1, uint8_t *addr2, uint32_t size);
-/** Invoke ISP */
-void InvokeISP(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-#endif /*_LPC_IAP_H*/
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_lcd.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_lcd.h
deleted file mode 100644
index 1116a5ec79..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_lcd.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_lcd.h 2011-10-14
-*//**
-* @file lpc_lcd.h
-* @brief Contains all functions support for LCD firmware library
-* on LPC
-* @version 1.0
-* @date 14. October. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#include "lpc_types.h"
-
-#ifndef __LPC_LCD_H_
-#define __LPC_LCD_H_
-
-/** @defgroup LCD LCD (Liquid Crystal Display)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-/** @defgroup LCD_Public_Macros LCD Public Macros
- * @{
- */
-
-#define LCD_PWR_ENA_DIS_DLY 10000
-#define LCD_FUNC_OK 0
-#define LCD_FUNC_ERR -1
-
-#define GET_CURSOR_IMG_SIZE(size) ((size == 32) ? 64:256)
-
-/**
- * @}
- */
-
-/** @defgroup LCD_Public_Types LCD Public Types
- * @{
- */
-
-typedef enum __LCD_TYPES
-{
- LCD_STN_MONOCHROME,
- LCD_STN_COLOR,
- LCD_TFT,
- LCD_TYPE_UNKNOWN,
-} LCD_TYPES;
-
-typedef enum __LCD_BPP
-{
- LCD_BPP_1 = 0x00,
- LCD_BPP_2 = 0x01,
- LCD_BPP_4 = 0x02,
- LCD_BPP_8 = 0x03,
- LCD_BPP_16 = 0x04,
- LCD_BPP_24 = 0x05,
- LCD_BPP_16_565Mode = 0x06,
- LCD_BPP_12_444Mode = 0x07,
-} LCD_BPP;
-
-typedef enum __LCD_PANEL
-{
- LCD_PANEL_UPPER,
- LCD_PANEL_LOWER,
-}LCD_PANEL;
-
-/**
- * @brief A struct for Bitmap on LCD screen
- */
-typedef struct _Bmp_t
-{
- uint32_t H_Size;
- uint32_t V_Size;
- uint32_t BitsPP;
- uint32_t BytesPP;
- uint8_t *pPalette;
- uint8_t *pPicStream;
- uint8_t *pPicDesc;
-} Bmp_t, *pBmp_t;
-
-/**
- * @brief A struct for Font Type on LCD screen
- */
-
-typedef struct _FontType_t
-{
- uint32_t H_Size;
- uint32_t V_Size;
- uint32_t CharacterOffset;
- uint32_t CharactersNuber;
- uint8_t *pFontStream;
- uint8_t *pFontDesc;
-} FontType_t, *pFontType_t;
-
-/**
- * @brief A struct for LCD Palette
- */
-
-typedef struct __LCD_PALETTE_Type
-{
- uint8_t Red;
- uint8_t Green;
- uint8_t Blue;
-}LCD_PALETTE_Type, *pLCD_PALETTE_Type;
-
-/**
- * @brief A struct for Horizontal configuration
- */
-
-typedef struct __LCD_HConfig_Type
-{
- uint8_t hfp; // Horizontal front porch
- uint8_t hbp; // Horizontal back porch
- uint8_t hsw; // Horizontal synchronization pulse width
- uint16_t ppl; // Number of pixels per line
-}LCD_HConfig_Type;
-
-/**
- * @brief A struct for Vertical configuration
- */
-
-typedef struct __LCD_VConfig_Type
-{
- uint8_t vfp; // Vertical front and back porch
- uint8_t vbp; // Vertical back porch
- uint8_t vsw; // Vertical synchronization pulse width
- uint16_t lpp; // Number of lines per panel
-}LCD_VConfig_Type;
-
-/**
- * @brief A struct for Polarity configuration
- */
-
-typedef struct __LCD_POLARITY_Type
-{
- uint16_t cpl; // Number of pixel clocks per line
- uint8_t active_high; // Signal polarity, active HIGH or LOW
- uint8_t acb; // AC bias pin frequency
- uint8_t invert_panel_clock; // Invert Panel clock;
- uint8_t invert_hsync; // Invert HSYNC
- uint8_t invert_vsync; // Invert VSYSNC
-}LCD_POLARITY_Type;
-
-/**
- * @brief A struct for LCD Configuration
- */
-
-typedef struct __LCD_Config_Type
-{
- LCD_HConfig_Type hConfig; // Horizontal config
- LCD_VConfig_Type vConfig; // Vertical config
- LCD_POLARITY_Type polarity; // Polarity config
- uint32_t panel_clk; // Panel clock frequency
- LCD_BPP lcd_bpp; // Bits-per-pixel
- LCD_TYPES lcd_type; // Display type: STN monochrome, STN color, or TFT
- uint8_t lcd_mono8; // STN 4 or 8-bit interface mode
- uint8_t lcd_dual; // STN dual or single panel mode
- uint8_t big_endian_byte; // byte ordering in memory
- uint8_t big_endian_pixel; // pixel ordering within a byte
- uint32_t lcd_panel_upper; // base address of frame buffer
- uint32_t lcd_panel_lower; // base address of frame buffer
- uint8_t* lcd_palette; // point to palette buffer
- Bool lcd_bgr; // False: RGB , TRUE: BGR
-} LCD_Config_Type;
-
-/**
- * @brief A struct for Cursor configuration
- */
-
-typedef struct __LCD_Cursor_Config_Type
-{
- uint8_t size32; // 32x32 or 64x64
- uint8_t framesync;
- LCD_PALETTE_Type palette[2];
- uint32_t baseaddress;
-} LCD_Cursor_Config_Type;
-
-typedef uint32_t LcdPixel_t, *pLcdPixel_t;
-typedef int32_t LCD_RET_CODE;
-
-/**
- * @}
- */
-
-
-/** @defgroup LCD_Public_Functions LCD Public Functions
- * @{
- */
-
-LCD_RET_CODE LCD_Init (LCD_Config_Type* pConfig);
-void LCD_SetBaseAddress(LCD_PANEL panel, uint32_t pAddress);
-void LCD_SetPalette (const uint8_t* pPallete);
-void LCD_Enable (Bool bEna);
-void LCD_Cursor_Cfg(LCD_Cursor_Config_Type* pConfig);
-void LCD_Cursor_Enable(int enable, int cursor);
-void LCD_Move_Cursor(int x, int y);
-void LCD_Cursor_SetImage (const uint32_t *pCursor, int cursor, int size);
-void LCD_SetImage(LCD_PANEL panel,const uint8_t *pPain);
-void LCD_FillRect (LCD_PANEL panel, uint32_t startx,uint32_t endx,
- uint32_t starty, uint32_t endy,
- LcdPixel_t color);
-void LCD_PutPixel (LCD_PANEL panel, uint32_t X_Left, uint32_t Y_Up, LcdPixel_t color);
-void LCD_LoadPic (LCD_PANEL panel,uint32_t X_Left, uint32_t Y_Up, Bmp_t * pBmp, uint32_t Mask);
-
-/**
- * @}
- */
-
-#endif // __LPC_LCD_H_
-/**
- * @}
- */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_libcfg_default.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_libcfg_default.h
deleted file mode 100644
index 50c6759360..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_libcfg_default.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_libcfg.h 2010-05-21
-***
-* @file lpc_libcfg.h
-* @brief Library configuration file
-* @version 3.0
-* @date 20. June. 2010
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2010, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-#ifndef _LPC_LIBCFG_DEFAULT_H_
-#define _LPC_LIBCFG_DEFAULT_H_
-
-#include "lpc_types.h"
-
-
-/************************** DEBUG MODE DEFINITIONS *********************************/
-/* Un-comment the line below to compile the library in DEBUG mode, this will expanse
- the "CHECK_PARAM" macro in the FW library code */
-
-#ifndef __CODE_RED
-#define DEBUG
-#endif
-
-
-/******************* PERIPHERAL FW LIBRARY CONFIGURATION DEFINITIONS ***********************/
-
-/* Comment the line below to disable the specific peripheral inclusion */
-
-/* DEBUG_FRAMWORK -------------------- */
-#define _DBGFWK
-
-/* Clock & Power -------------------- */
-#define _CLKPWR
-
-/* CRC -------------------- */
-#define _CRC
-
-/* GPIO ------------------------------- */
-#define _GPIO
-
-/* NVIC ------------------------------- */
-#define _NVIC
-
-/* PINSEL ------------------------------- */
-#define _PINSEL
-
-/* EXTI ------------------------------- */
-#define _EXTI
-
-/* EMC ------------------------------- */
-#define _EMC
-
-/* UART ------------------------------- */
-#define _UART
-
-/* SPI ------------------------------- */
-#define _SPI
-
-/* SYSTICK --------------------------- */
-#define _SYSTICK
-
-/* SSP ------------------------------- */
-#define _SSP
-
-
-/* I2C ------------------------------- */
-#define _I2C
-
-/* TIMER ------------------------------- */
-#define _TIM
-
-/* WDT ------------------------------- */
-#define _WDT
-
-
-/* GPDMA ------------------------------- */
-#define _GPDMA
-
-
-/* DAC ------------------------------- */
-#define _DAC
-
-/* ADC ------------------------------- */
-#define _ADC
-
-/* EEPROM ------------------------------- */
-#define _EEPROM
-
-/* PWM ------------------------------- */
-#define _PWM
-
-/* RTC ------------------------------- */
-#define _RTC
-
-/* I2S ------------------------------- */
-#define _I2S
-
-/* USB device ------------------------------- */
-#define _USBDEV
-#ifdef _USBDEV
-#define _USB_DEV_AUDIO
-#define _USB_DEV_MASS_STORAGE
-#define _USB_DEV_HID
-#define _USB_DEV_VIRTUAL_COM
-#endif /*_USBDEV*/
-
-/* USB Host ------------------------------- */
-#define _USBHost
-
-/* QEI ------------------------------- */
-#define _QEI
-
-/* MCPWM ------------------------------- */
-#define _MCPWM
-
-/* CAN--------------------------------*/
-#define _CAN
-
-/* EMAC ------------------------------ */
-#define _EMAC
-
-/* LCD ------------------------------ */
-#define _LCD
-
-/* MCI ------------------------------ */
-#define _MCI
-
-/* IAP------------------------------ */
-#define _IAP
-
-/* BOD------------------------------ */
-#define _BOD
-/************************** GLOBAL/PUBLIC MACRO DEFINITIONS *********************************/
-
-
-#endif /* _LPC_LIBCFG_DEFAULT_H_ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_mci.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_mci.h
deleted file mode 100644
index 7b6892362e..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_mci.h
+++ /dev/null
@@ -1,463 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_mci.h 2011-06-02
-*//**
-* @file lpc_mci.h
-* @brief Contains all macro definitions and function prototypes
-* support for MCI firmware library on LPC
-* @version 2.0
-* @date 29. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup MCI MCI (Multimedia Card Interface)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_MCI_H_
-#define __LPC_MCI_H_
-
-/** @defgroup MCI_Public_Macros MCI Public Macros
- * @{
- */
-
-#define MCI_DMA_ENABLED (1)
-
-#define HIGH_LVL (1)
-#define LOW_LVL (0)
-
-/* SD/MMC Command list, per MMC spec. SD Memory Card Spec. Simplified version */
-/* GO_IDLE_STATE(MMC) or RESET(SD) */
-#define CMD0_GO_IDLE_STATE (0)
-/* SEND_OP_COND(MMC) or ACMD41(SD) */
-#define CMD1_SEND_OP_COND (1)
-/* ALL_SEND_CID */
-#define CMD2_ALL_SEND_CID (2)
-/* SET_RELATE_ADDR */
-#define CMD3_SET_RELATIVE_ADDR (3)
-/* Set Bus-Width 1 bit or 4 bits */
-#define ACMD6_SET_BUS_WIDTH (6)
-/* SELECT/DESELECT_CARD */
-#define CMD7_SELECT_CARD (7)
-/**Sending interface condition cmd */
-#define CMD8_SEND_IF_COND (8)
-/* SEND_CSD */
-#define CMD9_SEND_CSD (9)
-/* Stop either READ or WRITE operation */
-#define CMD12_STOP_TRANSMISSION 12
-/* SEND_STATUS */
-#define CMD13_SEND_STATUS (13)
-/* SET_BLOCK_LEN */
-#define CMD16_SET_BLOCK_LEN (16)
-/* READ_SINGLE_BLOCK */
-#define CMD17_READ_SINGLE_BLOCK (17)
-/* READ_MULTIPLE_BLOCK */
-#define CMD18_READ_MULTIPLE_BLOCK (18)
-/* WRITE_BLOCK */
-#define CMD24_WRITE_BLOCK (24)
-/* WRITE_MULTIPLE_BLOCK */
-#define CMD25_WRITE_MULTIPLE_BLOCK (25)
-/* Start erase block number*/
-#define CMD32_ERASE_WR_BLK_START (32)
-/* End erase block number*/
-#define CMD33_ERASE_WR_BLK_END (33)
-/* Start erase*/
-#define CMD38_ERASE (38)
-
-/* ACMD41 for SD card */
-#define ACMD41_SEND_APP_OP_COND (41)
-
-/* APP_CMD, the following will a ACMD */
-#define CMD55_APP_CMD (55)
-
-#define OCR_INDEX (0x00FF8000)
-#define RCA_ARGUMENT_POS (16)
-#define RCA_ARGUMENT_MASK (0xFFFF)
-
-
-/* Card Status (coded in 32 bits) in R1 & R1b Response */
-#define CARD_STATUS_OUT_OF_RANGE ( 1 << 31)
-#define CARD_STATUS_ADDRESS_ERROR ( 1 << 30)
-#define CARD_STATUS_BLOCK_LEN_ERROR ( 1 << 29)
-#define CARD_STATUS_ERASE_SEQ_ERROR ( 1 << 28)
-#define CARD_STATUS_ERASE_PARAM_ERROR ( 1 << 27)
-#define CARD_STATUS_WP_VIOLATION ( 1 << 26)
-#define CARD_STATUS_CARD_IS_LOCKED ( 1 << 25)
-#define CARD_STATUS_COM_CRC_ERROR ( 1 << 23)
-#define CARD_STATUS_ILLEGAL_COMMAND ( 1 << 22)
-#define CARD_STATUS_CARD_ECC_FAILED ( 1 << 21)
-#define CARD_STATUS_CC_ERROR ( 1 << 20)
-#define CARD_STATUS_GEN_ERROR ( 1 << 19)
-#define CARD_STATUS_CSD_OVERWRITE ( 1 << 16)
-#define CARD_STATUS_WP_ERASE_SKIP ( 1 << 15)
-#define CARD_STATUS_CARD_ECC_DISABLED ( 1 << 14)
-#define CARD_STATUS_ERASE_RESET ( 1 << 13)
-#define CARD_STATUS_READY_FOR_DATA ( 1 << 8)
-#define CARD_STATUS_ACMD_ENABLE ( 1 << 5)
-#define CARD_STATUS_ERR_MASK (0xFDF88008)
-#define CARDSTATEOF(x) ((x>>9) & 0x0F)
-#define CARD_STATE_IDLE (0)
-#define CARD_STATE_READY (1)
-#define CARD_STATE_IDENT (2)
-#define CARD_STATE_STBY (3)
-#define CARD_STATE_TRAN (4)
-#define CARD_STATE_DATA (5)
-#define CARD_STATE_RCV (6)
-#define CARD_STATE_PRG (7)
-#define CARD_STATE_DIS (8)
-
-
-/* CID in R2 reponse (Code length is 136 bits) */
-#define MCI_CID_MANUFACTURER_ID_WPOS (24) //pos in word 0
-#define MCI_CID_MANUFACTURER_ID_WBMASK (0xFF)
-
-#define MCI_CID_OEMAPPLICATION_ID_WPOS (8) //pos in word 0
-#define MCI_CID_OEMAPPLICATION_ID_WBMASK (0xFFFF)
-
-#define MCI_CID_PRODUCTNAME_ID_H_WPOS (0) //pos in word 0
-#define MCI_CID_PRODUCTNAME_ID_H_WBMASK (0xFF)
-
-#define MCI_CID_PRODUCTNAME_ID_L_WPOS (0) //pos in word 1
-#define MCI_CID_PRODUCTNAME_ID_L_WBMASK (0xFFFFFFFF)
-
-#define MCI_CID_PRODUCTREVISION_ID_WPOS (24) //pos in word 2
-#define MCI_CID_PRODUCTREVISION_ID_WBMASK (0xFF)
-
-#define MCI_CID_PRODUCTSERIALNUM_ID_H_WPOS (0) //pos in word 2
-#define MCI_CID_PRODUCTSERIALNUM_ID_H_WBMASK (0x00FFFFFF)
-#define MCI_CID_PRODUCTSERIALNUM_ID_L_WPOS (24) //pos in word 3
-#define MCI_CID_PRODUCTSERIALNUM_ID_L_WBMASK (0xFF)
-#define MCI_CID_PRODUCTSERIALNUM_ID_WBMASK (0xFFFFFFFF)
-
-#define MCI_CID_RESERVED_ID_WPOS (20) //pos in word 3
-#define MCI_CID_RESERVED_ID_WBMASK (0x1F)
-
-#define MCI_CID_MANUFACTURINGDATE_ID_WPOS (8) //in word 3
-#define MCI_CID_MANUFACTURINGDATE_ID_WBMASK (0x0FFF)
-
-#define MCI_CID_CHECKSUM_ID_WPOS (1) //in word 3
-#define MCI_CID_CHECKSUM_ID_WBMASK (0x7F)
-
-#define MCI_CID_UNUSED_ID_WPOS (0) //in word 3
-#define MCI_CID_UNUSED_ID_WBMASK (0x01)
-
-/* R6 (Published RCA response) */
-#define RCA_RES_CARD_STATUS_POS (0)
-#define RCA_RES_CARD_STATUS_MASK (0xFFFF)
-
-#define RCA_RES_NEW_PUBLISHED_RCA_POS (16)
-#define RCA_RES_NEW_PUBLISHED_RCA_MASK (0xFFFF)
-
-/* R7 (Card interface condition) */
-#define MCI_CMD8_VOLTAGESUPPLIED_POS (8)
-#define MCI_CMD8_VOLTAGESUPPLIED_BMASK (0x0F)
-#define MCI_CMD8_VOLATAGESUPPLIED_NOT_DEFINED (0)
-#define MCI_CMD8_VOLATAGESUPPLIED_27_36 (1) /*2.7 - 3.6V*/
-
-#define MCI_CMD8_CHECKPATTERN_POS (0)
-#define MCI_CMD8_CHECKPATTERN_BMASK (0xFF)
-
-
-#define MCI_SLOW_RATE (400000) /* 400KHz */
-#define MCI_NORMAL_RATE (20000000) /* 20MHz */
-
-#define SD_1_BIT (0)
-#define SD_4_BIT (1)
-
-#define DATA_TIMER_VALUE_R (MCI_NORMAL_RATE/4) // 250ms
-#define DATA_TIMER_VALUE_W (MCI_NORMAL_RATE) // 1000ms
-
-#define DATA_RW_MAX_LEN (0xFFFF)
-
-#define EXPECT_NO_RESP (0)
-#define EXPECT_SHORT_RESP (1)
-#define EXPECT_LONG_RESP (2)
-
-#define MCI_OUTPUT_MODE_PUSHPULL (0)
-#define MCI_OUTPUT_MODE_OPENDRAIN (1)
-
-#define NOT_ALLOW_CMD_TIMER (0)
-#define ALLOW_CMD_TIMER (1)
-
-#define MCI_DISABLE_CMD_TIMER (1<<8)
-
-/* For the SD card I tested, the minimum block length is 512 */
-/* For MMC, the restriction is loose, due to the variety of SD and MMC
-card support, ideally, the driver should read CSD register to find the
-speed and block length for the card, and set them accordingly. */
-/* In this driver example, it will support both MMC and SD cards, it
-does read the information by send SEND_CSD to poll the card status,
-but, it doesn't configure them accordingly. this is not intended to
-support all the SD and MMC card. */
-
-/* DATA_BLOCK_LEN table
- DATA_BLOCK_LEN Actual Size( BLOCK_LENGTH )
- 11 2048
- 10 1024
- 9 512
- 8 256
- 7 128
- 6 64
- 5 32
- 4 16
- 3 8
- 2 4
- 1 2
-*/
-/* This is the size of the buffer of origin data */
-#define MCI_DMA_SIZE (1000UL)
-/* This is the area original data is stored or data to be written to the SD/MMC card. */
-#define MCI_DMA_SRC_ADDR LPC_PERI_RAM_BASE
-/* This is the area, after reading from the SD/MMC*/
-#define MCI_DMA_DST_ADDR (MCI_DMA_SRC_ADDR + MCI_DMA_SIZE)
-
-
-/* To simplify the programming, please note that, BLOCK_LENGTH is a multiple
-of FIFO_SIZE */
-#define DATA_BLOCK_LEN (9) /* Block size field in DATA_CTRL */
-#define BLOCK_LENGTH (1 << DATA_BLOCK_LEN)
- /* for SD card, 128, the size of the flash */
- /* card is 512 * 128 = 64K */
-#define BLOCK_NUM 0x80
-#define FIFO_SIZE 16
-
-#define BUS_WIDTH_1BIT 0
-#define BUS_WIDTH_4BITS 10
-
-/* MCI Status register bit information */
-#define MCI_CMD_CRC_FAIL (1 << 0)
-#define MCI_DATA_CRC_FAIL (1 << 1)
-#define MCI_CMD_TIMEOUT (1 << 2)
-#define MCI_DATA_TIMEOUT (1 << 3)
-#define MCI_TX_UNDERRUN (1 << 4)
-#define MCI_RX_OVERRUN (1 << 5)
-#define MCI_CMD_RESP_END (1 << 6)
-#define MCI_CMD_SENT (1 << 7)
-#define MCI_DATA_END (1 << 8)
-#define MCI_START_BIT_ERR (1 << 9)
-#define MCI_DATA_BLK_END (1 << 10)
-#define MCI_CMD_ACTIVE (1 << 11)
-#define MCI_TX_ACTIVE (1 << 12)
-#define MCI_RX_ACTIVE (1 << 13)
-#define MCI_TX_HALF_EMPTY (1 << 14)
-#define MCI_RX_HALF_FULL (1 << 15)
-#define MCI_TX_FIFO_FULL (1 << 16)
-#define MCI_RX_FIFO_FULL (1 << 17)
-#define MCI_TX_FIFO_EMPTY (1 << 18)
-#define MCI_RX_FIFO_EMPTY (1 << 19)
-#define MCI_TX_DATA_AVAIL (1 << 20)
-#define MCI_RX_DATA_AVAIL (1 << 21)
-
-
-/***********************************************************************
- * MCI Data control register definitions
- **********************************************************************/
-/** Data transfer enable */
-#define MCI_DATACTRL_ENABLE_POS (0)
-#define MCI_DATACTRL_ENABLE_MASK (0x01)
-#define MCI_DATACTRL_ENABLE (1 << MCI_DATACTRL_ENABLE_POS)
-#define MCI_DATACTRL_DISABLE (0 << MCI_DATACTRL_ENABLE_POS)
-
-/** Data transfer direction */
-#define MCI_DATACTRL_DIR_POS (1)
-#define MCI_DATACTRL_DIR_MASK (0x01)
-#define MCI_DATACTRL_DIR_FROM_CARD (1 << MCI_DATACTRL_DIR_POS)
-#define MCI_DATACTRL_DIR_TO_CARD (0 << MCI_DATACTRL_DIR_POS)
-
-
-/** Data transfer mode */
-#define MCI_DATACTRL_XFER_MODE_POS (2)
-#define MCI_DATACTRL_XFER_MODE_MASK (0x01)
-#define MCI_DATACTRL_XFER_MODE_STREAM (1 << MCI_DATACTRL_XFER_MODE_POS)
-#define MCI_DATACTRL_XFER_MODE_BLOCK (0 << MCI_DATACTRL_XFER_MODE_POS)
-
-/** Enable DMA */
-#define MCI_DATACTRL_DMA_ENABLE_POS (3)
-#define MCI_DATACTRL_DMA_ENABLE_MASK (0x01)
-#define MCI_DATACTRL_DMA_ENABLE (1 << MCI_DATACTRL_DMA_ENABLE_POS)
-#define MCI_DATACTRL_DMA_DISABLE (0 << MCI_DATACTRL_DMA_ENABLE_POS)
-
-/** Data block length macro */
-#define MCI_DTATCTRL_BLOCKSIZE(n) _SBF(4, (n & 0xF))
-
-
-#define CMD_INT_MASK (MCI_CMD_CRC_FAIL | MCI_CMD_TIMEOUT | MCI_CMD_RESP_END \
- | MCI_CMD_SENT | MCI_CMD_ACTIVE)
-
-#define DATA_ERR_INT_MASK (MCI_DATA_CRC_FAIL | MCI_DATA_TIMEOUT | MCI_TX_UNDERRUN \
- | MCI_RX_OVERRUN | MCI_START_BIT_ERR)
-
-#define ACTIVE_INT_MASK ( MCI_TX_ACTIVE | MCI_RX_ACTIVE)
-
-#define FIFO_INT_MASK (MCI_TX_HALF_EMPTY | MCI_RX_HALF_FULL \
- | MCI_TX_FIFO_FULL | MCI_RX_FIFO_FULL \
- | MCI_TX_FIFO_EMPTY | MCI_RX_FIFO_EMPTY \
- | MCI_DATA_BLK_END )
-
-#define FIFO_TX_INT_MASK (MCI_TX_HALF_EMPTY )
-#define FIFO_RX_INT_MASK (MCI_RX_HALF_FULL )
-
-#define DATA_END_INT_MASK (MCI_DATA_END | MCI_DATA_BLK_END)
-
-#define ERR_TX_INT_MASK (MCI_DATA_CRC_FAIL | MCI_DATA_TIMEOUT | MCI_TX_UNDERRUN | MCI_START_BIT_ERR)
-#define ERR_RX_INT_MASK (MCI_DATA_CRC_FAIL | MCI_DATA_TIMEOUT | MCI_RX_OVERRUN | MCI_START_BIT_ERR)
-
-/* Error code on the command response. */
-#define INVALID_RESPONSE 0xFFFFFFFF
-
-/**
- * @}
- */
-
-
-/** @defgroup MCI_Public_Types MCI Public Types
- * @{
- */
-
-typedef enum mci_card_state
-{
- MCI_CARDSTATE_IDLE = 0,
- MCI_CARDSTATE_READY,
- MCI_CARDSTATE_IDENDTIFIED,
- MCI_CARDSTATE_STBY,
- MCI_CARDSTATE_TRAN,
- MCI_CARDSTATE_DATA,
- MCI_CARDSTATE_RCV,
- MCI_CARDSTATE_PRG,
- MCI_CARDSTATE_DIS,
-}en_Mci_CardState;
-
-
-typedef enum mci_func_error
-{
- MCI_FUNC_OK = 0,
- MCI_FUNC_FAILED = -1,
- MCI_FUNC_BAD_PARAMETERS = -2,
- MCI_FUNC_BUS_NOT_IDLE = -3,
- MCI_FUNC_TIMEOUT = -3,
- MCI_FUNC_ERR_STATE = -4,
- MCI_FUNC_NOT_READY = -5,
-}en_Mci_Func_Error;
-
-typedef enum mci_card_type
-{
- MCI_SDHC_SDXC_CARD = 3,
- MCI_SDSC_V2_CARD = 2,
- MCI_MMC_CARD = 1,
- MCI_SDSC_V1_CARD = 0,
- MCI_CARD_UNKNOWN = -1,
-}en_Mci_CardType;
-
-typedef struct mci_cid
-{
- /** Manufacturer ID */
- uint8_t MID;
- /** OEM/Application ID */
- uint16_t OID;
- /** Product name 8-bits higher */
- uint8_t PNM_H;
- /** Product name 32-bits Lower */
- uint32_t PNM_L;
- /** Product revision */
- uint8_t PRV;
- /** Product serial number */
- uint32_t PSN;
- /** reserved: 4 bit */
- uint8_t reserved;
- /** Manufacturing date: 12 bit */
- uint16_t MDT;
- /** CRC7 checksum: 7 bit */
- uint8_t CRC;
- /** not used, always: 1 bit always 1 */
- uint8_t unused;
-} st_Mci_CardId;
-
-typedef struct cmd_info{
- /** Command ID*/
- uint32_t CmdIndex;
- /** Command Argument*/
- uint32_t Argument;
- /** Expected response: no response, short response or long response */
- uint32_t ExpectResp;
- /** Allow timeout */
- uint32_t AllowTimeout;
- /** Command Response Info */
- uint32_t *CmdResp;
-} st_Mci_CmdInfo;
-/**
- * @}
- */
-
-
-/** @defgroup MCI_Public_Functions MCI Public Functions
- * @{
- */
-
-int32_t MCI_Init(uint8_t powerActiveLevel );
-void MCI_SendCmd( st_Mci_CmdInfo* pCmdIf );
-int32_t MCI_GetCmdResp( uint32_t CmdIndex, uint32_t NeedRespFlag, uint32_t *CmdRespStatus );
-int32_t MCI_CmdResp(st_Mci_CmdInfo *pCmdIf);
-
-void MCI_Set_MCIClock( uint32_t clockrate );
-int32_t MCI_SetBusWidth( uint32_t width );
-int32_t MCI_Acmd_SendOpCond(uint8_t hcsVal);
-int32_t MCI_CardInit( void );
-en_Mci_CardType MCI_GetCardType(void);
-int32_t MCI_CardReset( void );
-int32_t MCI_Cmd_SendIfCond(void);
-int32_t MCI_GetCID(st_Mci_CardId* cidValue);
-int32_t MCI_SetCardAddress( void );
-uint32_t MCI_GetCardAddress(void);
-int32_t MCI_GetCSD(uint32_t* csdVal);
-int32_t MCI_Cmd_SelectCard( void );
-int32_t MCI_GetCardStatus(int32_t* cardStatus);
-uint32_t MCI_GetDataXferEndState(void);
-uint32_t MCI_GetXferErrState(void);
-int32_t MCI_SetBlockLen( uint32_t blockLength );
-int32_t MCI_Acmd_SendBusWidth( uint32_t buswidth );
-int32_t MCI_Cmd_StopTransmission( void );
-
-int32_t MCI_Cmd_WriteBlock(uint32_t blockNum, uint32_t numOfBlock);
-int32_t MCI_Cmd_ReadBlock(uint32_t blockNum, uint32_t numOfBlock);
-
-int32_t MCI_WriteBlock(volatile uint8_t* memblock, uint32_t blockNum, uint32_t numOfBlock);
-int32_t MCI_ReadBlock(volatile uint8_t* destBlock, uint32_t blockNum, uint32_t numOfBlock);
-#if MCI_DMA_ENABLED
-void MCI_DMA_IRQHandler (void);
-#endif
-
-/**
- * @}
- */
-
-#endif /* end __LPC_MCI_H_ */
-
-/**
- * @}
- */
-
-/****************************************************************************
-** End Of File
-****************************************************************************/
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_mcpwm.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_mcpwm.h
deleted file mode 100644
index 008c4ed615..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_mcpwm.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_mcpwm.h 2011-06-02
-*//**
-* @file lpc_mcpwm.h
-* @brief Contains all macro definitions and function prototypes
-* support for Motor Control PWM firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup MCPWM MCPWM (Motor Control PWM)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_MCPWM_H_
-#define __LPC_MCPWM_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup MCPWM_Public_Macros MCPWM Public Macros
- * @{
- */
-
-/** Edge aligned mode for channel in MCPWM */
-#define MCPWM_CHANNEL_EDGE_MODE ((uint32_t)(0))
-
-/** Center aligned mode for channel in MCPWM */
-#define MCPWM_CHANNEL_CENTER_MODE ((uint32_t)(1))
-
-/** Polarity of the MCOA and MCOB pins: Passive state is LOW, active state is HIGH */
-#define MCPWM_CHANNEL_PASSIVE_LO ((uint32_t)(0))
-/** Polarity of the MCOA and MCOB pins: Passive state is HIGH, active state is LOW */
-#define MCPWM_CHANNEL_PASSIVE_HI ((uint32_t)(1))
-
-/* Output Patent in 3-phase DC mode, the internal MCOA0 signal is routed to any or all of
- * the six output pins under the control of the bits in this register */
-#define MCPWM_PATENT_A0 ((uint32_t)(1<<0)) /**< MCOA0 tracks internal MCOA0 */
-#define MCPWM_PATENT_B0 ((uint32_t)(1<<1)) /**< MCOB0 tracks internal MCOA0 */
-#define MCPWM_PATENT_A1 ((uint32_t)(1<<2)) /**< MCOA1 tracks internal MCOA0 */
-#define MCPWM_PATENT_B1 ((uint32_t)(1<<3)) /**< MCOB1 tracks internal MCOA0 */
-#define MCPWM_PATENT_A2 ((uint32_t)(1<<4)) /**< MCOA2 tracks internal MCOA0 */
-#define MCPWM_PATENT_B2 ((uint32_t)(1<<5)) /**< MCOB2 tracks internal MCOA0 */
-
-/* Interrupt type in MCPWM */
-/** Limit interrupt for channel (0) */
-#define MCPWM_INTFLAG_LIM0 MCPWM_INT_ILIM(0)
-/** Match interrupt for channel (0) */
-#define MCPWM_INTFLAG_MAT0 MCPWM_INT_IMAT(0)
-/** Capture interrupt for channel (0) */
-#define MCPWM_INTFLAG_CAP0 MCPWM_INT_ICAP(0)
-
-/** Limit interrupt for channel (1) */
-#define MCPWM_INTFLAG_LIM1 MCPWM_INT_ILIM(1)
-/** Match interrupt for channel (1) */
-#define MCPWM_INTFLAG_MAT1 MCPWM_INT_IMAT(1)
-/** Capture interrupt for channel (1) */
-#define MCPWM_INTFLAG_CAP1 MCPWM_INT_ICAP(1)
-
-/** Limit interrupt for channel (2) */
-#define MCPWM_INTFLAG_LIM2 MCPWM_INT_ILIM(2)
-/** Match interrupt for channel (2) */
-#define MCPWM_INTFLAG_MAT2 MCPWM_INT_IMAT(2)
-/** Capture interrupt for channel (2) */
-#define MCPWM_INTFLAG_CAP2 MCPWM_INT_ICAP(2)
-
-/** Fast abort interrupt */
-#define MCPWM_INTFLAG_ABORT MCPWM_INT_ABORT
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup MCPWM_Private_Macros MCPWM Private Macros
- * @{
- */
-
-/*********************************************************************//**
- * Macro defines for MCPWM Control register
- **********************************************************************/
-/* MCPWM Control register, these macro definitions below can be applied for these
- * register type:
- * - MCPWM Control read address
- * - MCPWM Control set address
- * - MCPWM Control clear address
- */
-/** Stops/starts timer channel n */
-#define MCPWM_CON_RUN(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*8)+0))) : (0))
-/** Edge/center aligned operation for channel n */
-#define MCPWM_CON_CENTER(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*8)+1))) : (0))
-/** Select polarity of the MCOAn and MCOBn pin */
-#define MCPWM_CON_POLAR(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*8)+2))) : (0))
-/** Control the dead-time feature for channel n */
-#define MCPWM_CON_DTE(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*8)+3))) : (0))
-/** Enable/Disable update of functional register for channel n */
-#define MCPWM_CON_DISUP(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*8)+4))) : (0))
-
-/** Control the polarity for all 3 channels */
-#define MCPWM_CON_INVBDC ((uint32_t)((uint32_t)1<<29))
-/** 3-phase AC mode select */
-#define MCPWM_CON_ACMODE ((uint32_t)((uint32_t)1<<30))
-/** 3-phase DC mode select */
-#define MCPWM_CON_DCMODE ((uint32_t)((uint32_t)1<<31))
-
-/*********************************************************************//**
- * Macro defines for MCPWM Capture Control register
- **********************************************************************/
-/* Capture Control register, these macro definitions below can be applied for these
- * register type:
- * - MCPWM Capture Control read address
- * - MCPWM Capture Control set address
- * - MCPWM Capture control clear address
- */
-/** Enables/Disable channel (cap) capture event on a rising edge on MCI(mci) */
-#define MCPWM_CAPCON_CAPMCI_RE(cap,mci) (((cap < MCPWM_MAX_CHANNEL)&&(mci < MCPWM_MAX_CHANNEL)) ? ((uint32_t)(1<<((cap*6)+(mci*2)+0))) : (0))
-/** Enables/Disable channel (cap) capture event on a falling edge on MCI(mci) */
-#define MCPWM_CAPCON_CAPMCI_FE(cap,mci) (((cap < MCPWM_MAX_CHANNEL)&&(mci < MCPWM_MAX_CHANNEL)) ? ((uint32_t)(1<<((cap*6)+(mci*2)+1))) : (0))
-/** TC(n) is reset by channel (n) capture event */
-#define MCPWM_CAPCON_RT(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<(18+(n)))) : (0))
-/** Hardware noise filter: channel (n) capture events are delayed */
-#define MCPWM_CAPCON_HNFCAP(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<(21+(n)))) : (0))
-
-/*********************************************************************//**
- * Macro defines for MCPWM Interrupt register
- **********************************************************************/
-/* Interrupt registers, these macro definitions below can be applied for these
- * register type:
- * - MCPWM Interrupt Enable read address
- * - MCPWM Interrupt Enable set address
- * - MCPWM Interrupt Enable clear address
- * - MCPWM Interrupt Flags read address
- * - MCPWM Interrupt Flags set address
- * - MCPWM Interrupt Flags clear address
- */
-/** Limit interrupt for channel (n) */
-#define MCPWM_INT_ILIM(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*4)+0))) : (0))
-/** Match interrupt for channel (n) */
-#define MCPWM_INT_IMAT(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*4)+1))) : (0))
-/** Capture interrupt for channel (n) */
-#define MCPWM_INT_ICAP(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<((n*4)+2))) : (0))
-
-/** Fast abort interrupt */
-#define MCPWM_INT_ABORT ((uint32_t)(1<<15))
-
-/*********************************************************************//**
- * Macro defines for MCPWM Count Control register
- **********************************************************************/
-/* MCPWM Count Control register, these macro definitions below can be applied for these
- * register type:
- * - MCPWM Count Control read address
- * - MCPWM Count Control set address
- * - MCPWM Count Control clear address
- */
-/** Counter(tc) advances on a rising edge on MCI(mci) pin */
-#define MCPWM_CNTCON_TCMCI_RE(tc,mci) (((tc < MCPWM_MAX_CHANNEL)&&(mci < MCPWM_MAX_CHANNEL)) ? ((uint32_t)(1<<((6*tc)+(2*mci)+0))) : (0))
-/** Counter(cnt) advances on a falling edge on MCI(mci) pin */
-#define MCPWM_CNTCON_TCMCI_FE(tc,mci) (((tc < MCPWM_MAX_CHANNEL)&&(mci < MCPWM_MAX_CHANNEL)) ? ((uint32_t)(1<<((6*tc)+(2*mci)+1))) : (0))
-/** Channel (n) is in counter mode */
-#define MCPWM_CNTCON_CNTR(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<(29+n))) : (0))
-
-/*********************************************************************//**
- * Macro defines for MCPWM Dead-time register
- **********************************************************************/
-/** Dead time value x for channel n */
-#define MCPWM_DT(n,x) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)((x&0x3FF)<<(n*10))) : (0))
-
-/*********************************************************************//**
- * Macro defines for MCPWM Communication Pattern register
- **********************************************************************/
-#define MCPWM_CP_A0 ((uint32_t)(1<<0)) /**< MCOA0 tracks internal MCOA0 */
-#define MCPWM_CP_B0 ((uint32_t)(1<<1)) /**< MCOB0 tracks internal MCOA0 */
-#define MCPWM_CP_A1 ((uint32_t)(1<<2)) /**< MCOA1 tracks internal MCOA0 */
-#define MCPWM_CP_B1 ((uint32_t)(1<<3)) /**< MCOB1 tracks internal MCOA0 */
-#define MCPWM_CP_A2 ((uint32_t)(1<<4)) /**< MCOA2 tracks internal MCOA0 */
-#define MCPWM_CP_B2 ((uint32_t)(1<<5)) /**< MCOB2 tracks internal MCOA0 */
-
-/*********************************************************************//**
- * Macro defines for MCPWM Capture clear address register
- **********************************************************************/
-/** Clear the MCCAP (n) register */
-#define MCPWM_CAPCLR_CAP(n) ((n < MCPWM_MAX_CHANNEL) ? ((uint32_t)(1<<n)) : (0))
-
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup MCPWM_Public_Types MCPWM Public Types
- * @{
- */
-
-typedef enum
-{
- MCPWM_CHANNEL_0 = 0,
- MCPWM_CHANNEL_1,
- MCPWM_CHANNEL_2,
- MCPWM_MAX_CHANNEL,
-} en_MCPWM_Channel_Id;
-
-
-/**
- * @brief Motor Control PWM Channel Configuration structure type definition
- */
-typedef struct {
- uint32_t channelType; /**< Edge/center aligned mode for this channel,
- should be:
- - MCPWM_CHANNEL_EDGE_MODE: Channel is in Edge mode
- - MCPWM_CHANNEL_CENTER_MODE: Channel is in Center mode
- */
- uint32_t channelPolarity; /**< Polarity of the MCOA and MCOB pins, should be:
- - MCPWM_CHANNEL_PASSIVE_LO: Passive state is LOW, active state is HIGH
- - MCPWM_CHANNEL_PASSIVE_HI: Passive state is HIGH, active state is LOW
- */
- uint32_t channelDeadtimeEnable; /**< Enable/Disable DeadTime function for channel, should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t channelDeadtimeValue; /**< DeadTime value, should be less than 0x3FF */
- uint32_t channelUpdateEnable; /**< Enable/Disable updates of functional registers,
- should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t channelTimercounterValue; /**< MCPWM Timer Counter value */
- uint32_t channelPeriodValue; /**< MCPWM Period value */
- uint32_t channelPulsewidthValue; /**< MCPWM Pulse Width value */
-} MCPWM_CHANNEL_CFG_Type;
-
-/**
- * @brief MCPWM Capture Configuration type definition
- */
-typedef struct {
- uint32_t captureChannel; /**< Capture Channel Number, should be in range from 0 to 2 */
- uint32_t captureRising; /**< Enable/Disable Capture on Rising Edge event, should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t captureFalling; /**< Enable/Disable Capture on Falling Edge event, should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t timerReset; /**< Enable/Disable Timer reset function an capture, should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t hnfEnable; /**< Enable/Disable Hardware noise filter function, should be:
- - ENABLE.
- - DISABLE.
- */
-} MCPWM_CAPTURE_CFG_Type;
-
-
-/**
- * @brief MCPWM Count Control Configuration type definition
- */
-typedef struct {
- uint32_t counterChannel; /**< Counter Channel Number, should be in range from 0 to 2 */
- uint32_t countRising; /**< Enable/Disable Capture on Rising Edge event, should be:
- - ENABLE.
- - DISABLE.
- */
- uint32_t countFalling; /**< Enable/Disable Capture on Falling Edge event, should be:
- - ENABLE.
- - DISABLE.
- */
-} MCPWM_COUNT_CFG_Type;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup MCPWM_Public_Functions MCPWM Public Functions
- * @{
- */
-
-void MCPWM_Init(LPC_MCPWM_TypeDef *MCPWMx);
-void MCPWM_ConfigChannel(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CHANNEL_CFG_Type * channelSetup);
-void MCPWM_WriteToShadow(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CHANNEL_CFG_Type *channelSetup);
-void MCPWM_ConfigCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CAPTURE_CFG_Type *captureConfig);
-void MCPWM_ClearCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel);
-uint32_t MCPWM_GetCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel);
-void MCPWM_CountConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- uint32_t countMode, MCPWM_COUNT_CFG_Type *countConfig);
-void MCPWM_Start(LPC_MCPWM_TypeDef *MCPWMx,uint32_t channel0, uint32_t channel1, uint32_t channel2);
-void MCPWM_Stop(LPC_MCPWM_TypeDef *MCPWMx,uint32_t channel0, uint32_t channel1, uint32_t channel2);
-void MCPWM_ACMode(LPC_MCPWM_TypeDef *MCPWMx,uint32_t acMode);
-void MCPWM_DCMode(LPC_MCPWM_TypeDef *MCPWMx, uint32_t dcMode,
- uint32_t outputInvered, uint32_t outputPattern);
-void MCPWM_IntConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType, FunctionalState NewState);
-void MCPWM_IntSet(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType);
-void MCPWM_IntClear(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType);
-FlagStatus MCPWM_GetIntStatus(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_MCPWM_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_nvic.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_nvic.h
deleted file mode 100644
index 331e07b1b1..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_nvic.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_nvic.h 2011-06-02
-*//**
-* @file lpc_nvic.h
-* @brief Contains all macro definitions and function prototypes
-* support for Nesting Vectored Interrupt firmware library
-* on LPC. The main NVIC functions are defined in
-* core_cm3.h
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup NVIC NVIC (Nested Vectored Interrupt Controller)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_NVIC_H_
-#define __LPC_NVIC_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup NVIC_Public_Functions NVIC Public Functions
- * @{
- */
-
-void NVIC_DeInit(void);
-void NVIC_SCBDeInit(void);
-void NVIC_SetVTOR(uint32_t offset);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_NVIC_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_pinsel.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_pinsel.h
deleted file mode 100644
index 0fdd2c8250..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_pinsel.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_pinsel.h 2011-06-02
-*//**
-* @file lpc_pinsel.h
-* @brief Contains all macro definitions and function prototypes
-* support for Pin-connection block firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup PINSEL PINSEL (Pin Selection)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_PINSEL_H
-#define __LPC_PINSEL_H
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup PINSEL_Public_Macros PINSEL Public Macros
- * @{
- */
-
-/* Macros define IOCON bits*/
-
-/** Selects pin functions */
-#define IOCON_FUNC_POS (0)
-#define IOCON_FUNC_MASK (0x07<<IOCON_FUNC_POS)
-
-/** Selects output function mode (on-chip pull-up/pull-down resistor control */
-#define IOCON_MODE_POS (3)
-#define IOCON_MODE_MASK (0x03<<IOCON_MODE_POS)
-#define IOCON_MODE_PLAIN ((0<<IOCON_MODE_POS))
-#define IOCON_MODE_PULLDOWN ((1<<IOCON_MODE_POS))
-#define IOCON_MODE_PULLUP ((2<<IOCON_MODE_POS))
-#define IOCON_MODE_REPEATER ((3<<IOCON_MODE_POS))
-
-/** Hysteresis */
-#define IOCON_HYS_POS (5)
-#define IOCON_HYS_MASK (0x01<<IOCON_HYS_POS)
-#define IOCON_HYS_ENABLE ((1<<IOCON_HYS_POS))
-
-/** Input polarity */
-#define IOCON_INVERT_POS (6)
-#define IOCON_INVERT_MASK (0x01<<IOCON_INVERT_POS)
-#define IOCON_INVERT_INPUT (1<<IOCON_INVERT_POS)
-
-/** Selects Analog/Digital mode */
-#define IOCON_ADMODE_POS (7)
-#define IOCON_ADMODE_MASK (0x01<<IOCON_ADMODE_POS)
-#define IOCON_ANALOG_MODE (0<<IOCON_ADMODE_POS)
-#define IOCON_DIGITIAL_MODE (1<<IOCON_ADMODE_POS)
-
-/* Controls Glitch Filter */
-#define IOCON_FILTER_POS (8)
-#define IOCON_FILTER_MASK (0x01<<IOCON_FILTER_POS)
-#define IOCON_10ns_FILTER_ENABLE (0<<IOCON_FILTER_POS)
-#define IOCON_10ns_FILTER_DISABLE (1<<IOCON_FILTER_POS)
-
-/** I2C 50ns glitch filter and slew rate control */
-#define IOCON_HS_POS (8)
-#define IOCON_HS_MASK (0x01<<IOCON_HS_POS)
-#define IOCON_I2C_FILTER_ENABLE (0<<IOCON_HS_POS)
-#define IOCON_I2C_FILTER_DISABLE (1<<IOCON_HS_POS)
-
-/** Driver Output Slew Rate Control*/
-#define IOCON_SLEW_POS (9)
-#define IOCON_SLEW_MASK (0x01<<IOCON_SLEW_POS)
-#define IOCON_SLEW_ENABLE ((1<<IOCON_SLEW_POS))
-
-/** Controls sink current capability of the pin*/
-#define IOCON_HIDRIVE_POS (9)
-#define IOCON_HIDRIVE_MASK (0x01<<IOCON_HIDRIVE_POS)
-#define IOCON_I2CMODE_FASTPLUS (1<<IOCON_HIDRIVE_POS)
-
-/** Controls open-drain mode */
-#define IOCON_OD_POS (10)
-#define IOCON_OD_MASK (0x01<<IOCON_OD_POS)
-#define IOCON_OPENDRAIN_MODE (1<<IOCON_OD_POS)
-
-/** DAC enable control */
-#define IOCON_DACEN_POS (16)
-#define IOCON_DACEN_MASK (0x01<<IOCON_DACEN_POS)
-#define IOCON_DAC_ENABLE (1<<IOCON_DACEN_POS)
-
-/* Macros define for Return Code */
-typedef int32_t PINSEL_RET_CODE;
-#define PINSEL_RET_OK (0)
-#define PINSEL_RET_INVALID_PIN (0x10000001)
-#define PINSEL_RET_NOT_SUPPORT (0x10000002)
-#define PINSEL_RET_ERR (-1)
-
-/**
- * @}
- */
-
-/** @defgroup PINSEL_Public_Types PINSEL Public Types
- * @{
- */
-
-
-typedef enum
-{
- PINSEL_BASICMODE_PLAINOUT = 0, /**< Plain output */
- PINSEL_BASICMODE_PULLDOWN, /**< Pull-down enabled */
- PINSEL_BASICMODE_PULLUP, /**< Pull-up enabled (default) */
- PINSEL_BASICMODE_REPEATER /**< Repeater mode */
-}PinSel_BasicMode;
-
-typedef enum
-{
- /** Fast mode (400 kHz clock rate) and standard (100 kHz clock rate) */
- PINSEL_I2CMODE_FAST_STANDARD = 0,
- /** Open drain I/O (not I2C). No glitch filter, 3 mA typical output drive */
- PINSEL_I2CMODE_OPENDRAINIO,
- /** Fast Mode Plus I2C. This includes a filter for <50 ns glitches */
- PINSEL_I2CMODE_FASTMODEPLUS,
-}PinSel_I2cMode;
-
-typedef enum
-{
- /** Type D IOCON registers */
- PINSEL_PIN_TYPE_D,
- /** Type A IOCON registers */
- PINSEL_PIN_TYPE_A,
- /** Type U IOCON registers */
- PINSEL_PIN_TYPE_U,
- /** Type I IOCON registers */
- PINSEL_PIN_TYPE_I,
- /** Type W IOCON registers */
- PINSEL_PIN_TYPE_W,
- /** Unknown type */
- PINSEL_PIN_TYPE_UNKNOWN,
-}PinSel_PinType;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup PINSEL_Public_Functions PINSEL Public Functions
- * @{
- */
- PinSel_PinType PINSEL_GetPinType(uint8_t portnum, uint8_t pinnum);
-PINSEL_RET_CODE PINSEL_ConfigPin(uint8_t portnum, uint8_t pinnum, uint8_t funcnum);
-PINSEL_RET_CODE PINSEL_SetPinMode(uint8_t portnum, uint8_t pinnum, PinSel_BasicMode modenum);
-PINSEL_RET_CODE PINSEL_SetHysMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState);
-PINSEL_RET_CODE PINSEL_SetInvertInput(uint8_t portnum, uint8_t pinnum, FunctionalState NewState);
-PINSEL_RET_CODE PINSEL_SetSlewMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState);
-PINSEL_RET_CODE PINSEL_SetI2CMode(uint8_t portnum, uint8_t pinnum, PinSel_I2cMode I2CMode);
-PINSEL_RET_CODE PINSEL_SetOpenDrainMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState);
-PINSEL_RET_CODE PINSEL_SetAnalogPinMode (uint8_t portnum, uint8_t pinnum, uint8_t enable);
-PINSEL_RET_CODE PINSEL_DacEnable (uint8_t portnum, uint8_t pinnum, uint8_t enable);
-PINSEL_RET_CODE PINSEL_SetFilter (uint8_t portnum, uint8_t pinnum, uint8_t enable);
-PINSEL_RET_CODE PINSEL_SetI2CFilter (uint8_t portnum, uint8_t pinnum, uint8_t enable);
-
-
-/**
- * @}
- */
-
-#endif /* LPC_PINSEL_H */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_pwm.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_pwm.h
deleted file mode 100644
index d42f2dd162..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_pwm.h
+++ /dev/null
@@ -1,357 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_pwm.h 2011-06-02
-*//**
-* @file lpc_pwm.h
-* @brief Contains all macro definitions and function prototypes
-* support for PWM firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup PWM PWM (Pulse Width Modulator)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_PWM_H_
-#define __LPC_PWM_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup PWM_Private_Macros PWM Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/**********************************************************************
-* IR register definitions
-**********************************************************************/
-/** Interrupt flag for PWM match channel for 6 channel */
-#define PWM_IR_PWMMRn(n) ((uint32_t)((n<4)?(1<<n):(1<<(n+4))))
-
-/** Interrupt flag for capture input */
-#define PWM_IR_PWMCAPn(n) ((uint32_t)(1<<(n+4)))
-
-/** IR register mask */
-#define PWM_IR_BITMASK ((uint32_t)(0x0000073F))
-
-/**********************************************************************
-* TCR register definitions
-**********************************************************************/
-/** TCR register mask */
-#define PWM_TCR_BITMASK ((uint32_t)(0x0000000B))
-
-/** PWM Counter Enable */
-#define PWM_TCR_COUNTER_ENABLE ((uint32_t)(1<<0))
-
-/** PWM Counter Reset */
-#define PWM_TCR_COUNTER_RESET ((uint32_t)(1<<1))
-
-/** PWM Enable */
-#define PWM_TCR_PWM_ENABLE ((uint32_t)(1<<3))
-
-/**********************************************************************
-* CTCR register definitions
-**********************************************************************/
-/** CTCR register mask */
-#define PWM_CTCR_BITMASK ((uint32_t)(0x0000000F))
-
-/** PWM Counter-Timer Mode */
-#define PWM_CTCR_MODE(n) ((uint32_t)(n&0x03))
-
-/** PWM Capture input select */
-#define PWM_CTCR_SELECT_INPUT(n) ((uint32_t)((n&0x03)<<2))
-
-/**********************************************************************
-* MCR register definitions
-**********************************************************************/
-/** MCR register mask */
-#define PWM_MCR_BITMASK ((uint32_t)(0x001FFFFF))
-
-/** generate a PWM interrupt when a MATCHn occurs */
-#define PWM_MCR_INT_ON_MATCH(n) ((uint32_t)(1<<(((n&0x7)<<1)+(n&0x07))))
-
-/** reset the PWM when a MATCHn occurs */
-#define PWM_MCR_RESET_ON_MATCH(n) ((uint32_t)(1<<(((n&0x7)<<1)+(n&0x07)+1)))
-
-/** stop the PWM when a MATCHn occurs */
-#define PWM_MCR_STOP_ON_MATCH(n) ((uint32_t)(1<<(((n&0x7)<<1)+(n&0x07)+2)))
-
-/**********************************************************************
-* CCR register definitions
-**********************************************************************/
-/** CCR register mask */
-#define PWM_CCR_BITMASK ((uint32_t)(0x0000003F))
-
-/** PCAPn is rising edge sensitive */
-#define PWM_CCR_CAP_RISING(n) ((uint32_t)(1<<(((n&0x2)<<1)+(n&0x1))))
-
-/** PCAPn is falling edge sensitive */
-#define PWM_CCR_CAP_FALLING(n) ((uint32_t)(1<<(((n&0x2)<<1)+(n&0x1)+1)))
-
-/** PWM interrupt is generated on a PCAP event */
-#define PWM_CCR_INT_ON_CAP(n) ((uint32_t)(1<<(((n&0x2)<<1)+(n&0x1)+2)))
-
-/**********************************************************************
-* PCR register definitions
-**********************************************************************/
-/** PCR register mask */
-#define PWM_PCR_BITMASK (uint32_t)0x00007E7C
-
-/** PWM output n is a single edge controlled output */
-#define PWM_PCR_PWMSELn(n) ((uint32_t)(((n&0x7)<2) ? 0 : (1<<n)))
-
-/** enable PWM output n */
-#define PWM_PCR_PWMENAn(n) ((uint32_t)(((n&0x7)<1) ? 0 : (1<<(n+8))))
-
-/**********************************************************************
-* LER register definitions
-**********************************************************************/
-/** LER register mask*/
-#define PWM_LER_BITMASK ((uint32_t)(0x0000007F))
-
-/** PWM MATCHn register update control */
-#define PWM_LER_EN_MATCHn_LATCH(n) ((uint32_t)((n<7) ? (1<<n) : 0))
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup PWM_Public_Types PWM Public Types
- * @{
- */
-
-typedef enum
-{
- PWM_0 = 0,
- PWM_1 = 1
-} en_PWM_unitId;
-
-
-/** @brief Configuration structure in PWM TIMER mode */
-typedef struct
-{
-
- uint8_t PrescaleOption; /**< Prescale option, should be:
- - PWM_TIMER_PRESCALE_TICKVAL: Prescale in absolute value
- - PWM_TIMER_PRESCALE_USVAL: Prescale in microsecond value
- */
- uint8_t Reserved[3];
- uint32_t PrescaleValue; /**< Prescale value, 32-bit long, should be matched
- with PrescaleOption
- */
-} PWM_TIMERCFG_Type;
-
-/** @brief Configuration structure in PWM COUNTER mode */
-typedef struct
-{
-
- uint8_t CounterOption; /**< Counter Option, should be:
- - PWM_COUNTER_RISING: Rising Edge
- - PWM_COUNTER_FALLING: Falling Edge
- - PWM_COUNTER_ANY: Both rising and falling mode
- */
- uint8_t CountInputSelect; /**< Counter input select, should be:
- - PWM_COUNTER_PCAP1_0: PWM Counter input selected is PCAP1.0 pin
- - PWM_COUNTER_PCAP1_1: PWM Counter input selected is PCAP1.1 pin
- */
- uint8_t Reserved[2];
-} PWM_COUNTERCFG_Type;
-
-/** @brief PWM Match channel configuration structure */
-typedef struct
-{
- uint8_t MatchChannel; /**< Match channel, should be in range
- from 0..6 */
- uint8_t IntOnMatch; /**< Interrupt On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
- uint8_t StopOnMatch; /**< Stop On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
- uint8_t ResetOnMatch; /**< Reset On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
-} PWM_MATCHCFG_Type;
-
-
-/** @brief PWM Capture Input configuration structure */
-typedef struct
-{
- uint8_t CaptureChannel; /**< Capture channel, should be in range
- from 0..1 */
- uint8_t RisingEdge; /**< caption rising edge, should be:
- - ENABLE: Enable rising edge.
- - DISABLE: Disable this function.
- */
- uint8_t FallingEdge; /**< caption falling edge, should be:
- - ENABLE: Enable falling edge.
- - DISABLE: Disable this function.
- */
- uint8_t IntOnCaption; /**< Interrupt On caption, should be:
- - ENABLE: Enable interrupt function.
- - DISABLE: Disable this function.
- */
-} PWM_CAPTURECFG_Type;
-
-/* Timer/Counter in PWM configuration type definition -----------------------------------*/
-
-/** @brief PMW TC mode select option */
-typedef enum
-{
- PWM_MODE_TIMER = 0, /*!< PWM using Timer mode */
- PWM_MODE_COUNTER, /*!< PWM using Counter mode */
-} PWM_TC_MODE_OPT;
-
-#define PARAM_PWM_TC_MODE(n) ((n==PWM_MODE_TIMER) || (n==PWM_MODE_COUNTER))
-
-
-/** @brief PWM Timer/Counter prescale option */
-typedef enum
-{
- PWM_TIMER_PRESCALE_TICKVAL = 0, /*!< Prescale in absolute value */
- PWM_TIMER_PRESCALE_USVAL /*!< Prescale in microsecond value */
-} PWM_TIMER_PRESCALE_OPT;
-
-#define PARAM_PWM_TIMER_PRESCALE(n) ((n==PWM_TIMER_PRESCALE_TICKVAL) || (n==PWM_TIMER_PRESCALE_USVAL))
-
-
-/** @brief PWM Input Select in counter mode */
-typedef enum
-{
- PWM_COUNTER_PCAP1_0 = 0, /*!< PWM Counter input selected is PCAP1.0 pin */
- PWM_COUNTER_PCAP1_1 /*!< PWM counter input selected is CAP1.1 pin */
-} PWM_COUNTER_INPUTSEL_OPT;
-
-#define PARAM_PWM_COUNTER_INPUTSEL(n) ((n==PWM_COUNTER_PCAP1_0) || (n==PWM_COUNTER_PCAP1_1))
-
-/** @brief PWM Input Edge Option in counter mode */
-typedef enum
-{
- PWM_COUNTER_RISING = 1, /*!< Rising edge mode */
- PWM_COUNTER_FALLING = 2, /*!< Falling edge mode */
- PWM_COUNTER_ANY = 3 /*!< Both rising and falling mode */
-} PWM_COUNTER_EDGE_OPT;
-
-#define PARAM_PWM_COUNTER_EDGE(n) ((n==PWM_COUNTER_RISING) || (n==PWM_COUNTER_FALLING) \
- || (n==PWM_COUNTER_ANY))
-
-
-/* PWM configuration type definition ----------------------------------------------------- */
-/** @brief PWM operating mode options */
-typedef enum
-{
- PWM_CHANNEL_SINGLE_EDGE, /*!< PWM Channel Single edge mode */
- PWM_CHANNEL_DUAL_EDGE /*!< PWM Channel Dual edge mode */
-} PWM_CHANNEL_EDGE_OPT;
-
-#define PARAM_PWM_CHANNEL_EDGE(n) ((n==PWM_CHANNEL_SINGLE_EDGE) || (n==PWM_CHANNEL_DUAL_EDGE))
-
-
-/** @brief PWM update type */
-typedef enum
-{
- PWM_MATCH_UPDATE_NOW = 0, /**< PWM Match Channel Update Now */
- PWM_MATCH_UPDATE_NEXT_RST /**< PWM Match Channel Update on next
- PWM Counter resetting */
-} PWM_MATCH_UPDATE_OPT;
-
-#define PARAM_PWM_MATCH_UPDATE(n) ((n==PWM_MATCH_UPDATE_NOW) || (n==PWM_MATCH_UPDATE_NEXT_RST))
-
-
-/** @brief PWM interrupt status type definition ----------------------------------------------------- */
-/** @brief PWM Interrupt status type */
-typedef enum
-{
- PWM_INTSTAT_MR0 = PWM_IR_PWMMRn(0), /**< Interrupt flag for PWM match channel 0 */
- PWM_INTSTAT_MR1 = PWM_IR_PWMMRn(1), /**< Interrupt flag for PWM match channel 1 */
- PWM_INTSTAT_MR2 = PWM_IR_PWMMRn(2), /**< Interrupt flag for PWM match channel 2 */
- PWM_INTSTAT_MR3 = PWM_IR_PWMMRn(3), /**< Interrupt flag for PWM match channel 3 */
- PWM_INTSTAT_CAP0 = PWM_IR_PWMCAPn(0), /**< Interrupt flag for capture input 0 */
- PWM_INTSTAT_CAP1 = PWM_IR_PWMCAPn(1), /**< Interrupt flag for capture input 1 */
- PWM_INTSTAT_MR4 = PWM_IR_PWMMRn(4), /**< Interrupt flag for PWM match channel 4 */
- PWM_INTSTAT_MR6 = PWM_IR_PWMMRn(5), /**< Interrupt flag for PWM match channel 5 */
- PWM_INTSTAT_MR5 = PWM_IR_PWMMRn(6), /**< Interrupt flag for PWM match channel 6 */
-}PWM_INTSTAT_TYPE;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup PWM_Public_Functions PWM Public Functions
- * @{
- */
-
-void PWM_PinConfig(uint8_t pwmId, uint8_t PWM_Channel, uint8_t PinselOption);
-IntStatus PWM_GetIntStatus(uint8_t pwmId, uint32_t IntFlag);
-void PWM_ClearIntPending(uint8_t pwmId, uint32_t IntFlag);
-void PWM_ConfigStructInit(uint8_t PWMTimerCounterMode, void *PWM_InitStruct);
-void PWM_Init(uint8_t pwmId, uint32_t PWMTimerCounterMode, void *PWM_ConfigStruct);
-void PWM_DeInit (uint8_t pwmId);
-void PWM_Cmd(uint8_t pwmId, FunctionalState NewState);
-void PWM_CounterCmd(uint8_t pwmId, FunctionalState NewState);
-void PWM_ResetCounter(uint8_t pwmId);
-void PWM_ConfigMatch(uint8_t pwmId, PWM_MATCHCFG_Type *PWM_MatchConfigStruct);
-void PWM_ConfigCapture(uint8_t pwmId, PWM_CAPTURECFG_Type *PWM_CaptureConfigStruct);
-uint32_t PWM_GetCaptureValue(uint8_t pwmId, uint8_t CaptureChannel);
-void PWM_MatchUpdate(uint8_t pwmId, uint8_t MatchChannel, \
- uint32_t MatchValue, uint8_t UpdateType);
-void PWM_ChannelConfig(uint8_t pwmId, uint8_t PWMChannel, uint8_t ModeOption);
-void PWM_ChannelCmd(uint8_t pwmId, uint8_t PWMChannel, FunctionalState NewState);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_PWM_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_qei.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_qei.h
deleted file mode 100644
index 8406770225..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_qei.h
+++ /dev/null
@@ -1,547 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_qei.h 2011-06-02
-*//**
-* @file lpc_qei.h
-* @brief Contains all macro definitions and function prototypes
-* support for QEI firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup QEI QEI (Quadrature Encoder Interface)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC17X_8X_QEI_H_
-#define __LPC17X_8X_QEI_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup QEI_Public_Macros QEI Public Macros
- * @{
- */
-
-#define QEI_0 (0)
-
-/* QEI Reset types */
-/** QEI Reset types - Reset position counter */
-#define QEI_RESET_POS QEI_CON_RESP
-/** QEI Reset types - Reset Posistion Counter on Index */
-#define QEI_RESET_POSOnIDX QEI_CON_RESPI
-/** QEI Reset types - Reset Velocity */
-#define QEI_RESET_VEL QEI_CON_RESV
-/** QEI Reset types - Reset Index Counter */
-#define QEI_RESET_IDX QEI_CON_RESI
-
-/* QEI Direction Invert Type Option */
-/** QEI Direction Invert Type Option - Direction is not inverted */
-#define QEI_DIRINV_NONE ((uint32_t)(0))
-/** QEI Direction Invert Type Option - Direction is complemented */
-#define QEI_DIRINV_CMPL ((uint32_t)(1))
-
-/* QEI Signal Mode Option */
-/** Signal operation: Quadrature phase mode */
-#define QEI_SIGNALMODE_QUAD ((uint32_t)(0))
-/** Signal operation: Clock/Direction mode */
-#define QEI_SIGNALMODE_CLKDIR ((uint32_t)(1))
-
-/* QEI Capture Mode Option */
-/** Capture mode: Only Phase-A edges are counted (2X) */
-#define QEI_CAPMODE_2X ((uint32_t)(0))
-/** Capture mode: BOTH PhA and PhB edges are counted (4X)*/
-#define QEI_CAPMODE_4X ((uint32_t)(1))
-
-/* QEI Invert Index Signal Option */
-/** Invert Index signal option: None */
-#define QEI_INVINX_NONE ((uint32_t)(0))
-/** Invert Index signal option: Enable */
-#define QEI_INVINX_EN ((uint32_t)(1))
-
-/* QEI timer reload option */
-/** Reload value in absolute value */
-#define QEI_TIMERRELOAD_TICKVAL ((uint8_t)(0))
-/** Reload value in microsecond value */
-#define QEI_TIMERRELOAD_USVAL ((uint8_t)(1))
-
-/* QEI Flag Status type */
-/** Direction status */
-#define QEI_STATUS_DIR ((uint32_t)(1<<0))
-
-/* QEI Compare Position channel option */
-/** QEI compare position channel 0 */
-#define QEI_COMPPOS_CH_0 ((uint8_t)(0))
-/** QEI compare position channel 1 */
-#define QEI_COMPPOS_CH_1 ((uint8_t)(1))
-/** QEI compare position channel 2 */
-#define QEI_COMPPOS_CH_2 ((uint8_t)(2))
-
-/* QEI interrupt flag type */
-/** index pulse was detected interrupt */
-#define QEI_INTFLAG_INX_Int ((uint32_t)(1<<0))
-/** Velocity timer over flow interrupt */
-#define QEI_INTFLAG_TIM_Int ((uint32_t)(1<<1))
-/** Capture velocity is less than compare interrupt */
-#define QEI_INTFLAG_VELC_Int ((uint32_t)(1<<2))
-/** Change of direction interrupt */
-#define QEI_INTFLAG_DIR_Int ((uint32_t)(1<<3))
-/** An encoder phase error interrupt */
-#define QEI_INTFLAG_ERR_Int ((uint32_t)(1<<4))
-/** An encoder clock pulse was detected interrupt */
-#define QEI_INTFLAG_ENCLK_Int ((uint32_t)(1<<5))
-/** position 0 compare value is equal to the current position interrupt */
-#define QEI_INTFLAG_POS0_Int ((uint32_t)(1<<6))
-/** position 1 compare value is equal to the current position interrupt */
-#define QEI_INTFLAG_POS1_Int ((uint32_t)(1<<7))
-/** position 2 compare value is equal to the current position interrupt */
-#define QEI_INTFLAG_POS2_Int ((uint32_t)(1<<8))
-/** Index compare value is equal to the current index count interrupt */
-#define QEI_INTFLAG_REV_Int ((uint32_t)(1<<9))
-/** Combined position 0 and revolution count interrupt */
-#define QEI_INTFLAG_POS0REV_Int ((uint32_t)(1<<10))
-/** Combined position 1 and revolution count interrupt */
-#define QEI_INTFLAG_POS1REV_Int ((uint32_t)(1<<11))
-/** Combined position 2 and revolution count interrupt */
-#define QEI_INTFLAG_POS2REV_Int ((uint32_t)(1<<12))
-
-/**
- * @}
- */
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup QEI_Private_Macros QEI Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/* Quadrature Encoder Interface Control Register Definition --------------------- */
-/*********************************************************************//**
- * Macro defines for QEI Control register
- **********************************************************************/
-/** Reset position counter */
-#define QEI_CON_RESP ((uint32_t)(1<<0))
-/** Reset Posistion Counter on Index */
-#define QEI_CON_RESPI ((uint32_t)(1<<1))
-/** Reset Velocity */
-#define QEI_CON_RESV ((uint32_t)(1<<2))
-/** Reset Index Counter */
-#define QEI_CON_RESI ((uint32_t)(1<<3))
-/** QEI Control register bit-mask */
-#define QEI_CON_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro defines for QEI Configuration register
- **********************************************************************/
-/** Direction Invert */
-#define QEI_CONF_DIRINV ((uint32_t)(1<<0))
-/** Signal mode */
-#define QEI_CONF_SIGMODE ((uint32_t)(1<<1))
-/** Capture mode */
-#define QEI_CONF_CAPMODE ((uint32_t)(1<<2))
-/** Invert index */
-#define QEI_CONF_INVINX ((uint32_t)(1<<3))
-/** QEI Configuration register bit-mask */
-#define QEI_CONF_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro defines for QEI Status register
- **********************************************************************/
-/** Direction bit */
-#define QEI_STAT_DIR ((uint32_t)(1<<0))
-/** QEI status register bit-mask */
-#define QEI_STAT_BITMASK ((uint32_t)(1<<0))
-
-/* Quadrature Encoder Interface Interrupt registers definitions --------------------- */
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Status register
- **********************************************************************/
-/** Indicates that an index pulse was detected */
-#define QEI_INTSTAT_INX_Int ((uint32_t)(1<<0))
-/** Indicates that a velocity timer overflow occurred */
-#define QEI_INTSTAT_TIM_Int ((uint32_t)(1<<1))
-/** Indicates that capture velocity is less than compare velocity */
-#define QEI_INTSTAT_VELC_Int ((uint32_t)(1<<2))
-/** Indicates that a change of direction was detected */
-#define QEI_INTSTAT_DIR_Int ((uint32_t)(1<<3))
-/** Indicates that an encoder phase error was detected */
-#define QEI_INTSTAT_ERR_Int ((uint32_t)(1<<4))
-/** Indicates that and encoder clock pulse was detected */
-#define QEI_INTSTAT_ENCLK_Int ((uint32_t)(1<<5))
-/** Indicates that the position 0 compare value is equal to the current position */
-#define QEI_INTSTAT_POS0_Int ((uint32_t)(1<<6))
-/** Indicates that the position 1compare value is equal to the current position */
-#define QEI_INTSTAT_POS1_Int ((uint32_t)(1<<7))
-/** Indicates that the position 2 compare value is equal to the current position */
-#define QEI_INTSTAT_POS2_Int ((uint32_t)(1<<8))
-/** Indicates that the index compare value is equal to the current index count */
-#define QEI_INTSTAT_REV_Int ((uint32_t)(1<<9))
-/** Combined position 0 and revolution count interrupt. Set when
-* both the POS0_Int bit is set and the REV_Int is set */
-#define QEI_INTSTAT_POS0REV_Int ((uint32_t)(1<<10))
-/** Combined position 1 and revolution count interrupt. Set when
-both the POS1_Int bit is set and the REV_Int is set */
-#define QEI_INTSTAT_POS1REV_Int ((uint32_t)(1<<11))
-/** Combined position 2 and revolution count interrupt. Set when
-both the POS2_Int bit is set and the REV_Int is set */
-#define QEI_INTSTAT_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Status register bit-mask */
-#define QEI_INTSTAT_BITMASK ((uint32_t)(0x1FFF))
-
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Set register
- **********************************************************************/
-/** Set Bit Indicates that an index pulse was detected */
-#define QEI_INTSET_INX_Int ((uint32_t)(1<<0))
-/** Set Bit Indicates that a velocity timer overflow occurred */
-#define QEI_INTSET_TIM_Int ((uint32_t)(1<<1))
-/** Set Bit Indicates that capture velocity is less than compare velocity */
-#define QEI_INTSET_VELC_Int ((uint32_t)(1<<2))
-/** Set Bit Indicates that a change of direction was detected */
-#define QEI_INTSET_DIR_Int ((uint32_t)(1<<3))
-/** Set Bit Indicates that an encoder phase error was detected */
-#define QEI_INTSET_ERR_Int ((uint32_t)(1<<4))
-/** Set Bit Indicates that and encoder clock pulse was detected */
-#define QEI_INTSET_ENCLK_Int ((uint32_t)(1<<5))
-/** Set Bit Indicates that the position 0 compare value is equal to the current position */
-#define QEI_INTSET_POS0_Int ((uint32_t)(1<<6))
-/** Set Bit Indicates that the position 1compare value is equal to the current position */
-#define QEI_INTSET_POS1_Int ((uint32_t)(1<<7))
-/** Set Bit Indicates that the position 2 compare value is equal to the current position */
-#define QEI_INTSET_POS2_Int ((uint32_t)(1<<8))
-/** Set Bit Indicates that the index compare value is equal to the current index count */
-#define QEI_INTSET_REV_Int ((uint32_t)(1<<9))
-/** Set Bit that combined position 0 and revolution count interrupt */
-#define QEI_INTSET_POS0REV_Int ((uint32_t)(1<<10))
-/** Set Bit that Combined position 1 and revolution count interrupt */
-#define QEI_INTSET_POS1REV_Int ((uint32_t)(1<<11))
-/** Set Bit that Combined position 2 and revolution count interrupt */
-#define QEI_INTSET_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Set register bit-mask */
-#define QEI_INTSET_BITMASK ((uint32_t)(0x1FFF))
-
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Clear register
- **********************************************************************/
-/** Clear Bit Indicates that an index pulse was detected */
-#define QEI_INTCLR_INX_Int ((uint32_t)(1<<0))
-/** Clear Bit Indicates that a velocity timer overflow occurred */
-#define QEI_INTCLR_TIM_Int ((uint32_t)(1<<1))
-/** Clear Bit Indicates that capture velocity is less than compare velocity */
-#define QEI_INTCLR_VELC_Int ((uint32_t)(1<<2))
-/** Clear Bit Indicates that a change of direction was detected */
-#define QEI_INTCLR_DIR_Int ((uint32_t)(1<<3))
-/** Clear Bit Indicates that an encoder phase error was detected */
-#define QEI_INTCLR_ERR_Int ((uint32_t)(1<<4))
-/** Clear Bit Indicates that and encoder clock pulse was detected */
-#define QEI_INTCLR_ENCLK_Int ((uint32_t)(1<<5))
-/** Clear Bit Indicates that the position 0 compare value is equal to the current position */
-#define QEI_INTCLR_POS0_Int ((uint32_t)(1<<6))
-/** Clear Bit Indicates that the position 1compare value is equal to the current position */
-#define QEI_INTCLR_POS1_Int ((uint32_t)(1<<7))
-/** Clear Bit Indicates that the position 2 compare value is equal to the current position */
-#define QEI_INTCLR_POS2_Int ((uint32_t)(1<<8))
-/** Clear Bit Indicates that the index compare value is equal to the current index count */
-#define QEI_INTCLR_REV_Int ((uint32_t)(1<<9))
-/** Clear Bit that combined position 0 and revolution count interrupt */
-#define QEI_INTCLR_POS0REV_Int ((uint32_t)(1<<10))
-/** Clear Bit that Combined position 1 and revolution count interrupt */
-#define QEI_INTCLR_POS1REV_Int ((uint32_t)(1<<11))
-/** Clear Bit that Combined position 2 and revolution count interrupt */
-#define QEI_INTCLR_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Clear register bit-mask */
-#define QEI_INTCLR_BITMASK ((uint32_t)(0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Enable register
- **********************************************************************/
-/** Enabled Interrupt Bit Indicates that an index pulse was detected */
-#define QEI_INTEN_INX_Int ((uint32_t)(1<<0))
-/** Enabled Interrupt Bit Indicates that a velocity timer overflow occurred */
-#define QEI_INTEN_TIM_Int ((uint32_t)(1<<1))
-/** Enabled Interrupt Bit Indicates that capture velocity is less than compare velocity */
-#define QEI_INTEN_VELC_Int ((uint32_t)(1<<2))
-/** Enabled Interrupt Bit Indicates that a change of direction was detected */
-#define QEI_INTEN_DIR_Int ((uint32_t)(1<<3))
-/** Enabled Interrupt Bit Indicates that an encoder phase error was detected */
-#define QEI_INTEN_ERR_Int ((uint32_t)(1<<4))
-/** Enabled Interrupt Bit Indicates that and encoder clock pulse was detected */
-#define QEI_INTEN_ENCLK_Int ((uint32_t)(1<<5))
-/** Enabled Interrupt Bit Indicates that the position 0 compare value is equal to the current position */
-#define QEI_INTEN_POS0_Int ((uint32_t)(1<<6))
-/** Enabled Interrupt Bit Indicates that the position 1compare value is equal to the current position */
-#define QEI_INTEN_POS1_Int ((uint32_t)(1<<7))
-/** Enabled Interrupt Bit Indicates that the position 2 compare value is equal to the current position */
-#define QEI_INTEN_POS2_Int ((uint32_t)(1<<8))
-/** Enabled Interrupt Bit Indicates that the index compare value is equal to the current index count */
-#define QEI_INTEN_REV_Int ((uint32_t)(1<<9))
-/** Enabled Interrupt Bit that combined position 0 and revolution count interrupt */
-#define QEI_INTEN_POS0REV_Int ((uint32_t)(1<<10))
-/** Enabled Interrupt Bit that Combined position 1 and revolution count interrupt */
-#define QEI_INTEN_POS1REV_Int ((uint32_t)(1<<11))
-/** Enabled Interrupt Bit that Combined position 2 and revolution count interrupt */
-#define QEI_INTEN_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Enable register bit-mask */
-#define QEI_INTEN_BITMASK ((uint32_t)(0x1FFF))
-
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Enable Set register
- **********************************************************************/
-/** Set Enable Interrupt Bit Indicates that an index pulse was detected */
-#define QEI_IESET_INX_Int ((uint32_t)(1<<0))
-/** Set Enable Interrupt Bit Indicates that a velocity timer overflow occurred */
-#define QEI_IESET_TIM_Int ((uint32_t)(1<<1))
-/** Set Enable Interrupt Bit Indicates that capture velocity is less than compare velocity */
-#define QEI_IESET_VELC_Int ((uint32_t)(1<<2))
-/** Set Enable Interrupt Bit Indicates that a change of direction was detected */
-#define QEI_IESET_DIR_Int ((uint32_t)(1<<3))
-/** Set Enable Interrupt Bit Indicates that an encoder phase error was detected */
-#define QEI_IESET_ERR_Int ((uint32_t)(1<<4))
-/** Set Enable Interrupt Bit Indicates that and encoder clock pulse was detected */
-#define QEI_IESET_ENCLK_Int ((uint32_t)(1<<5))
-/** Set Enable Interrupt Bit Indicates that the position 0 compare value is equal to
-* the current position */
-#define QEI_IESET_POS0_Int ((uint32_t)(1<<6))
-/** Set Enable Interrupt Bit Indicates that the position 1compare value is equal to
-* the current position */
-#define QEI_IESET_POS1_Int ((uint32_t)(1<<7))
-/** Set Enable Interrupt Bit Indicates that the position 2 compare value is equal to
-* the current position */
-#define QEI_IESET_POS2_Int ((uint32_t)(1<<8))
-/** Set Enable Interrupt Bit Indicates that the index compare value is equal to the
-* current index count */
-#define QEI_IESET_REV_Int ((uint32_t)(1<<9))
-/** Set Enable Interrupt Bit that combined position 0 and revolution count interrupt */
-#define QEI_IESET_POS0REV_Int ((uint32_t)(1<<10))
-/** Set Enable Interrupt Bit that Combined position 1 and revolution count interrupt */
-#define QEI_IESET_POS1REV_Int ((uint32_t)(1<<11))
-/** Set Enable Interrupt Bit that Combined position 2 and revolution count interrupt */
-#define QEI_IESET_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Enable Set register bit-mask */
-#define QEI_IESET_BITMASK ((uint32_t)(0x1FFF))
-
-/*********************************************************************//**
- * Macro defines for QEI Interrupt Enable Clear register
- **********************************************************************/
-/** Clear Enabled Interrupt Bit Indicates that an index pulse was detected */
-#define QEI_IECLR_INX_Int ((uint32_t)(1<<0))
-/** Clear Enabled Interrupt Bit Indicates that a velocity timer overflow occurred */
-#define QEI_IECLR_TIM_Int ((uint32_t)(1<<1))
-/** Clear Enabled Interrupt Bit Indicates that capture velocity is less than compare velocity */
-#define QEI_IECLR_VELC_Int ((uint32_t)(1<<2))
-/** Clear Enabled Interrupt Bit Indicates that a change of direction was detected */
-#define QEI_IECLR_DIR_Int ((uint32_t)(1<<3))
-/** Clear Enabled Interrupt Bit Indicates that an encoder phase error was detected */
-#define QEI_IECLR_ERR_Int ((uint32_t)(1<<4))
-/** Clear Enabled Interrupt Bit Indicates that and encoder clock pulse was detected */
-#define QEI_IECLR_ENCLK_Int ((uint32_t)(1<<5))
-/** Clear Enabled Interrupt Bit Indicates that the position 0 compare value is equal to the
-* current position */
-#define QEI_IECLR_POS0_Int ((uint32_t)(1<<6))
-/** Clear Enabled Interrupt Bit Indicates that the position 1compare value is equal to the
-* current position */
-#define QEI_IECLR_POS1_Int ((uint32_t)(1<<7))
-/** Clear Enabled Interrupt Bit Indicates that the position 2 compare value is equal to the
-* current position */
-#define QEI_IECLR_POS2_Int ((uint32_t)(1<<8))
-/** Clear Enabled Interrupt Bit Indicates that the index compare value is equal to the current
-* index count */
-#define QEI_IECLR_REV_Int ((uint32_t)(1<<9))
-/** Clear Enabled Interrupt Bit that combined position 0 and revolution count interrupt */
-#define QEI_IECLR_POS0REV_Int ((uint32_t)(1<<10))
-/** Clear Enabled Interrupt Bit that Combined position 1 and revolution count interrupt */
-#define QEI_IECLR_POS1REV_Int ((uint32_t)(1<<11))
-/** Clear Enabled Interrupt Bit that Combined position 2 and revolution count interrupt */
-#define QEI_IECLR_POS2REV_Int ((uint32_t)(1<<12))
-/** QEI Interrupt Enable Clear register bit-mask */
-#define QEI_IECLR_BITMASK ((uint32_t)(0xFFFF))
-
-
-/* ---------------- CHECK PARAMETER DEFINITIONS ---------------------------- */
-/* Macro check QEI peripheral */
-#define PARAM_QEIx(n) ((n==LPC_QEI))
-
-/* Macro check QEI reset type */
-#define PARAM_QEI_RESET(n) ((n==QEI_CON_RESP) \
- || (n==QEI_RESET_POSOnIDX) \
- || (n==QEI_RESET_VEL) \
- || (n==QEI_RESET_IDX))
-
-/* Macro check QEI Direction invert mode */
-#define PARAM_QEI_DIRINV(n) ((n==QEI_DIRINV_NONE) || (n==QEI_DIRINV_CMPL))
-
-/* Macro check QEI signal mode */
-#define PARAM_QEI_SIGNALMODE(n) ((n==QEI_SIGNALMODE_QUAD) || (n==QEI_SIGNALMODE_CLKDIR))
-
-/* Macro check QEI Capture mode */
-#define PARAM_QEI_CAPMODE(n) ((n==QEI_CAPMODE_2X) || (n==QEI_CAPMODE_4X))
-
-/* Macro check QEI Invert index mode */
-#define PARAM_QEI_INVINX(n) ((n==QEI_INVINX_NONE) || (n==QEI_INVINX_EN))
-
-/* Macro check QEI Direction invert mode */
-#define PARAM_QEI_TIMERRELOAD(n) ((n==QEI_TIMERRELOAD_TICKVAL) || (n==QEI_TIMERRELOAD_USVAL))
-
-/* Macro check QEI status type */
-#define PARAM_QEI_STATUS(n) ((n==QEI_STATUS_DIR))
-
-/* Macro check QEI combine position type */
-#define PARAM_QEI_COMPPOS_CH(n) ((n==QEI_COMPPOS_CH_0) || (n==QEI_COMPPOS_CH_1) || (n==QEI_COMPPOS_CH_2))
-
-/* Macro check QEI interrupt flag type */
-#define PARAM_QEI_INTFLAG(n) ((n==QEI_INTFLAG_INX_Int) \
- || (n==QEI_INTFLAG_TIM_Int) \
- || (n==QEI_INTFLAG_VELC_Int) \
- || (n==QEI_INTFLAG_DIR_Int) \
- || (n==QEI_INTFLAG_ERR_Int) \
- || (n==QEI_INTFLAG_ENCLK_Int) \
- || (n==QEI_INTFLAG_POS0_Int) \
- || (n==QEI_INTFLAG_POS1_Int) \
- || (n==QEI_INTFLAG_POS2_Int) \
- || (n==QEI_INTFLAG_REV_Int) \
- || (n==QEI_INTFLAG_POS0REV_Int) \
- || (n==QEI_INTFLAG_POS1REV_Int) \
- || (n==QEI_INTFLAG_POS2REV_Int))
-/**
- * @}
- */
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup QEI_Public_Types QEI Public Types
- * @{
- */
-
-/**
- * @brief QEI Configuration structure type definition
- */
-typedef struct
-{
- uint32_t DirectionInvert :1; /**< Direction invert option:
- - QEI_DIRINV_NONE: QEI Direction is normal
- - QEI_DIRINV_CMPL: QEI Direction is complemented
- */
- uint32_t SignalMode :1; /**< Signal mode Option:
- - QEI_SIGNALMODE_QUAD: Signal is in Quadrature phase mode
- - QEI_SIGNALMODE_CLKDIR: Signal is in Clock/Direction mode
- */
- uint32_t CaptureMode :1; /**< Capture Mode Option:
- - QEI_CAPMODE_2X: Only Phase-A edges are counted (2X)
- - QEI_CAPMODE_4X: BOTH Phase-A and Phase-B edges are counted (4X)
- */
- uint32_t InvertIndex :1; /**< Invert Index Option:
- - QEI_INVINX_NONE: the sense of the index input is normal
- - QEI_INVINX_EN: inverts the sense of the index input
- */
-} QEI_CFG_Type;
-
-/**
- * @brief Timer Reload Configuration structure type definition
- */
-typedef struct
-{
-
- uint8_t ReloadOption; /**< Velocity Timer Reload Option, should be:
- - QEI_TIMERRELOAD_TICKVAL: Reload value in absolute value
- - QEI_TIMERRELOAD_USVAL: Reload value in microsecond value
- */
- uint8_t Reserved[3];
- uint32_t ReloadValue; /**< Velocity Timer Reload Value, 32-bit long, should be matched
- with Velocity Timer Reload Option
- */
-} QEI_RELOADCFG_Type;
-
-/**
- * @brief Filter Settings for QEI registers on PHA, PHB and IDX
- */
-
-typedef struct
-{
- uint32_t PHA_FilterVal;/**< Digital Filter Register on PHA input */
- uint32_t PHB_FilterVal;/**< Digital Filter Register on PHB input */
- uint32_t INX_FilterVal;/**< Digital Filter Register on IDX input */
-} st_Qei_FilterCfg;
-
-
-/**
- * @}
- */
-
-
-
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup QEI_Public_Functions QEI Public Functions
- * @{
- */
-
-void QEI_Reset(uint8_t qeiId, uint32_t ulResetType);
-void QEI_Init(uint8_t qeiId, QEI_CFG_Type *QEI_ConfigStruct);
-void QEI_GetCfgDefault(QEI_CFG_Type *QIE_InitStruct);
-void QEI_DeInit(uint8_t qeiId);
-FlagStatus QEI_GetStatus(uint8_t qeiId, uint32_t ulFlagType);
-uint32_t QEI_GetPosition(uint8_t qeiId);
-void QEI_SetMaxPosition(uint8_t qeiId, uint32_t ulMaxPos);
-void QEI_SetPositionComp(uint8_t qeiId, uint8_t bPosCompCh, uint32_t ulPosComp);
-uint32_t QEI_GetIndex(uint8_t qeiId);
-void QEI_SetIndexComp(uint8_t qeiId, uint32_t ulIndexComp);
-void QEI_SetTimerReload(uint8_t qeiId, QEI_RELOADCFG_Type *QEIReloadStruct);
-uint32_t QEI_GetTimer(uint8_t qeiId);
-uint32_t QEI_GetVelocity(uint8_t qeiId);
-uint32_t QEI_GetVelocityCap(uint8_t qeiId);
-void QEI_SetVelocityComp(uint8_t qeiId, uint32_t ulVelComp);
-void QEI_SetDigiFilter(uint8_t qeiId, st_Qei_FilterCfg FilterVal);
-FlagStatus QEI_GetIntStatus(uint8_t qeiId, uint32_t ulIntType);
-void QEI_IntCmd(uint8_t qeiId, uint32_t ulIntType, FunctionalState NewState);
-void QEI_IntSet(uint8_t qeiId, uint32_t ulIntType);
-void QEI_IntClear(uint8_t qeiId, uint32_t ulIntType);
-uint32_t QEI_CalculateRPM(uint8_t qeiId, uint32_t ulVelCapValue, uint32_t ulPPR);
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_QEI_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_rtc.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_rtc.h
deleted file mode 100644
index 350a463008..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_rtc.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_rtc.h 2011-06-02
-*//**
-* @file lpc_rtc.h
-* @brief Contains all macro definitions and function prototypes
-* support for RTC firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup RTC RTC (Real Time Clock)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_RTC_H_
-#define __LPC_RTC_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup RTC_Private_Macros RTC Private Macros
- * @{
- */
-
-/* ----------------------- BIT DEFINITIONS ----------------------------------- */
-/* Miscellaneous register group --------------------------------------------- */
-/**********************************************************************
-* ILR register definitions
-**********************************************************************/
-/** ILR register mask */
-#define RTC_ILR_BITMASK ((0x00000003))
-
-/** Bit inform the source interrupt is counter increment*/
-#define RTC_IRL_RTCCIF ((1<<0))
-
-/** Bit inform the source interrupt is alarm match*/
-#define RTC_IRL_RTCALF ((1<<1))
-
-/**********************************************************************
-* CCR register definitions
-**********************************************************************/
-/** CCR register mask */
-#define RTC_CCR_BITMASK ((0x00000013))
-
-/** Clock enable */
-#define RTC_CCR_CLKEN ((1<<0))
-
-/** Clock reset */
-#define RTC_CCR_CTCRST ((1<<1))
-
-/** Calibration counter enable */
-#define RTC_CCR_CCALEN ((1<<4))
-
-/**********************************************************************
-* CIIR register definitions
-**********************************************************************/
-/** Counter Increment Interrupt bit for second */
-#define RTC_CIIR_IMSEC ((1<<0))
-
-/** Counter Increment Interrupt bit for minute */
-#define RTC_CIIR_IMMIN ((1<<1))
-
-/** Counter Increment Interrupt bit for hour */
-#define RTC_CIIR_IMHOUR ((1<<2))
-
-/** Counter Increment Interrupt bit for day of month */
-#define RTC_CIIR_IMDOM ((1<<3))
-
-/** Counter Increment Interrupt bit for day of week */
-#define RTC_CIIR_IMDOW ((1<<4))
-
-/** Counter Increment Interrupt bit for day of year */
-#define RTC_CIIR_IMDOY ((1<<5))
-
-/** Counter Increment Interrupt bit for month */
-#define RTC_CIIR_IMMON ((1<<6))
-
-/** Counter Increment Interrupt bit for year */
-#define RTC_CIIR_IMYEAR ((1<<7))
-
-/** CIIR bit mask */
-#define RTC_CIIR_BITMASK ((0xFF))
-
-/**********************************************************************
-* AMR register definitions
-**********************************************************************/
-/** Counter Increment Select Mask bit for second */
-#define RTC_AMR_AMRSEC ((1<<0))
-
-/** Counter Increment Select Mask bit for minute */
-#define RTC_AMR_AMRMIN ((1<<1))
-
-/** Counter Increment Select Mask bit for hour */
-#define RTC_AMR_AMRHOUR ((1<<2))
-
-/** Counter Increment Select Mask bit for day of month */
-#define RTC_AMR_AMRDOM ((1<<3))
-
-/** Counter Increment Select Mask bit for day of week */
-#define RTC_AMR_AMRDOW ((1<<4))
-
-/** Counter Increment Select Mask bit for day of year */
-#define RTC_AMR_AMRDOY ((1<<5))
-
-/** Counter Increment Select Mask bit for month */
-#define RTC_AMR_AMRMON ((1<<6))
-
-/** Counter Increment Select Mask bit for year */
-#define RTC_AMR_AMRYEAR ((1<<7))
-
-/** AMR bit mask */
-#define RTC_AMR_BITMASK ((0xFF))
-
-/**********************************************************************
-* RTC_AUX register definitions
-**********************************************************************/
-/** RTC Oscillator Fail detect flag */
-#define RTC_AUX_RTC_OSCF ((1<<4))
-
-/**********************************************************************
-* RTC_AUXEN register definitions
-**********************************************************************/
-/** Oscillator Fail Detect interrupt enable*/
-#define RTC_AUXEN_RTC_OSCFEN ((1<<4))
-
-/* Consolidated time register group ----------------------------------- */
-/**********************************************************************
-* Consolidated Time Register 0 definitions
-**********************************************************************/
-#define RTC_CTIME0_SECONDS_MASK ((0x3F))
-#define RTC_CTIME0_MINUTES_MASK ((0x3F00))
-#define RTC_CTIME0_HOURS_MASK ((0x1F0000))
-#define RTC_CTIME0_DOW_MASK ((0x7000000))
-
-/**********************************************************************
-* Consolidated Time Register 1 definitions
-**********************************************************************/
-#define RTC_CTIME1_DOM_MASK ((0x1F))
-#define RTC_CTIME1_MONTH_MASK ((0xF00))
-#define RTC_CTIME1_YEAR_MASK ((0xFFF0000))
-
-/**********************************************************************
-* Consolidated Time Register 2 definitions
-**********************************************************************/
-#define RTC_CTIME2_DOY_MASK ((0xFFF))
-
-/**********************************************************************
-* Time Counter Group and Alarm register group
-**********************************************************************/
-/** SEC register mask */
-#define RTC_SEC_MASK (0x0000003F)
-
-/** MIN register mask */
-#define RTC_MIN_MASK (0x0000003F)
-
-/** HOUR register mask */
-#define RTC_HOUR_MASK (0x0000001F)
-
-/** DOM register mask */
-#define RTC_DOM_MASK (0x0000001F)
-
-/** DOW register mask */
-#define RTC_DOW_MASK (0x00000007)
-
-/** DOY register mask */
-#define RTC_DOY_MASK (0x000001FF)
-
-/** MONTH register mask */
-#define RTC_MONTH_MASK (0x0000000F)
-
-/** YEAR register mask */
-#define RTC_YEAR_MASK (0x00000FFF)
-
-
-/** Maximum value of second */
-#define RTC_SECOND_MAX 59
-
-/** Maximum value of minute*/
-#define RTC_MINUTE_MAX 59
-
-/** Maximum value of hour*/
-#define RTC_HOUR_MAX 23
-
-/** Minimum value of month*/
-#define RTC_MONTH_MIN 1
-
-/** Maximum value of month*/
-#define RTC_MONTH_MAX 12
-
-/** Minimum value of day of month*/
-#define RTC_DAYOFMONTH_MIN 1
-
-/** Maximum value of day of month*/
-#define RTC_DAYOFMONTH_MAX 31
-
-/** Maximum value of day of week*/
-#define RTC_DAYOFWEEK_MAX 6
-
-/** Minimum value of day of year*/
-#define RTC_DAYOFYEAR_MIN 1
-
-/** Maximum value of day of year*/
-#define RTC_DAYOFYEAR_MAX 366
-
-/** Maximum value of year*/
-#define RTC_YEAR_MAX 4095
-
-/**********************************************************************
-* Calibration register
-**********************************************************************/
-/** Calibration value */
-#define RTC_CALIBRATION_CALVAL_MASK ((0x1FFFF))
-
-/** Calibration direction */
-#define RTC_CALIBRATION_LIBDIR ((1<<17))
-
-/** Calibration max value */
-#define RTC_CALIBRATION_MAX ((0x20000))
-
-/** Calibration definitions */
-#define RTC_CALIB_DIR_FORWARD ((uint8_t)(0))
-#define RTC_CALIB_DIR_BACKWARD ((uint8_t)(1))
-
-/**********************************************************************
-* Event Monitor/Recorder Control register
-**********************************************************************/
-#define RTC_ERCTRL_EV0_INTWAKE_ENABLE (1<<0)
-#define RTC_ERCTRL_EV0_GPCLEAR_ENABLE (1<<1)
-#define RTC_ERCTRL_EV0_POS_EDGE (1<<2)
-#define RTC_ERCTRL_EV0_NEG_EDGE (0<<2)
-#define RTC_ERCTRL_EV0_INPUT_ENABLE (1<<3)
-
-#define RTC_ERCTRL_EV1_INTWAKE_ENABLE (1<<10)
-#define RTC_ERCTRL_EV1_GPCLEAR_ENABLE (1<<11)
-#define RTC_ERCTRL_EV1_POS_EDGE (1<<12)
-#define RTC_ERCTRL_EV1_NEG_EDGE (0<<12)
-#define RTC_ERCTRL_EV1_INPUT_ENABLE (1<<13)
-
-
-#define RTC_ERCTRL_EV2_INTWAKE_ENABLE (1<<20)
-#define RTC_ERCTRL_EV2_GPCLEAR_ENABLE (1<<21)
-#define RTC_ERCTRL_EV2_POS_EDGE (1<<22)
-#define RTC_ERCTRL_EV2_NEG_EDGE (0<<22)
-#define RTC_ERCTRL_EV2_INPUT_ENABLE (1<<23)
-
-#define RTC_ERCTRL_MODE_MASK (((uint32_t)3)<<30)
-#define RTC_ERCTRL_MODE_CLK_DISABLE (((uint32_t)0)<<30)
-#define RTC_ERCTRL_MODE_16HZ (((uint32_t)1)<<30)
-#define RTC_ERCTRL_MODE_64HZ (((uint32_t)2)<<30)
-#define RTC_ERCTRL_MODE_1KHZ (((uint32_t)3)<<30)
-
-#define RTC_ER_INPUT_CHANNEL_NUM (3)
-
-/**********************************************************************
-* Event Monitor/Recorder Status register
-**********************************************************************/
-#define RTC_ER_STATUS_EV0_BIT (0)
-#define RTC_ER_STATUS_EV1_BIT (1)
-#define RTC_ER_STATUS_EV2_BIT (2)
-#define RTC_ER_STATUS_GPCLEARED_BIT (3)
-#define RTC_ER_STATUS_WAKEUP_BIT (31)
-
-#define RTC_ER_EVENTS_ON_EV0_FLG (1<<RTC_ER_STATUS_EV0_BIT)
-#define RTC_ER_EVENTS_ON_EV1_FLG (1<<RTC_ER_STATUS_EV1_BIT)
-#define RTC_ER_EVENTS_ON_EV2_FLG (1<<RTC_ER_STATUS_EV2_BIT)
-#define RTC_ER_STATUS_GP_CLEARED_FLG (1<<RTC_ER_STATUS_GPCLEARED_BIT)
-#define RTC_ER_STATUS_WAKEUP_REQ_PENDING (((uint32_t)1)<<RTC_ER_STATUS_WAKEUP_BIT)
-/**********************************************************************
-* Event Monitor/Recorder Counter register
-**********************************************************************/
-#define RTC_ER_EV0_COUNTER(n) (n&0x07)
-#define RTC_ER_EV1_COUNTER(n) ((n>>8)&0x07)
-#define RTC_ER_EV2_COUNTER(n) ((n>>16)&0x07)
-
-/**********************************************************************
-* Event Monitor/Recorder TimeStamp register
-**********************************************************************/
-#define RTC_ER_TIMESTAMP_SEC(n) (n&0x3F)
-#define RTC_ER_TIMESTAMP_MIN(n) ((n>>6)&0x3F)
-#define RTC_ER_TIMESTAMP_HOUR(n) ((n>>12)&0x1F)
-#define RTC_ER_TIMESTAMP_DOY(n) ((n>>17)&0x1FF)
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup RTC_Public_Types RTC Public Types
- * @{
- */
-
-/** @brief Time structure definitions for easy manipulate the data */
-typedef struct
-{
- /** Seconds Register */
- uint32_t SEC;
- /** Minutes Register */
- uint32_t MIN;
- /** Hours Register */
- uint32_t HOUR;
- /** Day of Month Register */
- uint32_t DOM;
- /** Day of Week Register */
- uint32_t DOW;
- /** Day of Year Register */
- uint32_t DOY;
- /** Months Register */
- uint32_t MONTH;
- /** Years Register */
- uint32_t YEAR;
-} RTC_TIME_Type;
-
-/** @brief RTC interrupt source */
-typedef enum
-{
- /** Counter Increment Interrupt */
- RTC_INT_COUNTER_INCREASE = RTC_IRL_RTCCIF,
- /** The alarm interrupt */
- RTC_INT_ALARM = RTC_IRL_RTCALF,
-} RTC_INT_OPT;
-
-
-/** @brief RTC time type option */
-typedef enum
-{
- /** Second */
- RTC_TIMETYPE_SECOND = 0,
- /** Month */
- RTC_TIMETYPE_MINUTE = 1,
- /** Hour */
- RTC_TIMETYPE_HOUR = 2,
- /** Day of week */
- RTC_TIMETYPE_DAYOFWEEK = 3,
- /** Day of month */
- RTC_TIMETYPE_DAYOFMONTH = 4,
- /** Day of year */
- RTC_TIMETYPE_DAYOFYEAR = 5,
- /** Month */
- RTC_TIMETYPE_MONTH = 6,
- /** Year */
- RTC_TIMETYPE_YEAR = 7,
-} RTC_TIMETYPE_Num;
-
-/** @brief Event Monitor/Recording Input Channel configuration */
-typedef struct
-{
- Bool EventOnPosEdge; // Event occurs on positive edge on the channel
- Bool IntWake; // Create interrupt and wake-up request if there is an event
- Bool GPClear; // Clear GP registers of RTC if there is an event.
-} RTC_ER_CHANNEL_Init_Type;
-
-/** @brief Event Monitor/Recording configuration */
-typedef struct
-{
- RTC_ER_CHANNEL_Init_Type InputChannel[RTC_ER_INPUT_CHANNEL_NUM];
- uint32_t Clk; // Sample clock on input channel. (Hz)
-} RTC_ER_CONFIG_Type;
-
-/** @brief Event Monitor/Recording TimeStamp Type */
-typedef struct
-{
- /** Seconds Register */
- uint32_t SEC;
- /** Minutes Register */
- uint32_t MIN;
- /** Hours Register */
- uint32_t HOUR;
- /** Day of Year Register */
- uint32_t DOY;
-} RTC_ER_TIMESTAMP_Type;
-
-
-/**
- * @}
- */
-
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup RTC_Public_Functions RTC Public Functions
- * @{
- */
-
-void RTC_Init (LPC_RTC_TypeDef *RTCx);
-void RTC_DeInit(LPC_RTC_TypeDef *RTCx);
-void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx);
-void RTC_Cmd (LPC_RTC_TypeDef *RTCx, FunctionalState NewState);
-void RTC_CntIncrIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t CntIncrIntType, \
- FunctionalState NewState);
-void RTC_AlarmIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t AlarmTimeType, \
- FunctionalState NewState);
-void RTC_SetTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue);
-uint32_t RTC_GetTime(LPC_RTC_TypeDef *RTCx, uint32_t Timetype);
-void RTC_SetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
-void RTC_GetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
-void RTC_SetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t ALValue);
-uint32_t RTC_GetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype);
-void RTC_SetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
-void RTC_GetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
-IntStatus RTC_GetIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType);
-void RTC_ClearIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType);
-void RTC_CalibCounterCmd(LPC_RTC_TypeDef *RTCx, FunctionalState NewState);
-void RTC_CalibConfig(LPC_RTC_TypeDef *RTCx, uint32_t CalibValue, uint8_t CalibDir);
-void RTC_WriteGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel, uint32_t Value);
-uint32_t RTC_ReadGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel);
-
-void RTC_ER_InitConfigStruct(RTC_ER_CONFIG_Type* pConfig);
-Status RTC_ER_Init(RTC_ER_CONFIG_Type* pConfig);
-Status RTC_ER_Cmd(uint8_t channel, FunctionalState state);
-uint8_t RTC_ER_GetEventCount(uint8_t channel);
-uint32_t RTC_ER_GetStatus(void);
-Bool RTC_ER_WakupReqPending(void);
-Bool RTC_ER_GPCleared(void);
-Status RTC_ER_GetFirstTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp);
-Status RTC_ER_GetLastTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp);
-void RTC_ER_ClearStatus(uint32_t status);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_RTC_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_spifi_rom_api.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_spifi_rom_api.h
deleted file mode 100644
index 1dec3f644c..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_spifi_rom_api.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/***********************************************************************
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-**********************************************************************/
-
-#ifndef SPIFI_ROM_API_H
-#define SPIFI_ROM_API_H
-
-#include <stdint.h>
-/* define the symbol TESTING in the environment if test output desired */
-
-/* maintain LONGEST_PROT >= the length (in bytes) of the largest
- protection block of any serial flash that this driver handles */
-#define LONGEST_PROT 68
-
-typedef uint8_t uc;
-
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-/* protection/sector descriptors */
-typedef struct {
- uint32_t base;
- uc flags;
- int8_t log2;
- uint16_t rept;
-} protEnt;
-/* bits in the flags byte */
-enum {RWPROT=1};
-
-/* overall data structure includes # sectors, length of protection reg,
- array of descriptors
-typedef struct {
- uint16_t sectors;
- uint16_t protBytes;
- protEnt *entries;
-} protDesc; */
-
-typedef union {
- uint16_t hw;
- uc byte[2];
-}stat_t;
-/* the object that init returns, and other routines use as an operand */
-typedef struct {
- uint32_t base, regbase, devSize, memSize;
- uc mfger, devType, devID, busy;
- stat_t stat;
- uint16_t reserved;
- uint16_t set_prot, write_prot;
- uint32_t mem_cmd, prog_cmd;
- uint16_t sectors, protBytes;
- uint32_t opts, errCheck;
- uc erase_shifts[4], erase_ops[4];
- protEnt *protEnts;
- char prot[LONGEST_PROT];
-} SPIFIobj;
-
-/* operands of program and erase */
-typedef struct {
- char *dest;
- uint32_t length;
- char *scratch;
- int32_t protect;
- uint32_t options;
-} SPIFIopers;
-
-/* instruction classes for wait_busy */
-typedef enum {stat_inst, block_erase, prog_inst, chip_erase} inst_type;
-
-/* bits in options operands (MODE3, RCVCLK, and FULLCLK
- have the same relationship as in the Control register) */
-#define S_MODE3 1
-#define S_MODE0 0
-#define S_MINIMAL 2
-#define S_MAXIMAL 0
-#define S_FORCE_ERASE 4
-#define S_ERASE_NOT_REQD 8
-#define S_CALLER_ERASE 8
-#define S_ERASE_AS_REQD 0
-#define S_VERIFY_PROG 0x10
-#define S_VERIFY_ERASE 0x20
-#define S_NO_VERIFY 0
-#define S_RCVCLK 0x80
-#define S_INTCLK 0
-#define S_FULLCLK 0x40
-#define S_HALFCLK 0
-#define S_DUAL 0x100
-#define S_CALLER_PROT 0x200
-#define S_DRIVER_PROT 0
-
-/* the following values in the first post-address memory command byte work
- for all known quad devices that support "no opcode" operation */
-#define NO_OPCODE_FOLLOWS 0xA5
-#define OPCODE_FOLLOWS 0xFF
-
-/* basic SPI commands for serial flash */
-#define BASE_READ_CMD (CMD_RD<<OPCODE_SHIFT|4<<FRAMEFORM_SHIFT|UNL_DATA)
-#define FAST_READ_CMD (CMD_READ_FAST<<OPCODE_SHIFT|4<<FRAMEFORM_SHIFT|1<<INTLEN_SHIFT|UNL_DATA)
-#define BASE_PROG_CMD (CMD_PROG<<OPCODE_SHIFT|4<<FRAMEFORM_SHIFT|DOUT)
-
-/* the length of a standard program command is 256 on all devices */
-#define PROG_SIZE 256
-
-/* options in obj->opts (mostly for setMulti) */
-/* used by Winbond: send 0xA3 command so hardware can read faster */
-#define OPT_SEND_A3 1
-/* used by SST: send 0x38 command to enable quad and allow full command set */
-#define OPT_SEND_38 2
-/* used by Winbond and others: read status reg 2, check it,
- if necessary write it back with Quad Enable set */
-#define OPT_35_OR02_01 4
-/* used by Atmel: read Configuration register, if necessary set Quad Enable */
-#define OPT_3F_OR80_3E 8
-/* used by Numonyx to set all-quad mode: only for parts that include RSTQIO */
-#define OPT_65_CLR_C0_61 0x10
-/* used by Numonyx: send 0x81 command to write Volatile Configuration Register
- to set # dummy bytes and allow XIP mode */
-#define OPT_81 0x20
-/* set for devices without full device erase command (Numonyx type 0x40) */
-#define OPT_NO_DEV_ERASE 0x40
-/* used by Macronix: status reg 2 includes selection between write-protect
- in status reg and command-based */
-#define OPT_WPSEL 0x80
-/* set when protection data has been read into the SPIFI object */
-#define OPT_PROT_READ 0x100
-/* set if device needs 4-byte address (and maybe 0x4B command = use 4-byte address) */
-#define OPT_4BAD 0x200
-/* set if setMulti should set the Dual bit in Control reg */
-#define OPT_DUAL 0x400
-/* send "# dummy bits" in C0 command to Winbond */
-#define OPT_C0 0x800
-/* set QE for Chingis */
-#define OPT_05_OR40_01 0x1000
-/* write status does not go busy */
-#define OPT_01_NO_BUSY 0x2000
-/* protection mode bits moved from protMode byte to opts Fri May 13 2011 */
-#define OPT_PROT_STAT 0x4000
-#define OPT_PROT_REG 0x8000
-#define OPT_PROT_CMD3 0x10000
-#define OPT_PROT_CMDE 0x20000
-#define OPT_PROT_MASK 0x3C000
-
-#define OPT_ALL_QUAD 0x40000
-
-#ifndef OMIT_ROM_TABLE
-/* interface to ROM API */
-typedef struct {
- int32_t (*spifi_init) (SPIFIobj *obj, uint32_t csHigh, uint32_t options,
- uint32_t mhz);
- int32_t (*spifi_program) (SPIFIobj *obj, char *source, SPIFIopers *opers);
- int32_t (*spifi_erase) (SPIFIobj *obj, SPIFIopers *opers);
- /* mode switching */
- void (*cancel_mem_mode)(SPIFIobj *obj);
- void (*set_mem_mode) (SPIFIobj *obj);
-
- /* mid level functions */
- int32_t (*checkAd) (SPIFIobj *obj, SPIFIopers *opers);
- int32_t (*setProt) (SPIFIobj *obj, SPIFIopers *opers, char *change,
- char *saveProt);
- int32_t (*check_block) (SPIFIobj *obj, char *source, SPIFIopers *opers,
- uint32_t check_program);
- int32_t (*send_erase_cmd) (SPIFIobj *obj, uint8_t op, uint32_t addr);
- uint32_t (*ck_erase) (SPIFIobj *obj, uint32_t *addr, uint32_t length);
- int32_t (*prog_block) (SPIFIobj *obj, char *source, SPIFIopers *opers,
- uint32_t *left_in_page);
- uint32_t (*ck_prog) (SPIFIobj *obj, char *source, char *dest, uint32_t length);
-
- /* low level functions */
- void(*setSize) (SPIFIobj *obj, int32_t value);
- int32_t (*setDev) (SPIFIobj *obj, uint32_t opts, uint32_t mem_cmd,
- uint32_t prog_cmd);
- uint32_t (*cmd) (uc op, uc addrLen, uc intLen, uint16_t len);
- uint32_t (*readAd) (SPIFIobj *obj, uint32_t cmd, uint32_t addr);
- void (*send04) (SPIFIobj *obj, uc op, uc len, uint32_t value);
- void (*wren_sendAd) (SPIFIobj *obj, uint32_t cmd, uint32_t addr, uint32_t value);
- int32_t (*write_stat) (SPIFIobj *obj, uc len, uint16_t value);
- int32_t (*wait_busy) (SPIFIobj *obj, uc prog_or_erase);
-} SPIFI_RTNS;
-
-#define define_spifi_romPtr(name) const SPIFI_RTNS *name=*((SPIFI_RTNS **)SPIFI_ROM_PTR)
-#endif /* OMIT_ROM_TABLE */
-
-#ifdef USE_SPIFI_LIB
-extern SPIFI_RTNS spifi_table;
-#endif /* USE_SPIFI_LIB */
-
-/* example of using this interface:
-#include "spifi_rom_api.h"
-#define CSHIGH 4
-#define SPIFI_MHZ 80
-#define source_data_ad (char *)1234
-
- int32_t rc;
- SPIFIopers opers;
-
- define_spifi_romPtr(spifi);
- SPIFIobj *obj = malloc(sizeof(SPIFIobj));
- if (!obj) { can't allocate memory }
-
- rc = spifi->spifi_init (obj, CSHIGH, S_FULLCLK+S_RCVCLK, SPIFI_MHZ);
- if (rc) { investigate init error rc }
- printf ("the serial flash contains %d bytes\n", obj->devSize);
-
- opers.dest = where_to_program;
- opers.length = how_many_bytes;
- opers.scratch = NULL; // unprogrammed data is not saved/restored
- opers.protect = -1; // save & restore protection
- opers.options = S_VERIFY_PROG;
-
- rc = spifi->spifi_program (obj, source_data_ad, &opers);
- if (rc) { investigate program error rc }
-*/
-
-/* these are for normal users, including boot code */
-int32_t spifi_init (SPIFIobj *obj, uint32_t csHigh, uint32_t options, uint32_t mhz);
-int32_t spifi_program (SPIFIobj *obj, char *source, SPIFIopers *opers);
-int32_t spifi_erase (SPIFIobj *obj, SPIFIopers *opers);
-
-/* these are used by the manufacturer-specific init functions */
-void setSize (SPIFIobj *obj, int32_t value);
-int32_t setDev (SPIFIobj *obj, uint32_t opts, uint32_t mem_cmd, uint32_t prog_cmd);
-uint32_t read04(SPIFIobj *obj, uc op, uc len);
-int32_t write_stat (SPIFIobj *obj, uc len, uint16_t value);
-void setProtEnts(SPIFIobj *obj, const protEnt *p, uint32_t protTabLen);
-
-/* needs to be defined for each platform */
-void pullMISO(int high);
-
-#ifdef TESTING
-/* used by testing code */
-unsigned short getProtBytes (SPIFIobj *obj, unsigned short *sectors);
-/* predeclare a debug routine */
-void wait_sample (volatile unsigned *addr, unsigned mask, unsigned value);
-#endif
-
-#endif /* SPIFI_ROM_API_H */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_ssp.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_ssp.h
deleted file mode 100644
index 65e663d5bc..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_ssp.h
+++ /dev/null
@@ -1,422 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_ssp.h 2011-06-02
-*//**
-* @file lpc_ssp.h
-* @brief Contains all macro definitions and function prototypes
-* support for SSP firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup SSP SSP (Synchronous Serial Port)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_SSP_H_
-#define __LPC_SSP_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup SSP_Public_Macros SSP Public Macros
- * @{
- */
-
-/*********************************************************************//**
- * SSP configuration parameter defines
- **********************************************************************/
-/** Clock phase control bit */
-#define SSP_CPHA_FIRST ((uint32_t)(0))
-#define SSP_CPHA_SECOND SSP_CR0_CPHA_SECOND
-
-
-/** Clock polarity control bit */
-/* There's no bug here!!!
- * - If bit[6] in SSPnCR0 is 0: SSP controller maintains the bus clock low between frames.
- * That means the active clock is in HI state.
- * - If bit[6] in SSPnCR0 is 1 (SSP_CR0_CPOL_HI): SSP controller maintains the bus clock
- * high between frames. That means the active clock is in LO state.
- */
-#define SSP_CPOL_HI ((uint32_t)(0))
-#define SSP_CPOL_LO SSP_CR0_CPOL_HI
-
-/** SSP master mode enable */
-#define SSP_SLAVE_MODE SSP_CR1_SLAVE_EN
-#define SSP_MASTER_MODE ((uint32_t)(0))
-
-/** SSP data bit number defines */
-#define SSP_DATABIT_4 SSP_CR0_DSS(4) /*!< Databit number = 4 */
-#define SSP_DATABIT_5 SSP_CR0_DSS(5) /*!< Databit number = 5 */
-#define SSP_DATABIT_6 SSP_CR0_DSS(6) /*!< Databit number = 6 */
-#define SSP_DATABIT_7 SSP_CR0_DSS(7) /*!< Databit number = 7 */
-#define SSP_DATABIT_8 SSP_CR0_DSS(8) /*!< Databit number = 8 */
-#define SSP_DATABIT_9 SSP_CR0_DSS(9) /*!< Databit number = 9 */
-#define SSP_DATABIT_10 SSP_CR0_DSS(10) /*!< Databit number = 10 */
-#define SSP_DATABIT_11 SSP_CR0_DSS(11) /*!< Databit number = 11 */
-#define SSP_DATABIT_12 SSP_CR0_DSS(12) /*!< Databit number = 12 */
-#define SSP_DATABIT_13 SSP_CR0_DSS(13) /*!< Databit number = 13 */
-#define SSP_DATABIT_14 SSP_CR0_DSS(14) /*!< Databit number = 14 */
-#define SSP_DATABIT_15 SSP_CR0_DSS(15) /*!< Databit number = 15 */
-#define SSP_DATABIT_16 SSP_CR0_DSS(16) /*!< Databit number = 16 */
-
-/** SSP Frame Format definition */
-/** Motorola SPI mode */
-#define SSP_FRAME_SPI SSP_CR0_FRF_SPI
-/** TI synchronous serial mode */
-#define SSP_FRAME_TI SSP_CR0_FRF_TI
-/** National Micro-wire mode */
-#define SSP_FRAME_MICROWIRE SSP_CR0_FRF_MICROWIRE
-
-/*********************************************************************//**
- * SSP Status defines
- **********************************************************************/
-/** SSP status TX FIFO Empty bit */
-#define SSP_STAT_TXFIFO_EMPTY SSP_SR_TFE
-/** SSP status TX FIFO not full bit */
-#define SSP_STAT_TXFIFO_NOTFULL SSP_SR_TNF
-/** SSP status RX FIFO not empty bit */
-#define SSP_STAT_RXFIFO_NOTEMPTY SSP_SR_RNE
-/** SSP status RX FIFO full bit */
-#define SSP_STAT_RXFIFO_FULL SSP_SR_RFF
-/** SSP status SSP Busy bit */
-#define SSP_STAT_BUSY SSP_SR_BSY
-
-/*********************************************************************//**
- * SSP Interrupt Configuration defines
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_INTCFG_ROR SSP_IMSC_ROR
-/** Receive TimeOut */
-#define SSP_INTCFG_RT SSP_IMSC_RT
-/** Rx FIFO is at least half full */
-#define SSP_INTCFG_RX SSP_IMSC_RX
-/** Tx FIFO is at least half empty */
-#define SSP_INTCFG_TX SSP_IMSC_TX
-
-/*********************************************************************//**
- * SSP Configured Interrupt Status defines
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_INTSTAT_ROR SSP_MIS_ROR
-/** Receive TimeOut */
-#define SSP_INTSTAT_RT SSP_MIS_RT
-/** Rx FIFO is at least half full */
-#define SSP_INTSTAT_RX SSP_MIS_RX
-/** Tx FIFO is at least half empty */
-#define SSP_INTSTAT_TX SSP_MIS_TX
-
-/*********************************************************************//**
- * SSP Raw Interrupt Status defines
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_INTSTAT_RAW_ROR SSP_RIS_ROR
-/** Receive TimeOut */
-#define SSP_INTSTAT_RAW_RT SSP_RIS_RT
-/** Rx FIFO is at least half full */
-#define SSP_INTSTAT_RAW_RX SSP_RIS_RX
-/** Tx FIFO is at least half empty */
-#define SSP_INTSTAT_RAW_TX SSP_RIS_TX
-
-/*********************************************************************//**
- * SSP Interrupt Clear defines
- **********************************************************************/
-/** Writing a 1 to this bit clears the "frame was received when
- * RxFIFO was full" interrupt */
-#define SSP_INTCLR_ROR SSP_ICR_ROR
-/** Writing a 1 to this bit clears the "Rx FIFO was not empty and
- * has not been read for a timeout period" interrupt */
-#define SSP_INTCLR_RT SSP_ICR_RT
-
-/*********************************************************************//**
- * SSP DMA defines
- **********************************************************************/
-/** SSP bit for enabling RX DMA */
-#define SSP_DMA_RX SSP_DMA_RXDMA_EN
-/** SSP bit for enabling TX DMA */
-#define SSP_DMA_TX SSP_DMA_TXDMA_EN
-
-/* SSP Status Implementation definitions */
-#define SSP_STAT_DONE (1UL<<8) /**< Done */
-#define SSP_STAT_ERROR (1UL<<9) /**< Error */
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup SSP_Private_Macros SSP Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/*********************************************************************//**
- * Macro defines for CR0 register
- **********************************************************************/
-/** SSP data size select, must be 4 bits to 16 bits */
-#define SSP_CR0_DSS(n) ((uint32_t)((n-1)&0xF))
-/** SSP control 0 Motorola SPI mode */
-#define SSP_CR0_FRF_SPI ((uint32_t)(0<<4))
-/** SSP control 0 TI synchronous serial mode */
-#define SSP_CR0_FRF_TI ((uint32_t)(1<<4))
-/** SSP control 0 National Micro-wire mode */
-#define SSP_CR0_FRF_MICROWIRE ((uint32_t)(2<<4))
-/** SPI clock polarity bit (used in SPI mode only), (1) = maintains the
- bus clock high between frames, (0) = low */
-#define SSP_CR0_CPOL_HI ((uint32_t)(1<<6))
-/** SPI clock out phase bit (used in SPI mode only), (1) = captures data
- on the second clock transition of the frame, (0) = first */
-#define SSP_CR0_CPHA_SECOND ((uint32_t)(1<<7))
-/** SSP serial clock rate value load macro, divider rate is
- PERIPH_CLK / (cpsr * (SCR + 1)) */
-#define SSP_CR0_SCR(n) ((uint32_t)((n&0xFF)<<8))
-/** SSP CR0 bit mask */
-#define SSP_CR0_BITMASK ((uint32_t)(0xFFFF))
-
-/*********************************************************************//**
- * Macro defines for CR1 register
- **********************************************************************/
-/** SSP control 1 loopback mode enable bit */
-#define SSP_CR1_LBM_EN ((uint32_t)(1<<0))
-/** SSP control 1 enable bit */
-#define SSP_CR1_SSP_EN ((uint32_t)(1<<1))
-/** SSP control 1 slave enable */
-#define SSP_CR1_SLAVE_EN ((uint32_t)(1<<2))
-/** SSP control 1 slave out disable bit, disables transmit line in slave
- mode */
-#define SSP_CR1_SO_DISABLE ((uint32_t)(1<<3))
-/** SSP CR1 bit mask */
-#define SSP_CR1_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro defines for DR register
- **********************************************************************/
-/** SSP data bit mask */
-#define SSP_DR_BITMASK(n) ((n)&0xFFFF)
-
-/*********************************************************************//**
- * Macro defines for SR register
- **********************************************************************/
-/** SSP status TX FIFO Empty bit */
-#define SSP_SR_TFE ((uint32_t)(1<<0))
-/** SSP status TX FIFO not full bit */
-#define SSP_SR_TNF ((uint32_t)(1<<1))
-/** SSP status RX FIFO not empty bit */
-#define SSP_SR_RNE ((uint32_t)(1<<2))
-/** SSP status RX FIFO full bit */
-#define SSP_SR_RFF ((uint32_t)(1<<3))
-/** SSP status SSP Busy bit */
-#define SSP_SR_BSY ((uint32_t)(1<<4))
-/** SSP SR bit mask */
-#define SSP_SR_BITMASK ((uint32_t)(0x1F))
-
-/*********************************************************************//**
- * Macro defines for CPSR register
- **********************************************************************/
-/** SSP clock prescaler */
-#define SSP_CPSR_CPDVSR(n) ((uint32_t)(n&0xFF))
-/** SSP CPSR bit mask */
-#define SSP_CPSR_BITMASK ((uint32_t)(0xFF))
-
-/*********************************************************************//**
- * Macro define for (IMSC) Interrupt Mask Set/Clear registers
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_IMSC_ROR ((uint32_t)(1<<0))
-/** Receive TimeOut */
-#define SSP_IMSC_RT ((uint32_t)(1<<1))
-/** Rx FIFO is at least half full */
-#define SSP_IMSC_RX ((uint32_t)(1<<2))
-/** Tx FIFO is at least half empty */
-#define SSP_IMSC_TX ((uint32_t)(1<<3))
-/** IMSC bit mask */
-#define SSP_IMSC_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro define for (RIS) Raw Interrupt Status registers
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_RIS_ROR ((uint32_t)(1<<0))
-/** Receive TimeOut */
-#define SSP_RIS_RT ((uint32_t)(1<<1))
-/** Rx FIFO is at least half full */
-#define SSP_RIS_RX ((uint32_t)(1<<2))
-/** Tx FIFO is at least half empty */
-#define SSP_RIS_TX ((uint32_t)(1<<3))
-/** RIS bit mask */
-#define SSP_RIS_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro define for (MIS) Masked Interrupt Status registers
- **********************************************************************/
-/** Receive Overrun */
-#define SSP_MIS_ROR ((uint32_t)(1<<0))
-/** Receive TimeOut */
-#define SSP_MIS_RT ((uint32_t)(1<<1))
-/** Rx FIFO is at least half full */
-#define SSP_MIS_RX ((uint32_t)(1<<2))
-/** Tx FIFO is at least half empty */
-#define SSP_MIS_TX ((uint32_t)(1<<3))
-/** MIS bit mask */
-#define SSP_MIS_BITMASK ((uint32_t)(0x0F))
-
-/*********************************************************************//**
- * Macro define for (ICR) Interrupt Clear registers
- **********************************************************************/
-/** Writing a 1 to this bit clears the "frame was received when
- * RxFIFO was full" interrupt */
-#define SSP_ICR_ROR ((uint32_t)(1<<0))
-/** Writing a 1 to this bit clears the "Rx FIFO was not empty and
- * has not been read for a timeout period" interrupt */
-#define SSP_ICR_RT ((uint32_t)(1<<1))
-/** ICR bit mask */
-#define SSP_ICR_BITMASK ((uint32_t)(0x03))
-
-/*********************************************************************//**
- * Macro defines for DMACR register
- **********************************************************************/
-/** SSP bit for enabling RX DMA */
-#define SSP_DMA_RXDMA_EN ((uint32_t)(1<<0))
-/** SSP bit for enabling TX DMA */
-#define SSP_DMA_TXDMA_EN ((uint32_t)(1<<1))
-/** DMACR bit mask */
-#define SSP_DMA_BITMASK ((uint32_t)(0x03))
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup SSP_Public_Types SSP Public Types
- * @{
- */
-
-/** @brief SSP configuration structure */
-typedef struct {
- uint32_t Databit; /** Databit number, should be SSP_DATABIT_x,
- where x is in range from 4 - 16 */
- uint32_t CPHA; /** Clock phase, should be:
- - SSP_CPHA_FIRST: first clock edge
- - SSP_CPHA_SECOND: second clock edge */
- uint32_t CPOL; /** Clock polarity, should be:
- - SSP_CPOL_HI: high level
- - SSP_CPOL_LO: low level */
- uint32_t Mode; /** SSP mode, should be:
- - SSP_MASTER_MODE: Master mode
- - SSP_SLAVE_MODE: Slave mode */
- uint32_t FrameFormat; /** Frame Format:
- - SSP_FRAME_SPI: Motorola SPI frame format
- - SSP_FRAME_TI: TI frame format
- - SSP_FRAME_MICROWIRE: National Microwire frame format */
- uint32_t ClockRate; /** Clock rate,in Hz */
-} SSP_CFG_Type;
-
-/**
- * @brief SSP Transfer Type definitions
- */
-typedef enum {
- SSP_TRANSFER_POLLING = 0, /**< Polling transfer */
- SSP_TRANSFER_INTERRUPT /**< Interrupt transfer */
-} SSP_TRANSFER_Type;
-
-/**
- * @brief SPI Data configuration structure definitions
- */
-typedef struct {
- void *tx_data; /**< Pointer to transmit data */
- uint32_t tx_cnt; /**< Transmit counter */
- void *rx_data; /**< Pointer to transmit data */
- uint32_t rx_cnt; /**< Receive counter */
- uint32_t length; /**< Length of transfer data */
- uint32_t status; /**< Current status of SSP activity */
-} SSP_DATA_SETUP_Type;
-
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup SSP_Public_Functions SSP Public Functions
- * @{
- */
-
-/* SSP Init/DeInit functions --------------------------------------------------*/
-void SSP_Init(LPC_SSP_TypeDef *SSPx, SSP_CFG_Type *SSP_ConfigStruct);
-void SSP_DeInit(LPC_SSP_TypeDef* SSPx);
-
-/* SSP configure functions ----------------------------------------------------*/
-void SSP_ConfigStructInit(SSP_CFG_Type *SSP_InitStruct);
-
-/* SSP enable/disable functions -----------------------------------------------*/
-void SSP_Cmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState);
-void SSP_LoopBackCmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState);
-void SSP_SlaveOutputCmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState);
-void SSP_DMACmd(LPC_SSP_TypeDef *SSPx, uint32_t DMAMode, FunctionalState NewState);
-
-/* SSP get information functions ----------------------------------------------*/
-FlagStatus SSP_GetStatus(LPC_SSP_TypeDef* SSPx, uint32_t FlagType);
-uint8_t SSP_GetDataSize(LPC_SSP_TypeDef* SSPx);
-IntStatus SSP_GetRawIntStatus(LPC_SSP_TypeDef *SSPx, uint32_t RawIntType);
-uint32_t SSP_GetRawIntStatusReg(LPC_SSP_TypeDef *SSPx);
-IntStatus SSP_GetIntStatus (LPC_SSP_TypeDef *SSPx, uint32_t IntType);
-
-/* SSP transfer data functions ------------------------------------------------*/
-void SSP_SendData(LPC_SSP_TypeDef* SSPx, uint16_t Data);
-uint16_t SSP_ReceiveData(LPC_SSP_TypeDef* SSPx);
-int32_t SSP_ReadWrite (LPC_SSP_TypeDef *SSPx, SSP_DATA_SETUP_Type *dataCfg, \
- SSP_TRANSFER_Type xfType);
-
-/* SSP IRQ function ------------------------------------------------------------*/
-void SSP_IntConfig(LPC_SSP_TypeDef *SSPx, uint32_t IntType, FunctionalState NewState);
-void SSP_ClearIntPending(LPC_SSP_TypeDef *SSPx, uint32_t IntType);
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_SSP_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_systick.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_systick.h
deleted file mode 100644
index cca57104e5..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_systick.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_systick.h 2011-06-02
-*//**
-* @file lpc_systick.h
-* @brief Contains all macro definitions and function prototypes
-* support for SYSTICK firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup SYSTICK SysTick (System tick timer)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_SYSTICK_H_
-#define __LPC_SYSTICK_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup SYSTICK_Private_Macros SysTick Private Macros
- * @{
- */
-/*********************************************************************//**
- * Macro defines for System Timer Control and status (STCTRL) register
- **********************************************************************/
-#define ST_CTRL_ENABLE ((uint32_t)(1<<0))
-#define ST_CTRL_TICKINT ((uint32_t)(1<<1))
-#define ST_CTRL_CLKSOURCE ((uint32_t)(1<<2))
-#define ST_CTRL_COUNTFLAG ((uint32_t)(1<<16))
-
-/*********************************************************************//**
- * Macro defines for System Timer Reload value (STRELOAD) register
- **********************************************************************/
-#define ST_RELOAD_RELOAD(n) ((uint32_t)(n & 0x00FFFFFF))
-
-/*********************************************************************//**
- * Macro defines for System Timer Current value (STCURRENT) register
- **********************************************************************/
-#define ST_RELOAD_CURRENT(n) ((uint32_t)(n & 0x00FFFFFF))
-
-/*********************************************************************//**
- * Macro defines for System Timer Calibration value (STCALIB) register
- **********************************************************************/
-#define ST_CALIB_TENMS(n) ((uint32_t)(n & 0x00FFFFFF))
-#define ST_CALIB_SKEW ((uint32_t)(1<<30))
-#define ST_CALIB_NOREF ((uint32_t)(1<<31))
-
-#define CLKSOURCE_EXT ((uint32_t)(0))
-#define CLKSOURCE_CPU ((uint32_t)(1))
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup SYSTICK_Public_Functions Systick Public Functions
- * @{
- */
-
-void SYSTICK_InternalInit(uint32_t time);
-void SYSTICK_ExternalInit(uint32_t freq, uint32_t time);
-
-void SYSTICK_Cmd(FunctionalState NewState);
-void SYSTICK_IntCmd(FunctionalState NewState);
-uint32_t SYSTICK_GetCurrentValue(void);
-void SYSTICK_ClearCounterFlag(void);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_SYSTICK_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_timer.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_timer.h
deleted file mode 100644
index acabdfc709..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_timer.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_timer.h 2011-06-02
-*//**
-* @file lpc_timer.h
-* @brief Contains all macro definitions and function prototypes
-* support for Timer firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup TIMER TIM (Timer)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_TIMER_H_
-#define __LPC_TIMER_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup TIM_Private_Macros Timer Private Macros
- * @{
- */
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/**********************************************************************
-** Interrupt information
-**********************************************************************/
-/** Macro to clean interrupt pending */
-#define TIM_IR_CLR(n) _BIT(n)
-
-/**********************************************************************
-** Timer interrupt register definitions
-**********************************************************************/
-/** Macro for getting a timer match interrupt bit */
-#define TIM_MATCH_INT(n) (_BIT(n & 0x0F))
-/** Macro for getting a capture event interrupt bit */
-#define TIM_CAP_INT(n) (_BIT(((n & 0x0F) + 4)))
-
-/**********************************************************************
-* Timer control register definitions
-**********************************************************************/
-/** Timer/counter enable bit */
-#define TIM_ENABLE ((uint32_t)(1<<0))
-/** Timer/counter reset bit */
-#define TIM_RESET ((uint32_t)(1<<1))
-/** Timer control bit mask */
-#define TIM_TCR_MASKBIT ((uint32_t)(3))
-
-/**********************************************************************
-* Timer match control register definitions
-**********************************************************************/
-/** Bit location for interrupt on MRx match, n = 0 to 3 */
-#define TIM_INT_ON_MATCH(n) (_BIT((n * 3)))
-/** Bit location for reset on MRx match, n = 0 to 3 */
-#define TIM_RESET_ON_MATCH(n) (_BIT(((n * 3) + 1)))
-/** Bit location for stop on MRx match, n = 0 to 3 */
-#define TIM_STOP_ON_MATCH(n) (_BIT(((n * 3) + 2)))
-/** Timer Match control bit mask */
-#define TIM_MCR_MASKBIT ((uint32_t)(0x0FFF))
-/** Timer Match control bit mask for specific channel*/
-#define TIM_MCR_CHANNEL_MASKBIT(n) ((uint32_t)(7<<(n*3)))
-
-/**********************************************************************
-* Timer capture control register definitions
-**********************************************************************/
-/** Bit location for CAP.n on CRx rising edge, n = 0 to 3 */
-#define TIM_CAP_RISING(n) (_BIT((n * 3)))
-/** Bit location for CAP.n on CRx falling edge, n = 0 to 3 */
-#define TIM_CAP_FALLING(n) (_BIT(((n * 3) + 1)))
-/** Bit location for CAP.n on CRx interrupt enable, n = 0 to 3 */
-#define TIM_INT_ON_CAP(n) (_BIT(((n * 3) + 2)))
-/** Mask bit for rising and falling edge bit */
-#define TIM_EDGE_MASK(n) (_SBF((n * 3), 0x03))
-/** Timer capture control bit mask */
-#define TIM_CCR_MASKBIT ((uint32_t)(0x3F))
-/** Timer Capture control bit mask for specific channel*/
-#define TIM_CCR_CHANNEL_MASKBIT(n) ((uint32_t)(7<<(n*3)))
-
-/**********************************************************************
-* Timer external match register definitions
-**********************************************************************/
-/** Bit location for output state change of MAT.n when external match
- happens, n = 0 to 3 */
-#define TIM_EM(n) _BIT(n)
-/** Output state change of MAT.n when external match happens: no change */
-#define TIM_EM_NOTHING ((uint8_t)(0x0))
-/** Output state change of MAT.n when external match happens: low */
-#define TIM_EM_LOW ((uint8_t)(0x1))
-/** Output state change of MAT.n when external match happens: high */
-#define TIM_EM_HIGH ((uint8_t)(0x2))
-/** Output state change of MAT.n when external match happens: toggle */
-#define TIM_EM_TOGGLE ((uint8_t)(0x3))
-/** Macro for setting for the MAT.n change state bits */
-#define TIM_EM_SET(n,s) (_SBF(((n << 1) + 4), (s & 0x03)))
-/** Mask for the MAT.n change state bits */
-#define TIM_EM_MASK(n) (_SBF(((n << 1) + 4), 0x03))
-/** Timer external match bit mask */
-#define TIM_EMR_MASKBIT 0x0FFF
-
-/**********************************************************************
-* Timer Count Control Register definitions
-**********************************************************************/
-/** Mask to get the Counter/timer mode bits */
-#define TIM_CTCR_MODE_MASK 0x3
-/** Mask to get the count input select bits */
-#define TIM_CTCR_INPUT_MASK 0xC
-/** Timer Count control bit mask */
-#define TIM_CTCR_MASKBIT 0xF
-#define TIM_COUNTER_MODE ((uint8_t)(1))
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup TIM_Public_Types Timer Public Types
- * @{
- */
-
-/***********************************************************************
- * Timer device enumeration
-**********************************************************************/
-/** @brief interrupt type */
-typedef enum
-{
- TIM_MR0_INT =0, /*!< interrupt for Match channel 0*/
- TIM_MR1_INT =1, /*!< interrupt for Match channel 1*/
- TIM_MR2_INT =2, /*!< interrupt for Match channel 2*/
- TIM_MR3_INT =3, /*!< interrupt for Match channel 3*/
- TIM_CR0_INT =4, /*!< interrupt for Capture channel 0*/
- TIM_CR1_INT =5, /*!< interrupt for Capture channel 1*/
-}TIM_INT_TYPE;
-
-/** @brief Timer/counter operating mode */
-typedef enum
-{
- TIM_TIMER_MODE = 0, /*!< Timer mode */
- TIM_COUNTER_RISING_MODE, /*!< Counter rising mode */
- TIM_COUNTER_FALLING_MODE, /*!< Counter falling mode */
- TIM_COUNTER_ANY_MODE /*!< Counter on both edges */
-} TIM_MODE_OPT;
-
-/** @brief Timer/Counter prescale option */
-typedef enum
-{
- TIM_PRESCALE_TICKVAL = 0, /*!< Prescale in absolute value */
- TIM_PRESCALE_USVAL /*!< Prescale in microsecond value */
-} TIM_PRESCALE_OPT;
-
-/** @brief Counter input option */
-typedef enum
-{
- TIM_COUNTER_INCAP0 = 0, /*!< CAPn.0 input pin for TIMERn */
- TIM_COUNTER_INCAP1, /*!< CAPn.1 input pin for TIMERn */
-} TIM_COUNTER_INPUT_OPT;
-
-/** @brief Timer/Counter external match option */
-typedef enum
-{
- TIM_EXTMATCH_NOTHING = 0, /*!< Do nothing for external output pin if match */
- TIM_EXTMATCH_LOW, /*!< Force external output pin to low if match */
- TIM_EXTMATCH_HIGH, /*!< Force external output pin to high if match */
- TIM_EXTMATCH_TOGGLE /*!< Toggle external output pin if match */
-}TIM_EXTMATCH_OPT;
-
-/** @brief Timer/counter capture mode options */
-typedef enum {
- TIM_CAPTURE_NONE = 0, /*!< No Capture */
- TIM_CAPTURE_RISING, /*!< Rising capture mode */
- TIM_CAPTURE_FALLING, /*!< Falling capture mode */
- TIM_CAPTURE_ANY /*!< On both edges */
-} TIM_CAP_MODE_OPT;
-
-/** @brief Configuration structure in TIMER mode */
-typedef struct
-{
-
- uint8_t PrescaleOption; /**< Timer Prescale option, should be:
- - TIM_PRESCALE_TICKVAL: Prescale in absolute value
- - TIM_PRESCALE_USVAL: Prescale in microsecond value
- */
- uint8_t Reserved[3]; /**< Reserved */
- uint32_t PrescaleValue; /**< Prescale value */
-} TIM_TIMERCFG_Type;
-
-/** @brief Configuration structure in COUNTER mode */
-typedef struct {
-
- uint8_t CounterOption; /**< Counter Option, should be:
- - TIM_COUNTER_INCAP0: CAPn.0 input pin for TIMERn
- - TIM_COUNTER_INCAP1: CAPn.1 input pin for TIMERn
- */
- uint8_t CountInputSelect;
- uint8_t Reserved[2];
-} TIM_COUNTERCFG_Type;
-
-/** @brief Match channel configuration structure */
-typedef struct {
- uint8_t MatchChannel; /**< Match channel, should be in range
- from 0..3 */
- uint8_t IntOnMatch; /**< Interrupt On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
- uint8_t StopOnMatch; /**< Stop On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
- uint8_t ResetOnMatch; /**< Reset On match, should be:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function.
- */
-
- uint8_t ExtMatchOutputType; /**< External Match Output type, should be:
- - TIM_EXTMATCH_NOTHING: Do nothing for external output pin if match
- - TIM_EXTMATCH_LOW: Force external output pin to low if match
- - TIM_EXTMATCH_HIGH: Force external output pin to high if match
- - TIM_EXTMATCH_TOGGLE: Toggle external output pin if match.
- */
- uint8_t Reserved[3]; /** Reserved */
- uint32_t MatchValue; /** Match value */
-} TIM_MATCHCFG_Type;
-
-/** @brief Capture Input configuration structure */
-typedef struct {
- uint8_t CaptureChannel; /**< Capture channel, should be in range
- from 0..1 */
- uint8_t RisingEdge; /**< caption rising edge, should be:
- - ENABLE: Enable rising edge.
- - DISABLE: Disable this function.
- */
- uint8_t FallingEdge; /**< caption falling edge, should be:
- - ENABLE: Enable falling edge.
- - DISABLE: Disable this function.
- */
- uint8_t IntOnCaption; /**< Interrupt On caption, should be:
- - ENABLE: Enable interrupt function.
- - DISABLE: Disable this function.
- */
-
-} TIM_CAPTURECFG_Type;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup TIM_Public_Functions Timer Public Functions
- * @{
- */
-/* Init/DeInit TIM functions -----------*/
-void TIM_Init(LPC_TIM_TypeDef *TIMx, TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct);
-void TIM_DeInit(LPC_TIM_TypeDef *TIMx);
-
-/* TIM interrupt functions -------------*/
-void TIM_ClearIntPending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag);
-void TIM_ClearIntCapturePending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag);
-FlagStatus TIM_GetIntStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag);
-FlagStatus TIM_GetIntCaptureStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag);
-
-/* TIM configuration functions --------*/
-void TIM_ConfigStructInit(TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct);
-void TIM_ConfigMatch(LPC_TIM_TypeDef *TIMx, TIM_MATCHCFG_Type *TIM_MatchConfigStruct);
-void TIM_UpdateMatchValue(LPC_TIM_TypeDef *TIMx,uint8_t MatchChannel, uint32_t MatchValue);
-void TIM_ConfigCapture(LPC_TIM_TypeDef *TIMx, TIM_CAPTURECFG_Type *TIM_CaptureConfigStruct);
-void TIM_Cmd(LPC_TIM_TypeDef *TIMx, FunctionalState NewState);
-
-uint32_t TIM_GetCaptureValue(LPC_TIM_TypeDef *TIMx, TIM_COUNTER_INPUT_OPT CaptureChannel);
-void TIM_ResetCounter(LPC_TIM_TypeDef *TIMx);
-
-void TIM_Waitus(uint32_t time);
-void TIM_Waitms(uint32_t time);
-
-/**
- * @}
- */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_TIMER_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_types.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_types.h
deleted file mode 100644
index 72639dc6c5..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_types.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_types.h 2011-06-02
-*//**
-* @file lpc_types.h
-* @brief Contains the NXP ABL typedefs for C standard types.
-* It is intended to be used in ISO C conforming development
-* environments and checks for this insofar as it is possible
-* to do so.
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Type group ----------------------------------------------------------- */
-#ifndef __LPC_TYPES_H
-#define __LPC_TYPES_H
-
-/* Includes ------------------------------------------------------------------- */
-#include <stdint.h>
-
-/** @defgroup LPC_Type_Def Data Types Definitions
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup LPC_Types_Public_Types Basic Public Data Types
- * @{
- */
-
-/**
- * @brief Boolean Type definition
- */
-typedef enum {FALSE = 0, TRUE = !FALSE} Bool;
-
-/**
- * @brief Flag Status and Interrupt Flag Status type definition
- */
-typedef enum {RESET = 0, SET = !RESET} FlagStatus, IntStatus, SetState;
-#define PARAM_SETSTATE(State) ((State==RESET) || (State==SET))
-
-/**
- * @brief Functional State Definition
- */
-typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
-#define PARAM_FUNCTIONALSTATE(State) ((State==DISABLE) || (State==ENABLE))
-
-/**
- * @ Status type definition
- */
-typedef enum {ERROR = 0, SUCCESS = !ERROR} Status;
-
-
-/**
- * Read/Write transfer type mode (Block or non-block)
- */
-typedef enum
-{
- NONE_BLOCKING = 0, /**< None Blocking type */
- BLOCKING, /**< Blocking type */
-} TRANSFER_BLOCK_Type;
-
-
-/** Pointer to Function returning Void (any number of parameters) */
-typedef void (*PFV)();
-
-/** Pointer to Function returning int32_t (any number of parameters) */
-typedef int32_t(*PFI)();
-
-/**
- * @}
- */
-
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup LPC_Types_Public_Macros Basic Public Macros
- * @{
- */
-
-/** _BIT(n) sets the bit at position "n"
- * _BIT(n) is intended to be used in "OR" and "AND" expressions:
- * e.g., "(_BIT(3) | _BIT(7))".
- */
-#undef _BIT
-/** Set bit macro */
-#define _BIT(n) (1<<n)
-
-/** _SBF(f,v) sets the bit field starting at position "f" to value "v".
- * _SBF(f,v) is intended to be used in "OR" and "AND" expressions:
- * e.g., "((_SBF(5,7) | _SBF(12,0xF)) & 0xFFFF)"
- */
-#undef _SBF
-/* Set bit field macro */
-#define _SBF(f,v) (v<<f)
-
-/* _BITMASK constructs a symbol with 'field_width' least significant
- * bits set.
- * e.g., _BITMASK(5) constructs '0x1F', _BITMASK(16) == 0xFFFF
- * The symbol is intended to be used to limit the bit field width
- * thusly:
- * <a_register> = (any_expression) & _BITMASK(x), where 0 < x <= 32.
- * If "any_expression" results in a value that is larger than can be
- * contained in 'x' bits, the bits above 'x - 1' are masked off. When
- * used with the _SBF example above, the example would be written:
- * a_reg = ((_SBF(5,7) | _SBF(12,0xF)) & _BITMASK(16))
- * This ensures that the value written to a_reg is no wider than
- * 16 bits, and makes the code easier to read and understand.
- */
-#undef _BITMASK
-/* Bitmask creation macro */
-#define _BITMASK(field_width) ( _BIT(field_width) - 1)
-
-/* NULL pointer */
-#ifndef NULL
-#define NULL ((void*) 0)
-#endif
-
-/* Number of elements in an array */
-#define NELEMENTS(array) (sizeof (array) / sizeof (array[0]))
-
-/* Static data/function define */
-#define STATIC static
-/* External data/function define */
-#define EXTERN extern
-
-#if !defined(MAX)
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-#if !defined(MIN)
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-
-/**
- * @}
- */
-
-
-/* Old Type Definition compatibility ------------------------------------------ */
-/** @addtogroup LPC_Types_Public_Types LPC_Types Public Types
- * @{
- */
-
-/** SMA type for character type */
-typedef char CHAR;
-
-/** SMA type for 8 bit unsigned value */
-typedef uint8_t UNS_8;
-
-/** SMA type for 8 bit signed value */
-typedef int8_t INT_8;
-
-/** SMA type for 16 bit unsigned value */
-typedef uint16_t UNS_16;
-
-/** SMA type for 16 bit signed value */
-typedef int16_t INT_16;
-
-/** SMA type for 32 bit unsigned value */
-typedef uint32_t UNS_32;
-
-/** SMA type for 32 bit signed value */
-typedef int32_t INT_32;
-
-/** SMA type for 64 bit signed value */
-typedef int64_t INT_64;
-
-/** SMA type for 64 bit unsigned value */
-typedef uint64_t UNS_64;
-
-/** 32 bit boolean type */
-typedef Bool BOOL_32;
-
-/** 16 bit boolean type */
-typedef Bool BOOL_16;
-
-/** 8 bit boolean type */
-typedef Bool BOOL_8;
-
-/**
- * @}
- */
-
-
-#endif /* __LPC_TYPES_H */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_uart.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_uart.h
deleted file mode 100644
index f54f08dc1c..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_uart.h
+++ /dev/null
@@ -1,710 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_uart.h 2011-06-02
-*//**
-* @file lpc_uart.h
-* @brief Contains all macro definitions and function prototypes
-* support for UART firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup UART UART (Universal Asynchronous Receiver/Transmitter)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_UART_H_
-#define __LPC_UART_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Public Macros -------------------------------------------------------------- */
-/** @defgroup UART_Public_Macros UART Public Macros
- * @{
- */
-
-/** UART time-out definitions in case of using Read() and Write function
- * with Blocking Flag mode
- */
-#define UART_BLOCKING_TIMEOUT (0xFFFFFFFFUL)
-
-/**
- * @}
- */
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup UART_Private_Macros UART Private Macros
- * @{
- */
-
-/* Accepted Error baud rate value (in percent unit) */
-#define UART_ACCEPTED_BAUDRATE_ERROR (3) /*!< Acceptable UART baudrate error */
-
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/*********************************************************************//**
- * Macro defines for Macro defines for UARTn Receiver Buffer Register
- **********************************************************************/
-/** UART Received Buffer mask bit (8 bits) */
-#define UART_RBR_MASKBIT ((uint8_t)0xFF)
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UARTn Transmit Holding Register
- **********************************************************************/
-/** UART Transmit Holding mask bit (8 bits) */
-#define UART_THR_MASKBIT ((uint8_t)0xFF)
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UARTn Divisor Latch LSB register
- **********************************************************************/
-/** Macro for loading least significant halfs of divisors */
-#define UART_LOAD_DLL(div) ((div) & 0xFF)
-/** Divisor latch LSB bit mask */
-#define UART_DLL_MASKBIT ((uint8_t)0xFF)
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UARTn Divisor Latch MSB register
- **********************************************************************/
-/** Divisor latch MSB bit mask */
-#define UART_DLM_MASKBIT ((uint8_t)0xFF)
-/** Macro for loading most significant halfs of divisors */
-#define UART_LOAD_DLM(div) (((div) >> 8) & 0xFF)
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART interrupt enable register
- **********************************************************************/
-/** RBR Interrupt enable*/
-#define UART_IER_RBRINT_EN ((uint32_t)(1<<0))
-/** THR Interrupt enable*/
-#define UART_IER_THREINT_EN ((uint32_t)(1<<1))
-/** RX line status interrupt enable*/
-#define UART_IER_RLSINT_EN ((uint32_t)(1<<2))
-/** Modem status interrupt enable */
-#define UART1_IER_MSINT_EN ((uint32_t)(1<<3))
-/** CTS1 signal transition interrupt enable */
-#define UART1_IER_CTSINT_EN ((uint32_t)(1<<7))
-/** Enables the end of auto-baud interrupt */
-#define UART_IER_ABEOINT_EN ((uint32_t)(1<<8))
-/** Enables the auto-baud time-out interrupt */
-#define UART_IER_ABTOINT_EN ((uint32_t)(1<<9))
-/** UART interrupt enable register bit mask */
-#define UART_IER_BITMASK ((uint32_t)(0x307))
-/** UART1 interrupt enable register bit mask */
-#define UART1_IER_BITMASK ((uint32_t)(0x38F))
-
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART interrupt identification register
- **********************************************************************/
-/** Interrupt Status - Active low */
-#define UART_IIR_INTSTAT_PEND ((uint32_t)(1<<0))
-/** Interrupt identification: Receive line status*/
-#define UART_IIR_INTID_RLS ((uint32_t)(3<<1))
-/** Interrupt identification: Receive data available*/
-#define UART_IIR_INTID_RDA ((uint32_t)(2<<1))
-/** Interrupt identification: Character time-out indicator*/
-#define UART_IIR_INTID_CTI ((uint32_t)(6<<1))
-/** Interrupt identification: THRE interrupt*/
-#define UART_IIR_INTID_THRE ((uint32_t)(1<<1))
-/** Interrupt identification: Modem interrupt*/
-#define UART1_IIR_INTID_MODEM ((uint32_t)(0<<1))
-/** Interrupt identification: Interrupt ID mask */
-#define UART_IIR_INTID_MASK ((uint32_t)(7<<1))
-/** These bits are equivalent to UnFCR[0] */
-#define UART_IIR_FIFO_EN ((uint32_t)(3<<6))
-/** End of auto-baud interrupt */
-#define UART_IIR_ABEO_INT ((uint32_t)(1<<8))
-/** Auto-baud time-out interrupt */
-#define UART_IIR_ABTO_INT ((uint32_t)(1<<9))
-/** UART interrupt identification register bit mask */
-#define UART_IIR_BITMASK ((uint32_t)(0x3CF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART FIFO control register
- **********************************************************************/
-/** UART FIFO enable */
-#define UART_FCR_FIFO_EN ((uint8_t)(1<<0))
-/** UART FIFO RX reset */
-#define UART_FCR_RX_RS ((uint8_t)(1<<1))
-/** UART FIFO TX reset */
-#define UART_FCR_TX_RS ((uint8_t)(1<<2))
-/** UART DMA mode selection */
-#define UART_FCR_DMAMODE_SEL ((uint8_t)(1<<3))
-/** UART FIFO trigger level 0: 1 character */
-#define UART_FCR_TRG_LEV0 ((uint8_t)(0))
-/** UART FIFO trigger level 1: 4 character */
-#define UART_FCR_TRG_LEV1 ((uint8_t)(1<<6))
-/** UART FIFO trigger level 2: 8 character */
-#define UART_FCR_TRG_LEV2 ((uint8_t)(2<<6))
-/** UART FIFO trigger level 3: 14 character */
-#define UART_FCR_TRG_LEV3 ((uint8_t)(3<<6))
-/** UART FIFO control bit mask */
-#define UART_FCR_BITMASK ((uint8_t)(0xCF))
-
-#define UART_TX_FIFO_SIZE (16)
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART line control register
- **********************************************************************/
-/** UART 5 bit data mode */
-#define UART_LCR_WLEN5 ((uint8_t)(0))
-/** UART 6 bit data mode */
-#define UART_LCR_WLEN6 ((uint8_t)(1<<0))
-/** UART 7 bit data mode */
-#define UART_LCR_WLEN7 ((uint8_t)(2<<0))
-/** UART 8 bit data mode */
-#define UART_LCR_WLEN8 ((uint8_t)(3<<0))
-/** UART Two Stop Bits Select */
-#define UART_LCR_STOPBIT_SEL ((uint8_t)(1<<2))
-/** UART Parity Enable */
-#define UART_LCR_PARITY_EN ((uint8_t)(1<<3))
-/** UART Odd Parity Select */
-#define UART_LCR_PARITY_ODD ((uint8_t)(0))
-/** UART Even Parity Select */
-#define UART_LCR_PARITY_EVEN ((uint8_t)(1<<4))
-/** UART force 1 stick parity */
-#define UART_LCR_PARITY_F_1 ((uint8_t)(2<<4))
-/** UART force 0 stick parity */
-#define UART_LCR_PARITY_F_0 ((uint8_t)(3<<4))
-/** UART Transmission Break enable */
-#define UART_LCR_BREAK_EN ((uint8_t)(1<<6))
-/** UART Divisor Latches Access bit enable */
-#define UART_LCR_DLAB_EN ((uint8_t)(1<<7))
-/** UART line control bit mask */
-#define UART_LCR_BITMASK ((uint8_t)(0xFF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART1 Modem Control Register
- **********************************************************************/
-/** Source for modem output pin DTR */
-#define UART1_MCR_DTR_CTRL ((uint8_t)(1<<0))
-/** Source for modem output pin RTS */
-#define UART1_MCR_RTS_CTRL ((uint8_t)(1<<1))
-/** Loop back mode select */
-#define UART1_MCR_LOOPB_EN ((uint8_t)(1<<4))
-/** Enable Auto RTS flow-control */
-#define UART1_MCR_AUTO_RTS_EN ((uint8_t)(1<<6))
-/** Enable Auto CTS flow-control */
-#define UART1_MCR_AUTO_CTS_EN ((uint8_t)(1<<7))
-/** UART1 bit mask value */
-#define UART1_MCR_BITMASK ((uint8_t)(0x0F3))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART line status register
- **********************************************************************/
-/** Line status register: Receive data ready*/
-#define UART_LSR_RDR ((uint8_t)(1<<0))
-/** Line status register: Overrun error*/
-#define UART_LSR_OE ((uint8_t)(1<<1))
-/** Line status register: Parity error*/
-#define UART_LSR_PE ((uint8_t)(1<<2))
-/** Line status register: Framing error*/
-#define UART_LSR_FE ((uint8_t)(1<<3))
-/** Line status register: Break interrupt*/
-#define UART_LSR_BI ((uint8_t)(1<<4))
-/** Line status register: Transmit holding register empty*/
-#define UART_LSR_THRE ((uint8_t)(1<<5))
-/** Line status register: Transmitter empty*/
-#define UART_LSR_TEMT ((uint8_t)(1<<6))
-/** Error in RX FIFO*/
-#define UART_LSR_RXFE ((uint8_t)(1<<7))
-/** UART Line status bit mask */
-#define UART_LSR_BITMASK ((uint8_t)(0xFF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART Modem (UART1 only) status register
- **********************************************************************/
-/** Set upon state change of input CTS */
-#define UART1_MSR_DELTA_CTS ((uint8_t)(1<<0))
-/** Set upon state change of input DSR */
-#define UART1_MSR_DELTA_DSR ((uint8_t)(1<<1))
-/** Set upon low to high transition of input RI */
-#define UART1_MSR_LO2HI_RI ((uint8_t)(1<<2))
-/** Set upon state change of input DCD */
-#define UART1_MSR_DELTA_DCD ((uint8_t)(1<<3))
-/** Clear To Send State */
-#define UART1_MSR_CTS ((uint8_t)(1<<4))
-/** Data Set Ready State */
-#define UART1_MSR_DSR ((uint8_t)(1<<5))
-/** Ring Indicator State */
-#define UART1_MSR_RI ((uint8_t)(1<<6))
-/** Data Carrier Detect State */
-#define UART1_MSR_DCD ((uint8_t)(1<<7))
-/** MSR register bit-mask value */
-#define UART1_MSR_BITMASK ((uint8_t)(0xFF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART Scratch Pad Register
- **********************************************************************/
-/** UART Scratch Pad bit mask */
-#define UART_SCR_BIMASK ((uint8_t)(0xFF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART Auto baudrate control register
- **********************************************************************/
-/** UART Auto-baud start */
-#define UART_ACR_START ((uint32_t)(1<<0))
-/** UART Auto baudrate Mode 1 */
-#define UART_ACR_MODE ((uint32_t)(1<<1))
-/** UART Auto baudrate restart */
-#define UART_ACR_AUTO_RESTART ((uint32_t)(1<<2))
-/** UART End of auto-baud interrupt clear */
-#define UART_ACR_ABEOINT_CLR ((uint32_t)(1<<8))
-/** UART Auto-baud time-out interrupt clear */
-#define UART_ACR_ABTOINT_CLR ((uint32_t)(1<<9))
-/** UART Auto Baudrate register bit mask */
-#define UART_ACR_BITMASK ((uint32_t)(0x307))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART IrDA control register
- **********************************************************************/
-/** IrDA mode enable */
-#define UART_ICR_IRDAEN ((uint32_t)(1<<0))
-/** IrDA serial input inverted */
-#define UART_ICR_IRDAINV ((uint32_t)(1<<1))
-/** IrDA fixed pulse width mode */
-#define UART_ICR_FIXPULSE_EN ((uint32_t)(1<<2))
-/** PulseDiv - Configures the pulse when FixPulseEn = 1 */
-#define UART_ICR_PULSEDIV(n) ((uint32_t)((n&0x07)<<3))
-/** UART IRDA bit mask */
-#define UART_ICR_BITMASK ((uint32_t)(0x3F))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART Fractional divider register
- **********************************************************************/
-/** Baud-rate generation pre-scaler divisor */
-#define UART_FDR_DIVADDVAL(n) ((uint32_t)(n&0x0F))
-/** Baud-rate pre-scaler multiplier value */
-#define UART_FDR_MULVAL(n) ((uint32_t)((n<<4)&0xF0))
-/** UART Fractional Divider register bit mask */
-#define UART_FDR_BITMASK ((uint32_t)(0xFF))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART Tx Enable register
- **********************************************************************/
-/** Transmit enable bit */
-#define UART_TER_TXEN ((uint8_t)(1<<7))
-/** UART Transmit Enable Register bit mask */
-#define UART_TER_BITMASK ((uint8_t)(0x80))
-/** Transmit enable bit on UART4 */
-#define UART4_TER_TXEN ((uint8_t)(1<<0))
-/** UART4 Transmit Enable Register bit mask */
-#define UART4_TER_BITMASK ((uint8_t)(0x01))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART RS485 Control register
- **********************************************************************/
-/** RS-485/EIA-485 Normal Multi-drop Mode (NMM) is disabled */
-#define UART_RS485CTRL_NMM_EN ((uint32_t)(1<<0))
-/** The receiver is disabled */
-#define UART_RS485CTRL_RX_DIS ((uint32_t)(1<<1))
-/** Auto Address Detect (AAD) is enabled */
-#define UART_RS485CTRL_AADEN ((uint32_t)(1<<2))
-/** If direction control is enabled (bit DCTRL = 1), pin DTR is used for direction control */
-#define UART_RS485CTRL_SEL_DTR ((uint32_t)(1<<3))
-/** Enable Auto Direction Control */
-#define UART_RS485CTRL_DCTRL_EN ((uint32_t)(1<<4))
-/** This bit reverses the polarity of the direction control signal on the RTS (or DTR) pin.
-The direction control pin will be driven to logic "1" when the transmitter has data to be sent */
-#define UART_RS485CTRL_OINV_1 ((uint32_t)(1<<5))
-
-/** RS485 control bit-mask value */
-#define UART_RS485CTRL_BITMASK ((uint32_t)(0x3F))
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART RS-485 Address Match register
- **********************************************************************/
-#define UART_RS485ADRMATCH_BITMASK ((uint8_t)(0xFF)) /**< Bit mask value */
-
-/*********************************************************************//**
- * Macro defines for Macro defines for UART1 RS-485 Delay value register
- **********************************************************************/
-/* Macro defines for UART1 RS-485 Delay value register */
-#define UART_RS485DLY_BITMASK ((uint8_t)(0xFF)) /** Bit mask value */
-
-
-/**
- * @}
- */
-
-
-/* Public Types --------------------------------------------------------------- */
-/** @defgroup UART_Public_Types UART Public Types
- * @{
- */
-
-/**
- * @brief UART ID
- */
- typedef enum
-{
- UART_0 = 0,
- UART_1,
- UART_2,
- UART_3,
- UART_4,
-} UART_ID_Type;
-
-/**
- * @brief UART Databit type definitions
- */
-typedef enum {
- UART_DATABIT_5 = 0, /*!< UART 5 bit data mode */
- UART_DATABIT_6, /*!< UART 6 bit data mode */
- UART_DATABIT_7, /*!< UART 7 bit data mode */
- UART_DATABIT_8 /*!< UART 8 bit data mode */
-} UART_DATABIT_Type;
-
-/**
- * @brief UART Stop bit type definitions
- */
-typedef enum {
- UART_STOPBIT_1 = (0), /*!< UART 1 Stop Bits Select */
- UART_STOPBIT_2, /*!< UART Two Stop Bits Select */
-} UART_STOPBIT_Type;
-
-/**
- * @brief UART Parity type definitions
- */
-typedef enum {
- UART_PARITY_NONE = 0, /*!< No parity */
- UART_PARITY_ODD, /*!< Odd parity */
- UART_PARITY_EVEN, /*!< Even parity */
- UART_PARITY_SP_1, /*!< Forced "1" stick parity */
- UART_PARITY_SP_0 /*!< Forced "0" stick parity */
-} UART_PARITY_Type;
-
-/**
- * @brief FIFO Level type definitions
- */
-typedef enum {
- UART_FIFO_TRGLEV0 = 0, /*!< UART FIFO trigger level 0: 1 character */
- UART_FIFO_TRGLEV1, /*!< UART FIFO trigger level 1: 4 character */
- UART_FIFO_TRGLEV2, /*!< UART FIFO trigger level 2: 8 character */
- UART_FIFO_TRGLEV3 /*!< UART FIFO trigger level 3: 14 character */
-} UART_FITO_LEVEL_Type;
-
-/********************************************************************//**
-* @brief UART Interrupt Type definitions
-**********************************************************************/
-typedef enum {
- UART_INTCFG_RBR = 0, /*!< RBR Interrupt enable*/
- UART_INTCFG_THRE, /*!< THR Interrupt enable*/
- UART_INTCFG_RLS, /*!< RX line status interrupt enable*/
- UART_INTCFG_MS, /*!< Modem status interrupt enable (UART1 only) */
- UART_INTCFG_CTS, /*!< CTS1 signal transition interrupt enable (UART1 only) */
- UART_INTCFG_ABEO, /*!< Enables the end of auto-baud interrupt */
- UART_INTCFG_ABTO /*!< Enables the auto-baud time-out interrupt */
-} UART_INT_Type;
-
-/**
- * @brief UART Line Status Type definition
- */
-typedef enum {
- UART_LINESTAT_RDR = UART_LSR_RDR, /*!<Line status register: Receive data ready*/
- UART_LINESTAT_OE = UART_LSR_OE, /*!<Line status register: Overrun error*/
- UART_LINESTAT_PE = UART_LSR_PE, /*!<Line status register: Parity error*/
- UART_LINESTAT_FE = UART_LSR_FE, /*!<Line status register: Framing error*/
- UART_LINESTAT_BI = UART_LSR_BI, /*!<Line status register: Break interrupt*/
- UART_LINESTAT_THRE = UART_LSR_THRE, /*!<Line status register: Transmit holding register empty*/
- UART_LINESTAT_TEMT = UART_LSR_TEMT, /*!<Line status register: Transmitter empty*/
- UART_LINESTAT_RXFE = UART_LSR_RXFE /*!<Error in RX FIFO*/
-} UART_LS_Type;
-
-/**
- * @brief UART Auto-baudrate mode type definition
- */
-typedef enum {
- UART_AUTOBAUD_MODE0 = 0, /**< UART Auto baudrate Mode 0 */
- UART_AUTOBAUD_MODE1, /**< UART Auto baudrate Mode 1 */
-} UART_AB_MODE_Type;
-
-/**
- * @brief Auto Baudrate mode configuration type definition
- */
-typedef struct {
- UART_AB_MODE_Type ABMode; /**< Autobaudrate mode */
- FunctionalState AutoRestart; /**< Auto Restart state */
-} UART_AB_CFG_Type;
-
-/**
- * @brief UART End of Auto-baudrate type definition
- */
-typedef enum {
- UART_AUTOBAUD_INTSTAT_ABEO = UART_IIR_ABEO_INT, /**< UART End of auto-baud interrupt */
- UART_AUTOBAUD_INTSTAT_ABTO = UART_IIR_ABTO_INT /**< UART Auto-baud time-out interrupt */
-}UART_ABEO_Type;
-
-/**
- * UART IrDA Control type Definition
- */
-typedef enum
-{
- /** Pulse width = 2 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV2 = 0,
-
- /** Pulse width = 4 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV4,
-
- /** Pulse width = 8 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV8,
-
- /** Pulse width = 16 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV16,
-
- /** Pulse width = 32 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV32,
-
- /**< Pulse width = 64 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV64,
-
- /**< Pulse width = 128 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV128,
-
- /**< Pulse width = 256 * Tpclk
- - Configures the pulse when FixPulseEn = 1 */
- UART_IrDA_PULSEDIV256
-} UART_IrDA_PULSE_Type;
-
-/********************************************************************//**
-* @brief UART1 Full modem - Signal states definition
-**********************************************************************/
-typedef enum {
- INACTIVE = 0, /* In-active state */
- ACTIVE = !INACTIVE /* Active state */
-}UART1_SignalState;
-
-/**
- * @brief UART modem status type definition
- */
-typedef enum {
- UART1_MODEM_STAT_DELTA_CTS = UART1_MSR_DELTA_CTS, /*!< Set upon state change of input CTS */
- UART1_MODEM_STAT_DELTA_DSR = UART1_MSR_DELTA_DSR, /*!< Set upon state change of input DSR */
- UART1_MODEM_STAT_LO2HI_RI = UART1_MSR_LO2HI_RI, /*!< Set upon low to high transition of input RI */
- UART1_MODEM_STAT_DELTA_DCD = UART1_MSR_DELTA_DCD, /*!< Set upon state change of input DCD */
- UART1_MODEM_STAT_CTS = UART1_MSR_CTS, /*!< Clear To Send State */
- UART1_MODEM_STAT_DSR = UART1_MSR_DSR, /*!< Data Set Ready State */
- UART1_MODEM_STAT_RI = UART1_MSR_RI, /*!< Ring Indicator State */
- UART1_MODEM_STAT_DCD = UART1_MSR_DCD /*!< Data Carrier Detect State */
-} UART_MODEM_STAT_type;
-
-/**
- * @brief Modem output pin type definition
- */
-typedef enum {
- UART1_MODEM_PIN_DTR = 0, /*!< Source for modem output pin DTR */
- UART1_MODEM_PIN_RTS /*!< Source for modem output pin RTS */
-} UART_MODEM_PIN_Type;
-
-/**
- * @brief UART Modem mode type definition
- */
-typedef enum {
- UART1_MODEM_MODE_LOOPBACK = 0, /*!< Loop back mode select */
- UART1_MODEM_MODE_AUTO_RTS, /*!< Enable Auto RTS flow-control */
- UART1_MODEM_MODE_AUTO_CTS /*!< Enable Auto CTS flow-control */
-} UART_MODEM_MODE_Type;
-
-/**
- * @brief UART Direction Control Pin type definition
- */
-typedef enum {
- UART_RS485_DIRCTRL_RTS = 0, /**< Pin RTS is used for direction control */
- UART_RS485_DIRCTRL_DTR /**< Pin DTR is used for direction control */
-} UART_RS485_DIRCTRL_PIN_Type;
-
-/********************************************************************//**
-* @brief UART Configuration Structure definition
-**********************************************************************/
-typedef struct {
- uint32_t Baud_rate; /**< UART baud rate */
- UART_PARITY_Type Parity; /**< Parity selection, should be:
- - UART_PARITY_NONE: No parity
- - UART_PARITY_ODD: Odd parity
- - UART_PARITY_EVEN: Even parity
- - UART_PARITY_SP_1: Forced "1" stick parity
- - UART_PARITY_SP_0: Forced "0" stick parity
- */
- UART_DATABIT_Type Databits; /**< Number of data bits, should be:
- - UART_DATABIT_5: UART 5 bit data mode
- - UART_DATABIT_6: UART 6 bit data mode
- - UART_DATABIT_7: UART 7 bit data mode
- - UART_DATABIT_8: UART 8 bit data mode
- */
- UART_STOPBIT_Type Stopbits; /**< Number of stop bits, should be:
- - UART_STOPBIT_1: UART 1 Stop Bits Select
- - UART_STOPBIT_2: UART 2 Stop Bits Select
- */
-} UART_CFG_Type;
-
-/********************************************************************//**
-* @brief UART FIFO Configuration Structure definition
-**********************************************************************/
-
-typedef struct {
- FunctionalState FIFO_ResetRxBuf; /**< Reset Rx FIFO command state , should be:
- - ENABLE: Reset Rx FIFO in UART
- - DISABLE: Do not reset Rx FIFO in UART
- */
- FunctionalState FIFO_ResetTxBuf; /**< Reset Tx FIFO command state , should be:
- - ENABLE: Reset Tx FIFO in UART
- - DISABLE: Do not reset Tx FIFO in UART
- */
- FunctionalState FIFO_DMAMode; /**< DMA mode, should be:
- - ENABLE: Enable DMA mode in UART
- - DISABLE: Disable DMA mode in UART
- */
- UART_FITO_LEVEL_Type FIFO_Level; /**< Rx FIFO trigger level, should be:
- - UART_FIFO_TRGLEV0: UART FIFO trigger level 0: 1 character
- - UART_FIFO_TRGLEV1: UART FIFO trigger level 1: 4 character
- - UART_FIFO_TRGLEV2: UART FIFO trigger level 2: 8 character
- - UART_FIFO_TRGLEV3: UART FIFO trigger level 3: 14 character
- */
-} UART_FIFO_CFG_Type;
-
-/********************************************************************//**
-* @brief UART1 Full modem - RS485 Control configuration type
-**********************************************************************/
-typedef struct {
- FunctionalState NormalMultiDropMode_State; /*!< Normal MultiDrop mode State:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function. */
- FunctionalState Rx_State; /*!< Receiver State:
- - ENABLE: Enable Receiver.
- - DISABLE: Disable Receiver. */
- FunctionalState AutoAddrDetect_State; /*!< Auto Address Detect mode state:
- - ENABLE: ENABLE this function.
- - DISABLE: Disable this function. */
- FunctionalState AutoDirCtrl_State; /*!< Auto Direction Control State:
- - ENABLE: Enable this function.
- - DISABLE: Disable this function. */
- UART_RS485_DIRCTRL_PIN_Type DirCtrlPin; /*!< If direction control is enabled, state:
- - UART1_RS485_DIRCTRL_RTS:
- pin RTS is used for direction control.
- - UART1_RS485_DIRCTRL_DTR:
- pin DTR is used for direction control. */
- SetState DirCtrlPol_Level; /*!< Polarity of the direction control signal on
- the RTS (or DTR) pin:
- - RESET: The direction control pin will be driven
- to logic "0" when the transmitter has data to be sent.
- - SET: The direction control pin will be driven
- to logic "1" when the transmitter has data to be sent. */
- uint8_t MatchAddrValue; /*!< address match value for RS-485/EIA-485 mode, 8-bit long */
- uint8_t DelayValue; /*!< delay time is in periods of the baud clock, 8-bit long */
-} UART1_RS485_CTRLCFG_Type;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup UART_Public_Functions UART Public Functions
- * @{
- */
-/* UART Init/DeInit functions --------------------------------------------------*/
-void UART_Init(UART_ID_Type UartID, UART_CFG_Type *UART_ConfigStruct);
-void UART_DeInit(UART_ID_Type UartID);
-void UART_ConfigStructInit(UART_CFG_Type *UART_InitStruct);
-
-/* UART Send/Receive functions -------------------------------------------------*/
-void UART_SendByte(UART_ID_Type UartID, uint8_t Data);
-uint8_t UART_ReceiveByte(UART_ID_Type UartID);
-uint32_t UART_Send(UART_ID_Type UartID, uint8_t *txbuf,
- uint32_t buflen, TRANSFER_BLOCK_Type flag);
-uint32_t UART_Receive(UART_ID_Type UartID, uint8_t *rxbuf, \
- uint32_t buflen, TRANSFER_BLOCK_Type flag);
-
-/* UART FIFO functions ----------------------------------------------------------*/
-void UART_FIFOConfig(UART_ID_Type UartID, UART_FIFO_CFG_Type *FIFOCfg);
-void UART_FIFOConfigStructInit(UART_FIFO_CFG_Type *UART_FIFOInitStruct);
-
-/* UART get information functions -----------------------------------------------*/
-uint32_t UART_GetIntId(UART_ID_Type UartID);
-uint8_t UART_GetLineStatus(UART_ID_Type UartID);
-
-/* UART operate functions -------------------------------------------------------*/
-void UART_IntConfig(UART_ID_Type UartID, UART_INT_Type UARTIntCfg, \
- FunctionalState NewState);
-void UART_TxCmd(UART_ID_Type UartID, FunctionalState NewState);
-FlagStatus UART_CheckBusy(UART_ID_Type UartID);
-void UART_ForceBreak(UART_ID_Type UartID);
-
-/* UART Auto-baud functions -----------------------------------------------------*/
-void UART_ABClearIntPending(UART_ID_Type UartID, UART_ABEO_Type ABIntType);
-void UART_ABCmd(UART_ID_Type UartID, UART_AB_CFG_Type *ABConfigStruct, \
- FunctionalState NewState);
-
-/* UART1 FullModem functions ----------------------------------------------------*/
-void UART_FullModemForcePinState(UART_ID_Type UartID, UART_MODEM_PIN_Type Pin, \
- UART1_SignalState NewState);
-void UART_FullModemConfigMode(UART_ID_Type UartID, UART_MODEM_MODE_Type Mode, \
- FunctionalState NewState);
-uint8_t UART_FullModemGetStatus(UART_ID_Type UartID);
-
-/* UART RS485 functions ----------------------------------------------------------*/
-void UART_RS485Config(UART_ID_Type UartID,
- UART1_RS485_CTRLCFG_Type *RS485ConfigStruct);
-void UART_RS485ReceiverCmd(UART_ID_Type UartID, FunctionalState NewState);
-void UART_RS485SendSlvAddr(UART_ID_Type UartID, uint8_t SlvAddr);
-uint32_t UART_RS485SendData(UART_ID_Type UartID, uint8_t *pData, uint32_t size);
-
-/* UART IrDA functions-------------------------------------------------------------*/
-void UART_IrDAInvtInputCmd(UART_ID_Type UartID, FunctionalState NewState);
-void UART_IrDACmd(UART_ID_Type UartID, FunctionalState NewState);
-void UART_IrDAPulseDivConfig(UART_ID_Type UartID, UART_IrDA_PULSE_Type PulseDiv);
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __LPC_UART_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/include/lpc_wwdt.h b/bsp/lpc408x/Libraries/Drivers/include/lpc_wwdt.h
deleted file mode 100644
index 332349a026..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/include/lpc_wwdt.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_wwdt.h 2011-06-02
-*//**
-* @file lpc_wwdt.h
-* @brief Contains all macro definitions and function prototypes
-* support forWindow Watchdog Timer firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @defgroup WWDT WWDT (Windowed Watchdog Timer)
- * @ingroup LPC_CMSIS_FwLib_Drivers
- * @{
- */
-
-#ifndef __LPC_WWDT_H_
-#define __LPC_WWDT_H_
-
-/* Includes ------------------------------------------------------------------- */
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/** @defgroup WDT_Private_Macros WDT Private Macros
- * @{
- */
-
-
-// time is calculated by usec
-#define WDT_GET_FROM_USEC(time) (time/((WWDT_US_INDEX * 4)/WDT_OSC))
-#define WDT_GET_USEC(counter) (counter * ((WWDT_US_INDEX * 4)/WDT_OSC))
-
-
-#define WWDT_FUNC_OK (0)
-#define WWDT_FUNC_BAD_PARAM (-1)
-
-
-/* --------------------- BIT DEFINITIONS -------------------------------------- */
-/** WWDT interrupt enable bit */
-#define WWDT_WDMOD_WDEN ((uint32_t)(1<<0))
-/** WWDT interrupt enable bit */
-#define WWDT_WDMOD_WDRESET ((uint32_t)(1<<1))
-/** WWDT time out flag bit */
-#define WWDT_WDMOD_WDTOF ((uint32_t)(1<<2))
-/** WDT Time Out flag bit */
-#define WWDT_WDMOD_WDINT ((uint32_t)(1<<3))
-/** WWDT Protect flag bit */
-#define WWDT_WDMOD_WDPROTECT ((uint32_t)(1<<4))
-
-/** Define divider index for microsecond ( us ) */
-#define WWDT_US_INDEX ((uint32_t)(1000000))
-
-/** WWDT Time out minimum value */
-#define WWDT_TIMEOUT_MIN ((uint32_t)(0xFF))
-/** WWDT Time out maximum value */
-#define WWDT_TIMEOUT_MAX ((uint32_t)(0x00FFFFFF))
-
-/** WWDT Warning minimum value */
-#define WWDT_WARNINT_MIN ((uint32_t)(0xFF))
-/** WWDT Warning maximum value */
-#define WWDT_WARNINT_MAX ((uint32_t)(0x000003FF))
-
-/** WWDT Windowed minimum value */
-#define WWDT_WINDOW_MIN ((uint32_t)(0xFF))
-/** WWDT Windowed minimum value */
-#define WWDT_WINDOW_MAX ((uint32_t)(0x00FFFFFF))
-
-/** WWDT timer constant register mask */
-#define WWDT_WDTC_MASK ((uint32_t)(0x00FFFFFF))
-/** WWDT warning value register mask */
-#define WWDT_WDWARNINT_MASK ((uint32_t)(0x000003FF))
-/** WWDT feed sequence register mask */
-#define WWDT_WDFEED_MASK ((uint32_t)(0x000000FF))
-
-/** WWDT flag */
-#define WWDT_WARNINT_FLAG ((uint8_t)(0))
-#define WWDT_TIMEOUT_FLAG ((uint8_t)(1))
-
-/** WWDT mode definitions */
-#define WWDT_PROTECT_MODE ((uint8_t)(0))
-#define WWDT_RESET_MODE ((uint8_t)(1))
-
-
-/* WWDT Timer value definition (us) */
-#define WWDT_TIMEOUT_USEC_MIN ((uint32_t)(WDT_GET_USEC(WWDT_TIMEOUT_MIN)))//microseconds
-#define WWDT_TIMEOUT_USEC_MAX ((uint32_t)(WDT_GET_USEC(WWDT_TIMEOUT_MAX)))
-
-#define WWDT_TIMEWARN_USEC_MIN ((uint32_t)(WDT_GET_USEC(WWDT_WARNINT_MIN)))
-#define WWDT_TIMEWARN_USEC_MAX ((uint32_t)(WDT_GET_USEC(WWDT_WARNINT_MAX)))
-
-#define WWDT_TIMEWINDOWED_USEC_MIN ((uint32_t)(WDT_GET_USEC(WWDT_WINDOW_MIN)))
-#define WWDT_TIMEWINDOWED_USEC_MAX ((uint32_t)(WDT_GET_USEC(WWDT_WINDOW_MAX)))
-
-
-/**
- * @}
- */
-
-/** @defgroup WDT_Public_Types WDT Public Types
- * @{
- */
-
-/**
- * @brief The field to configurate the WatchDog Timer
- */
-
-typedef struct Wdt_Config
-{
- uint8_t wdtEnable; /**< if ENABLE -> the enable bit is enabled */
- uint8_t wdtReset; /**< if ENABLE -> the Reset bit is enabled */
- uint8_t wdtProtect; /**< if ENABLE -> the Protect bit is enabled */
- uint32_t wdtTmrConst; /**< Set the constant value to timeout the WDT */
- uint32_t wdtWarningVal; /**< Set the value to warn the WDT with interrupt */
- uint32_t wdtWindowVal; /**< Set a window vaule for WDT */
-}st_Wdt_Config;
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @defgroup WDT_Public_Functions WDT Public Functions
- * @{
- */
-
-int8_t WWDT_Init(uint32_t TimeOut);
-int8_t WWDT_Start(uint32_t TimeOut);
-void WWDT_SetMode(uint8_t mode, FunctionalState NewState);
-void WWDT_SetTimerConstant(uint32_t constVal);
-void WWDT_Enable(FunctionalState NewState);
-void WWDT_Cmd(FunctionalState NewState);
-int8_t WWDT_SetWarningRaw(uint32_t warnVal);
-int8_t WWDT_SetWarning(uint32_t WarnTime);
-int8_t WWDT_SetWindowRaw(uint32_t wndVal);
-int8_t WWDT_SetWindow(uint32_t WindowedTime);
-void WWDT_UpdateTimeOut(uint32_t TimeOut);
-FlagStatus WWDT_GetStatus (uint8_t Status);
-void WWDT_ClearStatusFlag (uint8_t flag);
-void WWDT_ClrTimeOutFlag (void);
-void WWDT_FeedStdSeq (void);
-void WWDT_Feed (void);
-uint32_t WWDT_GetCurrentCount(void);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LPC_WWDT_H_ */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/lib/spifi_drv_M4.lib b/bsp/lpc408x/Libraries/Drivers/lib/spifi_drv_M4.lib
deleted file mode 100644
index 0a9c0e2e44..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/lib/spifi_drv_M4.lib
+++ /dev/null
Binary files differ
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_adc.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_adc.c
deleted file mode 100644
index 19a2a2d99f..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_adc.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_adc.c 2011-06-02
-*//**
-* @file lpc_adc.c
-* @brief Contains all functions support for ADC firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup ADC
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _ADC
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_types.h"
-#include "lpc_adc.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup ADC_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Initial for ADC
- * + Set bit PCADC
- * + Set clock for ADC
- * + Set Clock Frequency
- * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
- * @param[in] rate ADC conversion rate, should be <=200KHz
- * @return None
- **********************************************************************/
-void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t rate)
-{
- uint32_t ADCPClk, temp, tmp;
-
- // Turn on power and clock
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCADC, ENABLE);
-
- ADCx->CR = 0;
-
- //Enable PDN bit
- tmp = ADC_CR_PDN;
-
- // Set clock frequency
- ADCPClk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- /* The APB clock (PCLK_ADC0) is divided by (CLKDIV+1) to produce the clock for
- * A/D converter, which should be less than or equal to 12.4MHz.
- * A fully conversion requires 31 of these clocks.
- * ADC clock = PCLK_ADC0 / (CLKDIV + 1);
- * ADC rate = ADC clock / 31;
- */
- temp = rate * 31;
- temp = (ADCPClk * 2 + temp)/(2 * temp) - 1; //get the round value by fomular: (2*A + B)/(2*A)
- tmp |= ADC_CR_CLKDIV(temp);
-
- ADCx->CR = tmp;
-}
-
-
-/*********************************************************************//**
-* @brief Close ADC
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @return None
-**********************************************************************/
-void ADC_DeInit(LPC_ADC_TypeDef *ADCx)
-{
- if (ADCx->CR & ADC_CR_START_MASK) //need to stop START bits before DeInit
- ADCx->CR &= ~ADC_CR_START_MASK;
- // Clear SEL bits
- ADCx->CR &= ~0xFF;
-
- // Clear PDN bit
- ADCx->CR &= ~ADC_CR_PDN;
- // Turn on power and clock
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCADC, DISABLE);
-}
-
-
-/*********************************************************************//**
-* @brief Get Result conversion from A/D data register
-* @param[in] channel number which want to read back the result
-* @return Result of conversion
-*********************************************************************/
-uint32_t ADC_GetData(uint32_t channel)
-{
- uint32_t adc_value;
-
- adc_value = *(uint32_t *)((&LPC_ADC->DR[0]) + channel);
- return ADC_GDR_RESULT(adc_value);
-}
-
-/*********************************************************************//**
-* @brief Set start mode for ADC
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] start_mode Start mode choose one of modes in
-* 'ADC_START_OPT' enumeration type definition, should be:
-* - ADC_START_CONTINUOUS
-* - ADC_START_NOW
-* - ADC_START_ON_EINT0
-* - ADC_START_ON_CAP01
-* - ADC_START_ON_MAT01
-* - ADC_START_ON_MAT03
-* - ADC_START_ON_MAT10
-* - ADC_START_ON_MAT11
-* @return None
-*********************************************************************/
-void ADC_StartCmd(LPC_ADC_TypeDef *ADCx, uint8_t start_mode)
-{
- ADCx->CR &= ~ADC_CR_START_MASK;
- ADCx->CR |=ADC_CR_START_MODE_SEL((uint32_t)start_mode);
-}
-
-
-/*********************************************************************//**
-* @brief ADC Burst mode setting
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] NewState
-* - 1: Set Burst mode
-* - 0: reset Burst mode
-* @return None
-**********************************************************************/
-void ADC_BurstCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
-{
- ADCx->CR &= ~ADC_CR_BURST;
- if (NewState){
- ADCx->CR |= ADC_CR_BURST;
- }
-}
-
-/*********************************************************************//**
-* @brief Set AD conversion in power mode
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] NewState
-* - 1: AD converter is optional
-* - 0: AD Converter is in power down mode
-* @return None
-**********************************************************************/
-void ADC_PowerdownCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
-{
- ADCx->CR &= ~ADC_CR_PDN;
- if (NewState){
- ADCx->CR |= ADC_CR_PDN;
- }
-}
-
-/*********************************************************************//**
-* @brief Set Edge start configuration
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] EdgeOption is ADC_START_ON_RISING and ADC_START_ON_FALLING
-* 0:ADC_START_ON_RISING
-* 1:ADC_START_ON_FALLING
-* @return None
-**********************************************************************/
-void ADC_EdgeStartConfig(LPC_ADC_TypeDef *ADCx, uint8_t EdgeOption)
-{
- ADCx->CR &= ~ADC_CR_EDGE;
- if (EdgeOption){
- ADCx->CR |= ADC_CR_EDGE;
- }
-}
-
-/*********************************************************************//**
-* @brief ADC interrupt configuration
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] IntType: type of interrupt, should be:
-* - ADC_ADINTEN0: Interrupt channel 0
-* - ADC_ADINTEN1: Interrupt channel 1
-* ...
-* - ADC_ADINTEN7: Interrupt channel 7
-* - ADC_ADGINTEN: Individual channel/global flag done generate an interrupt
-* @param[in] NewState:
-* - SET : enable ADC interrupt
-* - RESET: disable ADC interrupt
-* @return None
-**********************************************************************/
-void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState)
-{
- ADCx->INTEN &= ~ADC_INTEN_CH(IntType);
- if (NewState){
- ADCx->INTEN |= ADC_INTEN_CH(IntType);
- }
-}
-
-/*********************************************************************//**
-* @brief Enable/Disable ADC channel number
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] Channel channel number
-* @param[in] NewState Enable or Disable
-*
-* @return None
-**********************************************************************/
-void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState)
-{
- if (NewState == ENABLE) {
- ADCx->CR |= ADC_CR_CH_SEL(Channel);
- } else {
- if (ADCx->CR & ADC_CR_START_MASK) //need to stop START bits before disable channel
- ADCx->CR &= ~ADC_CR_START_MASK;
- ADCx->CR &= ~ADC_CR_CH_SEL(Channel);
- }
-}
-
-/*********************************************************************//**
-* @brief Get ADC result
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] channel: channel number, should be 0...7
-* @return Data conversion
-**********************************************************************/
-uint16_t ADC_ChannelGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel)
-{
- uint32_t adc_value;
- adc_value = *(uint32_t *) ((&ADCx->DR[0]) + channel);
- return ADC_DR_RESULT(adc_value);
-}
-
-/*********************************************************************//**
-* @brief Get ADC Chanel status from ADC data register
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] channel: channel number, should be 0..7
-* @param[in] StatusType
-* 0:Burst status
-* 1:Done status
-* @return SET / RESET
-**********************************************************************/
-FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType)
-{
- uint32_t temp;
- temp = *(uint32_t *) ((&ADCx->DR[0]) + channel);
- if (StatusType)
- {
- temp &= ADC_DR_DONE_FLAG;
- }
- else
- {
- temp &= ADC_DR_OVERRUN_FLAG;
- }
-
- if (temp)
- {
- return SET;
- }
- else
- {
- return RESET;
- }
-
-}
-
-/*********************************************************************//**
-* @brief Get ADC Data from AD Global register
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @return Result of conversion
-**********************************************************************/
-uint32_t ADC_GlobalGetData(LPC_ADC_TypeDef *ADCx)
-{
- return ((uint32_t)(ADCx->GDR));
-}
-
-/*********************************************************************//**
-* @brief Get ADC Chanel status from AD global data register
-* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
-* @param[in] StatusType
-* 0:Burst status
-* 1:Done status
-* @return SET / RESET
-**********************************************************************/
-FlagStatus ADC_GlobalGetStatus(LPC_ADC_TypeDef *ADCx, uint32_t StatusType)
-{
- uint32_t temp;
-
- temp = ADCx->GDR;
- if (StatusType){
- temp &= ADC_DR_DONE_FLAG;
- }else{
- temp &= ADC_DR_OVERRUN_FLAG;
- }
- if (temp){
- return SET;
- }else{
- return RESET;
- }
-}
-
-/**
- * @}
- */
-#endif /*_ADC*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_bod.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_bod.c
deleted file mode 100644
index 050d12ebdf..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_bod.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_bod.c 2011-12-09
-*//**
-* @file lpc_bod.c
-* @brief Contain functions related to BOD.
-* @version 1.0
-* @date 09 December. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup BOD
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _BOD
-#include "LPC407x_8x_177x_8x.h" /* LPC407x_8x_177x_8x Peripheral Registers */
-#include "lpc_bod.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup BOD_Public_Functions
- * @{
- */
-/*********************************************************************//**
- * @brief Initialize BOD control register
- * @param[in] pConfig BOD Configuration
- * @return None
- **********************************************************************/
-void BOD_Init( BOD_Config_Type* pConfig )
-{
- /* Turn on/off BOD. */
- if(pConfig->Enabled == DISABLE)
- {
- LPC_SC->PCON |= BOD_PCON_BOGD;
- return;
- }
- LPC_SC->PCON &= ~BOD_PCON_BOGD;
-
- /* Brown-Out Reduced Power Mode */
- if(pConfig->PowerReduced == ENABLE)
- {
- LPC_SC->PCON |= BOD_PCON_BODRPM;
- }
- else
- {
- LPC_SC->PCON &= ~BOD_PCON_BODRPM;
- }
-
- /* Brown-Out Reset */
- if(pConfig->ResetOnVoltageDown == DISABLE)
- {
- LPC_SC->PCON |= BOD_PCON_BORD;
- }
- else
- {
- LPC_SC->PCON &= ~BOD_PCON_BORD;
- }
-
- /* Enable the BOD Interrupt */
- NVIC_EnableIRQ(BOD_IRQn);
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Get BOD reset source status
- * @param[in] None
- * @return TRUE/FALSE
- **********************************************************************/
-int32_t BOD_ResetSourceStatus( void )
-{
- if((LPC_SC->RSID & BOD_RSID_POR) == 1)
- return DISABLE;
- return ((LPC_SC->RSID & BOD_RSID_BODR)? ENABLE:DISABLE);
-}
-/*********************************************************************//**
- * @brief Clear BOD reset source bit
- * @param[in] None
- * @return None
- **********************************************************************/
-void BOD_ResetSourceClr( void )
-{
- LPC_SC->RSID |= BOD_RSID_BODR;
-}
-/**
- * @}
- */
-#endif /*_BOD */
-/**
- * @}
- */
-/******************************************************************************
-** End Of File
-******************************************************************************/
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_can.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_can.c
deleted file mode 100644
index 26776179e4..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_can.c
+++ /dev/null
@@ -1,2197 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_can.c 2011-06-02
-*//**
-* @file lpc_can.c
-* @brief Contains all functions support for CAN firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup CAN
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _CAN
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_can.h"
-#include "lpc_clkpwr.h"
-
-/* Private Variables ---------------------------------------------------------- */
-/** @defgroup CAN_Private_Variables CAN Private Variables
- * @{
- */
-
-FunctionalState FULLCAN_ENABLE;
-
-
-/* Counts number of filters (CAN message objects) used */
-uint16_t CANAF_FullCAN_cnt = 0;
-uint16_t CANAF_std_cnt = 0;
-uint16_t CANAF_gstd_cnt = 0;
-uint16_t CANAF_ext_cnt = 0;
-uint16_t CANAF_gext_cnt = 0;
-
-/* End of Private Variables ----------------------------------------------------*/
-/**
- * @}
- */
-
-/* Private Variables ---------------------------------------------------------- */
-static LPC_CAN_TypeDef* CAN_GetPointer (uint8_t canId);
-
-
-static void can_SetBaudrate (LPC_CAN_TypeDef *CANx, uint32_t baudrate);
-
-/*********************************************************************//**
- * @brief Setting CAN baud rate (bps)
- * @param[in] canId point to LPC_CAN_TypeDef object, should be:
- * - LPC_CAN1: CAN1 peripheral
- * - LPC_CAN2: CAN2 peripheral
- * @return The pointer to CAN peripheral that's expected to use
- ***********************************************************************/
-static LPC_CAN_TypeDef* CAN_GetPointer (uint8_t canId)
-{
- LPC_CAN_TypeDef* pCan;
-
- switch (canId)
- {
- case CAN_ID_1:
- pCan = LPC_CAN1;
- break;
-
- case CAN_ID_2:
- pCan = LPC_CAN2;
- break;
-
- default:
- pCan = NULL;
- break;
- }
-
- return pCan;
-}
-
-
-/*********************************************************************//**
- * @brief Setting CAN baud rate (bps)
- * @param[in] CANx point to LPC_CAN_TypeDef object, should be:
- * - LPC_CAN1: CAN1 peripheral
- * - LPC_CAN2: CAN2 peripheral
- * @param[in] baudrate: is the baud rate value will be set
- * @return None
- ***********************************************************************/
-static void can_SetBaudrate (LPC_CAN_TypeDef *CANx, uint32_t baudrate)
-{
- uint32_t result = 0;
- uint8_t NT, TSEG1, TSEG2;
- uint32_t CANPclk = 0;
- uint32_t BRP;
-
- CANPclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- result = CANPclk / baudrate;
-
- /* Calculate suitable nominal time value
- * NT (nominal time) = (TSEG1 + TSEG2 + 3)
- * NT <= 24
- * TSEG1 >= 2*TSEG2
- */
- for(NT = 24; NT > 0; NT = NT-2)
- {
- if ((result%NT) == 0)
- {
- BRP = result / NT - 1;
-
- NT--;
-
- TSEG2 = (NT/3) - 1;
-
- TSEG1 = NT -(NT/3) - 1;
-
- break;
- }
- }
-
- /* Enter reset mode */
- CANx->MOD = 0x01;
-
- /* Set bit timing
- * Default: SAM = 0x00;
- * SJW = 0x03;
- */
- CANx->BTR = (TSEG2 << 20) | (TSEG1 << 16) | (3 << 14) | BRP;
-
- /* Return to normal operating */
- CANx->MOD = 0;
-}
-/* End of Private Functions ----------------------------------------------------*/
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup CAN_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initialize CAN peripheral with given baudrate
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] baudrate: the value of CAN baudrate will be set (bps)
- * @return None
- *********************************************************************/
-void CAN_Init(uint8_t canId, uint32_t baudrate)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- uint16_t i;
-
- if(canId == CAN_ID_1)
- {
- /* Turn on power and clock for CAN1 */
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCAN1, ENABLE);
- }
- else if(canId == CAN_ID_2)
- {
- /* Turn on power and clock for CAN2 */
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCAN2, ENABLE);
- }
- else
- {
- return;
- }
-
- pCan->MOD = 1; // Enter Reset Mode
- pCan->IER = 0; // Disable All CAN Interrupts
- pCan->GSR = 0;
-
- /* Request command to release Rx, Tx buffer and clear data overrun */
- //pCan->CMR = CAN_CMR_AT | CAN_CMR_RRB | CAN_CMR_CDO;
- pCan->CMR = (1 << 1) | (1 << 2) | (1 << 3);
-
- /* Read to clear interrupt pending in interrupt capture register */
- i = pCan->ICR;
- pCan->MOD = 0;// Return Normal operating
-
- //Reset CANAF value
- LPC_CANAF->AFMR = 0x01;
-
- //clear ALUT RAM
- for (i = 0; i < 512; i++)
- {
- LPC_CANAF_RAM->mask[i] = 0x00;
- }
-
- LPC_CANAF->SFF_sa = 0x00;
- LPC_CANAF->SFF_GRP_sa = 0x00;
- LPC_CANAF->EFF_sa = 0x00;
- LPC_CANAF->EFF_GRP_sa = 0x00;
- LPC_CANAF->ENDofTable = 0x00;
-
- LPC_CANAF->AFMR = 0x00;
-
- /* Set baudrate */
- can_SetBaudrate (pCan, baudrate);
-}
-
-/********************************************************************//**
- * @brief CAN deInit
- * @param[in] canId The Id of the expected CAN component
- *
- * @return None
- *********************************************************************/
-void CAN_DeInit(uint8_t canId)
-{
- if(canId == CAN_ID_1)
- {
- /* Turn on power and clock for CAN1 */
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCAN1, DISABLE);
- }
- else if(canId == CAN_ID_2)
- {
- /* Turn on power and clock for CAN1 */
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCAN2, DISABLE);
- }
-
- return;
-}
-
-/********************************************************************//**
- * @brief Setup Acceptance Filter Look-Up Table
- * @param[in] CANAFx pointer to LPC_CANAF_TypeDef
- * Should be: LPC_CANAF
- * @param[in] AFSection the pointer to AF_SectionDef structure
- * It contain information about 5 sections will be install in AFLUT
- * @return CAN Error could be:
- * - CAN_OBJECTS_FULL_ERROR: No more rx or tx objects available
- * - CAN_AF_ENTRY_ERROR: table error-violation of ascending numerical order
- * - CAN_OK: ID is added into table successfully
- *********************************************************************/
-CAN_ERROR CAN_SetupAFLUT(AF_SectionDef* AFSection)
-{
- uint8_t ctrl1,ctrl2;
- uint8_t dis1, dis2;
- uint16_t SID, ID_temp,i, count = 0;
- uint32_t EID, entry, buf;
- uint16_t lowerSID, upperSID;
- uint32_t lowerEID, upperEID;
-
- LPC_CANAF->AFMR = 0x01;
-
- /***** setup FullCAN Table *****/
- if(AFSection->FullCAN_Sec == NULL)
- {
- FULLCAN_ENABLE = DISABLE;
- }
- else
- {
- FULLCAN_ENABLE = ENABLE;
-
- for(i = 0; i < (AFSection->FC_NumEntry); i++)
- {
- if(count + 1 > 64)
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- ctrl1 = AFSection->FullCAN_Sec->controller;
-
- SID = AFSection->FullCAN_Sec->id_11;
-
- dis1 = AFSection->FullCAN_Sec->disable;
-
- entry = 0x00; //reset entry value
-
- if((CANAF_FullCAN_cnt & 0x00000001)==0)
- {
- if(count != 0x00)
- {
- buf = LPC_CANAF_RAM->mask[count-1];
- ID_temp = (buf & 0xE7FF); //mask controller & identifier bits
- if(ID_temp > ((ctrl1<<13)|SID))
- {
- return CAN_AF_ENTRY_ERROR;
- }
- }
-
- entry = (ctrl1<<29)|(dis1<<28)|(SID<<16)|(1<<27);
-
- LPC_CANAF_RAM->mask[count] &= 0x0000FFFF;
-
- LPC_CANAF_RAM->mask[count] |= entry;
-
- CANAF_FullCAN_cnt++;
- if(CANAF_FullCAN_cnt == AFSection->FC_NumEntry) //this is the lastest FullCAN entry
- count++;
- }
- else
- {
- buf = LPC_CANAF_RAM->mask[count];
- ID_temp = (buf >>16) & 0xE7FF;
- if(ID_temp > ((ctrl1<<13)|SID))
- {
- return CAN_AF_ENTRY_ERROR;
- }
-
- entry = (ctrl1 << 13) | (dis1 << 12) | (SID << 0) | (1 << 11);
-
- LPC_CANAF_RAM->mask[count] &= 0xFFFF0000;
-
- LPC_CANAF_RAM->mask[count]|= entry;
-
- count++;
-
- CANAF_FullCAN_cnt++;
- }
-
- AFSection->FullCAN_Sec = (FullCAN_Entry *)((uint32_t)(AFSection->FullCAN_Sec)+ sizeof(FullCAN_Entry));
- }
- }
-
- /***** Setup Explicit Standard Frame Format Section *****/
- if(AFSection->SFF_Sec != NULL)
- {
- for(i=0;i<(AFSection->SFF_NumEntry);i++)
- {
- if(count + 1 > 512)
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- ctrl1 = AFSection->SFF_Sec->controller;
-
- SID = AFSection->SFF_Sec->id_11;
-
- dis1 = AFSection->SFF_Sec->disable;
-
- entry = 0x00; //reset entry value
-
- if((CANAF_std_cnt & 0x00000001)==0)
- {
- if(CANAF_std_cnt !=0 )
- {
- buf = LPC_CANAF_RAM->mask[count-1];
- ID_temp = (buf & 0xE7FF); //mask controller & identifier bits
- if(ID_temp > ((ctrl1<<13)|SID))
- {
- return CAN_AF_ENTRY_ERROR;
- }
- }
-
- entry = (ctrl1<<29)|(dis1<<28)|(SID<<16);
-
- LPC_CANAF_RAM->mask[count] &= 0x0000FFFF;
-
- LPC_CANAF_RAM->mask[count] |= entry;
-
- CANAF_std_cnt++;
- if(CANAF_std_cnt == AFSection->SFF_NumEntry)//if this is the last SFF entry
- count++;
- }
- else
- {
- buf = LPC_CANAF_RAM->mask[count];
- ID_temp = (buf >>16) & 0xE7FF;
- if(ID_temp > ((ctrl1<<13)|SID))
- {
- return CAN_AF_ENTRY_ERROR;
- }
-
- entry = (ctrl1 << 13) | (dis1 << 12) | (SID << 0);
-
- LPC_CANAF_RAM->mask[count] &= 0xFFFF0000;
-
- LPC_CANAF_RAM->mask[count] |= entry;
-
- count++;
-
- CANAF_std_cnt++;
- }
-
- AFSection->SFF_Sec = (SFF_Entry *)((uint32_t)(AFSection->SFF_Sec)+ sizeof(SFF_Entry));
- }
- }
-
- /***** Setup Group of Standard Frame Format Identifier Section *****/
- if(AFSection->SFF_GPR_Sec != NULL)
- {
- for(i=0;i<(AFSection->SFF_GPR_NumEntry);i++)
- {
- if(count + 1 > 512)
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- ctrl1 = AFSection->SFF_GPR_Sec->controller1;
-
- ctrl2 = AFSection->SFF_GPR_Sec->controller2;
-
- dis1 = AFSection->SFF_GPR_Sec->disable1;
-
- dis2 = AFSection->SFF_GPR_Sec->disable2;
-
- lowerSID = AFSection->SFF_GPR_Sec->lowerID;
-
- upperSID = AFSection->SFF_GPR_Sec->upperID;
-
- entry = 0x00;
-
- if(CANAF_gstd_cnt!=0)
- {
- buf = LPC_CANAF_RAM->mask[count-1];
- ID_temp = buf & 0xE7FF;
- if((ctrl1 != ctrl2)||(lowerSID > upperSID)||(ID_temp > ((ctrl1<<13)|lowerSID)))
- {
- return CAN_AF_ENTRY_ERROR;
- }
- }
- entry = (ctrl1 << 29)|(dis1 << 28)|(lowerSID << 16)| \
- (ctrl2 << 13)|(dis2 << 12)|(upperSID << 0);
- LPC_CANAF_RAM->mask[count] = entry;
-
- CANAF_gstd_cnt++;
-
- count++;
-
- AFSection->SFF_GPR_Sec = (SFF_GPR_Entry *)((uint32_t)(AFSection->SFF_GPR_Sec)+ sizeof(SFF_GPR_Entry));
- }
- }
-
- /***** Setup Explicit Extend Frame Format Identifier Section *****/
- if(AFSection->EFF_Sec != NULL)
- {
- for(i=0;i<(AFSection->EFF_NumEntry);i++)
- {
- if(count + 1 > 512)
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- EID = AFSection->EFF_Sec->ID_29;
-
- ctrl1 = AFSection->EFF_Sec->controller;
-
- entry = 0x00; //reset entry value
-
- entry = (ctrl1 << 29)|(EID << 0);
- if(CANAF_ext_cnt != 0)
- {
- buf = LPC_CANAF_RAM->mask[count-1];
-// EID_temp = buf & 0x0FFFFFFF;
- if(buf > entry)
- {
- return CAN_AF_ENTRY_ERROR;
- }
- }
- LPC_CANAF_RAM->mask[count] = entry;
-
- CANAF_ext_cnt ++;
-
- count++;
-
- AFSection->EFF_Sec = (EFF_Entry *)((uint32_t)(AFSection->EFF_Sec)+ sizeof(EFF_Entry));
- }
- }
-
- /***** Setup Group of Extended Frame Format Identifier Section *****/
- if(AFSection->EFF_GPR_Sec != NULL)
- {
- for(i=0;i<(AFSection->EFF_GPR_NumEntry);i++)
- {
- if(count + 2 > 512)
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- ctrl1 = AFSection->EFF_GPR_Sec->controller1;
-
- ctrl2 = AFSection->EFF_GPR_Sec->controller2;
-
- lowerEID = AFSection->EFF_GPR_Sec->lowerEID;
-
- upperEID = AFSection->EFF_GPR_Sec->upperEID;
-
- entry = 0x00;
-
- if(CANAF_gext_cnt != 0)
- {
- buf = LPC_CANAF_RAM->mask[count-1];
-// EID_temp = buf & 0x0FFFFFFF;
- if((ctrl1 != ctrl2) || (lowerEID > upperEID) || (buf > ((ctrl1 << 29)|(lowerEID << 0))))
- {
- return CAN_AF_ENTRY_ERROR;
- }
- }
-
- entry = (ctrl1 << 29)|(lowerEID << 0);
-
- LPC_CANAF_RAM->mask[count++] = entry;
-
- entry = (ctrl2 << 29)|(upperEID << 0);
-
- LPC_CANAF_RAM->mask[count++] = entry;
-
- CANAF_gext_cnt++;
-
- AFSection->EFF_GPR_Sec = (EFF_GPR_Entry *)((uint32_t)(AFSection->EFF_GPR_Sec)+ sizeof(EFF_GPR_Entry));
- }
- }
-
- //update address values
- LPC_CANAF->SFF_sa = ((CANAF_FullCAN_cnt + 1)>>1)<<2;
-
- LPC_CANAF->SFF_GRP_sa = LPC_CANAF->SFF_sa + (((CANAF_std_cnt+1)>>1)<< 2);
-
- LPC_CANAF->EFF_sa = LPC_CANAF->SFF_GRP_sa + (CANAF_gstd_cnt << 2);
-
- LPC_CANAF->EFF_GRP_sa = LPC_CANAF->EFF_sa + (CANAF_ext_cnt << 2);
-
- LPC_CANAF->ENDofTable = LPC_CANAF->EFF_GRP_sa + (CANAF_gext_cnt << 3);
-
- if(FULLCAN_ENABLE == DISABLE)
- {
- LPC_CANAF->AFMR = 0x00; // Normal mode
- }
- else
- {
- LPC_CANAF->AFMR = 0x04;
- }
-
- return CAN_OK;
-}
-/********************************************************************//**
- * @brief Add Explicit ID into AF Look-Up Table dynamically.
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] id: The ID of entry will be added
- * @param[in] format: is the type of ID Frame Format, should be:
- * - STD_ID_FORMAT: 11-bit ID value
- * - EXT_ID_FORMAT: 29-bit ID value
- * @return CAN Error, could be:
- * - CAN_OBJECTS_FULL_ERROR: No more rx or tx objects available
- * - CAN_ID_EXIT_ERROR: ID exited in table
- * - CAN_OK: ID is added into table successfully
- *********************************************************************/
-CAN_ERROR CAN_LoadExplicitEntry(uint8_t canId, uint32_t id, CAN_ID_FORMAT_Type format)
-{
- uint32_t buf0 = 0, buf1 = 0;
- int16_t cnt1 = 0, cnt2 = 0, bound1 = 0, total = 0;
-
- /* Acceptance Filter Memory full - return */
- total =((CANAF_FullCAN_cnt + 1) >> 1) + CANAF_FullCAN_cnt * 3 + ((CANAF_std_cnt + 1) >> 1) \
- + CANAF_gstd_cnt + CANAF_ext_cnt + (CANAF_gext_cnt << 1);
-
- if (total >= 512)
- {
- //don't have enough space
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- /* Setup Acceptance Filter Configuration
- Acceptance Filter Mode Register = Off */
- LPC_CANAF->AFMR = 0x00000001;
-
- /*********** Add Explicit Standard Identifier Frame Format entry *********/
- if(format == STD_ID_FORMAT)
- {
- id &= 0x07FF;
-
- id |= canId << 13;/* Add controller number */
-
- /* Move all remaining sections one place up
- if new entry will increase FullCAN list */
- if ((CANAF_std_cnt & 0x0001) == 0)
- {
- cnt1 = ((CANAF_FullCAN_cnt+1)>>1)+((CANAF_std_cnt+1)>>1);
-
- bound1 = total - cnt1;
-
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- while(bound1--)
- {
- cnt1++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = buf0;
-
- buf0 = buf1;
- }
- }
-
- if (CANAF_std_cnt == 0)
- {
- cnt2 = (CANAF_FullCAN_cnt + 1)>>1;
-
- /* For entering first ID */
- LPC_CANAF_RAM->mask[cnt2] = 0x0000FFFF | (id << 16);
- }
- else if (CANAF_std_cnt == 1)
- {
- cnt2 = (CANAF_FullCAN_cnt + 1) >> 1;
-
- /* For entering second ID */
- if (((LPC_CANAF_RAM->mask[cnt2] >> 16)& 0xE7FF) > id)
- {
- LPC_CANAF_RAM->mask[cnt2] = (LPC_CANAF_RAM->mask[cnt2] >> 16) | (id << 16);
- }
- else
- {
- LPC_CANAF_RAM->mask[cnt2] = (LPC_CANAF_RAM->mask[cnt2] & 0xFFFF0000) | id;
- }
- }
- else
- {
- /* Find where to insert new ID */
- cnt1 = (CANAF_FullCAN_cnt+1)>>1;
-
- cnt2 = CANAF_std_cnt;
-
- bound1 = ((CANAF_FullCAN_cnt+1)>>1)+((CANAF_std_cnt+1)>>1);
-
- while (cnt1 < bound1)
- {
- /* Loop through standard existing IDs */
- if (((LPC_CANAF_RAM->mask[cnt1] >> 16) & 0xE7FF) > id)
- {
- cnt2 = cnt1 * 2;
- break;
- }
-
- if ((LPC_CANAF_RAM->mask[cnt1] & 0x0000E7FF) > id)
- {
- cnt2 = cnt1 * 2 + 1;
- break;
- }
-
- cnt1++;
- }
-
- /* cnt1 = U32 where to insert new ID */
- /* cnt2 = U16 where to insert new ID */
-
- if (cnt1 == bound1)
- {
- /* Adding ID as last entry */
- /* Even number of IDs exists */
- if ((CANAF_std_cnt & 0x0001) == 0)
- {
- LPC_CANAF_RAM->mask[cnt1] = 0x0000FFFF | (id << 16);
- }
- /* Odd number of IDs exists */
- else
- {
- LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | id;
- }
- }
- else
- {
- buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */
-
- if ((cnt2 & 0x0001) == 0)
- {
- /* Insert new mask to even address*/
- buf1 = (id << 16) | (buf0 >> 16);
- }
- else
- {
- /* Insert new mask to odd address */
- buf1 = (buf0 & 0xFFFF0000) | id;
- }
-
- LPC_CANAF_RAM->mask[cnt1] = buf1;/* Insert mask */
-
- bound1 = ((CANAF_FullCAN_cnt + 1) >> 1) + ((CANAF_std_cnt+1) >> 1) - 1;
-
- /* Move all remaining standard mask entries one place up */
- while (cnt1 < bound1)
- {
- cnt1++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = (buf1 >> 16) | (buf0 << 16);
-
- buf0 = buf1;
- }
-
- if ((CANAF_std_cnt & 0x0001) == 0)
- {
- /* Even number of IDs exists */
- LPC_CANAF_RAM->mask[cnt1+1] = (buf0 <<16) |(0x0000FFFF);
- }
- }
- }
-
- CANAF_std_cnt++;
-
- //update address values
- LPC_CANAF->SFF_GRP_sa += 0x04 ;
-
- LPC_CANAF->EFF_sa += 0x04 ;
-
- LPC_CANAF->EFF_GRP_sa += 0x04;
-
- LPC_CANAF->ENDofTable += 0x04;
- }
-
- /*********** Add Explicit Extended Identifier Frame Format entry *********/
- else
- {
- /* Add controller number */
- id |= canId << 29;
-
- cnt1 = ((CANAF_FullCAN_cnt+1) >> 1) + (((CANAF_std_cnt + 1) >> 1) + CANAF_gstd_cnt);
-
- cnt2 = 0;
-
- while (cnt2 < CANAF_ext_cnt)
- {
- /* Loop through extended existing masks*/
- if (LPC_CANAF_RAM->mask[cnt1] > id)
- {
- break;
- }
-
- cnt1++;/* cnt1 = U32 where to insert new mask */
-
- cnt2++;
- }
-
- buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */
-
- LPC_CANAF_RAM->mask[cnt1] = id; /* Insert mask */
-
- CANAF_ext_cnt++;
-
- bound1 = total;
-
- /* Move all remaining extended mask entries one place up*/
- while (cnt2 < bound1)
- {
- cnt1++;
-
- cnt2++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = buf0;
-
- buf0 = buf1;
- }
-
- /* update address values */
- LPC_CANAF->EFF_GRP_sa += 4;
-
- LPC_CANAF->ENDofTable += 4;
- }
-
- if(CANAF_FullCAN_cnt == 0) //not use FullCAN mode
- {
- LPC_CANAF->AFMR = 0x00;//not use FullCAN mode
- }
- else
- {
- LPC_CANAF->AFMR = 0x04;
- }
-
- return CAN_OK;
-}
-
-/********************************************************************//**
- * @brief Load FullCAN entry into AFLUT
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] id: identifier of entry that will be added
- * @return CAN_ERROR, could be:
- * - CAN_OK: loading is successful
- * - CAN_ID_EXIT_ERROR: ID exited in FullCAN Section
- * - CAN_OBJECTS_FULL_ERROR: no more space available
- *********************************************************************/
-CAN_ERROR CAN_LoadFullCANEntry (uint8_t canId, uint16_t id)
-{
- uint32_t buf0 = 0, buf1 = 0, buf2 = 0;
- uint32_t tmp0 = 0, tmp1 = 0, tmp2 = 0;
- int16_t cnt1 = 0, cnt2 = 0, bound1 = 0, total = 0;
-
- /* Acceptance Filter Memory full - return */
- total =((CANAF_FullCAN_cnt + 1) >> 1) + CANAF_FullCAN_cnt*3 + ((CANAF_std_cnt + 1) >> 1) \
- + CANAF_gstd_cnt + CANAF_ext_cnt + (CANAF_gext_cnt << 1);
-
- //don't have enough space for this fullCAN Entry and its Object(3*32 bytes)
- if ((total >= 508) || (CANAF_FullCAN_cnt >= 64))
- {
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- /* Setup Acceptance Filter Configuration
- Acceptance Filter Mode Register = Off */
- LPC_CANAF->AFMR = 0x00000001;
-
- /* Add mask for standard identifiers */
- id &= 0x07FF;
-
- id |= (canId << 13) | (1 << 11);
-
- /* Move all remaining sections one place up
- if new entry will increase FullCAN list */
- if (((CANAF_FullCAN_cnt & 0x0001) == 0)&&(total!=0))
- {
- //then remove remaining section
- cnt1 = (CANAF_FullCAN_cnt >> 1);
-
- bound1 = total;
-
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- while (bound1--)
- {
- cnt1++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = buf0;
-
- buf0 = buf1;
- }
- }
- if (CANAF_FullCAN_cnt == 0)
- {
- /* For entering first ID */
- LPC_CANAF_RAM->mask[0] = 0x0000FFFF | (id << 16);
- }
- else if (CANAF_FullCAN_cnt == 1)
- {
- /* For entering second ID */
- if (((LPC_CANAF_RAM->mask[0] >> 16)& 0xE7FF) > id)
- {
- LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] >> 16) | (id << 16);
- }
- else
- {
- LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] & 0xFFFF0000) | id;
- }
- }
- else
- {
- /* Find where to insert new ID */
- cnt1 = 0;
-
- cnt2 = CANAF_FullCAN_cnt;
-
- bound1 = (CANAF_FullCAN_cnt - 1) >> 1;
-
- while (cnt1 <= bound1)
- {
- /* Loop through standard existing IDs */
- if (((LPC_CANAF_RAM->mask[cnt1] >> 16) & 0xE7FF) > (id & 0xE7FF))
- {
- cnt2 = cnt1 * 2;
- break;
- }
-
-
- if ((LPC_CANAF_RAM->mask[cnt1] & 0x0000E7FF) > (id & 0xE7FF))
- {
- cnt2 = cnt1 * 2 + 1;
- break;
- }
-
- cnt1++;
- }
- /* cnt1 = U32 where to insert new ID */
- /* cnt2 = U16 where to insert new ID */
-
- if (cnt1 > bound1)
- {
- /* Adding ID as last entry */
- /* Even number of IDs exists */
- if ((CANAF_FullCAN_cnt & 0x0001) == 0)
- {
- LPC_CANAF_RAM->mask[cnt1] = 0x0000FFFF | (id << 16);
- }
- /* Odd number of IDs exists */
- else
- {
- LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | id;
- }
- }
- else
- {
- buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */
-
- if ((cnt2 & 0x0001) == 0)
- {
- /* Insert new mask to even address*/
- buf1 = (id << 16) | (buf0 >> 16);
- }
- else
- {
- /* Insert new mask to odd address */
- buf1 = (buf0 & 0xFFFF0000) | id;
- }
-
- LPC_CANAF_RAM->mask[cnt1] = buf1;/* Insert mask */
-
- bound1 = CANAF_FullCAN_cnt >> 1;
-
- /* Move all remaining standard mask entries one place up */
- while (cnt1 < bound1)
- {
- cnt1++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = (buf1 >> 16) | (buf0 << 16);
-
- buf0 = buf1;
- }
-
- if ((CANAF_FullCAN_cnt & 0x0001) == 0)
- {
- /* Even number of IDs exists */
- LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000)
- | (0x0000FFFF);
- }
- }
- }
-
- //restruct FulCAN Object Section
- bound1 = CANAF_FullCAN_cnt - cnt2;
-
- cnt1 = total - (CANAF_FullCAN_cnt)*3 + cnt2*3 + 1;
-
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- buf1 = LPC_CANAF_RAM->mask[cnt1+1];
-
- buf2 = LPC_CANAF_RAM->mask[cnt1+2];
-
- LPC_CANAF_RAM->mask[cnt1]=LPC_CANAF_RAM->mask[cnt1+1]= LPC_CANAF_RAM->mask[cnt1+2]=0x00;
-
- cnt1+=3;
-
- while(bound1--)
- {
- tmp0 = LPC_CANAF_RAM->mask[cnt1];
-
- tmp1 = LPC_CANAF_RAM->mask[cnt1+1];
-
- tmp2 = LPC_CANAF_RAM->mask[cnt1+2];
-
- LPC_CANAF_RAM->mask[cnt1]= buf0;
-
- LPC_CANAF_RAM->mask[cnt1+1]= buf1;
-
- LPC_CANAF_RAM->mask[cnt1+2]= buf2;
-
- buf0 = tmp0;
-
- buf1 = tmp1;
-
- buf2 = tmp2;
-
- cnt1+=3;
- }
-
- CANAF_FullCAN_cnt++;
-
- //update address values
- LPC_CANAF->SFF_sa += 0x04;
-
- LPC_CANAF->SFF_GRP_sa += 0x04 ;
-
- LPC_CANAF->EFF_sa += 0x04 ;
-
- LPC_CANAF->EFF_GRP_sa += 0x04;
-
- LPC_CANAF->ENDofTable += 0x04;
-
- LPC_CANAF->AFMR = 0x04;
-
- return CAN_OK;
-}
-
-/********************************************************************//**
- * @brief Load Group entry into AFLUT
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] lowerID, upperID: lower and upper identifier of entry
- * @param[in] format: type of ID format, should be:
- * - STD_ID_FORMAT: Standard ID format (11-bit value)
- * - EXT_ID_FORMAT: Extended ID format (29-bit value)
- * @return CAN_ERROR, could be:
- * - CAN_OK: loading is successful
- * - CAN_CONFLICT_ID_ERROR: Conflict ID occurs
- * - CAN_OBJECTS_FULL_ERROR: no more space available
- *********************************************************************/
-CAN_ERROR CAN_LoadGroupEntry(uint8_t canId, uint32_t lowerID,
- uint32_t upperID, CAN_ID_FORMAT_Type format)
-{
- uint32_t buf0, buf1, entry1, entry2, LID,UID;
- int16_t cnt1, bound1, total;
-
- if(lowerID > upperID)
- return CAN_CONFLICT_ID_ERROR;
-
- total =((CANAF_FullCAN_cnt+1) >> 1)+ CANAF_FullCAN_cnt*3 +((CANAF_std_cnt + 1) >> 1) \
- + CANAF_gstd_cnt + CANAF_ext_cnt + (CANAF_gext_cnt<<1);
-
- /* Setup Acceptance Filter Configuration
- Acceptance Filter Mode Register = Off */
- LPC_CANAF->AFMR = 0x00000001;
-
- /*********Add Group of Standard Identifier Frame Format************/
- if(format == STD_ID_FORMAT)
- {
- if ((total >= 512))
- {
- //don't have enough space
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- lowerID &=0x7FF; //mask ID
-
- upperID &=0x7FF;
-
- entry1 = (canId << 29) | (lowerID << 16) | (canId << 13)|(upperID << 0);
-
- cnt1 = ((CANAF_FullCAN_cnt+1)>>1) + ((CANAF_std_cnt + 1) >> 1);
-
- //if this is the first Group standard ID entry
- if(CANAF_gstd_cnt == 0)
- {
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- }
- else
- {
- //find the position to add new Group entry
- bound1 = ((CANAF_FullCAN_cnt+1)>>1) + ((CANAF_std_cnt + 1) >> 1) + CANAF_gstd_cnt;
-
- while(cnt1 < bound1)
- {
- //compare controller first
- while((LPC_CANAF_RAM->mask[cnt1] >> 29)< (entry1 >> 29))//increase until meet greater or equal controller
- cnt1++;
- buf0 = LPC_CANAF_RAM->mask[cnt1];
- if((LPC_CANAF_RAM->mask[cnt1] >> 29)> (entry1 >> 29)) //meet greater controller
- {
- //add at this position
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- break;
- }
- else //meet equal controller
- {
- LID = (buf0 >> 16)&0x7FF;
- UID = buf0 & 0x7FF;
- if (upperID <= LID)
- {
- //add new entry before this entry
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- break;
- }
- else if (lowerID >= UID)
- {
- //load next entry to compare
- cnt1 ++;
- }
- else
- return CAN_CONFLICT_ID_ERROR;
- }
- }
- if(cnt1 >= bound1)
- {
- //add new entry at the last position in this list
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- }
-
- //remove all remaining entry of this section one place up
- bound1 = total - cnt1;
-
- while(bound1--)
- {
- cnt1++;
-
- buf1 = LPC_CANAF_RAM->mask[cnt1];
-
- LPC_CANAF_RAM->mask[cnt1] = buf0;
-
- buf0 = buf1;
- }
- }
-
- CANAF_gstd_cnt++;
-
- //update address values
- LPC_CANAF->EFF_sa +=0x04 ;
-
- LPC_CANAF->EFF_GRP_sa +=0x04;
-
- LPC_CANAF->ENDofTable +=0x04;
- }
-
-
- /*********Add Group of Extended Identifier Frame Format************/
- else
- {
- if ((total >= 511))
- {
- //don't have enough space
- return CAN_OBJECTS_FULL_ERROR;
- }
-
- lowerID &= 0x1FFFFFFF; //mask ID
-
- upperID &= 0x1FFFFFFF;
-
- entry1 = (canId << 29)|(lowerID << 0);
-
- entry2 = (canId << 29)|(upperID << 0);
-
- cnt1 = ((CANAF_FullCAN_cnt+1)>>1) + ((CANAF_std_cnt + 1) >> 1) + CANAF_gstd_cnt + CANAF_ext_cnt;
-
- //if this is the first Group standard ID entry
- if(CANAF_gext_cnt == 0)
- {
- LPC_CANAF_RAM->mask[cnt1] = entry1;
-
- LPC_CANAF_RAM->mask[cnt1+1] = entry2;
- }
- else
- {
- //find the position to add new Group entry
- bound1 = ((CANAF_FullCAN_cnt+1)>>1) + ((CANAF_std_cnt + 1) >> 1) + CANAF_gstd_cnt \
- + CANAF_ext_cnt + (CANAF_gext_cnt<<1);
-
- while(cnt1 < bound1)
- {
- while((LPC_CANAF_RAM->mask[cnt1] >>29)< canId) //increase until meet greater or equal controller
- cnt1++;
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- buf1 = LPC_CANAF_RAM->mask[cnt1+1];
- if((LPC_CANAF_RAM->mask[cnt1] >> 29)> canId) //meet greater controller
- {
- //add at this position
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- LPC_CANAF_RAM->mask[++cnt1] = entry2;
- break;
- }
- else //meet equal controller
- {
- LID = buf0 & 0x1FFFFFFF; //mask ID
- UID = buf1 & 0x1FFFFFFF;
- if (upperID <= LID)
- {
- //add new entry before this entry
- LPC_CANAF_RAM->mask[cnt1] = entry1;
- LPC_CANAF_RAM->mask[++cnt1] = entry2;
- break;
- }
- else if (lowerID >= UID)
- {
- //load next entry to compare
- cnt1 +=2;
- }
- else
- return CAN_CONFLICT_ID_ERROR;
- }
- }
- if(cnt1 >= bound1)
- {
- //add new entry at the last position in this list
- buf0 = LPC_CANAF_RAM->mask[cnt1];
-
- buf1 = LPC_CANAF_RAM->mask[cnt1+1];
-
- LPC_CANAF_RAM->mask[cnt1] = entry1;
-
- LPC_CANAF_RAM->mask[++cnt1] = entry2;
- }
-
- //remove all remaining entry of this section two place up
- bound1 = total - cnt1 + 1;
-
- cnt1++;
-
- while(bound1>0)
- {
- entry1 = LPC_CANAF_RAM->mask[cnt1];
-
- entry2 = LPC_CANAF_RAM->mask[cnt1+1];
-
- LPC_CANAF_RAM->mask[cnt1] = buf0;
-
- LPC_CANAF_RAM->mask[cnt1+1] = buf1;
-
- buf0 = entry1;
-
- buf1 = entry2;
-
- cnt1 +=2;
-
- bound1 -=2;
- }
- }
-
- CANAF_gext_cnt++;
-
- //update address values
- LPC_CANAF->ENDofTable +=0x08;
- }
-
- LPC_CANAF->AFMR = 0x04;
-
- return CAN_OK;
-}
-
-/********************************************************************//**
- * @brief Remove AFLUT entry (FullCAN entry and Explicit Standard entry)
- * @param[in] EntryType: the type of entry that want to remove, should be:
- * - FULLCAN_ENTRY
- * - EXPLICIT_STANDARD_ENTRY
- * - GROUP_STANDARD_ENTRY
- * - EXPLICIT_EXTEND_ENTRY
- * - GROUP_EXTEND_ENTRY
- * @param[in] position: the position of this entry in its section
- * Note: the first position is 0
- * @return CAN_ERROR, could be:
- * - CAN_OK: removing is successful
- * - CAN_ENTRY_NOT_EXIT_ERROR: entry want to remove is not exit
- *********************************************************************/
-CAN_ERROR CAN_RemoveEntry(AFLUT_ENTRY_Type EntryType, uint16_t position)
-{
- uint16_t cnt, bound, total;
- uint32_t buf0, buf1;
-
- /* Setup Acceptance Filter Configuration
- Acceptance Filter Mode Register = Off */
- LPC_CANAF->AFMR = 0x00000001;
-
- total = ((CANAF_FullCAN_cnt + 1) >> 1) + ((CANAF_std_cnt + 1) >> 1) + \
- + CANAF_gstd_cnt + CANAF_ext_cnt + (CANAF_gext_cnt << 1);
-
-
- /************** Remove FullCAN Entry *************/
- if(EntryType == FULLCAN_ENTRY)
- {
- if((CANAF_FullCAN_cnt == 0)||(position >= CANAF_FullCAN_cnt))
- {
- return CAN_ENTRY_NOT_EXIT_ERROR;
- }
- else
- {
- cnt = position >> 1;
-
- buf0 = LPC_CANAF_RAM->mask[cnt];
-
- bound = (CANAF_FullCAN_cnt - position -1)>>1;
-
- if((position & 0x0001) == 0) //event position
- {
- while(bound--)
- {
- //remove all remaining FullCAN entry one place down
- buf1 = LPC_CANAF_RAM->mask[cnt+1];
-
- LPC_CANAF_RAM->mask[cnt] = (buf1 >> 16) | (buf0 << 16);
-
- buf0 = buf1;
-
- cnt++;
- }
- }
- else //odd position
- {
- while(bound--)
- {
- //remove all remaining FullCAN entry one place down
- buf1 = LPC_CANAF_RAM->mask[cnt+1];
-
- LPC_CANAF_RAM->mask[cnt] = (buf0 & 0xFFFF0000)|(buf1 >> 16);
-
- LPC_CANAF_RAM->mask[cnt+1] = LPC_CANAF_RAM->mask[cnt+1] << 16;
-
- buf0 = buf1<<16;
-
- cnt++;
- }
- }
- if((CANAF_FullCAN_cnt & 0x0001) == 0)
- {
- if((position & 0x0001)==0)
- LPC_CANAF_RAM->mask[cnt] = (buf0 << 16) | (0x0000FFFF);
- else
- LPC_CANAF_RAM->mask[cnt] = buf0 | 0x0000FFFF;
- }
- else
- {
- //remove all remaining section one place down
- cnt = (CANAF_FullCAN_cnt + 1)>>1;
-
- bound = total + CANAF_FullCAN_cnt * 3;
-
- while(bound>cnt)
- {
- LPC_CANAF_RAM->mask[cnt-1] = LPC_CANAF_RAM->mask[cnt];
- cnt++;
- }
-
- LPC_CANAF_RAM->mask[cnt-1]=0x00;
-
- //update address values
- LPC_CANAF->SFF_sa -= 0x04;
-
- LPC_CANAF->SFF_GRP_sa -= 0x04 ;
-
- LPC_CANAF->EFF_sa -= 0x04 ;
-
- LPC_CANAF->EFF_GRP_sa -= 0x04;
-
- LPC_CANAF->ENDofTable -= 0x04;
- }
-
- CANAF_FullCAN_cnt--;
-
- //delete its FullCAN Object in the FullCAN Object section
- //remove all remaining FullCAN Object three place down
- cnt = total + position * 3;
-
- bound = (CANAF_FullCAN_cnt - position + 1) * 3;
-
- while(bound)
- {
- LPC_CANAF_RAM->mask[cnt]= LPC_CANAF_RAM->mask[cnt+3];;
-
- LPC_CANAF_RAM->mask[cnt+1]= LPC_CANAF_RAM->mask[cnt+4];
-
- LPC_CANAF_RAM->mask[cnt+2]= LPC_CANAF_RAM->mask[cnt+5];
-
- bound -= 3;
-
- cnt += 3;
- }
- }
- }
-
- /************** Remove Explicit Standard ID Entry *************/
- else if(EntryType == EXPLICIT_STANDARD_ENTRY)
- {
- if((CANAF_std_cnt == 0)||(position >= CANAF_std_cnt))
- {
- return CAN_ENTRY_NOT_EXIT_ERROR;
- }
- else
- {
- cnt = ((CANAF_FullCAN_cnt+1) >> 1) + (position >> 1);
-
- buf0 = LPC_CANAF_RAM->mask[cnt];
-
- bound = (CANAF_std_cnt - position - 1) >> 1;
-
- if((position & 0x0001) == 0) //event position
- {
- while(bound--)
- {
- //remove all remaining FullCAN entry one place down
- buf1 = LPC_CANAF_RAM->mask[cnt + 1];
-
- LPC_CANAF_RAM->mask[cnt] = (buf1 >> 16) | (buf0 << 16);
-
- buf0 = buf1;
-
- cnt++;
- }
- }
- else //odd position
- {
- while(bound--)
- {
- //remove all remaining FullCAN entry one place down
- buf1 = LPC_CANAF_RAM->mask[cnt + 1];
-
- LPC_CANAF_RAM->mask[cnt] = (buf0 & 0xFFFF0000) | (buf1 >> 16);
-
- LPC_CANAF_RAM->mask[cnt + 1] = LPC_CANAF_RAM->mask[cnt + 1] << 16;
-
- buf0 = buf1<<16;
-
- cnt++;
- }
- }
- if((CANAF_std_cnt & 0x0001) == 0)
- {
- if((position & 0x0001)==0)
- LPC_CANAF_RAM->mask[cnt] = (buf0 << 16) | (0x0000FFFF);
- else
- LPC_CANAF_RAM->mask[cnt] = buf0 | 0x0000FFFF;
- }
- else
- {
- //remove all remaining section one place down
- cnt = ((CANAF_FullCAN_cnt + 1)>>1) + ((CANAF_std_cnt + 1) >> 1);
-
- bound = total + CANAF_FullCAN_cnt * 3;
-
- while(bound>cnt)
- {
- LPC_CANAF_RAM->mask[cnt-1] = LPC_CANAF_RAM->mask[cnt];
- cnt++;
- }
-
- LPC_CANAF_RAM->mask[cnt-1]=0x00;
-
- //update address value
- LPC_CANAF->SFF_GRP_sa -= 0x04 ;
-
- LPC_CANAF->EFF_sa -= 0x04 ;
-
- LPC_CANAF->EFF_GRP_sa -= 0x04;
-
- LPC_CANAF->ENDofTable -= 0x04;
- }
-
- CANAF_std_cnt--;
- }
- }
-
- /************** Remove Group of Standard ID Entry *************/
- else if(EntryType == GROUP_STANDARD_ENTRY)
- {
- if((CANAF_gstd_cnt == 0)||(position >= CANAF_gstd_cnt))
- {
- return CAN_ENTRY_NOT_EXIT_ERROR;
- }
- else
- {
- cnt = ((CANAF_FullCAN_cnt + 1) >> 1) + ((CANAF_std_cnt + 1) >> 1)+ position + 1;
-
- bound = total + CANAF_FullCAN_cnt * 3;
-
- while (cnt < bound)
- {
- LPC_CANAF_RAM->mask[cnt - 1] = LPC_CANAF_RAM->mask[cnt];
- cnt++;
- }
- LPC_CANAF_RAM->mask[cnt - 1]=0x00;
- }
-
- CANAF_gstd_cnt--;
-
- //update address value
- LPC_CANAF->EFF_sa -= 0x04;
-
- LPC_CANAF->EFF_GRP_sa -= 0x04;
-
- LPC_CANAF->ENDofTable -= 0x04;
- }
-
- /************** Remove Explicit Extended ID Entry *************/
- else if(EntryType == EXPLICIT_EXTEND_ENTRY)
- {
- if((CANAF_ext_cnt == 0)||(position >= CANAF_ext_cnt))
- {
- return CAN_ENTRY_NOT_EXIT_ERROR;
- }
- else
- {
- cnt = ((CANAF_FullCAN_cnt + 1) >> 1) + ((CANAF_std_cnt + 1) >> 1)+ CANAF_gstd_cnt + position + 1;
-
- bound = total + CANAF_FullCAN_cnt * 3;
-
- while (cnt<bound)
- {
- LPC_CANAF_RAM->mask[cnt - 1] = LPC_CANAF_RAM->mask[cnt];
- cnt++;
- }
- LPC_CANAF_RAM->mask[cnt - 1]=0x00;
- }
-
- CANAF_ext_cnt--;
-
- LPC_CANAF->EFF_GRP_sa -= 0x04;
-
- LPC_CANAF->ENDofTable -= 0x04;
- }
-
- /************** Remove Group of Extended ID Entry *************/
- else
- {
- if((CANAF_gext_cnt == 0)||(position >= CANAF_gext_cnt))
- {
- return CAN_ENTRY_NOT_EXIT_ERROR;
- }
- else
- {
- cnt = total - (CANAF_gext_cnt << 1) + (position << 1);
-
- bound = total + CANAF_FullCAN_cnt * 3;
-
- while (cnt<bound)
- {
- //remove all remaining entry two place up
- LPC_CANAF_RAM->mask[cnt] = LPC_CANAF_RAM->mask[cnt + 2];
-
- LPC_CANAF_RAM->mask[cnt + 1] = LPC_CANAF_RAM->mask[cnt + 3];
-
- cnt += 2;
- }
- }
-
- CANAF_gext_cnt--;
-
- LPC_CANAF->ENDofTable -= 0x08;
- }
-
- LPC_CANAF->AFMR = 0x04;
-
- return CAN_OK;
-}
-
-/********************************************************************//**
- * @brief Send message data
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] CAN_Msg point to the CAN_MSG_Type Structure, it contains message
- * information such as: ID, DLC, RTR, ID Format
- * @return Status:
- * - SUCCESS: send message successfully
- * - ERROR: send message unsuccessfully
- *********************************************************************/
-Status CAN_SendMsg (uint8_t canId, CAN_MSG_Type *CAN_Msg)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- uint32_t data;
-
- //Check status of Transmit Buffer 1
- if (pCan->SR & (1 << 2))
- {
- /* Transmit Channel 1 is available */
- /* Write frame informations and frame data into its CANxTFI1,
- * CANxTID1, CANxTDA1, CANxTDB1 register */
- pCan->TFI1 &= ~ 0x000F0000;
-
- pCan->TFI1 |= (CAN_Msg->len) << 16;
-
- if(CAN_Msg->type == REMOTE_FRAME)
- {
- pCan->TFI1 |= (1 << 30); //set bit RTR
- }
- else
- {
- pCan->TFI1 &= ~(1 << 30);
- }
-
- if(CAN_Msg->format == EXT_ID_FORMAT)
- {
- pCan->TFI1 |= (((uint32_t)1) << 31); //set bit FF
- }
- else
- {
- pCan->TFI1 &= ~(((uint32_t)1) << 31);
- }
-
- /* Write CAN ID*/
- pCan->TID1 = CAN_Msg->id;
-
- /*Write first 4 data bytes*/
- data = (CAN_Msg->dataA[0]) | (((CAN_Msg->dataA[1]))<< 8) | ((CAN_Msg->dataA[2]) << 16) | ((CAN_Msg->dataA[3]) << 24);
-
- pCan->TDA1 = data;
-
- /*Write second 4 data bytes*/
- data = (CAN_Msg->dataB[0]) | (((CAN_Msg->dataB[1])) << 8)|((CAN_Msg->dataB[2]) << 16)|((CAN_Msg->dataB[3]) << 24);
-
- pCan->TDB1 = data;
-
- /*Write transmission request*/
- pCan->CMR = 0x21;
-
- return SUCCESS;
- }
-
- //check status of Transmit Buffer 2
- else if((pCan->SR) & (1 << 10))
- {
- /* Transmit Channel 2 is available */
- /* Write frame informations and frame data into its CANxTFI2,
- * CANxTID2, CANxTDA2, CANxTDB2 register */
- pCan->TFI2 &= ~0x000F0000;
-
- pCan->TFI2 |= (CAN_Msg->len) << 16;
-
- if(CAN_Msg->type == REMOTE_FRAME)
- {
- pCan->TFI2 |= (1 << 30); //set bit RTR
- }
- else
- {
- pCan->TFI2 &= ~(1 << 30);
- }
-
- if(CAN_Msg->format == EXT_ID_FORMAT)
- {
- pCan->TFI2 |= (((uint32_t)1) << 31); //set bit FF
- }
- else
- {
- pCan->TFI2 &= ~(((uint32_t)1) << 31);
- }
-
- /* Write CAN ID*/
- pCan->TID2 = CAN_Msg->id;
-
- /*Write first 4 data bytes*/
- data = (CAN_Msg->dataA[0]) | (((CAN_Msg->dataA[1])) << 8) | ((CAN_Msg->dataA[2]) << 16)|((CAN_Msg->dataA[3]) << 24);
-
- pCan->TDA2 = data;
-
- /*Write second 4 data bytes*/
- data = (CAN_Msg->dataB[0]) | (((CAN_Msg->dataB[1])) << 8) | ((CAN_Msg->dataB[2]) << 16) | ((CAN_Msg->dataB[3]) << 24);
-
- pCan->TDB2 = data;
-
- /*Write transmission request*/
- pCan->CMR = 0x41;
-
- return SUCCESS;
- }
-
- //check status of Transmit Buffer 3
- else if (pCan->SR & (1<<18))
- {
- /* Transmit Channel 3 is available */
- /* Write frame informations and frame data into its CANxTFI3,
- * CANxTID3, CANxTDA3, CANxTDB3 register */
- pCan->TFI3 &= ~0x000F0000;
-
- pCan->TFI3 |= (CAN_Msg->len) << 16;
-
- if(CAN_Msg->type == REMOTE_FRAME)
- {
- pCan->TFI3 |= (1 << 30); //set bit RTR
- }
- else
- {
- pCan->TFI3 &= ~(1 << 30);
- }
-
- if(CAN_Msg->format == EXT_ID_FORMAT)
- {
- pCan->TFI3 |= (((uint32_t)1) << 31); //set bit FF
- }
- else
- {
- pCan->TFI3 &= ~(((uint32_t)1) << 31);
- }
-
- /* Write CAN ID*/
- pCan->TID3 = CAN_Msg->id;
-
- /*Write first 4 data bytes*/
- data = (CAN_Msg->dataA[0]) | (((CAN_Msg->dataA[1])) << 8) | ((CAN_Msg->dataA[2]) << 16) | ((CAN_Msg->dataA[3]) << 24);
-
- pCan->TDA3 = data;
-
- /*Write second 4 data bytes*/
- data = (CAN_Msg->dataB[0]) | (((CAN_Msg->dataB[1])) << 8) | ((CAN_Msg->dataB[2]) << 16) | ((CAN_Msg->dataB[3]) << 24);
-
- pCan->TDB3 = data;
-
- /*Write transmission request*/
- pCan->CMR = 0x81;
-
- return SUCCESS;
- }
- else
- {
- return ERROR;
- }
-}
-
-/********************************************************************//**
- * @brief Receive message data
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] CAN_Msg point to the CAN_MSG_Type Struct, it will contain received
- * message information such as: ID, DLC, RTR, ID Format
- * @return Status:
- * - SUCCESS: receive message successfully
- * - ERROR: receive message unsuccessfully
- *********************************************************************/
-Status CAN_ReceiveMsg (uint8_t canId, CAN_MSG_Type *CAN_Msg)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- uint32_t data;
-
- //check status of Receive Buffer
- if((pCan->SR &0x00000001))
- {
- /* Receive message is available */
- /* Read frame informations */
- CAN_Msg->format = (uint8_t)(((pCan->RFS) & 0x80000000) >> 31);
-
- CAN_Msg->type = (uint8_t)(((pCan->RFS) & 0x40000000) >> 30);
-
- CAN_Msg->len = (uint8_t)(((pCan->RFS) & 0x000F0000) >> 16);
-
- /* Read CAN message identifier */
- CAN_Msg->id = pCan->RID;
-
- /* Read the data if received message was DATA FRAME */
- if (CAN_Msg->type == DATA_FRAME)
- {
- /* Read first 4 data bytes */
- data = pCan->RDA;
-
- *((uint8_t *) &CAN_Msg->dataA[0])= data & 0x000000FF;
-
- *((uint8_t *) &CAN_Msg->dataA[1])= (data & 0x0000FF00) >> 8;;
-
- *((uint8_t *) &CAN_Msg->dataA[2])= (data & 0x00FF0000) >> 16;
-
- *((uint8_t *) &CAN_Msg->dataA[3])= (data & 0xFF000000) >> 24;
-
- /* Read second 4 data bytes */
- data = pCan->RDB;
-
- *((uint8_t *) &CAN_Msg->dataB[0])= data & 0x000000FF;
-
- *((uint8_t *) &CAN_Msg->dataB[1])= (data & 0x0000FF00) >> 8;
-
- *((uint8_t *) &CAN_Msg->dataB[2])= (data & 0x00FF0000) >> 16;
-
- *((uint8_t *) &CAN_Msg->dataB[3])= (data & 0xFF000000) >> 24;
-
- /*release receive buffer*/
- pCan->CMR = 0x04;
- }
- else
- {
- /* Received Frame is a Remote Frame, not have data, we just receive
- * message information only */
- pCan->CMR = 0x04; /*release receive buffer*/
-
- return SUCCESS;
- }
- }
- else
- {
- // no receive message available
- return ERROR;
- }
-
- return SUCCESS;
-}
-
-/********************************************************************//**
- * @brief Receive FullCAN Object
- * @param[in] CANAFx: CAN Acceptance Filter register, should be: LPC_CANAF
- * @param[in] CAN_Msg point to the CAN_MSG_Type Struct, it will contain received
- * message information such as: ID, DLC, RTR, ID Format
- * @return CAN_ERROR, could be:
- * - CAN_FULL_OBJ_NOT_RCV: FullCAN Object is not be received
- * - CAN_OK: Received FullCAN Object successful
- *
- *********************************************************************/
-CAN_ERROR FCAN_ReadObj (CAN_MSG_Type *CAN_Msg)
-{
- uint32_t *pSrc, data;
- uint32_t interrut_word, msg_idx, test_bit, head_idx, tail_idx;
-
- interrut_word = 0;
-
- if (LPC_CANAF->FCANIC0 != 0)
- {
- interrut_word = LPC_CANAF->FCANIC0;
-
- head_idx = 0;
-
- tail_idx = 31;
- }
- else if (LPC_CANAF->FCANIC1 != 0)
- {
- interrut_word = LPC_CANAF->FCANIC1;
-
- head_idx = 32;
-
- tail_idx = 63;
- }
-
- if (interrut_word != 0)
- {
- /* Detect for interrupt pending */
- msg_idx = 0;
-
- for (msg_idx = head_idx; msg_idx <= tail_idx; msg_idx++)
- {
- test_bit = interrut_word & 0x1;
-
- interrut_word = interrut_word >> 1;
-
- if (test_bit)
- {
- pSrc = (uint32_t *) (LPC_CANAF->ENDofTable + LPC_CANAF_RAM_BASE + msg_idx * 12);
-
- /* Has been finished updating the content */
- if ((*pSrc & 0x03000000L) == 0x03000000L)
- {
- /*clear semaphore*/
- *pSrc &= 0xFCFFFFFF;
-
- /*Set to DatA*/
- pSrc++;
-
- /* Copy to dest buf */
- data = *pSrc;
-
- *((uint8_t *) &CAN_Msg->dataA[0])= data & 0x000000FF;
-
- *((uint8_t *) &CAN_Msg->dataA[1])= (data & 0x0000FF00) >> 8;
-
- *((uint8_t *) &CAN_Msg->dataA[2])= (data & 0x00FF0000) >> 16;
-
- *((uint8_t *) &CAN_Msg->dataA[3])= (data & 0xFF000000) >> 24;
-
- /*Set to DatB*/
- pSrc++;
-
- /* Copy to dest buf */
- data = *pSrc;
-
- *((uint8_t *) &CAN_Msg->dataB[0])= data & 0x000000FF;
-
- *((uint8_t *) &CAN_Msg->dataB[1])= (data & 0x0000FF00) >> 8;
-
- *((uint8_t *) &CAN_Msg->dataB[2])= (data & 0x00FF0000) >> 16;
-
- *((uint8_t *) &CAN_Msg->dataB[3])= (data & 0xFF000000) >> 24;
-
- /*Back to Dat1*/
- pSrc -= 2;
-
- CAN_Msg->id = *pSrc & 0x7FF;
-
- CAN_Msg->len = (uint8_t) (*pSrc >> 16) & 0x0F;
-
- CAN_Msg->format = 0; //FullCAN Object ID always is 11-bit value
-
- CAN_Msg->type = (uint8_t)(*pSrc >> 30) &0x01;
-
- /*Re-read semaphore*/
- if ((*pSrc & 0x03000000L) == 0)
- {
- return CAN_OK;
- }
- }
- }
- }
- }
-
- return CAN_FULL_OBJ_NOT_RCV;
-}
-
-/********************************************************************//**
- * @brief Get CAN Control Status
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] arg: type of CAN status to get from CAN status register
- * Should be:
- * - CANCTRL_GLOBAL_STS: CAN Global Status
- * - CANCTRL_INT_CAP: CAN Interrupt and Capture
- * - CANCTRL_ERR_WRN: CAN Error Warning Limit
- * - CANCTRL_STS: CAN Control Status
- * @return Current Control Status that you want to get value
- *********************************************************************/
-uint32_t CAN_GetCTRLStatus (uint8_t canId, CAN_CTRL_STS_Type arg)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- switch (arg)
- {
- case CANCTRL_GLOBAL_STS:
- return pCan->GSR;
-
- case CANCTRL_INT_CAP:
- return pCan->ICR;
-
- case CANCTRL_ERR_WRN:
- return pCan->EWL;
-
- default: // CANCTRL_STS
- return pCan->SR;
- }
-}
-/********************************************************************//**
- * @brief Get CAN Central Status
- * @param[in] CANCRx point to LPC_CANCR_TypeDef, should be: LPC_CANCR
- * @param[in] arg: type of CAN status to get from CAN Central status register
- * Should be:
- * - CANCR_TX_STS: Central CAN Tx Status
- * - CANCR_RX_STS: Central CAN Rx Status
- * - CANCR_MS: Central CAN Miscellaneous Status
- * @return Current Central Status that you want to get value
- *********************************************************************/
-uint32_t CAN_GetCRStatus (CAN_CR_STS_Type arg)
-{
- switch (arg)
- {
- case CANCR_TX_STS:
- return LPC_CANCR->TxSR;
-
- case CANCR_RX_STS:
- return LPC_CANCR->RxSR;
-
- default: // CANCR_MS
- return LPC_CANCR->MSR;
- }
-}
-/********************************************************************//**
- * @brief Enable/Disable CAN Interrupt
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] arg: type of CAN interrupt that you want to enable/disable
- * Should be:
- * - CANINT_RIE: CAN Receiver Interrupt Enable
- * - CANINT_TIE1: CAN Transmit Interrupt Enable
- * - CANINT_EIE: CAN Error Warning Interrupt Enable
- * - CANINT_DOIE: CAN Data Overrun Interrupt Enable
- * - CANINT_WUIE: CAN Wake-Up Interrupt Enable
- * - CANINT_EPIE: CAN Error Passive Interrupt Enable
- * - CANINT_ALIE: CAN Arbitration Lost Interrupt Enable
- * - CANINT_BEIE: CAN Bus Error Interrupt Enable
- * - CANINT_IDIE: CAN ID Ready Interrupt Enable
- * - CANINT_TIE2: CAN Transmit Interrupt Enable for Buffer2
- * - CANINT_TIE3: CAN Transmit Interrupt Enable for Buffer3
- * - CANINT_FCE: FullCAN Interrupt Enable
- * @param[in] NewState: New state of this function, should be:
- * - ENABLE
- * - DISABLE
- * @return none
- *********************************************************************/
-void CAN_IRQCmd (uint8_t canId, CAN_INT_EN_Type arg, FunctionalState NewState)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- if(NewState == ENABLE)
- {
- if(arg == CANINT_FCE)
- {
- LPC_CANAF->AFMR = 0x01;
-
- LPC_CANAF->FCANIE = 0x01;
-
- LPC_CANAF->AFMR = 0x04;
- }
- else
- pCan->IER |= (1 << arg);
- }
- else
- {
- if(arg == CANINT_FCE)
- {
- LPC_CANAF->AFMR = 0x01;
-
- LPC_CANAF->FCANIE = 0x01;
-
- LPC_CANAF->AFMR = 0x00;
- }
- else
- pCan->IER &= ~(1 << arg);
- }
-}
-
-/********************************************************************//**
- * @brief Setting Acceptance Filter mode
- * @param[in] CANAFx point to LPC_CANAF_TypeDef object, should be: LPC_CANAF
- * @param[in] AFMode: type of AF mode that you want to set, should be:
- * - CAN_NORMAL: Normal mode
- * - CAN_ACC_OFF: Acceptance Filter Off Mode
- * - CAN_ACC_BP: Acceptance Fileter Bypass Mode
- * - CAN_EFCAN: FullCAN Mode Enhancement
- * @return none
- *********************************************************************/
-void CAN_SetAFMode (CAN_AFMODE_Type AFMode)
-{
- switch(AFMode)
- {
- case CAN_NORMAL:
- LPC_CANAF->AFMR = 0x00;
- break;
-
- case CAN_ACC_OFF:
- LPC_CANAF->AFMR = 0x01;
- break;
-
- case CAN_ACC_BP:
- LPC_CANAF->AFMR = 0x02;
- break;
-
- case CAN_EFCAN:
- LPC_CANAF->AFMR = 0x04;
- break;
- }
-}
-
-/********************************************************************//**
- * @brief Enable/Disable CAN Mode
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] mode: type of CAN mode that you want to enable/disable, should be:
- * - CAN_OPERATING_MODE: Normal Operating Mode
- * - CAN_RESET_MODE: Reset Mode
- * - CAN_LISTENONLY_MODE: Listen Only Mode
- * - CAN_SELFTEST_MODE: Self Test Mode
- * - CAN_TXPRIORITY_MODE: Transmit Priority Mode
- * - CAN_SLEEP_MODE: Sleep Mode
- * - CAN_RXPOLARITY_MODE: Receive Polarity Mode
- * - CAN_TEST_MODE: Test Mode
- * @param[in] NewState: New State of this function, should be:
- * - ENABLE
- * - DISABLE
- * @return none
- *********************************************************************/
-void CAN_ModeConfig(uint8_t canId, CAN_MODE_Type mode, FunctionalState NewState)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- switch(mode)
- {
- case CAN_OPERATING_MODE:
- pCan->MOD = 0x00;
- break;
-
- case CAN_RESET_MODE:
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_RM;
- else
- pCan->MOD &= ~CAN_MOD_RM;
-
- break;
-
- case CAN_LISTENONLY_MODE:
- pCan->MOD |=CAN_MOD_RM;//Enter Reset mode
-
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_LOM;
- else
- pCan->MOD &= ~ CAN_MOD_LOM;
-
- pCan->MOD &= ~ CAN_MOD_RM;//Release Reset mode
-
- break;
-
- case CAN_SELFTEST_MODE:
- pCan->MOD |= CAN_MOD_RM;//Enter Reset mode
-
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_STM;
- else
- pCan->MOD &= ~ CAN_MOD_STM;
-
- pCan->MOD &= ~ CAN_MOD_RM;//Release Reset mode
-
- break;
-
- case CAN_TXPRIORITY_MODE:
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_TPM;
- else
- pCan->MOD &= ~ CAN_MOD_TPM;
-
- break;
-
- case CAN_SLEEP_MODE:
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_SM;
- else
- pCan->MOD &= ~ CAN_MOD_SM;
-
- break;
-
- case CAN_RXPOLARITY_MODE:
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_RPM;
- else
- pCan->MOD &= ~ CAN_MOD_RPM;
-
- break;
-
- case CAN_TEST_MODE:
- if(NewState == ENABLE)
- pCan->MOD |= CAN_MOD_TM;
- else
- pCan->MOD &= ~ CAN_MOD_TM;
-
- break;
- }
-}
-/*********************************************************************//**
- * @brief Set CAN command request
- * @param[in] canId The Id of the expected CAN component
- *
- * @param[in] CMRType command request type, should be:
- * - CAN_CMR_TR: Transmission request
- * - CAN_CMR_AT: Abort Transmission request
- * - CAN_CMR_RRB: Release Receive Buffer request
- * - CAN_CMR_CDO: Clear Data Overrun request
- * - CAN_CMR_SRR: Self Reception request
- * - CAN_CMR_STB1: Select Tx Buffer 1 request
- * - CAN_CMR_STB2: Select Tx Buffer 2 request
- * - CAN_CMR_STB3: Select Tx Buffer 3 request
- * @return CANICR (CAN interrupt and Capture register) value
- **********************************************************************/
-void CAN_SetCommand(uint8_t canId, uint32_t CMRType)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- pCan->CMR |= CMRType;
-}
-
-/*********************************************************************//**
- * @brief Get CAN interrupt status
- * @param[in] canId The Id of the expected CAN component
- *
- * @return CANICR (CAN interrupt and Capture register) value
- **********************************************************************/
-uint32_t CAN_IntGetStatus(uint8_t canId)
-{
- LPC_CAN_TypeDef* pCan = CAN_GetPointer(canId);
-
- return pCan->ICR;
-}
-
-/*********************************************************************//**
- * @brief Check if FullCAN interrupt enable or not
- * @param[in] CANAFx point to LPC_CANAF_TypeDef object, should be: LPC_CANAF
- * @return IntStatus, could be:
- * - SET: if FullCAN interrupt is enable
- * - RESET: if FullCAN interrupt is disable
- **********************************************************************/
-IntStatus CAN_FullCANIntGetStatus (void)
-{
- if (LPC_CANAF->FCANIE)
- return SET;
-
- return RESET;
-}
-
-/*********************************************************************//**
- * @brief Get value of FullCAN interrupt and capture register
- * @param[in] CANAFx point to LPC_CANAF_TypeDef object, should be: LPC_CANAF
- * @param[in] type: FullCAN IC type, should be:
- * - FULLCAN_IC0: FullCAN Interrupt Capture 0
- * - FULLCAN_IC1: FullCAN Interrupt Capture 1
- * @return FCANIC0 or FCANIC1 (FullCAN interrupt and Capture register) value
- **********************************************************************/
-uint32_t CAN_FullCANPendGetStatus(FullCAN_IC_Type type)
-{
- if (type == FULLCAN_IC0)
- return LPC_CANAF->FCANIC0;
-
- return LPC_CANAF->FCANIC1;
-}
-/* End of Public Variables ---------------------------------------------------------- */
-/**
- * @}
- */
-#endif /*_CAN*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_clkpwr.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_clkpwr.c
deleted file mode 100644
index fc41687637..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_clkpwr.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_clkpwr.c 2011-06-02
-*//**
-* @file lpc_clkpwr.c
-* @brief Contains all functions support for Clock and Power Control
-* firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup CLKPWR
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _CLKPWR
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_clkpwr.h"
-
-uint32_t USBFrequency = 0;
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup CLKPWR_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Set value of each Peripheral Clock Selection
- * @param[in] ClkType clock type that will be divided, should be:
- * - CLKPWR_CLKTYPE_CPU : CPU clock
- * - CLKPWR_CLKTYPE_PER : Peripheral clock
- * - CLKPWR_CLKTYPE_EMC : EMC clock
- * - CLKPWR_CLKTYPE_USB : USB clock
- * @param[in] DivVal Value of divider. This value should be set as follows:
- * - CPU clock: DivVal must be in range: 0..31
- * - Peripheral clock: DivVal must be in range: 0..31
- * - EMC clock: DivVal must be:
- * + 0: The EMC uses the same clock as the CPU
- * + 1: The EMC uses a clock at half the rate of the CPU
- * - USB clock: DivVal must be:
- * + 0: the divider is turned off, no clock will
- * be provided to the USB subsystem
- * + 4: PLL0 output is divided by 4. PLL0 output must be 192MHz
- * + 6: PLL0 output is divided by 6. PLL0 output must be 288MHz
- * @return none
- * Note: Pls assign right DivVal, this function will not check if it is illegal.
- **********************************************************************/
-void CLKPWR_SetCLKDiv (uint8_t ClkType, uint8_t DivVal)
-{
- uint32_t tmp;
- switch(ClkType)
- {
- case CLKPWR_CLKTYPE_CPU:
- tmp = LPC_SC->CCLKSEL & ~(0x1F);
- tmp |= DivVal & 0x1F;
- LPC_SC->CCLKSEL = tmp;
- SystemCoreClockUpdate(); //Update clock
- break;
- case CLKPWR_CLKTYPE_PER:
- tmp = LPC_SC->PCLKSEL & ~(0x1F);
- tmp |= DivVal & 0x1F;
- LPC_SC->PCLKSEL = tmp;
- SystemCoreClockUpdate(); //Update clock
- break;
- case CLKPWR_CLKTYPE_EMC:
- tmp = LPC_SC->EMCCLKSEL & ~(0x01);
- tmp |= DivVal & 0x01;
- LPC_SC->EMCCLKSEL = tmp;
- SystemCoreClockUpdate(); //Update clock
- break;
- case CLKPWR_CLKTYPE_USB:
- tmp = LPC_SC->USBCLKSEL & ~(0x1F);
- tmp |= DivVal & 0x1F;
- LPC_SC->USBCLKSEL |= DivVal & 0x1F;
- SystemCoreClockUpdate(); //Update clock
- break;
- default:
- while(1);//Error Loop;
- }
-}
-
-/*********************************************************************//**
- * @brief Get current clock value
- * @param[in] ClkType clock type that will be divided, should be:
- * - CLKPWR_CLKTYPE_CPU : CPU clock
- * - CLKPWR_CLKTYPE_PER : Peripheral clock
- * - CLKPWR_CLKTYPE_EMC : EMC clock
- * - CLKPWR_CLKTYPE_USB : USB clock
- **********************************************************************/
-uint32_t CLKPWR_GetCLK (uint8_t ClkType)
-{
- switch(ClkType)
- {
- case CLKPWR_CLKTYPE_CPU:
- return SystemCoreClock;
-
- case CLKPWR_CLKTYPE_PER:
- return PeripheralClock;
-
- case CLKPWR_CLKTYPE_EMC:
- return EMCClock;
-
- case CLKPWR_CLKTYPE_USB:
- return USBClock;
-
- default:
- while(1);//error loop
- }
-}
-
-/*********************************************************************//**
- * @brief Configure power supply for each peripheral according to NewState
- * @param[in] PPType Type of peripheral used to enable power,
- * should be one of the following:
- * - CLKPWR_PCONP_PCLCD : LCD
- * - CLKPWR_PCONP_PCTIM0 : Timer 0
- * - CLKPWR_PCONP_PCTIM1 : Timer 1
- * - CLKPWR_PCONP_PCUART0 : UART 0
- * - CLKPWR_PCONP_PCUART1 : UART 1
- * - CLKPWR_PCONP_PCPWM0 : PWM 0
- * - CLKPWR_PCONP_PCPWM1 : PWM 1
- * - CLKPWR_PCONP_PCI2C0 : I2C 0
- * - CLKPWR_PCONP_PCUART4 : UART4
- * - CLKPWR_PCONP_PCLCD : LCD
- * - CLKPWR_PCONP_PCTIM0 : Timer 0
- * - CLKPWR_PCONP_PCRTC : RTC
- * - CLKPWR_PCONP_PCSSP1 : SSP 1
- * - CLKPWR_PCONP_PCEMC : EMC
- * - CLKPWR_PCONP_PCADC : ADC
- * - CLKPWR_PCONP_PCAN1 : CAN 1
- * - CLKPWR_PCONP_PCAN2 : CAN 2
- * - CLKPWR_PCONP_PCGPIO : GPIO
- * - CLKPWR_PCONP_PCMC : MCPWM
- * - CLKPWR_PCONP_PCQEI : QEI
- * - CLKPWR_PCONP_PCI2C1 : I2C 1
- * - CLKPWR_PCONP_PCSSP2 : SSP 2
- * - CLKPWR_PCONP_PCSSP0 : SSP 0
- * - CLKPWR_PCONP_PCTIM2 : Timer 2
- * - CLKPWR_PCONP_PCTIM3 : Timer 3
- * - CLKPWR_PCONP_PCUART2 : UART 2
- * - CLKPWR_PCONP_PCUART3 : UART 3
- * - CLKPWR_PCONP_PCI2C2 : I2C 2
- * - CLKPWR_PCONP_PCI2S : I2S
- * - CLKPWR_PCONP_PCSDC : SDC
- * - CLKPWR_PCONP_PCGPDMA : GPDMA
- * - CLKPWR_PCONP_PCENET : Ethernet
- * - CLKPWR_PCONP_PCUSB : USB
- *
- * @param[in] NewState New state of Peripheral Power, should be:
- * - ENABLE : Enable power for this peripheral
- * - DISABLE : Disable power for this peripheral
- *
- * @return none
- **********************************************************************/
-void CLKPWR_ConfigPPWR (uint32_t PPType, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- LPC_SC->PCONP |= PPType;
- }
- else if (NewState == DISABLE)
- {
- LPC_SC->PCONP &= ~PPType;
- }
-}
-
-#if 0
-// nxp21346
-/*********************************************************************//**
- * @brief Configure hardware reset for each peripheral according to NewState
- * @param[in] PPType Type of peripheral used to enable power,
- * should be one of the following:
- * - CLKPWR_RSTCON0_LCD : LCD
- * - CLKPWR_RSTCON0_TIM0 : Timer 0
- - CLKPWR_RSTCON0_TIM1 : Timer 1
- - CLKPWR_RSTCON0_UART0 : UART 0
- - CLKPWR_RSTCON0_UART1 : UART 1
- - CLKPWR_RSTCON0_PWM0 : PWM 0
- - CLKPWR_RSTCON0_PWM1 : PWM 1
- - CLKPWR_RSTCON0_I2C0 : I2C 0
- - CLKPWR_RSTCON0_UART4 : UART 4
- - CLKPWR_RSTCON0_RTC : RTC
- - CLKPWR_RSTCON0_SSP1 : SSP 1
- - CLKPWR_RSTCON0_EMC : EMC
- - CLKPWR_RSTCON0_ADC : ADC
- - CLKPWR_RSTCON0_CAN1 : CAN 1
- - CLKPWR_RSTCON0_CAN2 : CAN 2
- - CLKPWR_RSTCON0_GPIO : GPIO
- - CLKPWR_RSTCON0_MCPWM : MCPWM
- - CLKPWR_RSTCON0_QEI : QEI
- - CLKPWR_RSTCON0_I2C1 : I2C 1
- - CLKPWR_RSTCON0_SSP2 : SSP 2
- - CLKPWR_RSTCON0_SSP0 : SSP 0
- - CLKPWR_RSTCON0_TIM2 : Timer 2
- - CLKPWR_RSTCON0_TIM3 : Timer 3
- - CLKPWR_RSTCON0_UART2 : UART 2
- - CLKPWR_RSTCON0_UART3 : UART 3
- - CLKPWR_RSTCON0_I2C2 : I2C 2
- - CLKPWR_RSTCON0_I2S : I2S
- - CLKPWR_RSTCON0_SDC : SDC
- - CLKPWR_RSTCON0_GPDMA : GPDMA
- - CLKPWR_RSTCON0_ENET : Ethernet
- - CLKPWR_RSTCON0_USB : USB
- *
- * @param[in] NewState New state of Peripheral Power, should be:
- * - ENABLE : Enable power for this peripheral
- * - DISABLE : Disable power for this peripheral
- *
- * @return none
- **********************************************************************/
-void CLKPWR_ConfigReset(uint8_t PType, FunctionalState NewState)
-{
- if(PType < 32)
- {
- if(NewState == ENABLE)
- LPC_SC->RSTCON0 |=(1<<PType);
- else
- LPC_SC->RSTCON0 &=~(1<<PType);
- }
- else
- {
- if(NewState == ENABLE)
- LPC_SC->RSTCON1 |= (1<<(PType - 31));
- else
- LPC_SC->RSTCON1 &= ~(1<<(PType - 31));
- }
-}
-// nxp21346
-#endif
-
-/*********************************************************************//**
- * @brief Enter Sleep mode with co-operated instruction by the Cortex-M3.
- * @param[in] None
- * @return None
- **********************************************************************/
-void CLKPWR_Sleep(void)
-{
- LPC_SC->PCON = 0x00;
- /* Sleep Mode*/
- __WFI();
-}
-
-
-/*********************************************************************//**
- * @brief Enter Deep Sleep mode with co-operated instruction by the Cortex-M3.
- * @param[in] None
- * @return None
- **********************************************************************/
-void CLKPWR_DeepSleep(void)
-{
- /* Deep-Sleep Mode, set SLEEPDEEP bit */
- SCB->SCR = 0x4;
- LPC_SC->PCON = 0x00;
- /* Deep Sleep Mode*/
- __WFI();
-}
-
-
-/*********************************************************************//**
- * @brief Enter Power Down mode with co-operated instruction by the Cortex-M3.
- * @param[in] None
- * @return None
- **********************************************************************/
-void CLKPWR_PowerDown(void)
-{
- /* Deep-Sleep Mode, set SLEEPDEEP bit */
- SCB->SCR = 0x4;
- LPC_SC->PCON = 0x01;
- /* Power Down Mode*/
- __WFI();
-}
-
-
-/*********************************************************************//**
- * @brief Enter Deep Power Down mode with co-operated instruction by the Cortex-M3.
- * @param[in] None
- * @return None
- **********************************************************************/
-void CLKPWR_DeepPowerDown(void)
-{
- /* Deep-Sleep Mode, set SLEEPDEEP bit */
- SCB->SCR = 0x4;
- LPC_SC->PCON = 0x03;
- /* Deep Power Down Mode*/
- __WFI();
-}
-
-/**
- * @}
- */
-
-#endif /*_CLKPWR*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_crc.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_crc.c
deleted file mode 100644
index 8d74c052ea..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_crc.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_crc.c 2011-06-02
-*//**
-* @file lpc_crc.c
-* @brief Contains all functions support for CRC firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _CRC
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_crc.h"
-#include "lpc_clkpwr.h"
-
-/* Private Variables ----------------------------------------------------------- */
-volatile CRC_Type crc_cur_type;
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup CRC_Public_Functions
- * @{
- */
-/*********************************************************************//**
- * @brief Initialize CRC operation
- * @param[in] CRCType CRC standard type, should be:
- * - CRC_POLY_CRCCCITT: CRC-CCITT polynomial
- * - CRC_POLY_CRC16: CRC-16 polynomial
- * - CRC_POLY_CRC32: CRC-32 polynomial
- * @return None
- **********************************************************************/
-void CRC_Init(CRC_Type CRCType)
-{
- if(CRCType == CRC_POLY_CRCCCITT)
- {
- LPC_CRC->MODE = 0x00;
- LPC_CRC->SEED = 0xFFFF;
- crc_cur_type = CRC_POLY_CRCCCITT;
- }
- else if(CRCType == CRC_POLY_CRC16)
- {
- LPC_CRC->MODE = 0x15;
- LPC_CRC->SEED = 0x0000;
- crc_cur_type = CRC_POLY_CRC16;
-
- }
- else if(CRCType == CRC_POLY_CRC32)
- {
- LPC_CRC->MODE = 0x36;
- LPC_CRC->SEED = 0xFFFFFFFF;
- crc_cur_type = CRC_POLY_CRC32;
- }
- else
- {
- //Invalid input parameter
- while(1);//error loop
- }
-}
-/*********************************************************************//**
- * @brief CRC reset
- * @param[in] None
- * @return None
- **********************************************************************/
-void CRC_Reset(void)
-{
- if(crc_cur_type == CRC_POLY_CRCCCITT)
- LPC_CRC->SEED = 0xFFFF;
- else if (crc_cur_type == CRC_POLY_CRC16)
- LPC_CRC->SEED = 0x0000;
- else if (crc_cur_type == CRC_POLY_CRC32)
- LPC_CRC->SEED = 0xFFFFFFFF;
-}
-
-/*********************************************************************//**
- * @brief CRC data checksum calculation
- * @param[in] data input data
- * @return data checksum result
- **********************************************************************/
-uint32_t CRC_CalcDataChecksum(uint32_t data, CRC_WR_SIZE SizeType)
-{
- if(SizeType == CRC_WR_8BIT)
- LPC_CRC->WR_DATA_BYTE.DATA = (uint8_t)data;
- else if(SizeType == CRC_WR_16BIT)
- LPC_CRC->WR_DATA_WORD.DATA = (uint16_t)data;
- else
- LPC_CRC->WR_DATA_DWORD.DATA = data;
- return(LPC_CRC->SUM);
-}
-
-/*********************************************************************//**
- * @brief CRC block data checksum calculation
- * @param[in] blockdata pointer to block input data
- * @param[in] blocksize size of block data
- * @param[in] SizeType size of data width per write, should be:
- - CRC_WR_8BIT : 8-bit write
- - CRC_WR_16BIT: 16-bit write
- - CRC_WR_32BIT: 32-bit write
- * @return block data checksum result
- **********************************************************************/
-uint32_t CRC_CalcBlockChecksum(void *block_data, uint32_t block_size, CRC_WR_SIZE data_size)
-{
- uint8_t *data = (uint8_t*) block_data;
-
- while(block_size !=0) {
-
- switch(data_size) {
-
- case CRC_WR_8BIT:
- {
- uint8_t *tmp = data;
- LPC_CRC->WR_DATA_BYTE.DATA = *tmp;
- data++;
- }
- break;
- case CRC_WR_16BIT:
- {
- uint16_t *tmp = (uint16_t*)data;
- LPC_CRC->WR_DATA_WORD.DATA = *tmp;
- data +=2;
- }
- break;
- default:
- {
- uint32_t *tmp = (uint32_t*)data;
- LPC_CRC->WR_DATA_DWORD.DATA = *tmp;
- data += 4;
- }
- break;
- }
- block_size--;
- }
- return(LPC_CRC->SUM);
-}
-
-/**
- * @}
- */
-#endif /*_CRC*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_dac.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_dac.c
deleted file mode 100644
index 29e126d085..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_dac.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_dac.c 2011-06-02
-*//**
-* @file lpc_dac.c
-* @brief Contains all functions support for DAC firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup DAC
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _DAC
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_dac.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-/* Private Functions ---------------------------------------------------------- */
-
-/*********************************************************************//**
- * @brief Get pointer to DAC peripheral
- * @param[in] compId Component ID, normally is zero (0).
- * @param[in] pinnum Pin number value, should be in range from 0..31
- * @return Pointer to DAC peripheral component
- **********************************************************************/
-static LPC_DAC_TypeDef * DAC_GetPointer(uint8_t compId)
-{
- LPC_DAC_TypeDef *pComponent = LPC_DAC;
-
- return pComponent;
-}
-
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup DAC_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Initial ADC configuration
- * - Maximum current is 700 uA
- * - Value to AOUT is 0
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @return None
- ***********************************************************************/
-void DAC_Init(uint8_t DAC_Id)
-{
- /*
- * Init DAC pin connect
- * AOUT on P0.26
- */
- PINSEL_ConfigPin(0, 26, 2);
-
- PINSEL_SetAnalogPinMode(0,26,ENABLE);
-
- //Enable DAC for the pin
- PINSEL_DacEnable(0, 26, ENABLE);
-
- //Set maximum current output as default
- DAC_SetBias(DAC_Id, DAC_MAX_CURRENT_700uA);
-}
-
-/*********************************************************************//**
- * @brief Update value to DAC
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @param[in] dac_value : value 10 bit to be converted to output
- * @return None
- ***********************************************************************/
-void DAC_UpdateValue (uint8_t DAC_Id,uint32_t dac_value)
-{
- uint32_t tmp;
-
- LPC_DAC_TypeDef* pDac = DAC_GetPointer(DAC_Id);
-
- tmp = pDac->CR & DAC_BIAS_EN;
-
- tmp |= DAC_VALUE(dac_value);
-
- // Update value
- pDac->CR = tmp;
-}
-
-/*********************************************************************//**
- * @brief Set Maximum current for DAC
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @param[in] bias : 0 is 700 uA
- * 1 350 uA
- * @return None
- ***********************************************************************/
-void DAC_SetBias (uint8_t DAC_Id, uint32_t bias)
-{
- LPC_DAC_TypeDef* pDac = DAC_GetPointer(DAC_Id);
-
- pDac->CR &=~DAC_BIAS_EN;
-
- if (bias == DAC_MAX_CURRENT_350uA)
- {
- pDac->CR |= DAC_BIAS_EN;
- }
-}
-
-/*********************************************************************//**
- * @brief To enable the DMA operation and control DMA timer
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @param[in] DAC_ConverterConfigStruct pointer to DAC_CONVERTER_CFG_Type
- * - DBLBUF_ENA : enable/disable DACR double buffering feature
- * - CNT_ENA : enable/disable timer out counter
- * - DMA_ENA : enable/disable DMA access
- * @return None
- ***********************************************************************/
-void DAC_ConfigDAConverterControl (uint8_t DAC_Id, DAC_CONVERTER_CFG_Type *DAC_ConverterConfigStruct)
-{
- LPC_DAC_TypeDef* pDac = DAC_GetPointer(DAC_Id);
-
- pDac->CTRL &= ~DAC_DACCTRL_MASK;
-
- if (DAC_ConverterConfigStruct->DBLBUF_ENA)
- pDac->CTRL |= DAC_DBLBUF_ENA;
-
- if (DAC_ConverterConfigStruct->CNT_ENA)
- pDac->CTRL |= DAC_CNT_ENA;
-
- if (DAC_ConverterConfigStruct->DMA_ENA)
- pDac->CTRL |= DAC_DMA_ENA;
-}
-
-/*********************************************************************//**
- * @brief Set reload value for interrupt/DMA counter
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @param[in] time_out time out to reload for interrupt/DMA counter
- * @return None
- ***********************************************************************/
-void DAC_SetDMATimeOut(uint8_t DAC_Id, uint32_t time_out)
-{
- LPC_DAC_TypeDef* pDac = DAC_GetPointer(DAC_Id);
-
- pDac->CNTVAL = DAC_CCNT_VALUE(time_out);
-}
-
-
-/*********************************************************************//**
- * @brief Check the interrupt/DMA counter is occured or not because of the timer counter
- * @param[in] DAC_Id the ID of the DAC component that is using, should be: zero (0)
- * @return None
- ***********************************************************************/
-uint8_t DAC_IsIntRequested(uint8_t DAC_Id)
-{
- LPC_DAC_TypeDef* pDac = DAC_GetPointer(DAC_Id);
-
- //Return the INT_DMA_REQ bit of D/A control register
- return (pDac->CTRL & 0x01);
-}
-
-
-/**
- * @}
- */
-#endif /*_DAC*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_eeprom.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_eeprom.c
deleted file mode 100644
index 039a1d4ed3..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_eeprom.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_eeprom.c 2011-06-02
-*//**
-* @file lpc_eeprom.c
-* @brief Contains all functions support for EEPROM firmware library on
-* LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup EEPROM
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _EEPROM
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_eeprom.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-
-/*********************************************************************//**
- * @brief Initial EEPROM
- * @param[in] None
- * @return None
- **********************************************************************/
-void EEPROM_Init(void)
-{
- uint32_t val, cclk;
- LPC_EEPROM->PWRDWN = 0x0;
- /* EEPROM is automate turn on after reset */
- /* Setting clock:
- * EEPROM required a 375kHz. This clock is generated by dividing the
- * system bus clock.
- */
- cclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU);
- val = (cclk/375000)-1;
- LPC_EEPROM->CLKDIV = val;
-
- /* Setting wait state */
- val = ((((cclk / 1000000) * 15) / 1000) + 1);
- val |= (((((cclk / 1000000) * 55) / 1000) + 1) << 8);
- val |= (((((cclk / 1000000) * 35) / 1000) + 1) << 16);
- LPC_EEPROM->WSTATE = val;
-}
-
-/*********************************************************************//**
- * @brief Write data to EEPROM at specific address
- * @param[in] page_offset offset of data in page register(0 - 63)
- * page_address page address (0-62)
- * mode Write mode, should be:
- * - MODE_8_BIT : write 8 bit mode
- * - MODE_16_BIT : write 16 bit mode
- * - MODE_32_BIT : write 32 bit mode
- * data buffer that contain data that will be written to buffer
- * count number written data
- * @return None
- * @note This function actually write data into EEPROM memory and automatically
- * write into next page if current page is overflowed
- **********************************************************************/
-void EEPROM_Write(uint16_t page_offset, uint16_t page_address, void* data, EEPROM_Mode_Type mode, uint32_t count)
-{
- uint32_t i;
- uint8_t *tmp8 = (uint8_t *)data;
- uint16_t *tmp16 = (uint16_t *)data;
- uint32_t *tmp32 = (uint32_t *)data;
-
- LPC_EEPROM->INT_CLR_STATUS = ((1 << EEPROM_ENDOF_RW)|(1 << EEPROM_ENDOF_PROG));
- //check page_offset
- if(mode == MODE_16_BIT){
- if((page_offset & 0x01)!=0) while(1);
- }
- else if(mode == MODE_32_BIT){
- if((page_offset & 0x03)!=0) while(1);
- }
- LPC_EEPROM->ADDR = EEPROM_PAGE_OFFSET(page_offset);
- for(i=0;i<count;i++)
- {
- //update data to page register
- if(mode == MODE_8_BIT){
- LPC_EEPROM->CMD = EEPROM_CMD_8_BIT_WRITE;
- LPC_EEPROM -> WDATA = *tmp8;
- tmp8++;
- page_offset +=1;
- }
- else if(mode == MODE_16_BIT){
- LPC_EEPROM->CMD = EEPROM_CMD_16_BIT_WRITE;
- LPC_EEPROM -> WDATA = *tmp16;
- tmp16++;
- page_offset +=2;
- }
- else{
- LPC_EEPROM->CMD = EEPROM_CMD_32_BIT_WRITE;
- LPC_EEPROM -> WDATA = *tmp32;
- tmp32++;
- page_offset +=4;
- }
- while(!((LPC_EEPROM->INT_STATUS >> EEPROM_ENDOF_RW)&0x01));
- LPC_EEPROM->INT_CLR_STATUS = (1 << EEPROM_ENDOF_RW);
- if((page_offset >= EEPROM_PAGE_SIZE)|(i==count-1)){
- //update to EEPROM memory
- LPC_EEPROM->INT_CLR_STATUS = (0x1 << EEPROM_ENDOF_PROG);
- LPC_EEPROM->ADDR = EEPROM_PAGE_ADRESS(page_address);
- LPC_EEPROM->CMD = EEPROM_CMD_ERASE_PRG_PAGE;
- while(!((LPC_EEPROM->INT_STATUS >> EEPROM_ENDOF_PROG)&0x01));
- LPC_EEPROM->INT_CLR_STATUS = (1 << EEPROM_ENDOF_PROG);
- }
- if(page_offset >= EEPROM_PAGE_SIZE)
- {
- page_offset = 0;
- page_address +=1;
- LPC_EEPROM->ADDR =0;
- if(page_address > EEPROM_PAGE_NUM - 1) page_address = 0;
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Read data to EEPROM at specific address
- * @param[in]
- * data buffer that contain data that will be written to buffer
- * mode Read mode, should be:
- * - MODE_8_BIT : read 8 bit mode
- * - MODE_16_BIT : read 16 bit mode
- * - MODE_32_BIT : read 32 bit mode
- * count number read data (bytes)
- * @return data buffer that contain data that will be read to buffer
- **********************************************************************/
-void EEPROM_Read(uint16_t page_offset, uint16_t page_address, void* data, EEPROM_Mode_Type mode, uint32_t count)
-{
- uint32_t i;
- uint8_t *tmp8 = (uint8_t *)data;
- uint16_t *tmp16 = (uint16_t *)data;
- uint32_t *tmp32 = (uint32_t *)data;
-
- LPC_EEPROM->INT_CLR_STATUS = ((1 << EEPROM_ENDOF_RW)|(1 << EEPROM_ENDOF_PROG));
- LPC_EEPROM->ADDR = EEPROM_PAGE_ADRESS(page_address)|EEPROM_PAGE_OFFSET(page_offset);
- if(mode == MODE_8_BIT)
- LPC_EEPROM->CMD = EEPROM_CMD_8_BIT_READ|EEPROM_CMD_RDPREFETCH;
- else if(mode == MODE_16_BIT){
- LPC_EEPROM->CMD = EEPROM_CMD_16_BIT_READ|EEPROM_CMD_RDPREFETCH;
- //check page_offset
- if((page_offset &0x01)!=0)
- return;
- }
- else{
- LPC_EEPROM->CMD = EEPROM_CMD_32_BIT_READ|EEPROM_CMD_RDPREFETCH;
- //page_offset must be a multiple of 0x04
- if((page_offset & 0x03)!=0)
- return;
- }
-
- //read and store data in buffer
- for(i=0;i<count;i++){
-
- if(mode == MODE_8_BIT){
- *tmp8 = (uint8_t)(LPC_EEPROM -> RDATA);
- tmp8++;
- page_offset +=1;
- }
- else if (mode == MODE_16_BIT)
- {
- *tmp16 = (uint16_t)(LPC_EEPROM -> RDATA);
- tmp16++;
- page_offset +=2;
- }
- else{
- *tmp32 = (uint32_t)(LPC_EEPROM ->RDATA);
- tmp32++;
- page_offset +=4;
- }
- while(!((LPC_EEPROM->INT_STATUS >> EEPROM_ENDOF_RW)&0x01));
- LPC_EEPROM->INT_CLR_STATUS = (1 << EEPROM_ENDOF_RW);
- if((page_offset >= EEPROM_PAGE_SIZE) && (i < count - 1)) {
- page_offset = 0;
- page_address++;
- LPC_EEPROM->ADDR = EEPROM_PAGE_ADRESS(page_address)|EEPROM_PAGE_OFFSET(page_offset);
- if(mode == MODE_8_BIT)
- LPC_EEPROM->CMD = EEPROM_CMD_8_BIT_READ|EEPROM_CMD_RDPREFETCH;
- else if(mode == MODE_16_BIT)
- LPC_EEPROM->CMD = EEPROM_CMD_16_BIT_READ|EEPROM_CMD_RDPREFETCH;
- else
- LPC_EEPROM->CMD = EEPROM_CMD_32_BIT_READ|EEPROM_CMD_RDPREFETCH;
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Erase a page at the specific address
- * @param[in] address EEPROM page address (0-62)
- * @return data buffer that contain data that will be read to buffer
- **********************************************************************/
-void EEPROM_Erase(uint16_t page_address)
-{
- uint32_t i;
- uint32_t count = EEPROM_PAGE_SIZE/4;
-
- LPC_EEPROM->INT_CLR_STATUS = ((1 << EEPROM_ENDOF_RW)|(1 << EEPROM_ENDOF_PROG));
-
- //clear page register
- LPC_EEPROM->ADDR = EEPROM_PAGE_OFFSET(0);
- LPC_EEPROM->CMD = EEPROM_CMD_32_BIT_WRITE;
- for(i=0;i<count;i++)
- {
- LPC_EEPROM->WDATA = 0;
- while(!((LPC_EEPROM->INT_STATUS >> EEPROM_ENDOF_RW)&0x01));
- LPC_EEPROM->INT_CLR_STATUS = (1 << EEPROM_ENDOF_RW);
- }
-
- LPC_EEPROM->INT_CLR_STATUS = (0x1 << EEPROM_ENDOF_PROG);
- LPC_EEPROM->ADDR = EEPROM_PAGE_ADRESS(page_address);
- LPC_EEPROM->CMD = EEPROM_CMD_ERASE_PRG_PAGE;
- while(!((LPC_EEPROM->INT_STATUS >> EEPROM_ENDOF_PROG)&0x01));
- LPC_EEPROM->INT_CLR_STATUS = (1 << EEPROM_ENDOF_PROG);
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable EEPROM power down mdoe
- * @param[in] NewState PowerDown mode state, should be:
- * - ENABLE: Enable power down mode
- * - DISABLE: Disable power down mode
- * @return None
- **********************************************************************/
-void EEPROM_PowerDown(FunctionalState NewState)
-{
- if(NewState == ENABLE)
- LPC_EEPROM->PWRDWN = 0x1;
- else
- LPC_EEPROM->PWRDWN = 0x0;
-}
-
-#endif /*_EEPROM*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_emac.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_emac.c
deleted file mode 100644
index 750b487b54..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_emac.c
+++ /dev/null
@@ -1,1043 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_emac.c 2011-06-02
-*//**
-* @file lpc_emac.c
-* @brief Contains all functions support for Ethernet MAC firmware
-* library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _EMAC
-
-#include "lpc_emac.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup EMAC
- * @{
- */
-
-/************************** PRIVATE VARIABLES *************************/
-
-
-/* MII Mgmt Configuration register - Clock divider setting */
-const uint8_t EMAC_clkdiv[] = { 4, 6, 8, 10, 14, 20, 28, 36, 40, 44, 48, 52, 56, 60, 64 };
-
-/* EMAC Config data */
-static EMAC_CFG_Type EMAC_Configs;
-
-
-/* EMAC local DMA Descriptors */
-
-
-#ifdef __IAR_SYSTEMS_ICC__
-/* Global Tx Buffer data */
-#pragma data_alignment=4
-static uint16_t saFrameBuffers[EMAC_MAX_FRAME_NUM][EMAC_MAX_FRAME_SIZE];
-#else
-/* Global Rx Buffer data */
-static uint16_t __attribute__ ((aligned (4))) saFrameBuffers[EMAC_MAX_FRAME_NUM][EMAC_MAX_FRAME_SIZE];
-#endif
-static uint32_t sulCurrFrameSz = 0;
-static uint8_t sbCurrFrameID = 0;
-
-/***************************** PRIVATE FUNCTION *****************************/
-static void EMAC_UpdateRxConsumeIndex(void);
-static void EMAC_UpdateTxProduceIndex(void);
-static uint32_t EMAC_AllocTxBuff(uint16_t nFrameSize, uint8_t bLastFrame);
-static uint32_t EMAC_GetRxFrameSize(void);
-
-
-/*********************************************************************//**
- * @brief
- * @param[in]
- * @return
- **********************************************************************/
-void rx_descr_init (void)
-{
- unsigned int i;
-
- for (i = 0; i < EMAC_NUM_RX_FRAG; i++)
- {
- RX_DESC_PACKET(i) = RX_BUF(i);
- RX_DESC_CTRL(i) = EMAC_RCTRL_INT | (EMAC_ETH_MAX_FLEN-1);
- RX_STAT_INFO(i) = 0;
- RX_STAT_HASHCRC(i) = 0;
- }
-
- /* Set EMAC Receive Descriptor Registers. */
- LPC_EMAC->RxDescriptor = RX_DESC_BASE;
- LPC_EMAC->RxStatus = RX_STAT_BASE;
- LPC_EMAC->RxDescriptorNumber = EMAC_NUM_RX_FRAG-1;
-
- /* Rx Descriptors Point to 0 */
- LPC_EMAC->RxConsumeIndex = 0;
-}
-
-/*********************************************************************//**
- * @brief
- * @param[in]
- * @return
- **********************************************************************/
-void tx_descr_init (void)
-{
- unsigned int i;
-
- for (i = 0; i < EMAC_NUM_TX_FRAG; i++)
- {
- TX_DESC_PACKET(i) = TX_BUF(i);
- TX_DESC_CTRL(i) = 0;
- TX_STAT_INFO(i) = 0;
- }
-
- /* Set EMAC Transmit Descriptor Registers. */
- LPC_EMAC->TxDescriptor = TX_DESC_BASE;
- LPC_EMAC->TxStatus = TX_STAT_BASE;
- LPC_EMAC->TxDescriptorNumber = EMAC_NUM_TX_FRAG-1;
-
- /* Tx Descriptors Point to 0 */
- LPC_EMAC->TxProduceIndex = 0;
-}
-
-/*********************************************************************//**
- * @brief Set Station MAC address for EMAC module
- * @param[in] abStationAddr Pointer to Station address that contains 6-bytes
- * of MAC address.
- * @return None
- **********************************************************************/
-void setEmacAddr(uint8_t abStationAddr[])
-{
- /* Set the Ethernet MAC Address registers */
- LPC_EMAC->SA0 = ((uint32_t)abStationAddr[5] << 8) | (uint32_t)abStationAddr[4];
- LPC_EMAC->SA1 = ((uint32_t)abStationAddr[3] << 8) | (uint32_t)abStationAddr[2];
- LPC_EMAC->SA2 = ((uint32_t)abStationAddr[1] << 8) | (uint32_t)abStationAddr[0];
-}
-
-
-/************************** GLOBAL/PUBLIC FUNCTIONS *************************/
-
-/** @defgroup EMAC_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Write data to PHY
- * @param[in] PhyReg PHY register address
- * @param[in] Value Register Value
- * @return None
- **********************************************************************/
-void EMAC_Write_PHY (uint8_t PhyReg, uint16_t Value)
-{
- unsigned int tout;
-
- LPC_EMAC->MADR = ((EMAC_Configs.bPhyAddr & 0x1F) << 8 )| (PhyReg & 0x1F);
- LPC_EMAC->MWTD = Value;
-
- /* Wait utill operation completed */
- tout = 0;
-
- for (tout = 0; tout < EMAC_MII_WR_TOUT; tout++)
- {
- if ((LPC_EMAC->MIND & EMAC_MIND_BUSY) == 0)
- {
- break;
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Read data from PHY register
- * @param[in] PhyReg PHY register address
- * @return Register value
- **********************************************************************/
-uint16_t EMAC_Read_PHY (uint8_t PhyReg)
-{
- unsigned int tout;
-
- LPC_EMAC->MADR = ((EMAC_Configs.bPhyAddr & 0x1F) << 8 )| (PhyReg & 0x1F);
- LPC_EMAC->MCMD = EMAC_MCMD_READ;
-
- /* Wait until operation completed */
- tout = 0;
- for (tout = 0; tout < EMAC_MII_RD_TOUT; tout++)
- {
- if ((LPC_EMAC->MIND & EMAC_MIND_BUSY) == 0)
- {
- break;
- }
- }
-
- LPC_EMAC->MCMD = 0;
- return (LPC_EMAC->MRDD);
-}
-
-/*********************************************************************//**
- * @brief Set Full/Half Duplex Mode
- * @param[in] full_duplex 0: Half-duplex, 1: Full-duplex
- * @return None
- **********************************************************************/
-void EMAC_SetFullDuplexMode(uint8_t full_duplex)
-{
- if(full_duplex)
- {
- LPC_EMAC->MAC2 |= EMAC_MAC2_FULL_DUP;
- LPC_EMAC->Command |= EMAC_CR_FULL_DUP;
- LPC_EMAC->IPGT = EMAC_IPGT_FULL_DUP;
- }
- else
- {
- LPC_EMAC->IPGT = EMAC_IPGT_HALF_DUP;
- }
-}
-/*********************************************************************//**
- * @brief Set PHY Speed
- * @param[in] mode_100Mbps 0: 10Mbps, 1: 100Mbps
- * @return None
- **********************************************************************/
-void EMAC_SetPHYSpeed(uint8_t mode_100Mbps)
-{
- if(mode_100Mbps)
- {
- LPC_EMAC->SUPP = EMAC_SUPP_SPEED;
- }
- else
- {
- LPC_EMAC->SUPP = 0;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Initializes the EMAC peripheral according to the specified
-* parameters in the EMAC_ConfigStruct.
- * @param[in] EMAC_ConfigStruct Pointer to a EMAC_CFG_Type structure
-* that contains the configuration information for the
-* specified EMAC peripheral.
- * @return None
- *
- * Note: This function will initialize EMAC module according to procedure below:
- * - Remove the soft reset condition from the MAC
- * - Configure the PHY via the MIIM interface of the MAC
- * - Select RMII mode
- * - Configure the transmit and receive DMA engines, including the descriptor arrays
- * - Configure the host registers (MAC1,MAC2 etc.) in the MAC
- * - Enable the receive and transmit data paths
- * In default state after initializing, Rx Done and Tx Done interrupt are enabled,
- * nad all interrupts are also enabled
- * (Ref. from LPC17xx UM)
- **********************************************************************/
-int32_t EMAC_Init(EMAC_CFG_Type *EMAC_ConfigStruct)
-{
- /* Initialize the EMAC Ethernet controller. */
- volatile int32_t tout, tmp;
-
- EMAC_Configs = *EMAC_ConfigStruct;
-
- /* Set up power for Ethernet module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCENET, ENABLE);
-
- /* Enable P1 Ethernet Pins. */
-
- /* Reset all EMAC internal modules */
- LPC_EMAC->MAC1 = EMAC_MAC1_RES_TX | EMAC_MAC1_RES_MCS_TX | EMAC_MAC1_RES_RX |
- EMAC_MAC1_RES_MCS_RX | EMAC_MAC1_SIM_RES | EMAC_MAC1_SOFT_RES;
-
- LPC_EMAC->Command = EMAC_CR_REG_RES | EMAC_CR_TX_RES | EMAC_CR_RX_RES | EMAC_CR_PASS_RUNT_FRM;
-
- /* A short delay after reset. */
- for (tout = 100; tout; tout--);
-
- /* Initialize MAC control registers. */
- LPC_EMAC->MAC1 = EMAC_MAC1_PASS_ALL;
- LPC_EMAC->MAC2 = EMAC_MAC2_CRC_EN | EMAC_MAC2_PAD_EN;
- LPC_EMAC->MAXF = EMAC_ETH_MAX_FLEN;
- /*
- * Find the clock that close to desired target clock
- */
- tmp = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU)/ EMAC_MCFG_MII_MAXCLK;
- for (tout = 0; tout < sizeof (EMAC_clkdiv); tout++)
- {
- if (EMAC_clkdiv[tout] >= tmp)
- break;
- }
-
- if(tout >= sizeof (EMAC_clkdiv))
- return ERROR;
- tout++;
-
- // Set Frame size
- LPC_EMAC->MAXF = EMAC_ConfigStruct->nMaxFrameSize;
-
- // Write to MAC configuration register and reset
- LPC_EMAC->MCFG = EMAC_MCFG_CLK_SEL(tout) | EMAC_MCFG_RES_MII;
-
- // release reset
- LPC_EMAC->MCFG &= ~(EMAC_MCFG_RES_MII);
- LPC_EMAC->CLRT = EMAC_CLRT_DEF;
- LPC_EMAC->IPGR = EMAC_IPGR_P2_DEF;
-
- /* Enable Reduced MII interface. */
- LPC_EMAC->Command = EMAC_CR_RMII | EMAC_CR_PASS_RUNT_FRM;
-
-
- // Initilialize PHY
- if(EMAC_ConfigStruct->pfnPHYInit != NULL)
- {
- if(EMAC_ConfigStruct->pfnPHYInit(&EMAC_ConfigStruct->PhyCfg) != SUCCESS)
- {
- return ERROR;
- }
- }
-
- // Set EMAC address
- setEmacAddr(EMAC_ConfigStruct->pbEMAC_Addr);
-
- /* Initialize Tx and Rx DMA Descriptors */
- rx_descr_init ();
- tx_descr_init ();
-
- // Set Receive Filter register: enable broadcast and multicast
- LPC_EMAC->RxFilterCtrl = EMAC_RFC_MCAST_EN | EMAC_RFC_BCAST_EN | EMAC_RFC_PERFECT_EN;
-
- /* Enable Rx Done and Tx Done interrupt for EMAC */
- EMAC_IntCmd((EMAC_INT_RX_OVERRUN | EMAC_INT_RX_ERR | EMAC_INT_RX_FIN \
- | EMAC_INT_RX_DONE | EMAC_INT_TX_UNDERRUN | EMAC_INT_TX_ERR \
- | EMAC_INT_TX_FIN | EMAC_INT_TX_DONE), ENABLE);
-
- /* Reset all interrupts */
- LPC_EMAC->IntClear = 0xFFFF;
-
- /* Enable receive and transmit mode of MAC Ethernet core */
- EMAC_TxEnable();
- EMAC_RxEnable();
-
- NVIC_EnableIRQ(ENET_IRQn);
-
- return SUCCESS;
-}
-
-
-/*********************************************************************//**
- * @brief De-initializes the EMAC peripheral registers to their
-* default reset values.
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_DeInit(void)
-{
- // Disable all interrupt
- LPC_EMAC->IntEnable = 0x00;
-
- // Clear all pending interrupt
- LPC_EMAC->IntClear = (0xFF) | (EMAC_INT_SOFT_INT | EMAC_INT_WAKEUP);
-
- LPC_EMAC->Command = 0;
-
- /* TurnOff power for Ethernet module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCENET, DISABLE);
-}
-
-/*********************************************************************//**
- * @brief EMAC TX API modules
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_TxEnable( void )
-{
- LPC_EMAC->Command |= EMAC_CR_TX_EN;
- return;
-}
-
-
-/*********************************************************************//**
- * @brief EMAC RX API modules
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_TxDisable( void )
-{
- LPC_EMAC->Command &= ~EMAC_CR_TX_EN;
- return;
-}
-
-/*********************************************************************//**
- * @brief EMAC RX API modules
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_RxEnable( void )
-{
- LPC_EMAC->Command |= EMAC_CR_RX_EN;
- LPC_EMAC->MAC1 |= EMAC_MAC1_REC_EN;
- return;
-}
-
-/*********************************************************************//**
- * @brief EMAC RX API modules
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_RxDisable( void )
-{
- LPC_EMAC->Command &= ~EMAC_CR_RX_EN;
- LPC_EMAC->MAC1 &= ~EMAC_MAC1_REC_EN;
- return;
-}
-
-/*********************************************************************//**
- * @brief Get the status of given buffer.
- * @param[in] idx Buffer index
- * @return EMAC_BUFF_AVAILABLE/EMAC_BUFF_FULL/EMAC_BUFF_PARTIAL_FULL
- *
- **********************************************************************/
-EMAC_BUFF_STATUS EMAC_GetBufferSts(EMAC_BUFF_IDX idx)
-{
- uint32_t consume_idx, produce_idx;
- uint32_t max_frag_num;
-
- // Get the consume index, produce index and the buffer size
- if(idx == EMAC_TX_BUFF)
- {
- consume_idx = LPC_EMAC->TxConsumeIndex;
- produce_idx = LPC_EMAC->TxProduceIndex;
- max_frag_num = LPC_EMAC->TxDescriptorNumber + 1;
- }
- else
- {
- consume_idx = LPC_EMAC->RxConsumeIndex;
- produce_idx = LPC_EMAC->RxProduceIndex;
- max_frag_num = LPC_EMAC->RxDescriptorNumber + 1;
- }
-
- // empty
- if(consume_idx == produce_idx)
- return EMAC_BUFF_EMPTY;
-
- // Full
- if(consume_idx == 0 &&
- produce_idx == max_frag_num - 1)
- return EMAC_BUFF_FULL;
-
- // Wrap-around
- if(consume_idx == produce_idx + 1)
- return EMAC_BUFF_FULL;
-
- return EMAC_BUFF_PARTIAL_FULL;
-}
-
-/*********************************************************************//**
- * @brief Allocate a descriptor for sending frame and get the coressponding buffer address
- * @param[in] FrameSize The size of frame you want to send
- * @return Address of the TX_DESC_PACKET buffer
- **********************************************************************/
- uint32_t EMAC_AllocTxBuff(uint16_t nFrameSize, uint8_t bLastFrame)
-{
- uint32_t idx;
- uint32_t dp;
- volatile uint32_t i;
-
- idx = LPC_EMAC->TxProduceIndex;
-
- while(EMAC_GetBufferSts(EMAC_TX_BUFF) == EMAC_BUFF_FULL)
- {
- for(i = 0; i < 1000000; i++) ;
- }
-
- dp = TX_DESC_PACKET(idx);
-
- if(bLastFrame)
- TX_DESC_CTRL(idx) = ((nFrameSize-1) & EMAC_TCTRL_SIZE) | (EMAC_TCTRL_INT | EMAC_TCTRL_LAST);
- else
- TX_DESC_CTRL(idx) = ((nFrameSize-1) & EMAC_TCTRL_SIZE) | (EMAC_TCTRL_INT);
-
- return dp;
-}
-
-/*********************************************************************//**
- * @brief Increase the TxProduceIndex (after writting to the Transmit buffer
- * to enable the Transmit buffer) and wrap-around the index if
- * it reaches the maximum Transmit Number
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_UpdateTxProduceIndex(void)
-{
- // Get current Tx produce index
- uint32_t idx = LPC_EMAC->TxProduceIndex;
-
- /* Start frame transmission */
- if (++idx == LPC_EMAC->TxDescriptorNumber + 1) idx = 0;
- LPC_EMAC->TxProduceIndex = idx;
-}
-
-/*********************************************************************//**
- * @brief Get current status value of receive data (due to TxProduceIndex)
- * @param[in] None
- * @return Current value of receive data (due to TxProduceIndex)
- **********************************************************************/
-uint32_t EMAC_GetTxFrameStatus(void)
-{
- uint32_t idx;
-
- idx = LPC_EMAC->TxProduceIndex;
- return (TX_STAT_INFO(idx));
-}
-
-/*********************************************************************//**
- * @brief Write data to Tx packet data buffer at current index due to
- * TxProduceIndex
- * @param[in] pDataStruct store the address and the size of buffer that saves data.
- * @return None
- **********************************************************************/
-void EMAC_WritePacketBuffer(EMAC_PACKETBUF_Type *pDataStruct)
-{
- uint16_t* pDest;
- uint16_t* pSource = (uint16_t*)pDataStruct->pbDataBuf;
- uint32_t size = pDataStruct->ulDataLen;
- int32_t frame_num;
- uint32_t tmp;
- uint32_t max_frame_size = LPC_EMAC->MAXF;
-
- size = (size + 1) & 0xFFFE; // round Size up to next even number
- frame_num = size/max_frame_size;
-
- if(size == 0)
- return;
-
- while(frame_num >= 0)
- {
- tmp = (frame_num > 0)? max_frame_size:size;
-
- if(tmp == 0)
- break;
-
- // Setup descriptors and data
- if(frame_num == 0)
- pDest = (uint16_t*)EMAC_AllocTxBuff(tmp, 1); // last frame
- else
- pDest = (uint16_t*)EMAC_AllocTxBuff(tmp, 0);
-
- // Copy data
- while (tmp > 0)
- {
- *pDest++ = *pSource++;
- tmp -= 2;
- }
- frame_num--;
- size -= tmp;
-
- // Update produce index
- EMAC_UpdateTxProduceIndex();
- }
-}
-
-
-/*********************************************************************//**
- * @brief Get current status value of receive data (due to RxConsumeIndex)
- * @param[in] None
- * @return Current value of receive data (due to RxConsumeIndex)
- **********************************************************************/
-uint32_t EMAC_GetRxFrameStatus(void)
-{
- uint32_t idx;
-
- idx = LPC_EMAC->RxConsumeIndex;
- return (RX_STAT_INFO(idx));
-}
-
-
-/*********************************************************************//**
- * @brief Get size of current Received data in received buffer (due to
- * RxConsumeIndex)
- * @param[in] None
- * @return Size of received data
- **********************************************************************/
-uint32_t EMAC_GetRxFrameSize(void)
-{
- uint32_t idx;
-
- idx = LPC_EMAC->RxConsumeIndex;
-
- return (((RX_STAT_INFO(idx)) & EMAC_RINFO_SIZE)+1);
-}
-
-
-/*********************************************************************//**
- * @brief Get the address of TX_DESC_PACKET buffer so that user can access from application
- * @param[in] None
- * @return Address of the TX_DESC_PACKET buffer
- **********************************************************************/
-
-uint32_t EMAC_GetRxBuffer(void)
-{
- uint32_t idx;
-
- idx = LPC_EMAC->RxConsumeIndex;
-
- return RX_DESC_PACKET(idx);
- }
-
-
-/*********************************************************************//**
- * @brief Increase the RxConsumeIndex (after reading the Receive buffer
- * to release the Receive buffer) and wrap-around the index if
- * it reaches the maximum Receive Number
- * @param[in] None
- * @return None
- **********************************************************************/
-void EMAC_UpdateRxConsumeIndex(void)
-{
- // Get current Rx consume index
- uint32_t idx = LPC_EMAC->RxConsumeIndex;
-
- /* Release frame from EMAC buffer */
- if (++idx == EMAC_NUM_RX_FRAG) idx = 0;
-
- LPC_EMAC->RxConsumeIndex = idx;
-}
-
-/*********************************************************************//**
- * @brief Standard EMAC IRQ Handler. This sub-routine will check
- * these following interrupt and call the call-back function
- * if they're already installed:
- * - Overrun Error interrupt in RX Queue
- * - Receive Error interrupt: AlignmentError, RangeError,
- * LengthError, SymbolError, CRCError or NoDescriptor or Overrun
- * - RX Finished Process Descriptors interrupt (ProduceIndex == ConsumeIndex)
- * - Receive Done interrupt: Read received frame to the internal buffer
- * - Transmit Under-run interrupt
- * - Transmit errors interrupt : LateCollision, ExcessiveCollision
- * and ExcessiveDefer, NoDescriptor or Under-run
- * - TX Finished Process Descriptors interrupt (ProduceIndex == ConsumeIndex)
- * - Transmit Done interrupt
- * - Interrupt triggered by software
- * - Interrupt triggered by a Wakeup event detected by the receive filter
- * @param[in] None
- * @return None
- **********************************************************************/
-void ENET_IRQHandler(void)
-{
- /* EMAC Ethernet Controller Interrupt function. */
- uint32_t int_stat;
- int32_t RxLen;
-
- // Get EMAC interrupt status
- while ((int_stat = (LPC_EMAC->IntStatus & LPC_EMAC->IntEnable)) != 0)
- {
- // Clear interrupt status
- LPC_EMAC->IntClear = int_stat;
-
- if(int_stat & (EMAC_INT_RX_OVERRUN |EMAC_INT_RX_ERR ))
- {
- uint32_t ulFrameSts = EMAC_GetRxFrameStatus();
- uint32_t ulErrCode = 0;
-
- ulErrCode |= (ulFrameSts & EMAC_RINFO_CRC_ERR) ? EMAC_CRC_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_SYM_ERR) ? EMAC_SYMBOL_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_LEN_ERR) ? EMAC_LENGTH_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_ALIGN_ERR) ? EMAC_ALIGN_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_OVERRUN) ? EMAC_OVERRUN_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_NO_DESCR) ? EMAC_RX_NO_DESC_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_RINFO_FAIL_FILT) ? EMAC_FILTER_FAILED_ERR:0;
-
- if(ulErrCode == 0)
- {
- /* Note:
- * The EMAC doesn't distinguish the frame type and frame length,
- * so, e.g. when the IP(0x8000) or ARP(0x0806) packets are received,
- * it compares the frame type with the max length and gives the
- * "Range" error. In fact, this bit is not an error indication,
- * but simply a statement by the chip regarding the status of
- * the received frame
- */
- int_stat &= ~EMAC_INT_RX_ERR;
- }
- else
- {
- if(EMAC_Configs.pfnErrorReceive != NULL)
- EMAC_Configs.pfnErrorReceive(ulErrCode);
- }
- }
-
- if(int_stat & (EMAC_INT_TX_UNDERRUN|EMAC_INT_TX_ERR ))
- {
- uint32_t ulFrameSts = EMAC_GetTxFrameStatus();
- uint32_t ulErrCode = 0;
-
- ulErrCode |= (ulFrameSts & EMAC_TINFO_EXCESS_DEF) ? EMAC_EXCESSIVE_DEFER_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_TINFO_EXCESS_COL) ? EMAC_EXCESSIVE_COLLISION_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_TINFO_LATE_COL) ? EMAC_LATE_COLLISION_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_TINFO_UNDERRUN) ? EMAC_UNDERRUN_ERR:0;
- ulErrCode |= (ulFrameSts & EMAC_TINFO_NO_DESCR) ? EMAC_TX_NO_DESC_ERR:0;
- if(EMAC_Configs.pfnErrorReceive != NULL)
- EMAC_Configs.pfnErrorReceive(ulErrCode);
- }
-
- if(int_stat & EMAC_INT_RX_DONE)
- {
-
- /* Packet received. */
- if(EMAC_GetBufferSts(EMAC_RX_BUFF) != EMAC_BUFF_EMPTY)
- {
- // Get data size
- RxLen = EMAC_GetRxFrameSize();
- if(RxLen > 0)
- {
- // trip out 4-bytes CRC field, note that length in (-1) style format
- RxLen -= 3;
-
- if((EMAC_GetRxFrameStatus() & EMAC_RINFO_ERR_MASK )== 0)
- {
- uint16_t *pDest = (uint16_t*) &saFrameBuffers[sbCurrFrameID][sulCurrFrameSz];
- uint16_t *pSource = (uint16_t*)EMAC_GetRxBuffer();
- sulCurrFrameSz += RxLen;
-
- if(sulCurrFrameSz >= EMAC_MAX_FRAME_SIZE)
- {
- sulCurrFrameSz = 0;
- if(EMAC_Configs.pfnErrorReceive != NULL)
- EMAC_Configs.pfnErrorReceive(EMAC_LENGTH_ERR);
- }
- else
- {
- // Copy data
- while (RxLen > 0)
- {
- *pDest++ = *pSource++;
- RxLen -= 2;
- }
- if(EMAC_GetRxFrameStatus() & EMAC_RINFO_LAST_FLAG)
- {
-
- if(EMAC_Configs.pfnFrameReceive != NULL)
- {
- EMAC_Configs.pfnFrameReceive((uint16_t*)saFrameBuffers[sbCurrFrameID], sulCurrFrameSz);
- }
- sulCurrFrameSz = 0;
- sbCurrFrameID ++;
- if(sbCurrFrameID >= EMAC_MAX_FRAME_NUM)
- sbCurrFrameID = 0;
- }
- /* Release frame from EMAC buffer */
- EMAC_UpdateRxConsumeIndex();
- }
- }
- }
- }
-
- }
-
- if(int_stat & EMAC_INT_TX_FIN && (EMAC_Configs.pfnTransmitFinish != NULL))
- {
- EMAC_Configs.pfnTransmitFinish();
- }
-
- if(int_stat & EMAC_INT_SOFT_INT && (EMAC_Configs.pfnSoftInt!= NULL))
- {
- EMAC_Configs.pfnSoftInt();
- }
-
- if(int_stat & EMAC_INT_WAKEUP && (EMAC_Configs.pfnWakeup!= NULL))
- {
- EMAC_Configs.pfnWakeup();
- }
-
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable hash filter functionality for specified destination
- * MAC address in EMAC module
- * @param[in] dstMAC_addr Pointer to the first MAC destination address, should
- * be 6-bytes length, in order LSB to the MSB
- * @param[in] NewState New State of this command, should be:
- * - ENABLE.
- * - DISABLE.
- * @return None
- *
- * Note:
- * The standard Ethernet cyclic redundancy check (CRC) function is calculated from
- * the 6 byte destination address in the Ethernet frame (this CRC is calculated
- * anyway as part of calculating the CRC of the whole frame), then bits [28:23] out of
- * the 32 bits CRC result are taken to form the hash. The 6 bit hash is used to access
- * the hash table: it is used as an index in the 64 bit HashFilter register that has been
- * programmed with accept values. If the selected accept value is 1, the frame is
- * accepted.
- **********************************************************************/
-void EMAC_SetHashFilter(uint8_t dstMAC_addr[], FunctionalState NewState)
-{
- uint32_t *pReg;
- uint32_t tmp;
- int32_t crc;
-
- // Calculate the CRC from the destination MAC address
- crc = EMAC_CRCCalc(dstMAC_addr, 6);
- // Extract the value from CRC to get index value for hash filter table
- crc = (crc >> 23) & 0x3F;
-
- pReg = (crc > 31) ? ((uint32_t *)&LPC_EMAC->HashFilterH) \
- : ((uint32_t *)&LPC_EMAC->HashFilterL);
- tmp = (crc > 31) ? (crc - 32) : crc;
- if (NewState == ENABLE)
- {
- (*pReg) |= (1UL << tmp);
- }
- else
- {
- (*pReg) &= ~(1UL << tmp);
- }
-
-}
-
-
-/*********************************************************************//**
- * @brief Calculates CRC code for number of bytes in the frame
- * @param[in] frame_no_fcs Pointer to the first byte of the frame
- * @param[in] frame_len length of the frame without the FCS
- * @return the CRC as a 32 bit integer
- **********************************************************************/
-int32_t EMAC_CRCCalc(uint8_t frame_no_fcs[], int32_t frame_len)
-{
- int i; // iterator
- int j; // another iterator
- char byte; // current byte
- int crc; // CRC result
- int q0, q1, q2, q3; // temporary variables
-
- crc = 0xFFFFFFFF;
-
- for (i = 0; i < frame_len; i++)
- {
- byte = *frame_no_fcs++;
- for (j = 0; j < 2; j++)
- {
- if (((crc >> 28) ^ (byte >> 3)) & 0x00000001)
- {
- q3 = 0x04C11DB7;
- }
- else
- {
- q3 = 0x00000000;
- }
-
- if (((crc >> 29) ^ (byte >> 2)) & 0x00000001)
- {
- q2 = 0x09823B6E;
- }
- else
- {
- q2 = 0x00000000;
- }
-
- if (((crc >> 30) ^ (byte >> 1)) & 0x00000001)
- {
- q1 = 0x130476DC;
- }
- else
- {
- q1 = 0x00000000;
- }
-
- if (((crc >> 31) ^ (byte >> 0)) & 0x00000001)
- {
- q0 = 0x2608EDB8;
- }
- else
- {
- q0 = 0x00000000;
- }
-
- crc = (crc << 4) ^ q3 ^ q2 ^ q1 ^ q0;
-
- byte >>= 4;
- }
- }
-
- return crc;
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable Filter mode for each specified type EMAC peripheral
- * @param[in] ulFilterMode Filter mode, should be:
- * - EMAC_RFC_UCAST_EN: all frames of unicast types
- * will be accepted
- * - EMAC_RFC_BCAST_EN: broadcast frame will be
- * accepted
- * - EMAC_RFC_MCAST_EN: all frames of multicast
- * types will be accepted
- * - EMAC_RFC_UCAST_HASH_EN: The imperfect hash
- * filter will be applied to unicast addresses
- * - EMAC_RFC_MCAST_HASH_EN: The imperfect hash
- * filter will be applied to multicast addresses
- * - EMAC_RFC_PERFECT_EN: the destination address
- * will be compared with the 6 byte station address
- * programmed in the station address by the filter
- * - EMAC_RFC_MAGP_WOL_EN: the result of the magic
- * packet filter will generate a WoL interrupt when
- * there is a match
- * - EMAC_RFC_PFILT_WOL_EN: the result of the perfect address
- * matching filter and the imperfect hash filter will
- * generate a WoL interrupt when there is a match
- * @param[in] NewState New State of this command, should be:
- * - ENABLE
- * - DISABLE
- * @return None
- **********************************************************************/
-void EMAC_SetFilterMode(uint32_t ulFilterMode, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- LPC_EMAC->RxFilterCtrl |= ulFilterMode;
-
- if((ulFilterMode & EMAC_RFC_MCAST_HASH_EN) &&
- ((ulFilterMode & EMAC_RFC_MCAST_EN) == 0))
- {
- LPC_EMAC->RxFilterCtrl &= ~EMAC_RFC_MCAST_EN;
- }
- if((ulFilterMode & EMAC_RFC_UCAST_HASH_EN) &&
- ((ulFilterMode & EMAC_RFC_UCAST_EN) == 0))
- {
- LPC_EMAC->RxFilterCtrl &= ~EMAC_RFC_UCAST_EN;
- }
- }
- else
- {
- LPC_EMAC->RxFilterCtrl &= ~ulFilterMode;
- }
-}
-
-/*********************************************************************//**
- * @brief Get status of Wake On LAN Filter for each specified
- * type in EMAC peripheral, clear this status if it is set
- * @param[in] ulFilterMode WoL Filter mode, should be:
- * - EMAC_WOL_UCAST: unicast frames caused WoL
- * - EMAC_WOL_UCAST: broadcast frame caused WoL
- * - EMAC_WOL_MCAST: multicast frame caused WoL
- * - EMAC_WOL_UCAST_HASH: unicast frame that passes the
- * imperfect hash filter caused WoL
- * - EMAC_WOL_MCAST_HASH: multicast frame that passes the
- * imperfect hash filter caused WoL
- * - EMAC_WOL_PERFECT:perfect address matching filter
- * caused WoL
- * - EMAC_WOL_RX_FILTER: the receive filter caused WoL
- * - EMAC_WOL_MAG_PACKET: the magic packet filter caused WoL
- * @return SET/RESET
- **********************************************************************/
-FlagStatus EMAC_GetWoLStatus(uint32_t ulWoLMode)
-{
- if (LPC_EMAC->RxFilterWoLStatus & ulWoLMode)
- {
- LPC_EMAC->RxFilterWoLClear = ulWoLMode;
-
- return SET;
- }
- else
- {
- return RESET;
- }
-}
-
-
-
-
-
-
-/*********************************************************************//**
- * @brief Enable/Disable interrupt for each type in EMAC
- * @param[in] ulIntType Interrupt Type, should be:
- * - EMAC_INT_RX_OVERRUN: Receive Overrun
- * - EMAC_INT_RX_ERR: Receive Error
- * - EMAC_INT_RX_FIN: Receive Descriptor Finish
- * - EMAC_INT_RX_DONE: Receive Done
- * - EMAC_INT_TX_UNDERRUN: Transmit Under-run
- * - EMAC_INT_TX_ERR: Transmit Error
- * - EMAC_INT_TX_FIN: Transmit descriptor finish
- * - EMAC_INT_TX_DONE: Transmit Done
- * - EMAC_INT_SOFT_INT: Software interrupt
- * - EMAC_INT_WAKEUP: Wakeup interrupt
- * @param[in] NewState New State of this function, should be:
- * - ENABLE.
- * - DISABLE.
- * @return None
- **********************************************************************/
-void EMAC_IntCmd(uint32_t ulIntType, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- LPC_EMAC->IntEnable |= ulIntType;
- }
- else
- {
- LPC_EMAC->IntEnable &= ~(ulIntType);
- }
-}
-
-/*********************************************************************//**
- * @brief Check whether if specified interrupt flag is set or not
- * for each interrupt type in EMAC and clear interrupt pending
- * if it is set.
- * @param[in] ulIntType Interrupt Type, should be:
- * - EMAC_INT_RX_OVERRUN: Receive Overrun
- * - EMAC_INT_RX_ERR: Receive Error
- * - EMAC_INT_RX_FIN: Receive Descriptor Finish
- * - EMAC_INT_RX_DONE: Receive Done
- * - EMAC_INT_TX_UNDERRUN: Transmit Under-run
- * - EMAC_INT_TX_ERR: Transmit Error
- * - EMAC_INT_TX_FIN: Transmit descriptor finish
- * - EMAC_INT_TX_DONE: Transmit Done
- * - EMAC_INT_SOFT_INT: Software interrupt
- * - EMAC_INT_WAKEUP: Wakeup interrupt
- * @return New state of specified interrupt (SET or RESET)
- **********************************************************************/
-IntStatus EMAC_IntGetStatus(uint32_t ulIntType)
-{
- if (LPC_EMAC->IntStatus & ulIntType)
- {
- LPC_EMAC->IntClear = ulIntType;
- return SET;
- }
- else
- {
- return RESET;
- }
-}
-
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-#endif /*_EMAC*/
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_emc.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_emc.c
deleted file mode 100644
index 0ede2221e7..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_emc.c
+++ /dev/null
@@ -1,1398 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_emc.c 2011-06-02
-*//**
-* @file lpc_emc.c
-* @brief Contains all functions support for EMC firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _EMC
-
-#include "lpc_emc.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup EMC
- * @{
- */
-
-/** @defgroup EMC_Public_Functions
- * @{
- */
-
-/*********************************************************************
- * @brief Calculate refresh timer (the multiple of 16 CCLKs)
- * @param[in] freq - frequency of EMC Clk
- * @param[in] time - micro second
- * @return None
- **********************************************************************/
-uint32_t EMC_SDRAM_REFRESH(uint32_t time)
-{
- uint32_t emc_freq = CLKPWR_GetCLK(CLKPWR_CLKTYPE_EMC);
- return (((uint64_t)((uint64_t)time * emc_freq)/16000000ull)+1);
-}
-/*********************************************************************
- * @brief Calculate EMC Clock from nano second
- * @param[in] time - nano second
- * @return None
- **********************************************************************/
-uint32_t EMC_NS2CLK(uint32_t time){
- uint32_t emc_freq = CLKPWR_GetCLK(CLKPWR_CLKTYPE_EMC);
- return (((uint64_t)time*emc_freq/1000000000ull));
-}
-
-/*********************************************************************
- * @brief Power on EMC Block
- * @param[in] None
- * @return None
- **********************************************************************/
-EMC_FUNC_CODE EMC_PwrOn(void)
-{
- // If CPU clock is > 80 MHz, then divide it by two to create the EMC clock
- if(CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) > 80000000) {
- CLKPWR_SetCLKDiv(CLKPWR_CLKTYPE_EMC, 1); // CPU clock / 2
- } else {
- CLKPWR_SetCLKDiv(CLKPWR_CLKTYPE_EMC, 0); // Same clock as CPU
- }
-
- // Power on
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCEMC, ENABLE);
-
- // Enable
- LPC_EMC->Control = EMC_Control_E;
-
- return EMC_FUNC_OK;
-}
-/*********************************************************************//**
- * @brief Initialize external dynamic memory
- * @param[in] pConfig Configuration
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM/EMC_FUNC_ERR
- **********************************************************************/
-EMC_FUNC_CODE DynMem_Init(EMC_DYN_MEM_Config_Type* pConfig)
-{
- uint32_t i = 0;
- EMC_FUNC_CODE ret = EMC_FUNC_OK;
-
- /* Pin configuration:
- * P2.16 - /EMC_CAS
- * P2.17 - /EMC_RAS
- * P2.18 - EMC_CLK[0]
- * P2.19 - EMC_CLK[1]
- *
- * P2.20 - EMC_DYCS0
- * P2.21 - EMC_DYCS1
- * P2.22 - EMC_DYCS2
- * P2.23 - EMC_DYCS3
- *
- * P2.24 - EMC_CKE0
- * P2.25 - EMC_CKE1
- * P2.26 - EMC_CKE2
- * P2.27 - EMC_CKE3
- *
- * P2.28 - EMC_DQM0
- * P2.29 - EMC_DQM1
- * P2.30 - EMC_DQM2
- * P2.31 - EMC_DQM3
- *
- * P3.0-P3.31 - EMC_D[0-31]
- * P4.0-P4.23 - EMC_A[0-23]
- * P5.0-P5.1 - EMC_A[24-25]
- *
- * P4.25 - EMC_WE
- */
- PINSEL_ConfigPin(2,16,1);
- PINSEL_ConfigPin(2,17,1);
- PINSEL_ConfigPin(2,18,1);
- PINSEL_ConfigPin(2,19,1);
- PINSEL_ConfigPin(2,20,1);
- PINSEL_ConfigPin(2,21,1);
- PINSEL_ConfigPin(2,22,1);
- PINSEL_ConfigPin(2,23,1);
- PINSEL_ConfigPin(2,24,1);
- PINSEL_ConfigPin(2,25,1);
- PINSEL_ConfigPin(2,26,1);
- PINSEL_ConfigPin(2,27,1);
- PINSEL_ConfigPin(2,28,1);
- PINSEL_ConfigPin(2,29,1);
- PINSEL_ConfigPin(2,30,1);
- PINSEL_ConfigPin(2,31,1);
-
- for(i = 0; i < 32; i++)
- {
- PINSEL_ConfigPin(3,i,1);
- PINSEL_ConfigPin(4,i,1);
- }
- PINSEL_ConfigPin(5,0,1);
- PINSEL_ConfigPin(5,1,1);
-
-
- // Power On
- ret |= EMC_PwrOn();
-
- /*Init SDRAM controller*/
- LPC_SC->EMCDLYCTL |= (8<<0);
- /*Set data read delay*/
- LPC_SC->EMCDLYCTL |=(8<<8);
- LPC_SC->EMCDLYCTL |= (0x08 <<16);
-
- ret |= EMC_ConfigEndianMode(EMC_Config_Little_Endian_Mode);
-
- /* Dynamic memory setting */
- ret |= EMC_DynCtrlSelfRefresh(EMC_DYNAMIC_CTRL_SR_NORMALMODE);
- ret |= EMC_DynCtrlPowerDownMode(EMC_DYNAMIC_CTRL_DP_NORMAL);
- ret |= EMC_DynCtrlClockEnable(EMC_DYNAMIC_CTRL_CE_ALLCLK_HI);
- ret |= EMC_DynCtrlMMC(EMC_DYNAMIC_CTRL_MMC_CLKOUT_ENABLED);
- ret |= EMC_DynCtrlClockControl(EMC_DYNAMIC_CTRL_CE_CLKOUT_CONT);
-
- /* Timing */
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_REFRESH_TIMER, pConfig->RefreshTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_READ_CONFIG, pConfig->ReadConfig);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TRP, pConfig->PrechargeCmdPeriod);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TRAS, pConfig->Active2PreChargeTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TSREX, pConfig->SeftRefreshExitTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TAPR, pConfig->DataOut2ActiveTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TDAL, pConfig->DataIn2ActiveTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TWR, pConfig->WriteRecoveryTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TRC, pConfig->Active2ActivePeriod);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TRFC, pConfig->AutoRefrehPeriod);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TXSR, pConfig->ExitSelfRefreshTime);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TRRD, pConfig->ActiveBankLatency);
- ret |= EMC_SetDynMemoryParameter(EMC_DYN_MEM_TMRD, pConfig->LoadModeReg2Active);
- ret |= EMC_DynMemRAS(pConfig->CSn,pConfig->RASLatency);
- ret |= EMC_DynMemCAS(pConfig->CSn,pConfig->CASLatency);
-
- ret |= EMC_DynMemConfigMD(pConfig->CSn,EMC_DYNAMIC_CFG_MEMDEV_SDRAM);
- ret |= EMC_DynMemConfigAM(pConfig->CSn, pConfig->AddrBusWidth, pConfig->AddrMap, pConfig->DataWidth, pConfig->ChipSize);
-
- return ret;
-}
-
-/*********************************************************************//**
- * @brief Initialize external static memory
- * @param[in] pConfig Configuration
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM/EMC_FUNC_ERR
- **********************************************************************/
-EMC_FUNC_CODE StaticMem_Init(EMC_STATIC_MEM_Config_Type* pConfig)
-{
- uint32_t i;
- EMC_FUNC_CODE ret = EMC_FUNC_OK;
- /* Pin configuration:
- * P4.30 - /EMC_CS0
- * P4.31 - /EMC_CS1
- * P2.14 - /EMC_CS2
- * P2.15 - /EMC_CS3
- *
- *
- * P3.0-P3.31 - EMC_D[0-31]
- * P4.0-P4.23 - EMC_A[0-23]
- * P5.0-P5.1 - EMC_A[24-25]
- *
- * P4.24 - /EMC_OE
- * P4.25 - /EMC_WE
- *
-
- */
- PINSEL_ConfigPin(2,14,1);
- PINSEL_ConfigPin(2,15,1);
-
- for(i = 0; i < 32; i++)
- {
- PINSEL_ConfigPin(3,i,1);
- PINSEL_ConfigPin(4,i,1);
- }
- PINSEL_ConfigPin(5,0,1);
- PINSEL_ConfigPin(5,1,1);
-
- // Power On
- ret |= EMC_PwrOn();
-
- // Configuration
- if(pConfig->AddressMirror)
- {
- LPC_EMC->Control |= EMC_Control_M;
- }
-
- ret |= EMC_StaMemConfigMW(pConfig->CSn,pConfig->DataWidth);
-
- if(pConfig->PageMode)
- ret |= EMC_StaMemConfigPM(pConfig->CSn,EMC_CFG_PM_ASYNC_ENABLE);
- else
- ret |= EMC_StaMemConfigPM(pConfig->CSn,EMC_CFG_PM_DISABLE);
-
- if(pConfig->ByteLane)
- ret |= EMC_StaMemConfigPB(pConfig->CSn, EMC_CFG_BYTELAND_READ_BITSLOW);
- else
- ret |= EMC_StaMemConfigPB(pConfig->CSn, EMC_CFG_BYTELAND_READ_BITSHIGH);
-
- if(pConfig->ExtendedWait)
- ret |= EMC_StaMemConfigEW(pConfig->CSn,EMC_CFG_EW_ENABLED);
- else
- ret |= EMC_StaMemConfigEW(pConfig->CSn,EMC_CFG_EW_DISABLED);
-
- // Timing
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITWEN, pConfig->WaitWEn);
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITOEN, pConfig->WaitOEn);
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITRD, pConfig->WaitRd);
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITPAGE, pConfig->WaitPage);
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITWR, pConfig->WaitWr);
- ret |= EMC_SetStaMemoryParameter(pConfig->CSn,EMC_STA_MEM_WAITTURN, pConfig->WaitTurn);
-
-
- return ret;
-}
-
-/*********************************************************************//**
- * @brief EMC initialize (power on block, config EMC pins).
- * @param[in] None
- * @return None
- **********************************************************************/
-EMC_FUNC_CODE EMC_Init(void)
-{
- uint8_t i;
- // If CPU clock is > 80 MHz, then divide it by two to create the EMC clock
- if(CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) > 80000000) {
- CLKPWR_SetCLKDiv(CLKPWR_CLKTYPE_EMC, 1); // CPU clock / 2
- } else {
- CLKPWR_SetCLKDiv(CLKPWR_CLKTYPE_EMC, 0); // Same clock as CPU
- }
-
- LPC_SC->PCONP |= 0x00000800;
- LPC_SC->EMCDLYCTL = 0x00001010;
- LPC_EMC->Control = 0x00000001;
- LPC_EMC->Config = 0x00000000;
-
- /* Pin configuration:
- * P2.14 - /EMC_CS2
- * P2.15 - /EMC_CS3
- *
- * P2.16 - /EMC_CAS
- * P2.17 - /EMC_RAS
- * P2.18 - EMC_CLK[0]
- * P2.19 - EMC_CLK[1]
- *
- * P2.20 - EMC_DYCS0
- * P2.21 - EMC_DYCS1
- * P2.22 - EMC_DYCS2
- * P2.23 - EMC_DYCS3
- *
- * P2.24 - EMC_CKE0
- * P2.25 - EMC_CKE1
- * P2.26 - EMC_CKE2
- * P2.27 - EMC_CKE3
- *
- * P2.28 - EMC_DQM0
- * P2.29 - EMC_DQM1
- * P2.30 - EMC_DQM2
- * P2.31 - EMC_DQM3
- *
- * P3.0-P3.31 - EMC_D[0-31]
- * P4.0-P4.23 - EMC_A[0-23]
- * P5.0-P5.1 - EMC_A[24-25]
- *
- * P4.24 - /EMC_OE
- * P4.25 - /EMC_WE
- *
- * P4.30 - /EMC_CS0
- * P4.31 - /EMC_CS1
- */
- PINSEL_ConfigPin(2,14,1);
- PINSEL_ConfigPin(2,15,1);
- PINSEL_ConfigPin(2,16,1);
- PINSEL_ConfigPin(2,17,1);
- PINSEL_ConfigPin(2,18,1);
- PINSEL_ConfigPin(2,19,1);
- PINSEL_ConfigPin(2,20,1);
- PINSEL_ConfigPin(2,21,1);
- PINSEL_ConfigPin(2,22,1);
- PINSEL_ConfigPin(2,23,1);
- PINSEL_ConfigPin(2,24,1);
- PINSEL_ConfigPin(2,25,1);
- PINSEL_ConfigPin(2,26,1);
- PINSEL_ConfigPin(2,27,1);
- PINSEL_ConfigPin(2,28,1);
- PINSEL_ConfigPin(2,29,1);
- PINSEL_ConfigPin(2,30,1);
- PINSEL_ConfigPin(2,31,1);
-
- for(i = 0; i < 32; i++)
- {
- PINSEL_ConfigPin(3,i,1);
- PINSEL_ConfigPin(4,i,1);
- }
- PINSEL_ConfigPin(5,0,1);
- PINSEL_ConfigPin(5,1,1);
-
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Configure Little Endian/Big Endian mode for EMC
- *
- * @param[in] endia_mode Endian mode, should be:
- *
- * - EMC_Config_Little_Endian_Mode: Little-endian mode
- *
- * - EMC_Config_Big_Endian_Mode : Big-endian mode
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_ConfigEndianMode(uint32_t endian_mode)
-{
- LPC_EMC->Config &= ~(EMC_Config_Endian_Mask);
- LPC_EMC->Config |= (endian_mode&EMC_Config_Endian_Mask);
- return EMC_FUNC_OK;
-}
-
-/****************** Group of Dynamic control functions************************/
-
-/*********************************************************************//**
- * @brief Set the dsvalue for dynamic clock enable bit
- *
- * @param[in] clock_enable clock enable mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_CE_SAVEPWR: Clock enable of idle devices
- * are deasserted to save power
- *
- * - EMC_DYNAMIC_CTRL_CE_ALLCLK_HI: All clock enables are driven
- * HIGH continuously
- *
- * @return EMC_FUNC_CODE
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlClockEnable(uint32_t clock_enable)
-{
- LPC_EMC->DynamicControl &= ~(EMC_DYNAMIC_CTRL_MEMCLK_EN_BMASK);
- LPC_EMC->DynamicControl |= clock_enable & EMC_DYNAMIC_CTRL_MEMCLK_EN_BMASK;
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Set the value for dynamic memory clock control: stops or
- * runs continuously
- *
- * @param[in] clock_control clock control mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_CS_CLKOUT_STOP: CLKOUT stops when all
- * SDRAMs are idle and during self-refresh mode
- *
- * - EMC_DYNAMIC_CTRL_CS_CLKOUT_CONT: CLKOUT runs continuously
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlClockControl(int32_t clock_control)
-{
- LPC_EMC->DynamicControl &= ~EMC_DYNAMIC_CTRL_CLKCTRL_BMASK;
- LPC_EMC->DynamicControl |= clock_control & EMC_DYNAMIC_CTRL_CLKCTRL_BMASK;
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Switch the Self-refresh mode between normal and self-refresh mode
- *
- * @param[in] self_refresh_mode self refresh mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_SR_NORMALMODE: Normal mode
- *
- * - EMC_DYNAMIC_CTRL_SR_SELFREFRESH: Enter self-refresh mode
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlSelfRefresh(uint32_t self_refresh_mode)
-{
- LPC_EMC->DynamicControl &= ~EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_BMASK;
- LPC_EMC->DynamicControl =self_refresh_mode & EMC_DYNAMIC_CTRL_SELFREFRESH_REQ_BMASK;
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Enable/disable CLKOUT
- *
- * @param[in] MMC_val Memory clock control mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_MMC_CLKOUT_ENABLED: CLKOUT enabled
- *
- * - EMC_DYNAMIC_CTRL_MMC_CLKOUT_DISABLED: CLKOUT disabled
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlMMC(uint32_t MMC_val)
-{
- LPC_EMC->DynamicControl &= ~EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_BMASK;
- LPC_EMC->DynamicControl |=MMC_val & EMC_DYNAMIC_CTRL_MMC_CLKOUTCTRL_BMASK;
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Issue SDRAM command
- *
- * @param[in] SDRAM_command Command mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_SDRAM_NORMAL: Issue SDRAM NORMAL operation command
- *
- * - EMC_DYNAMIC_CTRL_SDRAM_MODE: Issue SDRAM MODE command
- *
- * - EMC_DYNAMIC_CTRL_SDRAM_PALL: Issue SDRAM PALL (precharge all) command
- *
- * - EMC_DYNAMIC_CTRL_SDRAM_NOP: Issue SRAM NOP (no operation) command
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlSDRAMInit(uint32_t SDRAM_command)
-{
- LPC_EMC->DynamicControl &= ~EMC_DYNAMIC_CTRL_SDRAM_INIT_BMASK;
- LPC_EMC->DynamicControl |= SDRAM_command & EMC_DYNAMIC_CTRL_SDRAM_INIT_BMASK;
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Switch between Normal operation and deep sleep power mode
- *
- * @param[in] Power_command Low-power SDRAM deep-sleep mode, should be:
- *
- * - EMC_DYNAMIC_CTRL_DP_NORMAL: Normal operation
- *
- * - EMC_DYNAMIC_CTRL_DP_DEEPSLEEP: Enter deep-sleep mode
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynCtrlPowerDownMode(uint32_t Power_command)
-{
- LPC_EMC->DynamicControl &= ~EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_BMASK;
- LPC_EMC->DynamicControl |= Power_command & EMC_DYNAMIC_CTRL_SDRAM_PWRMODE_BMASK;
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Set the value of EMC dynamic memory registers
- *
- * @param[in] par EMC register that will set value, should be:
- * - EMC_DYN_MEM_REFRESH_TIMER: Dynamic Refresh register
- * - EMC_DYN_MEM_READ_CONFIG: Dynamic Read Config register
- * - EMC_DYN_MEM_TRP: Dynamic RP register
- * - EMC_DYN_MEM_TRAS: Dynamic RAS register
- * - EMC_DYN_MEM_TSREX: Dynamic SREX register
- * - EMC_DYN_MEM_TAPR: Dynamic APR register
- * - EMC_DYN_MEM_TDAL: Dynamic DAL register
- * - EMC_DYN_MEM_TWR: Dynamic WR register
- * - EMC_DYN_MEM_TRC: Dynamic RC register
- * - EMC_DYN_MEM_TRFC: Dynamic RFC register
- * - EMC_DYN_MEM_TXSR: Dynamic XSR register
- * - EMC_DYN_MEM_TRRD: Dynamic RRD register
- * - EMC_DYN_MEM_TMRD: Dynamic MRD register
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_SetDynMemoryParameter(EMC_DYN_MEM_PAR par, uint32_t val)
-{
- switch ( par)
- {
- case EMC_DYN_MEM_REFRESH_TIMER:
- LPC_EMC->DynamicRefresh = EMC_DynamicRefresh_REFRESH(val);
- break;
-
- case EMC_DYN_MEM_READ_CONFIG:
- LPC_EMC->DynamicReadConfig = EMC_DynamicReadConfig_RD(val);
- break;
-
- case EMC_DYN_MEM_TRP:
- LPC_EMC->DynamicRP = EMC_DynamictRP_tRP(val);
- break;
-
- case EMC_DYN_MEM_TRAS:
- LPC_EMC->DynamicRAS = EMC_DynamictRP_tRAS(val);
- break;
-
- case EMC_DYN_MEM_TSREX:
- LPC_EMC->DynamicSREX = EMC_DynamictRP_tSREX(val);
- break;
-
- case EMC_DYN_MEM_TAPR:
- LPC_EMC->DynamicAPR = EMC_DynamictAPR_tAPR(val);
- break;
-
- case EMC_DYN_MEM_TDAL:
- LPC_EMC->DynamicDAL =EMC_DynamictDAL_tDAL(val);
- break;
-
- case EMC_DYN_MEM_TWR:
- LPC_EMC->DynamicWR = EMC_DynamictWR_tWR(val);
- break;
-
- case EMC_DYN_MEM_TRC:
- LPC_EMC->DynamicRC = EMC_DynamictRC_tRC(val);
- break;
-
- case EMC_DYN_MEM_TRFC:
- LPC_EMC->DynamicRFC = EMC_DynamictRFC_tRFC(val);
- break;
-
- case EMC_DYN_MEM_TXSR:
- LPC_EMC->DynamicXSR = EMC_DynamictXSR_tXSR(val);
- break;
-
- case EMC_DYN_MEM_TRRD:
- LPC_EMC->DynamicRRD = EMC_DynamictRRD_tRRD(val);
- break;
-
- case EMC_DYN_MEM_TMRD:
- LPC_EMC->DynamicMRD = EMC_DynamictMRD_tMRD(val);
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Configure the memory device
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] mem_dev Memory device, should be:
- *
- * - EMC_DYNAMIC_CFG_MEMDEV_SDRAM: SDRAM
- *
- * - EMC_DYNAMIC_CFG_MEMDEV_LOWPWR_SDRAM: Low-power SDRAM
- *
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemConfigMD(uint32_t index , uint32_t mem_dev)
-{
- switch (index)
- {
- case 0:
- LPC_EMC->DynamicConfig0 &= ~EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- LPC_EMC->DynamicConfig0 |= mem_dev & EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- break;
-
- case 1:
- LPC_EMC->DynamicConfig1 &= ~EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- LPC_EMC->DynamicConfig1 |= mem_dev & EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- break;
-
- case 2:
- LPC_EMC->DynamicConfig2 &= ~EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- LPC_EMC->DynamicConfig2 |= mem_dev & EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- break;
-
- case 3:
- LPC_EMC->DynamicConfig3 &= ~EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- LPC_EMC->DynamicConfig3 |= mem_dev & EMC_DYNAMIC_CFG_MEMDEV_BMASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Map the address for the memory device
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] add_mapped address where the memory will be mapped
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemConfigAM(uint32_t index ,
- uint8_t addr_bus_width, uint8_t addr_map,
- uint8_t data_bus_width,
- uint16_t chip_size)
-{
- const int chip_max_size = 512; // 512Mb
- uint8_t data_bus_max_size = 0;
- uint32_t add_mapped_p1 = 0x00, add_mapped_p2 = 0x00, add_mapped_p3 = 0x00;
- uint32_t tmp = 16, i = 0, j = 0;
-
- /* Get part 3 of address map */
- switch(addr_bus_width)
- {
- case 16:
- add_mapped_p3 = 0;
- data_bus_max_size = 16;
- break;
- case 32:
- add_mapped_p3 = 1;
- data_bus_max_size = 32;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
-
- /* Get part 2 of address map */
- add_mapped_p2 = EMC_DYNAMIC_CFG_ADD_MAP_P2(addr_map);
-
-
- /* Get part 1 of address map */
- if(chip_size == 16)
- {
- if(data_bus_width == 8)
- add_mapped_p1 = 0;
- else if(data_bus_width == 16)
- add_mapped_p1 = 1;
- else
- return EMC_FUNC_INVALID_PARAM;
- }
- else
- {
- while(1)
- {
- i++;
- tmp = 16*(0x01 << (i+1));
- if(tmp == chip_size)
- {
- for(j = 0; (8<<j)<=data_bus_max_size;j++)
- {
- if((8<<j) == data_bus_width)
- break;
- }
- if( (8<<j) > data_bus_max_size)
- return EMC_FUNC_INVALID_PARAM;
-
- add_mapped_p1 = (i<<2) + j;
- break;
- }
- if(tmp >= chip_max_size)
- {
- return EMC_FUNC_INVALID_PARAM;
- }
- }
- }
-
- switch ( index)
- {
- case 0:
- LPC_EMC->DynamicConfig0 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK;
- LPC_EMC->DynamicConfig0 |= EMC_DYNAMIC_CFG_ADD_MAP_P1(add_mapped_p1);
- LPC_EMC->DynamicConfig0 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK;
- LPC_EMC->DynamicConfig0 |= EMC_DYNAMIC_CFG_ADD_MAP_P2(add_mapped_p2);
- LPC_EMC->DynamicConfig0 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK;
- LPC_EMC->DynamicConfig0 |= EMC_DYNAMIC_CFG_ADD_MAP_P3(add_mapped_p3);
- break;
-
- case 1:
- LPC_EMC->DynamicConfig1 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK;
- LPC_EMC->DynamicConfig1 |= EMC_DYNAMIC_CFG_ADD_MAP_P1(add_mapped_p1);
- LPC_EMC->DynamicConfig1 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK;
- LPC_EMC->DynamicConfig1 |= EMC_DYNAMIC_CFG_ADD_MAP_P2(add_mapped_p2);
- LPC_EMC->DynamicConfig1 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK;
- LPC_EMC->DynamicConfig1 |= EMC_DYNAMIC_CFG_ADD_MAP_P3(add_mapped_p3);
-
- break;
-
- case 2:
- LPC_EMC->DynamicConfig2 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK;
- LPC_EMC->DynamicConfig2 |= EMC_DYNAMIC_CFG_ADD_MAP_P1(add_mapped_p1);
- LPC_EMC->DynamicConfig2 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK;
- LPC_EMC->DynamicConfig2 |= EMC_DYNAMIC_CFG_ADD_MAP_P2( add_mapped_p2);
- LPC_EMC->DynamicConfig2 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK;
- LPC_EMC->DynamicConfig2 |= EMC_DYNAMIC_CFG_ADD_MAP_P3(add_mapped_p3);
-
- break;
-
- case 3:
- LPC_EMC->DynamicConfig3 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P1_MASK;
- LPC_EMC->DynamicConfig3 |= EMC_DYNAMIC_CFG_ADD_MAP_P1(add_mapped_p1);
- LPC_EMC->DynamicConfig3 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P2_MASK;
- LPC_EMC->DynamicConfig3 |= EMC_DYNAMIC_CFG_ADD_MAP_P2(add_mapped_p2);
- LPC_EMC->DynamicConfig3 &= ~EMC_DYNAMIC_CFG_ADD_MAP_P3_MASK;
- LPC_EMC->DynamicConfig3 |= EMC_DYNAMIC_CFG_ADD_MAP_P3(add_mapped_p3);
-
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Enable/disable the buffer
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] buff_control buffer control mode, should be:
- *
- * - EMC_DYNAMIC_CFG_BUFF_DISABLED: buffer is disabled
- *
- * - EMC_DYNAMIC_CFG_BUFF_ENABLED: buffer is enable
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemConfigB(uint32_t index , uint32_t buff_control)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->DynamicConfig0 &= ~EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- LPC_EMC->DynamicConfig0 |= buff_control & EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- break;
-
- case 1:
- LPC_EMC->DynamicConfig1 &= ~EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- LPC_EMC->DynamicConfig1 |= buff_control& EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- break;
-
- case 2:
- LPC_EMC->DynamicConfig2 &= ~EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- LPC_EMC->DynamicConfig2 |= buff_control& EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- break;
-
- case 3:
- LPC_EMC->DynamicConfig3 &= ~EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- LPC_EMC->DynamicConfig3|= buff_control& EMC_DYNAMIC_CFG_BUFFENABLE_BMASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Configure write permission: protect or not
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] permission permission mode, should be:
- *
- * - EMC_DYNAMIC_CFG_WR_UNPROTECTED: will not protect
- *
- * - EMC_DYNAMIC_CFG_WR_PROTECTED: will protect
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemConfigP(uint32_t index , uint32_t permission)
-{
-
- switch ( index)
- {
- case 0:
- LPC_EMC->DynamicConfig0 &= ~ EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- LPC_EMC->DynamicConfig0 |= permission&EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- break;
-
- case 1:
- LPC_EMC->DynamicConfig1 &= ~ EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- LPC_EMC->DynamicConfig1 |= permission&EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- break;
-
- case 2:
- LPC_EMC->DynamicConfig2 &= ~ EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- LPC_EMC->DynamicConfig2 |= permission&EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- break;
-
- case 3:
- LPC_EMC->DynamicConfig3 &= ~ EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- LPC_EMC->DynamicConfig3 |= permission&EMC_DYNAMIC_CFG_WRPROTECT_BMASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Set value for RAS latency
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] ras_val RAS value should be in range: 0..3
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemRAS(uint32_t index , uint32_t ras_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->DynamicRasCas0 &= ~EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- LPC_EMC->DynamicRasCas0 |=( ras_val << EMC_DYNAMIC_RASCAS_RASCFG_POS)
- &EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- break;
-
- case 1:
- LPC_EMC->DynamicRasCas1 &= ~EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- LPC_EMC->DynamicRasCas1 |= ( ras_val << EMC_DYNAMIC_RASCAS_RASCFG_POS)
- &EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- break;
-
- case 2:
- LPC_EMC->DynamicRasCas2 &= ~EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- LPC_EMC->DynamicRasCas2 |= ( ras_val << EMC_DYNAMIC_RASCAS_RASCFG_POS)
- &EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- break;
-
- case 3:
- LPC_EMC->DynamicRasCas3 &= ~EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- LPC_EMC->DynamicRasCas3 |= ( ras_val << EMC_DYNAMIC_RASCAS_RASCFG_POS)
- &EMC_DYNAMIC_RASCAS_RASCFG_BMASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Set value for CAS latency
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] ras_val CAS value should be in range: 0..3
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_DynMemCAS(uint32_t index , uint32_t cas_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->DynamicRasCas0 &= ~EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- LPC_EMC->DynamicRasCas0 |= (cas_val<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
- &EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- break;
-
- case 1:
- LPC_EMC->DynamicRasCas1 &= ~EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- LPC_EMC->DynamicRasCas1 |= (cas_val<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
- &EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- break;
-
- case 2:
- LPC_EMC->DynamicRasCas2 &= ~EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- LPC_EMC->DynamicRasCas2 |= (cas_val<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
- &EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- break;
-
- case 3:
- LPC_EMC->DynamicRasCas3 &= ~EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- LPC_EMC->DynamicRasCas3 |= (cas_val<<EMC_DYNAMIC_RASCAS_CASCFG_POS)
- &EMC_DYNAMIC_RASCAS_CASCFG_BMASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Set extended wait time out for accessing static memory
- *
- * @param[in] Extended_wait_time_out timeout value that will be set
- *
- * @return EMC_FUNC_OK
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaticExtendedWait(uint32_t Extended_wait_time_out)
-{
- LPC_EMC->StaticExtendedWait = EMC_StaticExtendedWait_EXTENDEDWAIT(Extended_wait_time_out);
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Configure the memory width
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] mem_width memory width, should be:
- *
- * - EMC_STATIC_CFG_MW_8BITS: 8-bits
- *
- * - EMC_STATIC_CFG_MW_16BITS: 16-bits
- *
- * - EMC_STATIC_CFG_MW_32BITS02: 32-bits
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigMW(uint32_t index , uint32_t mem_width)
-{
- uint32_t mem_width_flg = 0;
- switch(mem_width)
- {
- case 8:
- mem_width_flg = EMC_STATIC_CFG_MW_8BITS;
- break;
- case 16:
- mem_width_flg = EMC_STATIC_CFG_MW_16BITS;
- break;
- case 32:
- mem_width_flg = EMC_STATIC_CFG_MW_32BITS;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~ EMC_STATIC_CFG_MEMWIDTH_BMASK;
- LPC_EMC->StaticConfig0 |= mem_width_flg;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~ EMC_STATIC_CFG_MEMWIDTH_BMASK;
- LPC_EMC->StaticConfig1 |= mem_width_flg;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~ EMC_STATIC_CFG_MEMWIDTH_BMASK;
- LPC_EMC->StaticConfig2 |= mem_width_flg;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~ EMC_STATIC_CFG_MEMWIDTH_BMASK;
- LPC_EMC->StaticConfig3 |= mem_width_flg;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-/*********************************************************************//**
- * @brief Configure the page mode
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] page_mode page mode, should be:
- *
- * - EMC_CFG_PM_DISABLE: disable
- *
- * - EMC_CFG_PM_ASYNC_ENABLE: asynchronous page mode enable
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigPM(uint32_t index , uint32_t page_mode)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_PAGEMODE_MASK;
- LPC_EMC->StaticConfig0 |= page_mode&EMC_STATIC_CFG_PAGEMODE_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_PAGEMODE_MASK;
- LPC_EMC->StaticConfig1 |= page_mode&EMC_STATIC_CFG_PAGEMODE_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_PAGEMODE_MASK;
- LPC_EMC->StaticConfig2 |= page_mode&EMC_STATIC_CFG_PAGEMODE_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_PAGEMODE_MASK;
- LPC_EMC->StaticConfig3 |= page_mode&EMC_STATIC_CFG_PAGEMODE_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Configure the chip select polarity
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] pagepol_val_mode page mode, should be:
- *
- * - EMC_CFG_BYTELAND_PC_ACTIVE_LO: Active LOW ship select
- *
- * - EMC_CFG_BYTELAND_PC_ACTIVE_HI: Active HIGH chip select
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigPC(uint32_t index , uint32_t pol_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- LPC_EMC->StaticConfig0 |= pol_val&EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- LPC_EMC->StaticConfig1 |= pol_val&EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- LPC_EMC->StaticConfig2 |= pol_val&EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- LPC_EMC->StaticConfig3 |= pol_val&EMC_STATIC_CFG_CHIPPOLARITY_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Configure the byte lane state
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] pb_val Byte lane state, should be:
- *
- * - EMC_CFG_BYTELAND_READ_BITSHIGH: For reads all bits
- * in BLSn[3:0] are HIGH.
- *
- * - EMC_CFG_BYTELAND_READ_BITSLOW: For reads all bits
- * in BLSn[3:0] are LOW.
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigPB(uint32_t index , uint32_t pb_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_BYTELAND_MASK;
- LPC_EMC->StaticConfig0 |= pb_val&EMC_STATIC_CFG_BYTELAND_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_BYTELAND_MASK;
- LPC_EMC->StaticConfig1 |= pb_val&EMC_STATIC_CFG_BYTELAND_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_BYTELAND_MASK;
- LPC_EMC->StaticConfig2 |= pb_val&EMC_STATIC_CFG_BYTELAND_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_BYTELAND_MASK;
- LPC_EMC->StaticConfig3 |= pb_val&EMC_STATIC_CFG_BYTELAND_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Configure the extended wait value
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] ex_wait Extended wait mode, should be:
- *
- * - EMC_CFG_EW_DISABLED: Extended wait disabled.
- *
- * - EMC_CFG_EW_ENABLED: Extended wait enabled.
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigEW(uint32_t index , uint32_t ex_wait)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_EXTWAIT_MASK;
- LPC_EMC->StaticConfig0 |= ex_wait&EMC_STATIC_CFG_EXTWAIT_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_EXTWAIT_MASK;
- LPC_EMC->StaticConfig1 |= ex_wait&EMC_STATIC_CFG_EXTWAIT_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_EXTWAIT_MASK;
- LPC_EMC->StaticConfig2 |= ex_wait&EMC_STATIC_CFG_EXTWAIT_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_EXTWAIT_MASK;
- LPC_EMC->StaticConfig3 |= ex_wait&EMC_STATIC_CFG_EXTWAIT_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Configure the buffer enable value
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] buf_val Buffer mode, should be:
- *
- * - EMC_CFG_BUF_DISABLED: Buffer disabled.
- *
- * - EMC_CFG_BUF_ENABLED: Buffer enabled.
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigB(uint32_t index , uint32_t buf_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_BUFENABLE_MASK;
- LPC_EMC->StaticConfig0 |= buf_val&EMC_STATIC_CFG_BUFENABLE_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_BUFENABLE_MASK;
- LPC_EMC->StaticConfig1 |= buf_val&EMC_STATIC_CFG_BUFENABLE_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_BUFENABLE_MASK;
- LPC_EMC->StaticConfig2 |= buf_val&EMC_STATIC_CFG_BUFENABLE_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_BUFENABLE_MASK;
- LPC_EMC->StaticConfig3 |= buf_val&EMC_STATIC_CFG_BUFENABLE_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Configure the write permission
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] per_val Permission mode, should be:
- *
- * - EMC_CFG_WRITEPROTECT_DISABLED: Write not protected.
- *
- * - EMC_CFG_WRITEPROTECT_ENABLED: Write protected.
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_StaMemConfigpP(uint32_t index , uint32_t per_val)
-{
- switch ( index)
- {
- case 0:
- LPC_EMC->StaticConfig0 &= ~EMC_STATIC_CFG_WRIEPROTECT_MASK;
- LPC_EMC->StaticConfig0 |= per_val&EMC_STATIC_CFG_WRIEPROTECT_MASK;
- break;
-
- case 1:
- LPC_EMC->StaticConfig1 &= ~EMC_STATIC_CFG_WRIEPROTECT_MASK;
- LPC_EMC->StaticConfig1 |= per_val&EMC_STATIC_CFG_WRIEPROTECT_MASK;
- break;
-
- case 2:
- LPC_EMC->StaticConfig2 &= ~EMC_STATIC_CFG_WRIEPROTECT_MASK;
- LPC_EMC->StaticConfig2 |= per_val&EMC_STATIC_CFG_WRIEPROTECT_MASK;
- break;
-
- case 3:
- LPC_EMC->StaticConfig3 &= ~EMC_STATIC_CFG_WRIEPROTECT_MASK;
- LPC_EMC->StaticConfig3 |= per_val&EMC_STATIC_CFG_WRIEPROTECT_MASK;
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- return EMC_FUNC_OK;
-}
-
-/*********************************************************************//**
- * @brief Set the value of LPC_EMC static memory registers
- *
- * @param[in] index index number, should be from 0 to 3
- *
- * @param[in] EMC_STA_MEM_PAR Static register, should be:
- *
- * - EMC_STA_MEM_WAITWEN: StaticWaitWen0 register
- * - EMC_STA_MEM_WAITOEN: StaticWaitOen0 register
- * - EMC_STA_MEM_WAITRD: StaticWaitRd0 register
- * - EMC_STA_MEM_WAITPAGE: StaticWaitPage0 register
- * - EMC_STA_MEM_WAITWR: StaticWaitWr0 register
- * - EMC_STA_MEM_WAITTURN: StaticWaitTurn0 register
- *
- * @return EMC_FUNC_OK/EMC_FUNC_INVALID_PARAM
- **********************************************************************/
-EMC_FUNC_CODE EMC_SetStaMemoryParameter(uint32_t index ,EMC_STA_MEM_PAR par, uint32_t val)
-{
- switch (index)
- {
- case 0:
- switch ( par)
- {
- case EMC_STA_MEM_WAITWEN:
- LPC_EMC->StaticWaitWen0 = EMC_StaticWaitWen_WAITWEN(val);
- break;
-
- case EMC_STA_MEM_WAITOEN:
- LPC_EMC->StaticWaitOen0 = EMC_StaticWaitOen_WAITOEN(val);
- break;
-
- case EMC_STA_MEM_WAITRD:
- LPC_EMC->StaticWaitRd0 = EMC_StaticWaitRd_WAITRD(val);
- break;
-
- case EMC_STA_MEM_WAITPAGE:
- LPC_EMC->StaticWaitPage0 = EMC_StaticwaitPage_WAITPAGE(val);
- break;
-
- case EMC_STA_MEM_WAITWR:
- LPC_EMC->StaticWaitWr0 = EMC_StaticWaitwr_WAITWR(val);
- break;
-
- case EMC_STA_MEM_WAITTURN:
- LPC_EMC->StaticWaitTurn0 =EMC_StaticWaitTurn_WAITTURN(val);
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- break;
-
- case 1:
- switch ( par)
- {
- case EMC_STA_MEM_WAITWEN:
- LPC_EMC->StaticWaitWen1 = EMC_StaticWaitWen_WAITWEN(val);
- break;
-
- case EMC_STA_MEM_WAITOEN:
- LPC_EMC->StaticWaitOen1 = EMC_StaticWaitOen_WAITOEN(val);
- break;
-
- case EMC_STA_MEM_WAITRD:
- LPC_EMC->StaticWaitRd1 = EMC_StaticWaitRd_WAITRD(val);
- break;
-
- case EMC_STA_MEM_WAITPAGE:
- LPC_EMC->StaticWaitPage1 = EMC_StaticwaitPage_WAITPAGE(val);
- break;
-
- case EMC_STA_MEM_WAITWR:
- LPC_EMC->StaticWaitWr1 = EMC_StaticWaitwr_WAITWR(val);
- break;
-
- case EMC_STA_MEM_WAITTURN:
- LPC_EMC->StaticWaitTurn1 =EMC_StaticWaitTurn_WAITTURN(val);
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
-
- }
- break;
-
- case 2:
- switch ( par)
- {
- case EMC_STA_MEM_WAITWEN:
- LPC_EMC->StaticWaitWen2 = EMC_StaticWaitWen_WAITWEN(val);
- break;
-
- case EMC_STA_MEM_WAITOEN:
- LPC_EMC->StaticWaitOen2 = EMC_StaticWaitOen_WAITOEN(val);
- break;
-
- case EMC_STA_MEM_WAITRD:
- LPC_EMC->StaticWaitRd2 = EMC_StaticWaitRd_WAITRD(val);
- break;
-
- case EMC_STA_MEM_WAITPAGE:
- LPC_EMC->StaticWaitPage2 = EMC_StaticwaitPage_WAITPAGE(val);
- break;
-
- case EMC_STA_MEM_WAITWR:
- LPC_EMC->StaticWaitWr2 = EMC_StaticWaitwr_WAITWR(val);
- break;
-
- case EMC_STA_MEM_WAITTURN:
- LPC_EMC->StaticWaitTurn2 =EMC_StaticWaitTurn_WAITTURN(val);
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
-
- }
- break;
-
- case 3:
- switch ( par)
- {
- case EMC_STA_MEM_WAITWEN:
- LPC_EMC->StaticWaitWen3 = EMC_StaticWaitWen_WAITWEN(val);
- break;
-
- case EMC_STA_MEM_WAITOEN:
- LPC_EMC->StaticWaitOen3 = EMC_StaticWaitOen_WAITOEN(val);
- break;
-
- case EMC_STA_MEM_WAITRD:
- LPC_EMC->StaticWaitRd3 = EMC_StaticWaitRd_WAITRD(val);
- break;
-
- case EMC_STA_MEM_WAITPAGE:
- LPC_EMC->StaticWaitPage3 = EMC_StaticwaitPage_WAITPAGE(val);
- break;
-
- case EMC_STA_MEM_WAITWR:
- LPC_EMC->StaticWaitWr3 = EMC_StaticWaitwr_WAITWR(val);
- break;
-
- case EMC_STA_MEM_WAITTURN:
- LPC_EMC->StaticWaitTurn3 =EMC_StaticWaitTurn_WAITTURN(val);
- break;
- default:
- return EMC_FUNC_INVALID_PARAM;
- }
- break;
- }
- return EMC_FUNC_OK;
-}
-/**
- * @}
- */
-
- /**
- * @}
- */
-#endif /*_EMC*/
-
-
-
-
-
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_exti.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_exti.c
deleted file mode 100644
index 148267ee8b..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_exti.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_exti.c 2011-06-02
-*//**
-* @file lpc_exti.c
-* @brief Contains all functions support for External Interrupt
-* firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup EXTI
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _EXTI
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_exti.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup EXTI_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Initial for EXT
- * - Set EXTINT, EXTMODE, EXTPOLAR registers to default value
- * @param[in] None
- * @return None
- **********************************************************************/
-void EXTI_Init(void)
-{
- LPC_SC->EXTINT = 0xF;
- LPC_SC->EXTMODE = 0x0;
- LPC_SC->EXTPOLAR = 0x0;
-}
-
-
-/*********************************************************************//**
-* @brief Close EXT
-* @param[in] None
-* @return None
-**********************************************************************/
-void EXTI_DeInit(void)
-{
- ;
-}
-
-/*********************************************************************//**
- * @brief Configuration for EXT
- * - Set EXTINT, EXTMODE, EXTPOLAR register
- * @param[in] EXTICfg Pointer to a EXTI_InitTypeDef structure
- * that contains the configuration information for the
- * specified external interrupt
- * @return None
- **********************************************************************/
-void EXTI_Config(EXTI_InitTypeDef *EXTICfg)
-{
- LPC_SC->EXTINT = 0x0;
- EXTI_SetMode(EXTICfg->EXTI_Line, EXTICfg->EXTI_Mode);
- EXTI_SetPolarity(EXTICfg->EXTI_Line, EXTICfg->EXTI_polarity);
-}
-
-/*********************************************************************//**
-* @brief Set mode for EXTI pin
-* @param[in] EXTILine external interrupt line, should be:
-* - EXTI_EINT0: external interrupt line 0
-* - EXTI_EINT1: external interrupt line 1
-* - EXTI_EINT2: external interrupt line 2
-* - EXTI_EINT3: external interrupt line 3
-* @param[in] mode external mode, should be:
-* - EXTI_MODE_LEVEL_SENSITIVE
-* - EXTI_MODE_EDGE_SENSITIVE
-* @return None
-*********************************************************************/
-void EXTI_SetMode(EXTI_LINE_ENUM EXTILine, EXTI_MODE_ENUM mode)
-{
- if(mode == EXTI_MODE_EDGE_SENSITIVE)
- {
- LPC_SC->EXTMODE |= (1 << EXTILine);
- }
- else if(mode == EXTI_MODE_LEVEL_SENSITIVE)
- {
- LPC_SC->EXTMODE &= ~(1 << EXTILine);
- }
-}
-
-/*********************************************************************//**
-* @brief Set polarity for EXTI pin
-* @param[in] EXTILine external interrupt line, should be:
-* - EXTI_EINT0: external interrupt line 0
-* - EXTI_EINT1: external interrupt line 1
-* - EXTI_EINT2: external interrupt line 2
-* - EXTI_EINT3: external interrupt line 3
-* @param[in] polarity external polarity value, should be:
-* - EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE
-* - EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE
-* @return None
-*********************************************************************/
-void EXTI_SetPolarity(EXTI_LINE_ENUM EXTILine, EXTI_POLARITY_ENUM polarity)
-{
- if(polarity == EXTI_POLARITY_HIGH_ACTIVE_OR_RISING_EDGE)
- {
- LPC_SC->EXTPOLAR |= (1 << EXTILine);
- }
- else if(polarity == EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE)
- {
- LPC_SC->EXTPOLAR &= ~(1 << EXTILine);
- }
-}
-
-/*********************************************************************//**
-* @brief Clear External interrupt flag
-* @param[in] EXTILine external interrupt line, should be:
-* - EXTI_EINT0: external interrupt line 0
-* - EXTI_EINT1: external interrupt line 1
-* - EXTI_EINT2: external interrupt line 2
-* - EXTI_EINT3: external interrupt line 3
-* @return None
-*********************************************************************/
-void EXTI_ClearEXTIFlag(EXTI_LINE_ENUM EXTILine)
-{
- LPC_SC->EXTINT |= (1 << EXTILine);
-}
-
-/**
- * @}
- */
-#endif /*_EXTI*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_gpdma.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_gpdma.c
deleted file mode 100644
index 8e8823d3dd..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_gpdma.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_gpdma.c 2011-06-02
-*//**
-* @file lpc_gpdma.c
-* @brief Contains all functions support for GPDMA firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup GPDMA
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _GPDMA
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_gpdma.h"
-#include "lpc_clkpwr.h"
-
-/* Private Variables ---------------------------------------------------------- */
-/** @defgroup GPDMA_Private_Variables GPDMA Private Variables
- * @{
- */
-
-/**
- * @brief Lookup Table of Connection Type matched with
- * Peripheral Data (FIFO) register base address
- */
-volatile const void *GPDMA_LUTPerAddr[] = {
- 0, // Revered
- (&LPC_MCI->FIFO), // SD Card
- (&LPC_SSP0->DR), // SSP0 Tx
- (&LPC_SSP0->DR), // SSP0 Rx
- (&LPC_SSP1->DR), // SSP1 Tx
- (&LPC_SSP1->DR), // SSP1 Rx
- (&LPC_SSP2->DR), // SSP2 Tx
- (&LPC_SSP2->DR), // SSP2 Rx
- (&LPC_ADC->GDR), // ADC
- (&LPC_DAC->CR), // DAC
- (&LPC_UART0->/*RBTHDLR.*/THR), // UART0 Tx
- (&LPC_UART0->/*RBTHDLR.*/RBR), // UART0 Rx
- (&LPC_UART1->/*RBTHDLR.*/THR), // UART1 Tx
- (&LPC_UART1->/*RBTHDLR.*/RBR), // UART1 Rx
- (&LPC_UART2->/*RBTHDLR.*/THR), // UART2 Tx
- (&LPC_UART2->/*RBTHDLR.*/RBR), // UART2 Rx
- (&LPC_TIM0->MR0), // MAT0.0
- (&LPC_TIM0->MR1), // MAT0.1
- (&LPC_TIM1->MR0), // MAT1.0
- (&LPC_TIM1->MR1), // MAT1.1
- (&LPC_TIM2->MR0), // MAT2.0
- (&LPC_TIM2->MR1), // MAT2.1
- (&LPC_I2S->TXFIFO), // I2S Tx
- (&LPC_I2S->RXFIFO), // I2S Rx
- 0, // Reverse
- 0, // Reverse
- (&LPC_UART3->/*RBTHDLR.*/THR), // UART3 Tx
- (&LPC_UART3->/*RBTHDLR.*/RBR), // UART3 Rx
- (&LPC_UART4->/*RBTHDLR.*/THR), // UART4 Tx
- (&LPC_UART4->/*RBTHDLR.*/RBR), // UART4 Rx
- (&LPC_TIM3->MR0), // MAT3.0
- (&LPC_TIM3->MR1), // MAT3.1
-};
-
-/**
- * @brief Lookup Table of GPDMA Channel Number matched with
- * GPDMA channel pointer
- */
-const LPC_GPDMACH_TypeDef *pGPDMACh[8] = {
- LPC_GPDMACH0, // GPDMA Channel 0
- LPC_GPDMACH1, // GPDMA Channel 1
- LPC_GPDMACH2, // GPDMA Channel 2
- LPC_GPDMACH3, // GPDMA Channel 3
- LPC_GPDMACH4, // GPDMA Channel 4
- LPC_GPDMACH5, // GPDMA Channel 5
- LPC_GPDMACH6, // GPDMA Channel 6
- LPC_GPDMACH7, // GPDMA Channel 7
-};
-/**
- * @brief Optimized Peripheral Source and Destination burst size
- */
-const uint8_t GPDMA_LUTPerBurst[] = {
- 0, // Reserved
- GPDMA_BSIZE_8, // SD Card
- GPDMA_BSIZE_4, // SSP0 Tx
- GPDMA_BSIZE_4, // SSP0 Rx
- GPDMA_BSIZE_4, // SSP1 Tx
- GPDMA_BSIZE_4, // SSP1 Rx
- GPDMA_BSIZE_4, // SSP2 Tx
- GPDMA_BSIZE_4, // SSP2 Rx
- GPDMA_BSIZE_1, // ADC
- GPDMA_BSIZE_1, // DAC
- GPDMA_BSIZE_1, // UART0 Tx
- GPDMA_BSIZE_1, // UART0 Rx
- GPDMA_BSIZE_1, // UART1 Tx
- GPDMA_BSIZE_1, // UART1 Rx
- GPDMA_BSIZE_1, // UART2 Tx
- GPDMA_BSIZE_1, // UART2 Rx
- GPDMA_BSIZE_1, // MAT0.0
- GPDMA_BSIZE_1, // MAT0.1
- GPDMA_BSIZE_1, // MAT1.0
- GPDMA_BSIZE_1, // MAT1.1
- GPDMA_BSIZE_1, // MAT2.0
- GPDMA_BSIZE_1, // MAT2.1
- GPDMA_BSIZE_32, // I2S channel 0
- GPDMA_BSIZE_32, // I2S channel 1
- 0, // Reserved
- 0, // Reserved
- GPDMA_BSIZE_1, // UART3 Tx
- GPDMA_BSIZE_1, // UART3 Rx
- GPDMA_BSIZE_1, // UART4 Tx
- GPDMA_BSIZE_1, // UART4 Rx
- GPDMA_BSIZE_1, // MAT3.0
- GPDMA_BSIZE_1, // MAT3.1
-};
-/**
- * @brief Optimized Peripheral Source and Destination transfer width
- */
-const uint8_t GPDMA_LUTPerWid[] = {
- 0, // Reserved
- GPDMA_WIDTH_WORD, // SD Card
- GPDMA_WIDTH_BYTE, // SSP0 Tx
- GPDMA_WIDTH_BYTE, // SSP0 Rx
- GPDMA_WIDTH_BYTE, // SSP1 Tx
- GPDMA_WIDTH_BYTE, // SSP1 Rx
- GPDMA_WIDTH_BYTE, // SSP2 Tx
- GPDMA_WIDTH_BYTE, // SSP2 Rx
- GPDMA_WIDTH_WORD, // ADC
- GPDMA_WIDTH_BYTE, // DAC
- GPDMA_WIDTH_BYTE, // UART0 Tx
- GPDMA_WIDTH_BYTE, // UART0 Rx
- GPDMA_WIDTH_BYTE, // UART1 Tx
- GPDMA_WIDTH_BYTE, // UART1 Rx
- GPDMA_WIDTH_BYTE, // UART2 Tx
- GPDMA_WIDTH_BYTE, // UART2 Rx
- GPDMA_WIDTH_WORD, // MAT0.0
- GPDMA_WIDTH_WORD, // MAT0.1
- GPDMA_WIDTH_WORD, // MAT1.0
- GPDMA_WIDTH_WORD, // MAT1.1
- GPDMA_WIDTH_WORD, // MAT2.0
- GPDMA_WIDTH_WORD, // MAT2.1
- GPDMA_WIDTH_WORD, // I2S channel 0
- GPDMA_WIDTH_WORD, // I2S channel 1
- 0, // Reserved
- 0, // Reserved
- GPDMA_WIDTH_BYTE, // UART3 Tx
- GPDMA_WIDTH_BYTE, // UART3 Rx
- GPDMA_WIDTH_BYTE, // UART4 Tx
- GPDMA_WIDTH_BYTE, // UART4 Rx
- GPDMA_WIDTH_WORD, // MAT3.0
- GPDMA_WIDTH_WORD, // MAT3.1
-};
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup GPDMA_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initialize GPDMA controller
- * @param None
- * @return None
- *********************************************************************/
-void GPDMA_Init(void)
-{
- /* Enable GPDMA clock */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCGPDMA, ENABLE);
-
- // Reset all channel configuration register
- LPC_GPDMACH0->CConfig = 0;
- LPC_GPDMACH1->CConfig = 0;
- LPC_GPDMACH2->CConfig = 0;
- LPC_GPDMACH3->CConfig = 0;
- LPC_GPDMACH4->CConfig = 0;
- LPC_GPDMACH5->CConfig = 0;
- LPC_GPDMACH6->CConfig = 0;
- LPC_GPDMACH7->CConfig = 0;
-
- /* Clear all DMA interrupt and error flag */
- LPC_GPDMA->IntTCClear = 0xFF;
- LPC_GPDMA->IntErrClr = 0xFF;
-}
-
-/********************************************************************//**
- * @brief Setup GPDMA channel peripheral according to the specified
- * parameters in the GPDMAChannelConfig.
- * @param[in] GPDMAChannelConfig Pointer to a GPDMA_CH_CFG_Type
- * structure that contains the configuration
- * information for the specified GPDMA channel peripheral.
- * @return ERROR if selected channel is enabled before
- * or SUCCESS if channel is configured successfully
- *********************************************************************/
-Status GPDMA_Setup(GPDMA_Channel_CFG_Type *GPDMAChannelConfig)
-{
- LPC_GPDMACH_TypeDef *pDMAch;
- uint32_t tmp1, tmp2;
-
- if (LPC_GPDMA->EnbldChns & (GPDMA_DMACEnbldChns_Ch(GPDMAChannelConfig->ChannelNum))) {
- // This channel is enabled, return ERROR, need to release this channel first
- return ERROR;
- }
-
- // Get Channel pointer
- pDMAch = (LPC_GPDMACH_TypeDef *) pGPDMACh[GPDMAChannelConfig->ChannelNum];
-
- // Reset the Interrupt status
- LPC_GPDMA->IntTCClear = GPDMA_DMACIntTCClear_Ch(GPDMAChannelConfig->ChannelNum);
- LPC_GPDMA->IntErrClr = GPDMA_DMACIntErrClr_Ch(GPDMAChannelConfig->ChannelNum);
-
- // Clear DMA configure
- pDMAch->CControl = 0x00;
- pDMAch->CConfig = 0x00;
-
- /* Assign Linker List Item value */
- pDMAch->CLLI = GPDMAChannelConfig->DMALLI;
-
- /* Set value to Channel Control Registers */
- switch (GPDMAChannelConfig->TransferType)
- {
- // Memory to memory
- case GPDMA_TRANSFERTYPE_M2M:
- // Assign physical source and destination address
- pDMAch->CSrcAddr = GPDMAChannelConfig->SrcMemAddr;
- pDMAch->CDestAddr = GPDMAChannelConfig->DstMemAddr;
- pDMAch->CControl
- = GPDMA_DMACCxControl_TransferSize(GPDMAChannelConfig->TransferSize) \
- | GPDMA_DMACCxControl_SBSize(GPDMA_BSIZE_32) \
- | GPDMA_DMACCxControl_DBSize(GPDMA_BSIZE_32) \
- | GPDMA_DMACCxControl_SWidth(GPDMAChannelConfig->TransferWidth) \
- | GPDMA_DMACCxControl_DWidth(GPDMAChannelConfig->TransferWidth) \
- | GPDMA_DMACCxControl_SI \
- | GPDMA_DMACCxControl_DI \
- | GPDMA_DMACCxControl_I;
- break;
- // Memory to peripheral
- case GPDMA_TRANSFERTYPE_M2P:
- case GPDMA_TRANSFERTYPE_M2P_DEST_CTRL:
- // Assign physical source
- pDMAch->CSrcAddr = GPDMAChannelConfig->SrcMemAddr;
- // Assign peripheral destination address
- pDMAch->CDestAddr = (uint32_t)GPDMA_LUTPerAddr[GPDMAChannelConfig->DstConn];
- pDMAch->CControl
- = GPDMA_DMACCxControl_TransferSize((uint32_t)GPDMAChannelConfig->TransferSize) \
- | GPDMA_DMACCxControl_SBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_DBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_SWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_DWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_SI \
- | GPDMA_DMACCxControl_I;
- break;
- // Peripheral to memory
- case GPDMA_TRANSFERTYPE_P2M:
- case GPDMA_TRANSFERTYPE_P2M_SRC_CTRL:
- // Assign peripheral source address
- pDMAch->CSrcAddr = (uint32_t)GPDMA_LUTPerAddr[GPDMAChannelConfig->SrcConn];
- // Assign memory destination address
- pDMAch->CDestAddr = GPDMAChannelConfig->DstMemAddr;
- pDMAch->CControl
- = GPDMA_DMACCxControl_TransferSize((uint32_t)GPDMAChannelConfig->TransferSize) \
- | GPDMA_DMACCxControl_SBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_DBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_SWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_DWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_DI \
- | GPDMA_DMACCxControl_I;
- break;
- // Peripheral to peripheral
- case GPDMA_TRANSFERTYPE_P2P:
- // Assign peripheral source address
- pDMAch->CSrcAddr = (uint32_t)GPDMA_LUTPerAddr[GPDMAChannelConfig->SrcConn];
- // Assign peripheral destination address
- pDMAch->CDestAddr = (uint32_t)GPDMA_LUTPerAddr[GPDMAChannelConfig->DstConn];
- pDMAch->CControl = GPDMA_DMACCxControl_TransferSize((uint32_t)GPDMAChannelConfig->TransferSize) \
- | GPDMA_DMACCxControl_SBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_DBSize((uint32_t)GPDMA_LUTPerBurst[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_SWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->SrcConn]) \
- | GPDMA_DMACCxControl_DWidth((uint32_t)GPDMA_LUTPerWid[GPDMAChannelConfig->DstConn]) \
- | GPDMA_DMACCxControl_I;
- break;
- // Do not support any more transfer type, return ERROR
- default:
- return ERROR;
- }
-
- /* Re-Configure DMA Request Select for source peripheral */
- if((GPDMAChannelConfig->SrcConn != 8)&&(GPDMAChannelConfig->SrcConn != 9))
- {
- if (GPDMAChannelConfig->SrcConn > 15)
- {
- LPC_SC->DMAREQSEL |= (1<<(GPDMAChannelConfig->SrcConn - 16));
- } else {
- LPC_SC->DMAREQSEL &= ~(1<<(GPDMAChannelConfig->SrcConn));
- }
- }
-
- /* Re-Configure DMA Request Select for Destination peripheral */
- if((GPDMAChannelConfig->DstConn != 8)&&(GPDMAChannelConfig->DstConn != 9))
- {
- if (GPDMAChannelConfig->DstConn > 15)
- {
- LPC_SC->DMAREQSEL |= (1<<(GPDMAChannelConfig->DstConn - 16));
- } else {
- LPC_SC->DMAREQSEL &= ~(1<<(GPDMAChannelConfig->DstConn));
- }
- }
-
- /* Enable DMA channels, little endian */
- LPC_GPDMA->Config = GPDMA_DMACConfig_E;
- while (!(LPC_GPDMA->Config & GPDMA_DMACConfig_E));
-
- // Calculate absolute value for Connection number
- tmp1 = GPDMAChannelConfig->SrcConn;
- tmp1 = ((tmp1 > 15) ? (tmp1 - 16) : tmp1);
- tmp2 = GPDMAChannelConfig->DstConn;
- tmp2 = ((tmp2 > 15) ? (tmp2 - 16) : tmp2);
-
- // Configure DMA Channel, enable Error Counter and Terminate counter
- pDMAch->CConfig = GPDMA_DMACCxConfig_IE | GPDMA_DMACCxConfig_ITC /*| GPDMA_DMACCxConfig_E*/ \
- | GPDMA_DMACCxConfig_TransferType((uint32_t)GPDMAChannelConfig->TransferType) \
- | GPDMA_DMACCxConfig_SrcPeripheral(tmp1) \
- | GPDMA_DMACCxConfig_DestPeripheral(tmp2);
-
- return SUCCESS;
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable DMA channel
- * @param[in] channelNum GPDMA channel, should be in range from 0 to 7
- * @param[in] NewState New State of this command, should be:
- * - ENABLE.
- * - DISABLE.
- * @return None
- **********************************************************************/
-void GPDMA_ChannelCmd(uint8_t channelNum, FunctionalState NewState)
-{
- LPC_GPDMACH_TypeDef *pDMAch;
-
- // Get Channel pointer
- pDMAch = (LPC_GPDMACH_TypeDef *) pGPDMACh[channelNum];
-
- if (NewState == ENABLE) {
- pDMAch->CConfig |= GPDMA_DMACCxConfig_E;
- } else {
- pDMAch->CConfig &= ~GPDMA_DMACCxConfig_E;
- }
-}
-/*********************************************************************//**
- * @brief Check if corresponding channel does have an active interrupt
- * request or not
- * @param[in] type type of status, should be:
- * - GPDMA_STAT_INT: GPDMA Interrupt Status
- * - GPDMA_STAT_INTTC: GPDMA Interrupt Terminal Count Request Status
- * - GPDMA_STAT_INTERR: GPDMA Interrupt Error Status
- * - GPDMA_STAT_RAWINTTC: GPDMA Raw Interrupt Terminal Count Status
- * - GPDMA_STAT_RAWINTERR: GPDMA Raw Error Interrupt Status
- * - GPDMA_STAT_ENABLED_CH:GPDMA Enabled Channel Status
- * @param[in] channel GPDMA channel, should be in range from 0 to 7
- * @return IntStatus status of DMA channel interrupt after masking
- * Should be:
- * - SET: the corresponding channel has no active interrupt request
- * - RESET: the corresponding channel does have an active interrupt request
- **********************************************************************/
-IntStatus GPDMA_IntGetStatus(GPDMA_Status_Type type, uint8_t channel)
-{
- switch (type)
- {
- case GPDMA_STAT_INT: //check status of DMA channel interrupts
- if (LPC_GPDMA->IntStat & (GPDMA_DMACIntStat_Ch(channel)))
- return SET;
- return RESET;
- case GPDMA_STAT_INTTC: // check terminal count interrupt request status for DMA
- if (LPC_GPDMA->IntTCStat & GPDMA_DMACIntTCStat_Ch(channel))
- return SET;
- return RESET;
- case GPDMA_STAT_INTERR: //check interrupt status for DMA channels
- if (LPC_GPDMA->IntErrStat & GPDMA_DMACIntTCClear_Ch(channel))
- return SET;
- return RESET;
- case GPDMA_STAT_RAWINTTC: //check status of the terminal count interrupt for DMA channels
- if (LPC_GPDMA->RawIntErrStat & GPDMA_DMACRawIntTCStat_Ch(channel))
- return SET;
- return RESET;
- case GPDMA_STAT_RAWINTERR: //check status of the error interrupt for DMA channels
- if (LPC_GPDMA->RawIntTCStat & GPDMA_DMACRawIntErrStat_Ch(channel))
- return SET;
- return RESET;
- default: //check enable status for DMA channels
- if (LPC_GPDMA->EnbldChns & GPDMA_DMACEnbldChns_Ch(channel))
- return SET;
- return RESET;
- }
-}
-
-/*********************************************************************//**
- * @brief Clear one or more interrupt requests on DMA channels
- * @param[in] type type of interrupt request, should be:
- * - GPDMA_STATCLR_INTTC: GPDMA Interrupt Terminal Count Request Clear
- * - GPDMA_STATCLR_INTERR: GPDMA Interrupt Error Clear
- * @param[in] channel GPDMA channel, should be in range from 0 to 7
- * @return None
- **********************************************************************/
-void GPDMA_ClearIntPending(GPDMA_StateClear_Type type, uint8_t channel)
-{
- if (type == GPDMA_STATCLR_INTTC) // clears the terminal count interrupt request on DMA channel
- LPC_GPDMA->IntTCClear = GPDMA_DMACIntTCClear_Ch(channel);
- else // clear the error interrupt request
- LPC_GPDMA->IntErrClr = GPDMA_DMACIntErrClr_Ch(channel);
-}
-
-/**
- * @}
- */
-
-#endif /* _GPDMA */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_gpio.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_gpio.c
deleted file mode 100644
index 84440f6977..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_gpio.c
+++ /dev/null
@@ -1,905 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_gpio.c 2011-06-02
-*//**
-* @file lpc_gpio.c
-* @brief Contains all functions support for GPIO firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup GPIO
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _GPIO
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_gpio.h"
-#include "lpc_clkpwr.h"
-
-/* definitions ------------------------------------------------------------------- */
-#define GPIO_IS_ENABLED(x) (((x) != 0)? ENABLE:DISABLE)
-
-/* Private Functions ---------------------------------------------------------- */
-
-static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum);
-static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum);
-static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum);
-
-/*********************************************************************//**
- * @brief Get pointer to GPIO peripheral due to GPIO port
- * @param[in] portNum Port Number value, should be in range from 0 to 4.
- * @return Pointer to GPIO peripheral
- **********************************************************************/
-static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum)
-{
- LPC_GPIO_TypeDef *pGPIO = NULL;
-
- switch (portNum)
- {
- case 0:
- pGPIO = LPC_GPIO0;
- break;
-
- case 1:
- pGPIO = LPC_GPIO1;
- break;
-
- case 2:
- pGPIO = LPC_GPIO2;
- break;
-
- case 3:
- pGPIO = LPC_GPIO3;
- break;
-
- case 4:
- pGPIO = LPC_GPIO4;
- break;
-
- case 5:
- pGPIO = LPC_GPIO5;
- break;
-
- default:
- break;
- }
-
- return pGPIO;
-}
-
-/*********************************************************************//**
- * @brief Get pointer to FIO peripheral in halfword accessible style
- * due to FIO port
- * @param[in] portNum Port Number value, should be in range from 0 to 4.
- * @return Pointer to FIO peripheral
- **********************************************************************/
-static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum)
-{
- GPIO_HalfWord_TypeDef *pFIO = NULL;
-
- switch (portNum)
- {
- case 0:
- pFIO = GPIO0_HalfWord;
- break;
-
- case 1:
- pFIO = GPIO1_HalfWord;
- break;
-
- case 2:
- pFIO = GPIO2_HalfWord;
- break;
-
- case 3:
- pFIO = GPIO3_HalfWord;
- break;
-
- case 4:
- pFIO = GPIO4_HalfWord;
- break;
-
- case 5:
- pFIO = GPIO5_HalfWord;
- break;
-
- default:
- break;
- }
-
- return pFIO;
-}
-
-/*********************************************************************//**
- * @brief Get pointer to FIO peripheral in byte accessible style
- * due to FIO port
- * @param[in] portNum Port Number value, should be in range from 0 to 4.
- * @return Pointer to FIO peripheral
- **********************************************************************/
-static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum)
-{
- GPIO_Byte_TypeDef *pFIO = NULL;
-
- switch (portNum)
- {
- case 0:
- pFIO = GPIO0_Byte;
- break;
-
- case 1:
- pFIO = GPIO1_Byte;
- break;
-
- case 2:
- pFIO = GPIO2_Byte;
- break;
-
- case 3:
- pFIO = GPIO3_Byte;
- break;
-
- case 4:
- pFIO = GPIO4_Byte;
- break;
-
- case 5:
- pFIO = GPIO5_Byte;
- break;
-
- default:
- break;
- }
-
- return pFIO;
-}
-
-/* End of Private Functions --------------------------------------------------- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup GPIO_Public_Functions
- * @{
- */
-
-
-/* GPIO ------------------------------------------------------------------------------ */
-
-/*********************************************************************//**
- * @brief Initialize the GPIO component by power on the clock
- * supplied to it.
- * @return None
- *
- * Note:
- **********************************************************************/
-void GPIO_Init(void)
-{
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCGPIO, ENABLE);
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief De-initialize the GPIO component by power off the clock
- * supplied to it.
- * @return None
- *
- * Note:
- **********************************************************************/
-void GPIO_Deinit(void)
-{
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCGPIO, DISABLE);
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Set Direction for GPIO port.
- * @param[in] portNum Port Number value, should be in range from 0 to 4
- * @param[in] bitValue Value that contains all bits to set direction,
- * in range from 0 to 0xFFFFFFFF.
- * example: value 0x5 to set direction for bit 0 and bit 1.
- * @param[in] dir Direction value, should be:
- * - 0: Input.
- * - 1: Output.
- * @return None
- *
- * Note: All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
-{
- LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
-
- if (pGPIO != NULL)
- {
- // Enable Output
- if (dir)
- {
- pGPIO->DIR |= bitValue;
- }
- // Enable Input
- else
- {
- pGPIO->DIR &= ~bitValue;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set Value for bits that have output direction on GPIO port.
- * @param[in] portNum Port number value, should be in range from 0 to 4
- * @param[in] bitValue Value that contains all bits on GPIO to set,
- * in range from 0 to 0xFFFFFFFF.
- * example: value 0x5 to set bit 0 and bit 1.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void GPIO_SetValue(uint8_t portNum, uint32_t bitValue)
-{
- LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
-
- if (pGPIO != NULL)
- {
- pGPIO->SET = bitValue;
- }
-}
-
-/*********************************************************************//**
- * @brief Clear Value for bits that have output direction on GPIO port.
- * @param[in] portNum Port number value, should be in range from 0 to 4
- * @param[in] bitValue Value that contains all bits on GPIO to clear,
- * in range from 0 to 0xFFFFFFFF.
- * example: value 0x5 to clear bit 0 and bit 1.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue)
-{
- LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
-
- if (pGPIO != NULL)
- {
- pGPIO->CLR = bitValue;
- }
-}
-
-/*********************************************************************//**
- * @brief Output to the GPIO pin an expected value
- * @param[in] portNum Port number value, should be in range from 0 to 4
- * @param[in] bitValue Value that contains all bits on GPIO to clear,
- * in range from 0 to 0xFFFFFFFF.
- * example: value 0x5 to clear bit 0 and bit 1.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void GPIO_OutputValue(uint8_t portNum, uint32_t bitMask, uint8_t value)
-{
- if (value == 0)
- {
- GPIO_ClearValue(portNum, bitMask);
- }
- else
- {
- GPIO_SetValue(portNum, bitMask);
- }
-
-}
-
-
-/*********************************************************************//**
- * @brief Read Current state on port pin that have input direction of GPIO
- * @param[in] portNum Port number to read value, in range from 0 to 4
- * @return Current value of GPIO port.
- *
- * Note: Return value contain state of each port pin (bit) on that GPIO regardless
- * its direction is input or output.
- **********************************************************************/
-uint32_t GPIO_ReadValue(uint8_t portNum)
-{
- LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
-
- if (pGPIO != NULL)
- {
- return pGPIO->PIN;
- }
-
- return (0);
-}
-
-/*********************************************************************//**
- * @brief Enable GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13)
- * @param[in] portNum Port number to read value, should be: 0 or 2
- * @param[in] bitValue Value that contains all bits on GPIO to enable,
- * in range from 0 to 0xFFFFFFFF.
- * @param[in] edgeState state of edge, should be:
- * - 0: Rising edge
- * - 1: Falling edge
- * @return None
- **********************************************************************/
-void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
-{
- if((portNum == 0)&&(edgeState == 0))
- LPC_GPIOINT->IO0IntEnR = bitValue;
- else if ((portNum == 2)&&(edgeState == 0))
- LPC_GPIOINT->IO2IntEnR = bitValue;
- else if ((portNum == 0)&&(edgeState == 1))
- LPC_GPIOINT->IO0IntEnF = bitValue;
- else if ((portNum == 2)&&(edgeState == 1))
- LPC_GPIOINT->IO2IntEnF = bitValue;
- else
- //Error
- while(1);
-}
-
-/*********************************************************************//**
- * @brief Get GPIO Interrupt Status (just used for P0.0-P0.30, P2.0-P2.13)
- * @param[in] portNum Port number to read value, should be: 0 or 2
- * @param[in] pinNum Pin number, should be: 0..30(with port 0) and 0..13
- * (with port 2)
- * @param[in] edgeState state of edge, should be:
- * - 0: Rising edge
- * - 1: Falling edge
- * @return Bool could be:
- * - ENABLE: Interrupt has been generated due to a rising
- * edge on P0.0
- * - DISABLE: A rising edge has not been detected on P0.0
- **********************************************************************/
-FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
-{
- if((portNum == 0) && (edgeState == 0))//Rising Edge
- return GPIO_IS_ENABLED(((LPC_GPIOINT->IO0IntStatR)>>pinNum)& 0x1);
- else if ((portNum == 2) && (edgeState == 0))
- return GPIO_IS_ENABLED(((LPC_GPIOINT->IO2IntStatR)>>pinNum)& 0x1);
- else if ((portNum == 0) && (edgeState == 1))//Falling Edge
- return GPIO_IS_ENABLED(((LPC_GPIOINT->IO0IntStatF)>>pinNum)& 0x1);
- else if ((portNum == 2) && (edgeState == 1))
- return GPIO_IS_ENABLED(((LPC_GPIOINT->IO2IntStatF)>>pinNum)& 0x1);
- else
- //Error
- while(1);
-}
-/*********************************************************************//**
- * @brief Clear GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13)
- * @param[in] portNum Port number to read value, should be: 0 or 2
- * @param[in] bitValue Value that contains all bits on GPIO to enable,
- * in range from 0 to 0xFFFFFFFF.
- * @return None
- **********************************************************************/
-void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue)
-{
- if(portNum == 0)
- LPC_GPIOINT->IO0IntClr = bitValue;
- else if (portNum == 2)
- LPC_GPIOINT->IO2IntClr = bitValue;
- else
- //Invalid portNum
- while(1);
-}
-
-/* FIO word accessible ----------------------------------------------------------------- */
-/* Stub function for FIO (word-accessible) style */
-
-/**
- * @brief The same with GPIO_SetDir()
- */
-void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
-{
- GPIO_SetDir(portNum, bitValue, dir);
-}
-
-/**
- * @brief The same with GPIO_SetValue()
- */
-void FIO_SetValue(uint8_t portNum, uint32_t bitValue)
-{
- GPIO_SetValue(portNum, bitValue);
-}
-
-/**
- * @brief The same with GPIO_ClearValue()
- */
-void FIO_ClearValue(uint8_t portNum, uint32_t bitValue)
-{
- GPIO_ClearValue(portNum, bitValue);
-}
-
-/**
- * @brief The same with GPIO_ReadValue()
- */
-uint32_t FIO_ReadValue(uint8_t portNum)
-{
- return (GPIO_ReadValue(portNum));
-}
-
-/**
- * @brief The same with GPIO_IntCmd()
- */
-void FIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
-{
- GPIO_IntCmd(portNum, bitValue, edgeState);
-}
-
-/**
- * @brief The same with GPIO_GetIntStatus()
- */
-FunctionalState FIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
-{
- return (GPIO_GetIntStatus(portNum, pinNum, edgeState));
-}
-
-/**
- * @brief The same with GPIO_ClearInt()
- */
-void FIO_ClearInt(uint8_t portNum, uint32_t bitValue)
-{
- GPIO_ClearInt(portNum, bitValue);
-}
-/*********************************************************************//**
- * @brief Set mask value for bits in FIO port
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] bitValue Value that contains all bits in to set,
- * in range from 0 to 0xFFFFFFFF.
- * @param[in] maskValue Mask value contains state value for each bit:
- * - 0: not mask.
- * - 1: mask.
- * @return None
- *
- * Note:
- * - All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- * - After executing this function, in mask register, value '0' on each bit
- * enables an access to the corresponding physical pin via a read or write access,
- * while value '1' on bit (masked) that corresponding pin will not be changed
- * with write access and if read, will not be reflected in the updated pin.
- **********************************************************************/
-void FIO_SetMask(uint8_t portNum, uint32_t bitValue, uint8_t maskValue)
-{
- LPC_GPIO_TypeDef *pFIO = GPIO_GetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Mask
- if (maskValue)
- {
- pFIO->MASK |= bitValue;
- }
- // Un-mask
- else
- {
- pFIO->MASK &= ~bitValue;
- }
- }
-}
-
-
-/* FIO halfword accessible ------------------------------------------------------------- */
-
-/*********************************************************************//**
- * @brief Set direction for FIO port in halfword accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
- * @param[in] bitValue Value that contains all bits in to set direction,
- * in range from 0 to 0xFFFF.
- * @param[in] dir Direction value, should be:
- * - 0: Input.
- * - 1: Output.
- * @return None
- *
- * Note: All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_HalfWordSetDir(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t dir)
-{
- GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Output direction
- if (dir)
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIODIRU |= bitValue;
- }
- // lower
- else
- {
- pFIO->FIODIRL |= bitValue;
- }
- }
- // Input direction
- else
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIODIRU &= ~bitValue;
- }
- // lower
- else
- {
- pFIO->FIODIRL &= ~bitValue;
- }
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set mask value for bits in FIO port in halfword accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
- * @param[in] bitValue Value that contains all bits in to set,
- * in range from 0 to 0xFFFF.
- * @param[in] maskValue Mask value contains state value for each bit:
- * - 0: not mask.
- * - 1: mask.
- * @return None
- *
- * Note:
- * - All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- * - After executing this function, in mask register, value '0' on each bit
- * enables an access to the corresponding physical pin via a read or write access,
- * while value '1' on bit (masked) that corresponding pin will not be changed
- * with write access and if read, will not be reflected in the updated pin.
- **********************************************************************/
-void FIO_HalfWordSetMask(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t maskValue)
-{
- GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Mask
- if (maskValue)
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIOMASKU |= bitValue;
- }
- // lower
- else
- {
- pFIO->FIOMASKL |= bitValue;
- }
- }
- // Un-mask
- else
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIOMASKU &= ~bitValue;
- }
- // lower
- else
- {
- pFIO->FIOMASKL &= ~bitValue;
- }
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set bits for FIO port in halfword accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
- * @param[in] bitValue Value that contains all bits in to set,
- * in range from 0 to 0xFFFF.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_HalfWordSetValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
-{
- GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIOSETU = bitValue;
- }
- // lower
- else
- {
- pFIO->FIOSETL = bitValue;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Clear bits for FIO port in halfword accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
- * @param[in] bitValue Value that contains all bits in to clear,
- * in range from 0 to 0xFFFF.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_HalfWordClearValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
-{
- GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Upper
- if(halfwordNum)
- {
- pFIO->FIOCLRU = bitValue;
- }
- // lower
- else
- {
- pFIO->FIOCLRL = bitValue;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Read Current state on port pin that have input direction of GPIO
- * in halfword accessible style.
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
- * @return Current value of FIO port pin of specified halfword.
- * Note: Return value contain state of each port pin (bit) on that FIO regardless
- * its direction is input or output.
- **********************************************************************/
-uint16_t FIO_HalfWordReadValue(uint8_t portNum, uint8_t halfwordNum)
-{
- GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Upper
- if(halfwordNum)
- {
- return (pFIO->FIOPINU);
- }
- // lower
- else
- {
- return (pFIO->FIOPINL);
- }
- }
-
- return (0);
-}
-
-
-/* FIO Byte accessible ------------------------------------------------------------ */
-
-/*********************************************************************//**
- * @brief Set direction for FIO port in byte accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] byteNum Byte part number, should be in range from 0 to 3
- * @param[in] bitValue Value that contains all bits in to set direction,
- * in range from 0 to 0xFF.
- * @param[in] dir Direction value, should be:
- * - 0: Input.
- * - 1: Output.
- * @return None
- *
- * Note: All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_ByteSetDir(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t dir)
-{
- GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Output direction
- if (dir)
- {
- if (byteNum <= 3)
- {
- pFIO->FIODIR[byteNum] |= bitValue;
- }
- }
- // Input direction
- else
- {
- if (byteNum <= 3)
- {
- pFIO->FIODIR[byteNum] &= ~bitValue;
- }
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Set mask value for bits in FIO port in byte accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] byteNum Byte part number, should be in range from 0 to 3
- * @param[in] bitValue Value that contains all bits in to set mask,
- * in range from 0 to 0xFF.
- * @param[in] maskValue Mask value contains state value for each bit:
- * - 0: not mask.
- * - 1: mask.
- * @return None
- *
- * Note:
- * - All remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- * - After executing this function, in mask register, value '0' on each bit
- * enables an access to the corresponding physical pin via a read or write access,
- * while value '1' on bit (masked) that corresponding pin will not be changed
- * with write access and if read, will not be reflected in the updated pin.
- **********************************************************************/
-void FIO_ByteSetMask(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue)
-{
- GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
-
- if(pFIO != NULL)
- {
- // Mask
- if (maskValue)
- {
- if (byteNum <= 3)
- {
- pFIO->FIOMASK[byteNum] |= bitValue;
- }
- }
- // Un-mask
- else {
- if (byteNum <= 3)
- {
- pFIO->FIOMASK[byteNum] &= ~bitValue;
- }
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set bits for FIO port in byte accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] byteNum Byte part number, should be in range from 0 to 3
- * @param[in] bitValue Value that contains all bits in to set,
- * in range from 0 to 0xFF.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_ByteSetValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
-{
- GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
-
- if (pFIO != NULL) {
- if (byteNum <= 3)
- {
- pFIO->FIOSET[byteNum] = bitValue;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Clear bits for FIO port in byte accessible style
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] byteNum Byte part number, should be in range from 0 to 3
- * @param[in] bitValue Value that contains all bits in to clear,
- * in range from 0 to 0xFF.
- * @return None
- *
- * Note:
- * - For all bits that has been set as input direction, this function will
- * not effect.
- * - For all remaining bits that are not activated in bitValue (value '0')
- * will not be effected by this function.
- **********************************************************************/
-void FIO_ByteClearValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
-{
- GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
-
- if (pFIO != NULL)
- {
- if (byteNum <= 3)
- {
- pFIO->FIOCLR[byteNum] = bitValue;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Read Current state on port pin that have input direction of GPIO
- * in byte accessible style.
- * @param[in] portNum Port number, in range from 0 to 4
- * @param[in] byteNum Byte part number, should be in range from 0 to 3
- * @return Current value of FIO port pin of specified byte part.
- * Note: Return value contain state of each port pin (bit) on that FIO regardless
- * its direction is input or output.
- **********************************************************************/
-uint8_t FIO_ByteReadValue(uint8_t portNum, uint8_t byteNum)
-{
- GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
-
- if (pFIO != NULL)
- {
- if (byteNum <= 3)
- {
- return (pFIO->FIOPIN[byteNum]);
- }
- }
- return (0);
-}
-
-/**
- * @}
- */
-
-#endif /* _GPIO */
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_i2c.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_i2c.c
deleted file mode 100644
index c466cf655e..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_i2c.c
+++ /dev/null
@@ -1,1416 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_i2c.c 2011-06-02
-*//**
-* @file lpc_i2c.c
-* @brief Contains all functions support for I2C firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup I2C
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _I2C
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_i2c.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-/* Private Types -------------------------------------------------------------- */
-/** @defgroup I2C_Private_Types I2C Private Types
- * @{
- */
-
-/**
- * @brief I2C device configuration structure type
- */
-typedef struct
-{
- uint32_t txrx_setup; /* Transmission setup */
- int32_t dir; /* Current direction phase, 0 - write, 1 - read */
-} I2C_CFG_T;
-
-/**
- * @}
- */
-
-/* Private Variables ---------------------------------------------------------- */
-/**
- * @brief II2C driver data for I2C0, I2C1 and I2C2
- */
-static I2C_CFG_T i2cdat[3];
-
-static uint32_t I2C_MasterComplete[3];
-static uint32_t I2C_SlaveComplete[3];
-
-static uint32_t I2C_MonitorBufferIndex;
-
-/* Private Functions ---------------------------------------------------------- */
-
-/* Get pointer to expected I2C */
-static LPC_I2C_TypeDef* I2C_GetPointer(en_I2C_unitId compId);
-
-/* Generate a start condition on I2C bus (in master mode only) */
-static uint32_t I2C_Start (LPC_I2C_TypeDef *I2Cx, I2C_TRANSFER_OPT_Type Opt);
-
-/* Generate a stop condition on I2C bus (in master mode only) */
-static void I2C_Stop (LPC_I2C_TypeDef *I2Cx, I2C_TRANSFER_OPT_Type Opt);
-
-/* I2C send byte subroutine */
-static uint32_t I2C_SendByte (LPC_I2C_TypeDef *I2Cx, uint8_t databyte);
-
-/* I2C get byte subroutine */
-static uint32_t I2C_GetByte (LPC_I2C_TypeDef *I2Cx, uint8_t *retdat, Bool ack);
-
-/* I2C set clock (hz) */
-static void I2C_SetClock (LPC_I2C_TypeDef *I2Cx, uint32_t target_clock);
-
-/*--------------------------------------------------------------------------------*/
-
-/********************************************************************//**
- * @brief Convert from I2C peripheral to number
- * @param[in] I2Cx: I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return I2C number, could be: 0..2
- *********************************************************************/
-static LPC_I2C_TypeDef* I2C_GetPointer(en_I2C_unitId compId)
-{
- LPC_I2C_TypeDef* pI2C;
-
- switch (compId)
- {
- case I2C_0:
- pI2C = LPC_I2C0;
- break;
-
- case I2C_1:
- pI2C = LPC_I2C1;
- break;
-
- case I2C_2:
- pI2C = LPC_I2C2;
- break;
-
- default:
- pI2C = NULL;
- break;
- }
-
- return pI2C;
-}
-
-
-/********************************************************************//**
- * @brief Generate a start condition on I2C bus (in master mode only)
- * @param[in] I2Cx: I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] Opt a I2C_TRANSFER_OPT_Type type that selected for
- * interrupt or polling mode.
- * @return value of I2C status register after generate a start condition
- *********************************************************************/
-static uint32_t I2C_Start (LPC_I2C_TypeDef *I2Cx, I2C_TRANSFER_OPT_Type Opt)
-{
- // Reset STA, STO, SI
- I2Cx->CONCLR = I2C_I2CONCLR_SIC|I2C_I2CONCLR_STOC|I2C_I2CONCLR_STAC;
-
- // Enter to Master Transmitter mode
- I2Cx->CONSET = I2C_I2CONSET_STA;
-
- if(Opt == I2C_TRANSFER_POLLING)
- {
- // Wait for complete
- while (!(I2Cx->CONSET & I2C_I2CONSET_SI));
- }
-
- return (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
-}
-
-/********************************************************************//**
- * @brief Generate a stop condition on I2C bus (in master mode only)
- * @param[in] I2Cx: I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] Opt a I2C_TRANSFER_OPT_Type type that selected for
- * interrupt or polling mode.
- * @return None
- *********************************************************************/
-static void I2C_Stop (LPC_I2C_TypeDef *I2Cx, I2C_TRANSFER_OPT_Type Opt)
-{
- /* Make sure start bit is not active */
- if (I2Cx->CONSET & I2C_I2CONSET_STA)
- {
- I2Cx->CONCLR = I2C_I2CONCLR_STAC;
- }
-
- I2Cx->CONSET = I2C_I2CONSET_STO;
-
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
-
- if(Opt == I2C_TRANSFER_POLLING)
- {
- // wait for stop is sent
- while(I2Cx->CONSET & I2C_I2CONSET_STO)
- {
- if(I2Cx->CONSET & I2C_I2CONSET_SI)
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- }
- }
-}
-
-/********************************************************************//**
- * @brief Send a byte
- * @param[in] I2Cx: I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] databyte: number of byte
- * @return value of I2C status register after sending
- *********************************************************************/
-static uint32_t I2C_SendByte (LPC_I2C_TypeDef *I2Cx, uint8_t databyte)
-{
- uint32_t CodeStatus = I2Cx->STAT & I2C_STAT_CODE_BITMASK;
-
- if((CodeStatus != I2C_I2STAT_M_TX_START) &&
- (CodeStatus != I2C_I2STAT_M_TX_RESTART) &&
- (CodeStatus != I2C_I2STAT_M_TX_SLAW_ACK) &&
- (CodeStatus != I2C_I2STAT_M_TX_DAT_ACK) )
- {
- return CodeStatus;
- }
-
- I2Cx->DAT = databyte & I2C_I2DAT_BITMASK;
-
- I2Cx->CONSET = I2C_I2CONSET_AA;
-
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
-
- return (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
-}
-
-/********************************************************************//**
- * @brief Get a byte
- * @param[in] I2Cx: I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[out] retdat pointer to return data
- * @param[in] ack assert acknowledge or not, should be: TRUE/FALSE
- * @return value of I2C status register after sending
- *********************************************************************/
-static uint32_t I2C_GetByte (LPC_I2C_TypeDef *I2Cx, uint8_t *retdat, Bool ack)
-{
- *retdat = (uint8_t) (I2Cx->DAT & I2C_I2DAT_BITMASK);
-
- if (ack == TRUE)
- {
- I2Cx->CONSET = I2C_I2CONSET_AA;
- }
- else
- {
- I2Cx->CONCLR = I2C_I2CONCLR_AAC;
- }
-
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
-
- return (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
-}
-
-/*********************************************************************//**
- * @brief Setup clock rate for I2C peripheral
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] target_clock : clock of SSP (Hz)
- * @return None
- ***********************************************************************/
-static void I2C_SetClock (LPC_I2C_TypeDef *I2Cx, uint32_t target_clock)
-{
- uint32_t temp;
-
- temp = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / target_clock;
-
- /* Set the I2C clock value to register */
- I2Cx->SCLH = (uint32_t)(temp / 2);
-
- I2Cx->SCLL = (uint32_t)(temp - I2Cx->SCLH);
-}
-
-
-/* End of Private Functions --------------------------------------------------- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup I2C_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initializes the I2Cx peripheral with specified parameter.
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] clockrate Target clock rate value to initialized I2C
- * peripheral (Hz)
- * @return None
- *********************************************************************/
-void I2C_Init(en_I2C_unitId i2cId, uint32_t clockrate)
-{
- uint32_t clkSetting;
-
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- switch (i2cId)
- {
- case I2C_0:
- clkSetting = CLKPWR_PCONP_PCI2C0;
- break;
-
-
- case I2C_1:
- clkSetting = CLKPWR_PCONP_PCI2C1;
- break;
-
- case I2C_2:
- clkSetting = CLKPWR_PCONP_PCI2C2;
- break;
-
- default:
-
- return;
- }
-
- CLKPWR_ConfigPPWR (clkSetting, ENABLE);
-
- /* Set clock rate */
- I2C_SetClock(I2Cx,clockrate);
-
- /* Set I2C operation to default */
- I2Cx->CONCLR = (I2C_I2CONCLR_AAC | I2C_I2CONCLR_STAC | I2C_I2CONCLR_I2ENC);
-}
-
-/*********************************************************************//**
- * @brief De-initializes the I2C peripheral registers to their
- * default reset values.
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return None
- **********************************************************************/
-void I2C_DeInit(en_I2C_unitId i2cId)
-{
- uint32_t clkSetting;
-
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- /* Disable I2C control */
- I2Cx->CONCLR = 0xFF;
-
- switch (i2cId)
- {
- case I2C_0:
- clkSetting = CLKPWR_PCONP_PCI2C0;
- break;
-
-
- case I2C_1:
- clkSetting = CLKPWR_PCONP_PCI2C1;
- break;
-
- case I2C_2:
- clkSetting = CLKPWR_PCONP_PCI2C2;
- break;
-
- default:
-
- return;
- }
-
- CLKPWR_ConfigPPWR (clkSetting, DISABLE);
-}
-
-/*********************************************************************//**
- * @brief Enable or disable I2C peripheral's operation
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] NewState New State of I2Cx peripheral's operation
- * @return none
- **********************************************************************/
-void I2C_Cmd(en_I2C_unitId i2cId, en_I2C_Mode Mode, FunctionalState NewState)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- if (NewState == ENABLE)
- {
- if(Mode != I2C_SLAVE_MODE)
- I2Cx->CONSET = I2C_I2CONSET_I2EN;
- else
- I2Cx->CONSET = I2C_I2CONSET_I2EN | I2C_I2CONSET_AA;
- }
- else
- {
- I2Cx->CONCLR = I2C_I2CONCLR_I2ENC;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable interrupt for I2C peripheral
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] NewState New State of I2C peripheral interrupt in NVIC core
- * should be:
- * - ENABLE: enable interrupt for this I2C peripheral
- * - DISABLE: disable interrupt for this I2C peripheral
- * @return None
- **********************************************************************/
-void I2C_IntCmd (en_I2C_unitId i2cId, Bool NewState)
-{
- IRQn_Type irq;
-
- switch (i2cId)
- {
- case I2C_0:
- irq = I2C0_IRQn;
- break;
-
- case I2C_1:
- irq = I2C1_IRQn;
- break;
-
- case I2C_2:
- irq = I2C2_IRQn;
- break;
-
- default:
-
- return;
- }
-
- if (NewState)
- {
- NVIC_EnableIRQ(irq);
- }
- else
- {
- NVIC_DisableIRQ(irq);
- }
-
- return;
-}
-/*********************************************************************//**
- * @brief Handle I2C Master states.
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - I2C_0
- * - I2C_1
- * - I2C_2
- * @param[in] CodeStatus I2C state
- * @param[in] TransferCfg Pointer to a I2C_S_SETUP_Type structure that
- * contains specified information about the
- * configuration for master transfer.
- * @param[in] Opt a I2C_TRANSFER_OPT_Type type that selected for
- * interrupt or polling mode.
- * @return It can be
- * - I2C_OK
- * -I2C_BYTE_RECV
- * -I2C_BYTE_SENT
- * -I2C_SEND_END
- * -I2C_RECV_END
- * - I2C_ERR
- * - I2C_NAK_RECV
- **********************************************************************/
-int32_t I2C_MasterHanleStates(en_I2C_unitId i2cId,
- uint32_t CodeStatus,
- I2C_M_SETUP_Type *TransferCfg,
- I2C_TRANSFER_OPT_Type Opt
- )
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
- uint8_t *txdat;
- uint8_t *rxdat;
- uint8_t tmp;
- int32_t Ret = I2C_OK;
-
- //get buffer to send/receive
- txdat = (uint8_t *) &TransferCfg->tx_data[TransferCfg->tx_count];
- rxdat = (uint8_t *) &TransferCfg->rx_data[TransferCfg->rx_count];
-
- switch(CodeStatus)
- {
- case I2C_I2STAT_M_TX_START:
- case I2C_I2STAT_M_TX_RESTART:
- //case I2C_I2STAT_M_RX_START:
- //case I2C_I2STAT_M_RX_RESTART
- // Send data first
- if(TransferCfg->tx_count < TransferCfg->tx_length)
- {
- /* Send slave address + WR direction bit = 0 ----------------------------------- */
- I2C_SendByte(I2Cx, (TransferCfg->sl_addr7bit << 1));
- Ret = I2C_BYTE_SENT;
- }
- else if (TransferCfg->rx_count < TransferCfg->rx_length)
- {
- /* Send slave address + RD direction bit = 1 ----------------------------------- */
- I2C_SendByte(I2Cx, ((TransferCfg->sl_addr7bit << 1) | 0x01));
- Ret = I2C_BYTE_SENT;
- }
- // Clear STA bit after the slave address is sent
- I2Cx->CONCLR = I2C_I2CONCLR_STAC;
- break;
- case I2C_I2STAT_M_TX_SLAW_ACK:
- case I2C_I2STAT_M_TX_DAT_ACK:
-
- if(TransferCfg->tx_count < TransferCfg->tx_length)
- {
- I2C_SendByte(I2Cx, *txdat);
-
- txdat++;
-
- TransferCfg->tx_count++;
-
- Ret = I2C_BYTE_SENT;
- }
- else
- {
- if(TransferCfg->rx_count >= TransferCfg->rx_length)
- {
- I2C_Stop(I2Cx, Opt);
- }
- Ret = I2C_SEND_END;
-
-
- }
-
- break;
- case I2C_I2STAT_M_TX_DAT_NACK:
- if(TransferCfg->rx_count >= TransferCfg->rx_length)
- {
- I2C_Stop(I2Cx, Opt);
- }
- Ret = I2C_SEND_END;
- break;
- case I2C_I2STAT_M_RX_ARB_LOST:
- case I2C_I2STAT_S_RX_ARB_LOST_M_GENCALL:
- case I2C_I2STAT_S_TX_ARB_LOST_M_SLA:
- //case I2C_I2STAT_M_TX_ARB_LOST:
- I2C_Stop(I2Cx, Opt);
- Ret = I2C_ERR;
- break;
- case I2C_I2STAT_M_RX_SLAR_ACK:
- if(TransferCfg->rx_length > 1)
- I2Cx->CONSET = I2C_I2CONSET_AA;
- else
- I2Cx->CONCLR = I2C_I2CONCLR_AAC;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
-
- Ret = I2C_BYTE_RECV;
- break;
- case I2C_I2STAT_M_RX_DAT_ACK:
- if (TransferCfg->rx_count <TransferCfg->rx_length)
- {
- if ((TransferCfg->rx_length > 1) && (TransferCfg->rx_count < (TransferCfg->rx_length - 2)))
- {
- I2C_GetByte(I2Cx, &tmp, TRUE);
-
- Ret = I2C_BYTE_RECV;
-
- }
- else // the next byte is the last byte, send NACK instead.
- {
- I2C_GetByte(I2Cx, &tmp, FALSE);
- Ret = I2C_BYTE_RECV;
- }
- *rxdat++ = tmp;
-
- TransferCfg->rx_count++;
- }
- else
- {
- I2C_Stop(I2Cx, Opt);
- Ret = I2C_RECV_END;
- }
-
- break;
- case I2C_I2STAT_M_RX_DAT_NACK:
- I2C_GetByte(I2Cx, &tmp, FALSE);
- if (TransferCfg->rx_count < TransferCfg->rx_length)
- {
- *rxdat++ = tmp;
- TransferCfg->rx_count++;
- }
- I2C_Stop(I2Cx, Opt);
- Ret = I2C_RECV_END;
- break;
-
- case I2C_I2STAT_M_RX_SLAR_NACK:
- case I2C_I2STAT_M_TX_SLAW_NACK:
- case I2C_I2STAT_BUS_ERROR:
- // Send STOP condition
- I2C_Stop(I2Cx, Opt);
- Ret = I2C_ERR;
- break;
- /* No status information */
- case I2C_I2STAT_NO_INF:
- if ((TransferCfg->tx_count <TransferCfg->tx_length)||
- (TransferCfg->rx_count <TransferCfg->rx_length))
- {
- I2C_Stop(I2Cx, Opt);
- Ret = I2C_ERR;
- }
- else
- {
- Ret = I2C_RECV_END;
- }
- break;
- default:
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
- }
-
- return Ret;
-}
-
-/*********************************************************************//**
- * @brief Handle I2C Slave states.
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - I2C_0
- * - I2C_1
- * - I2C_2
- * @param[in] CodeStatus I2C state
- * @param[in] TransferCfg Pointer to a I2C_S_SETUP_Type structure that
- * contains specified information about the
- * configuration for master transfer.
- * @return It can be
- * - I2C_OK
- * -I2C_BYTE_RECV
- * -I2C_BYTE_SENT
- * -I2C_SEND_END
- * -I2C_RECV_END
- * - I2C_ERR
- * - I2C_NAK_RECV
- **********************************************************************/
-int32_t I2C_SlaveHanleStates(en_I2C_unitId i2cId,
- uint32_t CodeStatus,
- I2C_S_SETUP_Type *TransferCfg)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
- int32_t Ret = I2C_OK;
- uint8_t *txdat;
- uint8_t *rxdat;
-
- //get buffer to send/receive
- txdat = (uint8_t *) &TransferCfg->tx_data[TransferCfg->tx_count];
- rxdat = (uint8_t *) &TransferCfg->rx_data[TransferCfg->rx_count];
-
- switch (CodeStatus)
- {
- /* Reading phase -------------------------------------------------------- */
- /* Own SLA+R has been received, ACK has been returned */
- case I2C_I2STAT_S_RX_SLAW_ACK:
-
- /* General call address has been received, ACK has been returned */
- case I2C_I2STAT_S_RX_GENCALL_ACK:
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
- /* Arbitration has been lost in Slave Address + R/W bit as bus Master. General Call has
- been received and ACK has been returned.*/
- case I2C_I2STAT_S_RX_ARB_LOST_M_GENCALL:
- I2Cx->CONSET = I2C_I2CONSET_AA|I2C_I2CONSET_STA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
- /* Previously addressed with own SLA;
- * DATA byte has been received;
- * ACK has been returned */
- case I2C_I2STAT_S_RX_ARB_LOST_M_SLA:
- case I2C_I2STAT_S_RX_PRE_SLA_DAT_ACK:
-
- /*
- * All data bytes that over-flow the specified receive
- * data length, just ignore them.
- */
- if ((TransferCfg->rx_count < TransferCfg->rx_length) && (TransferCfg->rx_data != NULL))
- {
- *rxdat++ = (uint8_t)I2Cx->DAT;
-
- TransferCfg->rx_count++;
-
- Ret = I2C_BYTE_RECV;
- }
- if(TransferCfg->rx_count == (TransferCfg->rx_length) ) {
- I2Cx->CONCLR = I2C_I2CONCLR_AAC|I2C_I2CONCLR_SIC;
- Ret = I2C_BYTE_RECV;
- }
- else {
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- }
-
- break;
- /* DATA has been received, Only the first data byte will be received with ACK. Additional
- data will be received with NOT ACK. */
- case I2C_I2STAT_S_RX_PRE_GENCALL_DAT_ACK:
- if ((TransferCfg->rx_count < TransferCfg->rx_length) && (TransferCfg->rx_data != NULL))
- {
- *rxdat++ = (uint8_t)I2Cx->DAT;
-
- TransferCfg->rx_count++;
-
- Ret = I2C_BYTE_RECV;
- }
- I2Cx->CONCLR = I2C_I2CONCLR_AAC|I2C_I2CONCLR_SIC;
- break;
-
- /* Writing phase -------------------------------------------------------- */
- /* Own SLA+R has been received, ACK has been returned */
- case I2C_I2STAT_S_TX_SLAR_ACK:
-
- /* Data has been transmitted, ACK has been received */
- case I2C_I2STAT_S_TX_DAT_ACK:
- /*
- * All data bytes that over-flow the specified receive
- * data length, just ignore them.
- */
- if ((TransferCfg->tx_count < TransferCfg->tx_length) && (TransferCfg->tx_data != NULL))
- {
- I2Cx->DAT = *txdat++;
-
- TransferCfg->tx_count++;
-
- Ret = I2C_BYTE_SENT;
- }
-
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
- /* Arbitration lost in Slave Address and R/W bit as bus Master. Own Slave Address + Read
- has been received, ACK has been returned. */
- case I2C_I2STAT_S_TX_ARB_LOST_M_SLA:
- if ((TransferCfg->tx_count < TransferCfg->tx_length) && (TransferCfg->tx_data != NULL))
- {
- I2Cx->DAT = *txdat++;
-
- TransferCfg->tx_count++;
-
- Ret = I2C_BYTE_SENT;
- }
- I2Cx->CONSET = I2C_I2CONSET_AA|I2C_I2CONSET_STA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
-
- case I2C_I2STAT_S_TX_LAST_DAT_ACK:
- /* Data has been transmitted, NACK has been received,
- * that means there's no more data to send, exit now */
- /*
- * Note: Don't wait for stop event since in slave transmit mode,
- * since there no proof lets us know when a stop signal has been received
- * on slave side.
- */
- case I2C_I2STAT_S_TX_DAT_NACK:
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- Ret = I2C_SEND_END;
- break;
-
- /* Previously addressed with own SLA;
- * DATA byte has been received;
- * NOT ACK has been returned */
- case I2C_I2STAT_S_RX_PRE_SLA_DAT_NACK:
-
- /* DATA has been received, NOT ACK has been returned */
- case I2C_I2STAT_S_RX_PRE_GENCALL_DAT_NACK:
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- Ret = I2C_RECV_END;
- break;
-
- /*
- * Note that: Return code only let us know a stop condition mixed
- * with a repeat start condition in the same code value.
- * So we should provide a time-out. In case this is really a stop
- * condition, this will return back after time out condition. Otherwise,
- * next session that is slave receive data will be completed.
- */
-
- /* A Stop or a repeat start condition */
- case I2C_I2STAT_S_RX_STA_STO_SLVREC_SLVTRX:
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- Ret = I2C_STA_STO_RECV;
- break;
-
- /* No status information */
- case I2C_I2STAT_NO_INF:
- /* Other status must be captured */
- default:
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
- break;
-
- }
-
- return Ret;
-}
-/*********************************************************************//**
- * @brief General Master Interrupt handler for I2C peripheral
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C
- * - LPC_I2C1
- * - LPC_I2C2
- * @return None
- **********************************************************************/
-void I2C_MasterHandler(en_I2C_unitId i2cId)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
- uint8_t returnCode;
- I2C_M_SETUP_Type *txrx_setup;
- int32_t Ret = I2C_OK;
-
- txrx_setup = (I2C_M_SETUP_Type *) i2cdat[i2cId].txrx_setup;
-
- returnCode = (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
-
- // Save current status
- txrx_setup->status = returnCode;
-
- Ret = I2C_MasterHanleStates(i2cId, returnCode, txrx_setup, I2C_TRANSFER_INTERRUPT);
-
- if(I2C_CheckError(Ret))
- {
- if(txrx_setup->retransmissions_count < txrx_setup->retransmissions_max)
- {
- // Retry
- txrx_setup->retransmissions_count ++;
- txrx_setup->tx_count = 0;
- txrx_setup->rx_count = 0;
- // Reset STA, STO, SI
- I2C_Start(I2Cx, I2C_TRANSFER_INTERRUPT);
- return;
- }
- else
- {
- goto s_int_end;
- }
- }
- else if (Ret & I2C_SEND_END)
- {
- // If no need to wait for data from Slave
- if(txrx_setup->rx_count >= (txrx_setup->rx_length))
- {
- goto s_int_end;
- }
- else // Start to wait for data from Slave
- {
- // Reset STA, STO, SI
- I2C_Start(I2Cx, I2C_TRANSFER_INTERRUPT);
- return;
- }
- }
- else if (Ret & I2C_RECV_END)
- {
- goto s_int_end;
- }
- else
- {
- return;
- }
-
-s_int_end:
- // Disable interrupt
- I2C_IntCmd(i2cId, FALSE);
-
- I2Cx->CONCLR = I2C_I2CONCLR_AAC | I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC;
-
- I2C_MasterComplete[i2cId] = TRUE;
-
-}
-
-
-/*********************************************************************//**
- * @brief General Slave Interrupt handler for I2C peripheral
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return None
- **********************************************************************/
-void I2C_SlaveHandler (en_I2C_unitId i2cId)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- uint8_t returnCode;
- I2C_S_SETUP_Type *txrx_setup;
- uint32_t timeout;
- int32_t Ret = I2C_OK;
-
- txrx_setup = (I2C_S_SETUP_Type *) i2cdat[i2cId].txrx_setup;
-
-handle_state:
-
- returnCode = (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
- // Save current status
- txrx_setup->status = returnCode;
-
-
- Ret = I2C_SlaveHanleStates(i2cId, returnCode, txrx_setup);
-
- if(I2C_CheckError(Ret))
- {
- goto s_int_end;
- }
- else if (Ret & I2C_STA_STO_RECV)
- {
- if((txrx_setup->tx_count >= (txrx_setup->tx_length)) &&
- (txrx_setup->rx_count >= (txrx_setup->rx_length)))
- {
- goto s_int_end;
- }
- // Temporally lock the interrupt for timeout condition
- I2C_IntCmd(i2cId, FALSE);
- // enable time out
- timeout = I2C_SLAVE_TIME_OUT;
- while(1)
- {
- if (I2Cx->CONSET & I2C_I2CONSET_SI)
- {
- // re-Enable interrupt
- I2C_IntCmd(i2cId, TRUE);
- goto handle_state;
- }
- else
- {
- timeout--;
- if (timeout == 0)
- {
- // timeout occur, it's really a stop condition
- txrx_setup->status |= I2C_SETUP_STATUS_DONE;
- goto s_int_end;
- }
- }
- }
- }
- else if(Ret &I2C_SEND_END)
- {
- goto s_int_end;
- }
- else
- {
- return;
- }
-
-s_int_end:
- // Disable interrupt
- I2C_IntCmd(i2cId, FALSE);
- I2Cx->CONCLR = I2C_I2CONCLR_AAC | I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC;
-
- I2C_SlaveComplete[i2cId] = TRUE;
-}
-
-/*********************************************************************//**
- * @brief Transmit and Receive data in master mode
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] TransferCfg Pointer to a I2C_M_SETUP_Type structure that
- * contains specified information about the
- * configuration for master transfer.
- * @param[in] Opt a I2C_TRANSFER_OPT_Type type that selected for
- * interrupt or polling mode.
- * @return SUCCESS or ERROR
- *
- * Note:
- * - In case of using I2C to transmit data only, either transmit length set to 0
- * or transmit data pointer set to NULL.
- * - In case of using I2C to receive data only, either receive length set to 0
- * or receive data pointer set to NULL.
- * - In case of using I2C to transmit followed by receive data, transmit length,
- * transmit data pointer, receive length and receive data pointer should be set
- * corresponding.
- **********************************************************************/
-Status I2C_MasterTransferData(en_I2C_unitId i2cId, I2C_M_SETUP_Type *TransferCfg,
- I2C_TRANSFER_OPT_Type Opt)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- uint32_t CodeStatus;
- int32_t Ret = I2C_OK;
-
- // Reset I2C setup value to default state
- TransferCfg->tx_count = 0;
- TransferCfg->rx_count = 0;
- TransferCfg->status = 0;
-
- if (Opt == I2C_TRANSFER_POLLING)
- {
- /* First Start condition -------------------------------------------------------------- */
- TransferCfg->retransmissions_count = 0;
-retry:
- // Reset I2C setup value to default state
- TransferCfg->tx_count = 0;
- TransferCfg->rx_count = 0;
-
- // Start command
- CodeStatus = I2C_Start(I2Cx, I2C_TRANSFER_POLLING);
-
- while(1) // send data first and then receive data from Slave.
- {
- Ret = I2C_MasterHanleStates(i2cId, CodeStatus, TransferCfg, I2C_TRANSFER_POLLING);
- if(I2C_CheckError(Ret))
- {
- TransferCfg->retransmissions_count++;
- if (TransferCfg->retransmissions_count > TransferCfg->retransmissions_max){
- // save status
- TransferCfg->status = CodeStatus | I2C_SETUP_STATUS_NOACKF;
- goto error;
- } else {
- goto retry;
- }
- }
- else if( (Ret & I2C_BYTE_SENT) ||
- (Ret & I2C_BYTE_RECV))
- {
- // Wait for sending ends/ Wait for next byte
- while (!(I2Cx->CONSET & I2C_I2CONSET_SI));
- }
- else if (Ret & I2C_SEND_END) // already send all data
- {
- // If no need to wait for data from Slave
- if(TransferCfg->rx_count >= (TransferCfg->rx_length))
- {
- break;
- }
- else
- {
- I2C_Start(I2Cx, I2C_TRANSFER_POLLING);
- }
- }
- else if (Ret & I2C_RECV_END) // already receive all data
- {
- break;
- }
- CodeStatus = I2Cx->STAT & I2C_STAT_CODE_BITMASK;
- }
- return SUCCESS;
-error:
- return ERROR;
- }
-
- else if (Opt == I2C_TRANSFER_INTERRUPT)
- {
- // Setup tx_rx data, callback and interrupt handler
- i2cdat[i2cId].txrx_setup = (uint32_t) TransferCfg;
-
- // Set direction phase, write first
- i2cdat[i2cId].dir = 0;
-
- /* First Start condition -------------------------------------------------------------- */
- // Reset STA, STO, SI
- I2C_Start(I2Cx, I2C_TRANSFER_INTERRUPT);
-
- I2C_IntCmd(i2cId, TRUE);
-
- return (SUCCESS);
- }
-
- return ERROR;
-}
-
-/*********************************************************************//**
- * @brief Receive and Transmit data in slave mode
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] TransferCfg Pointer to a I2C_S_SETUP_Type structure that
- * contains specified information about the
- * configuration for master transfer.
- * @param[in] Opt I2C_TRANSFER_OPT_Type type that selected for
- * interrupt or polling mode.
- * @return SUCCESS or ERROR
- *
- * Note:
- * The mode of slave's operation depends on the command sent from master on
- * the I2C bus. If the master send a SLA+W command, this sub-routine will
- * use receive data length and receive data pointer. If the master send a SLA+R
- * command, this sub-routine will use transmit data length and transmit data
- * pointer.
- * If the master issue an repeat start command or a stop command, the slave will
- * enable an time out condition, during time out condition, if there's no activity
- * on I2C bus, the slave will exit, otherwise (i.e. the master send a SLA+R/W),
- * the slave then switch to relevant operation mode. The time out should be used
- * because the return status code can not show difference from stop and repeat
- * start command in slave operation.
- * In case of the expected data length from master is greater than data length
- * that slave can support:
- * - In case of reading operation (from master): slave will return I2C_I2DAT_IDLE_CHAR
- * value.
- * - In case of writing operation (from master): slave will ignore remain data from master.
- **********************************************************************/
-Status I2C_SlaveTransferData(en_I2C_unitId i2cId, I2C_S_SETUP_Type *TransferCfg,
- I2C_TRANSFER_OPT_Type Opt)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
- int32_t Ret = I2C_OK;
-
- uint32_t CodeStatus;
- uint32_t timeout;
- int32_t time_en;
-
- // Reset I2C setup value to default state
- TransferCfg->tx_count = 0;
- TransferCfg->rx_count = 0;
- TransferCfg->status = 0;
-
- // Polling option
- if (Opt == I2C_TRANSFER_POLLING)
- {
- /* Set AA bit to ACK command on I2C bus */
- I2Cx->CONSET = I2C_I2CONSET_AA;
-
- /* Clear SI bit to be ready ... */
- I2Cx->CONCLR = (I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC|I2C_I2CONCLR_STOC);
-
- time_en = 0;
- timeout = 0;
-
- while (1)
- {
- /* Check SI flag ready */
- if (I2Cx->CONSET & I2C_I2CONSET_SI)
- {
- time_en = 0;
-
- CodeStatus = (I2Cx->STAT & I2C_STAT_CODE_BITMASK);
-
- Ret = I2C_SlaveHanleStates(i2cId, CodeStatus, TransferCfg);
- if(I2C_CheckError(Ret))
- {
- goto s_error;
- }
- else if(Ret & I2C_STA_STO_RECV)
- {
- if((TransferCfg->tx_count >= (TransferCfg->tx_length)) &&
- (TransferCfg->rx_count >= (TransferCfg->rx_length)))
- {
- goto s_end_stage;
- }
- time_en = 1;
- timeout = 0;
- }
- else if (Ret & I2C_SEND_END)
- {
- goto s_end_stage;
- }
- }
- else if (time_en)
- {
- if (timeout++ > I2C_SLAVE_TIME_OUT)
- {
- // it's really a stop condition, goto end stage
- goto s_end_stage;
- }
- }
- }
-
-s_end_stage:
- /* Clear AA bit to disable ACK on I2C bus */
- I2Cx->CONCLR = I2C_I2CONCLR_AAC;
-
- // Check if there's no error during operation
- // Update status
- TransferCfg->status = CodeStatus | I2C_SETUP_STATUS_DONE;
- return SUCCESS;
-
-s_error:
- /* Clear AA bit to disable ACK on I2C bus */
- I2Cx->CONCLR = I2C_I2CONCLR_AAC;
-
- // Update status
- TransferCfg->status = CodeStatus;
- return ERROR;
- }
-
- else if (Opt == I2C_TRANSFER_INTERRUPT)
- {
- // Setup tx_rx data, callback and interrupt handler
- i2cdat[i2cId].txrx_setup = (uint32_t) TransferCfg;
-
- // Set direction phase, read first
- i2cdat[i2cId].dir = 1;
-
- // Enable AA
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC;
- I2C_IntCmd(i2cId, TRUE);
-
- return (SUCCESS);
- }
-
- return ERROR;
-}
-
-/*********************************************************************//**
- * @brief Set Own slave address in I2C peripheral corresponding to
- * parameter specified in OwnSlaveAddrConfigStruct.
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] OwnSlaveAddrConfigStruct Pointer to a I2C_OWNSLAVEADDR_CFG_Type
- * structure that contains the configuration information for the
-* specified I2C slave address.
- * @return None
- **********************************************************************/
-void I2C_SetOwnSlaveAddr(en_I2C_unitId i2cId, I2C_OWNSLAVEADDR_CFG_Type *OwnSlaveAddrConfigStruct)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- uint32_t tmp;
-
- tmp = (((uint32_t)(OwnSlaveAddrConfigStruct->SlaveAddr_7bit << 1)) \
- | ((OwnSlaveAddrConfigStruct->GeneralCallState == ENABLE) ? 0x01 : 0x00))& I2C_I2ADR_BITMASK;
-
- switch (OwnSlaveAddrConfigStruct->SlaveAddrChannel)
- {
- case 0:
- I2Cx->ADR0 = tmp;
-
- I2Cx->MASK0 = I2C_I2MASK_MASK((uint32_t) \
- (OwnSlaveAddrConfigStruct->SlaveAddrMaskValue));
- break;
-
- case 1:
- I2Cx->ADR1 = tmp;
-
- I2Cx->MASK1 = I2C_I2MASK_MASK((uint32_t) \
- (OwnSlaveAddrConfigStruct->SlaveAddrMaskValue));
- break;
-
- case 2:
- I2Cx->ADR2 = tmp;
-
- I2Cx->MASK2 = I2C_I2MASK_MASK((uint32_t) \
- (OwnSlaveAddrConfigStruct->SlaveAddrMaskValue));
- break;
-
- case 3:
- I2Cx->ADR3 = tmp;
-
- I2Cx->MASK3 = I2C_I2MASK_MASK((uint32_t) \
- (OwnSlaveAddrConfigStruct->SlaveAddrMaskValue));
- break;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Configures functionality in I2C monitor mode
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] Monitor configuration. It can include:
- * - I2C_I2MMCTRL_ENA_SCL: I2C module can 'stretch'
- * the clock line (hold it low) until it has had time to
- * respond to an I2C interrupt.
- * - I2C_I2MMCTRL_MATCH_ALL: When the I2C is in monitor mode,
- * an interrupt will be generated on ANY address received.
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Enable this function.
- * - DISABLE: Disable this function.
- * @return None
- **********************************************************************/
-void I2C_MonitorModeConfig(en_I2C_unitId i2cId, uint32_t MonitorCfgType, FunctionalState NewState)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- if (NewState == ENABLE)
- {
- I2Cx->MMCTRL |= MonitorCfgType;
- }
- else
- {
- I2Cx->MMCTRL &= (~MonitorCfgType) & I2C_I2MMCTRL_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable I2C monitor mode
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Enable monitor mode.
- * - DISABLE: Disable monitor mode.
- * @return None
- **********************************************************************/
-void I2C_MonitorModeCmd(en_I2C_unitId i2cId, FunctionalState NewState)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- if (NewState == ENABLE)
- {
- I2Cx->MMCTRL |= I2C_I2MMCTRL_MM_ENA;
- I2Cx->CONSET = I2C_I2CONSET_AA;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC;
- }
- else
- {
- I2Cx->MMCTRL &= (~I2C_I2MMCTRL_MM_ENA) & I2C_I2MMCTRL_BITMASK;
- I2Cx->CONCLR = I2C_I2CONCLR_SIC | I2C_I2CONCLR_STAC | I2C_I2CONCLR_AAC;
- }
-
- I2C_MonitorBufferIndex = 0;
-}
-
-
-/*********************************************************************//**
- * @brief Get data from I2C data buffer in monitor mode.
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return None
- * Note: In monitor mode, the I2C module may lose the ability to stretch
- * the clock (stall the bus) if the ENA_SCL bit is not set. This means that
- * the processor will have a limited amount of time to read the contents of
- * the data received on the bus. If the processor reads the DAT shift
- * register, as it ordinarily would, it could have only one bit-time to
- * respond to the interrupt before the received data is overwritten by
- * new data.
- **********************************************************************/
-uint8_t I2C_MonitorGetDatabuffer(en_I2C_unitId i2cId)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- return ((uint8_t)(I2Cx->DATA_BUFFER));
-}
-
-/*********************************************************************//**
- * @brief Get data from I2C data buffer in monitor mode.
- * @param[in] I2Cx I2C peripheral selected, should be
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return None
- * Note: In monitor mode, the I2C module may lose the ability to stretch
- * the clock (stall the bus) if the ENA_SCL bit is not set. This means that
- * the processor will have a limited amount of time to read the contents of
- * the data received on the bus. If the processor reads the DAT shift
- * register, as it ordinarily would, it could have only one bit-time to
- * respond to the interrupt before the received data is overwritten by
- * new data.
- **********************************************************************/
-BOOL_8 I2C_MonitorHandler(en_I2C_unitId i2cId, uint8_t *buffer, uint32_t size)
-{
- LPC_I2C_TypeDef* I2Cx = I2C_GetPointer(i2cId);
-
- BOOL_8 ret=FALSE;
-
- I2Cx->CONCLR = I2C_I2CONCLR_SIC;
-
- buffer[I2C_MonitorBufferIndex] = (uint8_t)(I2Cx->DATA_BUFFER);
-
- I2C_MonitorBufferIndex++;
-
- if(I2C_MonitorBufferIndex >= size)
- {
- ret = TRUE;
- }
- return ret;
-}
-/*********************************************************************//**
- * @brief Get status of Master Transfer
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return Master transfer status, could be:
- * - TRUE master transfer completed
- * - FALSE master transfer have not completed yet
- **********************************************************************/
-uint32_t I2C_MasterTransferComplete(en_I2C_unitId i2cId)
-{
- uint32_t retval;
-
- retval = I2C_MasterComplete[i2cId];
-
- I2C_MasterComplete[i2cId] = FALSE;
-
- return retval;
-}
-
-/*********************************************************************//**
- * @brief Get status of Slave Transfer
- * @param[in] I2Cx I2C peripheral selected, should be:
- * - LPC_I2C0
- * - LPC_I2C1
- * - LPC_I2C2
- * @return Complete status, could be: TRUE/FALSE
- **********************************************************************/
-uint32_t I2C_SlaveTransferComplete(en_I2C_unitId i2cId)
-{
- uint32_t retval;
-
- retval = I2C_SlaveComplete[i2cId];
-
- I2C_SlaveComplete[i2cId] = FALSE;
-
- return retval;
-}
-
-#endif /*_I2C*/
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_i2s.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_i2s.c
deleted file mode 100644
index 88172c7554..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_i2s.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_i2s.c 2011-06-02
-*//**
-* @file lpc_i2s.c
-* @brief Contains all functions support for I2S firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup I2S
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _I2S
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_i2s.h"
-#include "lpc_clkpwr.h"
-
-/* definitions ---------------------------------------------------------- */
-#define I2S_IS_ENABLED(x) ((x)? ENABLE:DISABLE)
-/* Private Functions ---------------------------------------------------------- */
-
-static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
-
-/********************************************************************//**
- * @brief Get I2S wordwidth value
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is the I2S mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return The wordwidth value, should be: 8,16 or 32
- *********************************************************************/
-static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
- uint8_t value;
-
- if (TRMode == I2S_TX_MODE) {
- value = (I2Sx->DAO) & 0x03; /* get wordwidth bit */
- } else {
- value = (I2Sx->DAI) & 0x03; /* get wordwidth bit */
- }
- switch (value) {
- case I2S_WORDWIDTH_8:
- return 8;
- case I2S_WORDWIDTH_16:
- return 16;
- default:
- return 32;
- }
-}
-
-/********************************************************************//**
- * @brief Get I2S channel value
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is the I2S mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return The channel value, should be: 1(mono) or 2(stereo)
- *********************************************************************/
-static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
- uint8_t value;
-
- if (TRMode == I2S_TX_MODE) {
- value = ((I2Sx->DAO) & 0x04)>>2; /* get bit[2] */
- } else {
- value = ((I2Sx->DAI) & 0x04)>>2; /* get bit[2] */
- }
- if(value == I2S_MONO) return 1;
- return 2;
-}
-
-/* End of Private Functions --------------------------------------------------- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup I2S_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initialize I2S
- * - Turn on power and clock
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @return none
- *********************************************************************/
-void I2S_Init(LPC_I2S_TypeDef *I2Sx) {
- // Turn on power and clock
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, ENABLE);
- LPC_I2S->DAI = LPC_I2S->DAO = 0x00;
-}
-
-/********************************************************************//**
- * @brief Configuration I2S, setting:
- * - master/slave mode
- * - wordwidth value
- * - channel mode
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @param[in] ConfigStruct pointer to I2S_CFG_Type structure
- * which will be initialized.
- * @return none
- *********************************************************************/
-void I2S_Config(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, I2S_CFG_Type* ConfigStruct)
-{
- uint32_t bps, config;
- /* Setup clock */
- bps = (ConfigStruct->wordwidth +1)*8;
-
- /* Calculate audio config */
- config = (bps - 1)<<6 | (ConfigStruct->ws_sel)<<5 | (ConfigStruct->reset)<<4 |
- (ConfigStruct->stop)<<3 | (ConfigStruct->mono)<<2 | (ConfigStruct->wordwidth);
-
- if(TRMode == I2S_RX_MODE){
- LPC_I2S->DAI = config;
- }else{
- LPC_I2S->DAO = config;
- }
-}
-
-/********************************************************************//**
- * @brief DeInitial both I2S transmit or receive
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @return none
- *********************************************************************/
-void I2S_DeInit(LPC_I2S_TypeDef *I2Sx) {
- // Turn off power and clock
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, DISABLE);
-}
-
-/********************************************************************//**
- * @brief Get I2S Buffer Level
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode Transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return current level of Transmit/Receive Buffer
- *********************************************************************/
-uint8_t I2S_GetLevel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode)
-{
-
- if(TRMode == I2S_TX_MODE)
- {
- return ((I2Sx->STATE >> 16) & 0xFF);
- }
- else
- {
- return ((I2Sx->STATE >> 8) & 0xFF);
- }
-}
-
-/********************************************************************//**
- * @brief I2S Start: clear all STOP,RESET and MUTE bit, ready to operate
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @return none
- *********************************************************************/
-void I2S_Start(LPC_I2S_TypeDef *I2Sx)
-{
- //Clear STOP,RESET and MUTE bit
- I2Sx->DAO &= ~I2S_DAI_RESET;
- I2Sx->DAI &= ~I2S_DAI_RESET;
- I2Sx->DAO &= ~I2S_DAI_STOP;
- I2Sx->DAI &= ~I2S_DAI_STOP;
- I2Sx->DAO &= ~I2S_DAI_MUTE;
-}
-
-/********************************************************************//**
- * @brief I2S Send data
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] BufferData pointer to uint32_t is the data will be send
- * @return none
- *********************************************************************/
-void I2S_Send(LPC_I2S_TypeDef *I2Sx, uint32_t BufferData)
-{
- I2Sx->TXFIFO = BufferData;
-}
-
-/********************************************************************//**
- * @brief I2S Receive Data
- * @param[in] I2Sx pointer to LPC_I2S_TypeDef
- * @return received value
- *********************************************************************/
-uint32_t I2S_Receive(LPC_I2S_TypeDef* I2Sx)
-{
- return (I2Sx->RXFIFO);
-}
-
-/********************************************************************//**
- * @brief I2S Pause
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_Pause(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
- if (TRMode == I2S_TX_MODE) //Transmit mode
- {
- I2Sx->DAO |= I2S_DAO_STOP;
- } else //Receive mode
- {
- I2Sx->DAI |= I2S_DAI_STOP;
- }
-}
-
-/********************************************************************//**
- * @brief I2S Mute
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_Mute(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
- if (TRMode == I2S_TX_MODE) //Transmit mode
- {
- I2Sx->DAO |= I2S_DAO_MUTE;
- } else //Receive mode
- {
- I2Sx->DAI |= I2S_DAI_MUTE;
- }
-}
-
-/********************************************************************//**
- * @brief I2S Stop
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_Stop(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
- if (TRMode == I2S_TX_MODE) //Transmit mode
- {
- I2Sx->DAO &= ~I2S_DAO_MUTE;
- I2Sx->DAO |= I2S_DAO_STOP;
- I2Sx->DAO |= I2S_DAO_RESET;
- } else //Receive mode
- {
- I2Sx->DAI |= I2S_DAI_STOP;
- I2Sx->DAI |= I2S_DAI_RESET;
- }
-}
-/********************************************************************//**
- * @brief Set frequency for I2S
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] Freq is the frequency for I2S will be set. It can range
- * from 16-96 kHz(16, 22.05, 32, 44.1, 48, 96kHz)
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return Status: ERROR or SUCCESS
- *********************************************************************/
-Status I2S_FreqConfig(LPC_I2S_TypeDef *I2Sx, uint32_t Freq, uint8_t TRMode) {
- uint32_t cclk;
- uint8_t channel, wordwidth;
- uint32_t x, y;
- uint64_t divider;
- uint16_t dif;
- uint16_t x_divide, y_divide;
- uint16_t err, ErrorOptimal = 0xFFFF;
-
- uint32_t N;
-
- //get cclk
- cclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU);
-
- if(TRMode == I2S_TX_MODE)
- {
- channel = i2s_GetChannel(I2Sx,I2S_TX_MODE);
- wordwidth = i2s_GetWordWidth(I2Sx,I2S_TX_MODE);
- }
- else
- {
- channel = i2s_GetChannel(I2Sx,I2S_RX_MODE);
- wordwidth = i2s_GetWordWidth(I2Sx,I2S_RX_MODE);
- }
-
- /* Calculate X and Y divider
- * The MCLK rate for the I2S transmitter is determined by the value
- * in the I2STXRATE/I2SRXRATE register. The required I2STXRATE/I2SRXRATE
- * setting depends on the desired audio sample rate desired, the format
- * (stereo/mono) used, and the data size.
- * The formula is:
- * I2S_MCLK = CCLK * (X/Y) / 2
- * We have:
- * I2S_MCLK = Freq * channel*wordwidth * (I2Sx->TXBITRATE+1);
- * So: (X/Y) = (Freq * channel*wordwidth * (I2Sx->TXBITRATE+1))/CCLK*2
- * We use a loop function to chose the most suitable X,Y value
- */
-
- /* divider is a fixed point number with 16 fractional bits */
- divider = (((uint64_t)Freq *channel*wordwidth * 2)<<16) / cclk;
-
- /* find N that make x/y <= 1 -> divider <= 2^16 */
- for(N=64;N>0;N--){
- if((divider*N) < (1<<16)) break;
- }
-
- if(N == 0) return ERROR;
-
- divider *= N;
-
- for (y = 255; y > 0; y--) {
- x = y * divider;
- if(x & (0xFF000000)) continue;
- dif = x & 0xFFFF;
- if(dif>0x8000) err = 0x10000-dif;
- else err = dif;
- if (err == 0)
- {
- y_divide = y;
- break;
- }
- else if (err < ErrorOptimal)
- {
- ErrorOptimal = err;
- y_divide = y;
- }
- }
- x_divide = ((uint64_t)y_divide * Freq *(channel*wordwidth)* N * 2)/cclk;
- if(x_divide >= 256) x_divide = 0xFF;
- if(x_divide == 0) x_divide = 1;
-
- if (TRMode == I2S_TX_MODE)// Transmitter
- {
- I2Sx->TXBITRATE = N-1;
- I2Sx->TXRATE = y_divide | (x_divide << 8);
- } else //Receiver
- {
- I2Sx->RXBITRATE = N-1;
- I2Sx->TXRATE = y_divide | (x_divide << 8);
- }
- return SUCCESS;
-}
-
-/********************************************************************//**
- * @brief I2S set bitrate
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] bitrate value will be set
- * bitrate value should be in range: 0 .. 63
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_SetBitRate(LPC_I2S_TypeDef *I2Sx, uint8_t bitrate, uint8_t TRMode)
-{
- if(TRMode == I2S_TX_MODE)
- {
- I2Sx->TXBITRATE = bitrate;
- }
- else
- {
- I2Sx->RXBITRATE = bitrate;
- }
-}
-
-/********************************************************************//**
- * @brief Configuration operating mode for I2S
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] ModeConfig pointer to I2S_MODEConf_Type will be used to
- * configure
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_ModeConfig(LPC_I2S_TypeDef *I2Sx, I2S_MODEConf_Type* ModeConfig,
- uint8_t TRMode)
-{
- if (TRMode == I2S_TX_MODE) {
- I2Sx->TXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register
- if (ModeConfig->clksel == I2S_CLKSEL_MCLK) {
- I2Sx->TXMODE |= 0x02;
- }
- if (ModeConfig->fpin == I2S_4PIN_ENABLE) {
- I2Sx->TXMODE |= (1 << 2);
- }
- if (ModeConfig->mcena == I2S_MCLK_ENABLE) {
- I2Sx->TXMODE |= (1 << 3);
- }
- } else {
- I2Sx->RXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register
- if (ModeConfig->clksel == I2S_CLKSEL_MCLK) {
- I2Sx->RXMODE |= 0x02;
- }
- if (ModeConfig->fpin == I2S_4PIN_ENABLE) {
- I2Sx->RXMODE |= (1 << 2);
- }
- if (ModeConfig->mcena == I2S_MCLK_ENABLE) {
- I2Sx->RXMODE |= (1 << 3);
- }
- }
-}
-
-/********************************************************************//**
- * @brief Configure DMA operation for I2S
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] DMAConfig pointer to I2S_DMAConf_Type will be used to configure
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return none
- *********************************************************************/
-void I2S_DMAConfig(LPC_I2S_TypeDef *I2Sx, I2S_DMAConf_Type* DMAConfig,
- uint8_t TRMode)
-{
- if (TRMode == I2S_RX_MODE) {
- if (DMAConfig->DMAIndex == I2S_DMA_1) {
- LPC_I2S->DMA1 = (DMAConfig->depth) << 8;
- } else {
- LPC_I2S->DMA2 = (DMAConfig->depth) << 8;
- }
- } else {
- if (DMAConfig->DMAIndex == I2S_DMA_1) {
- LPC_I2S->DMA1 = (DMAConfig->depth) << 16;
- } else {
- LPC_I2S->DMA2 = (DMAConfig->depth) << 16;
- }
- }
-}
-
-/********************************************************************//**
- * @brief Enable/Disable DMA operation for I2S
- * @param[in] I2Sx: I2S peripheral selected, should be: LPC_I2S
- * @param[in] DMAIndex chose what DMA is used, should be:
- * - I2S_DMA_1 = 0: DMA1
- * - I2S_DMA_2 = 1: DMA2
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @param[in] NewState is new state of DMA operation, should be:
- * - ENABLE
- * - DISABLE
- * @return none
- *********************************************************************/
-void I2S_DMACmd(LPC_I2S_TypeDef *I2Sx, uint8_t DMAIndex, uint8_t TRMode,
- FunctionalState NewState)
-{
- if (TRMode == I2S_RX_MODE) {
- if (DMAIndex == I2S_DMA_1) {
- if (NewState == ENABLE)
- I2Sx->DMA1 |= 0x01;
- else
- I2Sx->DMA1 &= ~0x01;
- } else {
- if (NewState == ENABLE)
- I2Sx->DMA2 |= 0x01;
- else
- I2Sx->DMA2 &= ~0x01;
- }
- } else {
- if (DMAIndex == I2S_DMA_1) {
- if (NewState == ENABLE)
- I2Sx->DMA1 |= 0x02;
- else
- I2Sx->DMA1 &= ~0x02;
- } else {
- if (NewState == ENABLE)
- I2Sx->DMA2 |= 0x02;
- else
- I2Sx->DMA2 &= ~0x02;
- }
- }
-}
-
-/********************************************************************//**
- * @brief Configure IRQ for I2S
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @param[in] level is the FIFO level that triggers IRQ request
- * @return none
- *********************************************************************/
-void I2S_IRQConfig(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, uint8_t level) {
- if (TRMode == I2S_RX_MODE) {
- I2Sx->IRQ |= (level << 8);
- } else {
- I2Sx->IRQ |= (level << 16);
- }
-}
-
-/********************************************************************//**
- * @brief Enable/Disable IRQ for I2S
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @param[in] NewState is new state of DMA operation, should be:
- * - ENABLE
- * - DISABLE
- * @return none
- *********************************************************************/
-void I2S_IRQCmd(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, FunctionalState NewState) {
-
- if (TRMode == I2S_RX_MODE) {
- if (NewState == ENABLE)
- I2Sx->IRQ |= 0x01;
- else
- I2Sx->IRQ &= ~0x01;
- //Enable DMA
-
- } else {
- if (NewState == ENABLE)
- I2Sx->IRQ |= 0x02;
- else
- I2Sx->IRQ &= ~0x02;
- }
-}
-
-/********************************************************************//**
- * @brief Get I2S interrupt status
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return FunctionState should be:
- * - ENABLE: interrupt is enable
- * - DISABLE: interrupt is disable
- *********************************************************************/
-FunctionalState I2S_GetIRQStatus(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode)
-{
-
- if(TRMode == I2S_TX_MODE)
- return I2S_IS_ENABLED((I2Sx->IRQ >> 1)&0x01);
- else
- return I2S_IS_ENABLED((I2Sx->IRQ)&0x01);
-}
-
-/********************************************************************//**
- * @brief Get I2S interrupt depth
- * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
- * @param[in] TRMode is transmit/receive mode, should be:
- * - I2S_TX_MODE = 0: transmit mode
- * - I2S_RX_MODE = 1: receive mode
- * @return depth of FIFO level on which to create an irq request
- *********************************************************************/
-uint8_t I2S_GetIRQDepth(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode)
-{
-
- if(TRMode == I2S_TX_MODE)
- return (((I2Sx->IRQ)>>16)&0xFF);
- else
- return (((I2Sx->IRQ)>>8)&0xFF);
-}
-/**
- * @}
- */
-
-#endif /*_I2S*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_iap.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_iap.c
deleted file mode 100644
index ceccf36570..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_iap.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_iap.c 2011-11-21
-*//**
-* @file lpc_iap.c
- * @brief Contains all functions support for IAP on LPC
-* @version 1.0
-* @date 21. November. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _IAP
-#include "lpc_iap.h"
-#include "lpc_clkpwr.h"
-
-// IAP Command
-typedef void (*IAP)(uint32_t *cmd,uint32_t *result);
-IAP iap_entry = (IAP) IAP_LOCATION;
-#define IAP_Call iap_entry
-
-/** @addtogroup IAP_Public_Functions LCD Public Function
- * @ingroup IAP
- * @{
- */
-
-
-/*********************************************************************//**
- * @brief Get Sector Number
- *
- * @param[in] adr Sector Address
- *
- * @return Sector Number.
- *
- **********************************************************************/
- uint32_t GetSecNum (uint32_t adr)
-{
- uint32_t n;
-
- n = adr >> 12; // 4kB Sector
- if (n >= 0x10) {
- n = 0x0E + (n >> 3); // 32kB Sector
- }
-
- return (n); // Sector Number
-}
-
-/*********************************************************************//**
- * @brief Prepare sector(s) for write operation
- *
- * @param[in] start_sec The number of start sector
- * @param[in] end_sec The number of end sector
- *
- * @return CMD_SUCCESS/BUSY/INVALID_SECTOR.
- *
- **********************************************************************/
-IAP_STATUS_CODE PrepareSector(uint32_t start_sec, uint32_t end_sec)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_PREPARE; // Prepare Sector for Write
- command.param[0] = start_sec; // Start Sector
- command.param[1] = end_sec; // End Sector
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Copy RAM to Flash
- *
- * @param[in] dest destination buffer (in Flash memory).
- * @param[in] source source buffer (in RAM).
- * @param[in] size the write size.
- *
- * @return CMD_SUCCESS.
- * SRC_ADDR_ERROR/DST_ADDR_ERROR
- * SRC_ADDR_NOT_MAPPED/DST_ADDR_NOT_MAPPED
- * COUNT_ERROR/SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION
- * BUSY
- *
- **********************************************************************/
-IAP_STATUS_CODE CopyRAM2Flash(uint8_t * dest, uint8_t* source, IAP_WRITE_SIZE size)
-{
- uint32_t sec;
- IAP_STATUS_CODE status;
- IAP_COMMAND_Type command;
-
- // Prepare sectors
- sec = GetSecNum((uint32_t)dest);
- status = PrepareSector(sec, sec);
- if(status != CMD_SUCCESS)
- return status;
-
- // write
- command.cmd = IAP_COPY_RAM2FLASH; // Copy RAM to Flash
- command.param[0] = (uint32_t)dest; // Destination Flash Address
- command.param[1] = (uint32_t)source; // Source RAM Address
- command.param[2] = size; // Number of bytes
- command.param[3] = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) / 1000; // CCLK in kHz
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- return (IAP_STATUS_CODE)command.status; // Finished without Errors
-}
-
-/*********************************************************************//**
- * @brief Erase sector(s)
- *
- * @param[in] start_sec The number of start sector
- * @param[in] end_sec The number of end sector
- *
- * @return CMD_SUCCESS.
- * INVALID_SECTOR
- * SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION
- * BUSY
- *
- **********************************************************************/
-IAP_STATUS_CODE EraseSector(uint32_t start_sec, uint32_t end_sec)
-{
- IAP_COMMAND_Type command;
- IAP_STATUS_CODE status;
-
- // Prepare sectors
- status = PrepareSector(start_sec, end_sec);
- if(status != CMD_SUCCESS)
- return status;
-
- // Erase sectors
- command.cmd = IAP_ERASE; // Prepare Sector for Write
- command.param[0] = start_sec; // Start Sector
- command.param[1] = end_sec; // End Sector
- command.param[2] = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) / 1000; // CCLK in kHz
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Blank check sector(s)
- *
- * @param[in] start_sec The number of start sector
- * @param[in] end_sec The number of end sector
- * @param[out] first_nblank_loc The offset of the first non-blank word
- * @param[out] first_nblank_val The value of the first non-blank word
- *
- * @return CMD_SUCCESS.
- * INVALID_SECTOR
- * SECTOR_NOT_BLANK
- * BUSY
- *
- **********************************************************************/
-IAP_STATUS_CODE BlankCheckSector(uint32_t start_sec, uint32_t end_sec,
- uint32_t *first_nblank_loc,
- uint32_t *first_nblank_val)
-{
- IAP_COMMAND_Type command;
-
- command.cmd = IAP_BLANK_CHECK; // Prepare Sector for Write
- command.param[0] = start_sec; // Start Sector
- command.param[1] = end_sec; // End Sector
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- if(command.status == SECTOR_NOT_BLANK)
- {
- // Update out value
- if(first_nblank_loc != NULL)
- *first_nblank_loc = command.result[0];
- if(first_nblank_val != NULL)
- *first_nblank_val = command.result[1];
- }
-
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Read part identification number
- *
- * @param[out] partID Part ID
- *
- * @return CMD_SUCCESS
- *
- **********************************************************************/
-IAP_STATUS_CODE ReadPartID(uint32_t *partID)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_READ_PART_ID;
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- if(command.status == CMD_SUCCESS)
- {
- if(partID != NULL)
- *partID = command.result[0];
- }
-
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Read boot code version. The version is interpreted as <major>.<minor>.
- *
- * @param[out] major The major
- * @param[out] minor The minor
- *
- * @return CMD_SUCCESS
- *
- **********************************************************************/
-IAP_STATUS_CODE ReadBootCodeVer(uint8_t *major, uint8_t* minor)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_READ_BOOT_VER;
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- if(command.status == CMD_SUCCESS)
- {
- if(major != NULL)
- *major = (command.result[0] >> 8) & 0xFF;
- if(minor != NULL)
- *minor = (command.result[0]) & 0xFF;
- }
-
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Read Device serial number.
- *
- * @param[out] uid Serial number.
- *
- * @return CMD_SUCCESS
- *
- **********************************************************************/
-IAP_STATUS_CODE ReadDeviceSerialNum(uint32_t *uid)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_READ_SERIAL_NUMBER;
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- if(command.status == CMD_SUCCESS)
- {
- if(uid != NULL)
- {
- uint32_t i = 0;
- for(i = 0; i < 4; i++)
- uid[i] = command.result[i];
- }
- }
-
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief compare the memory contents at two locations.
- *
- * @param[in] addr1 The address of the 1st buffer (in RAM/Flash).
- * @param[in] addr2 The address of the 2nd buffer (in RAM/Flash).
- * @param[in] size Number of bytes to be compared; should be a multiple of 4.
- *
- * @return CMD_SUCCESS
- * COMPARE_ERROR
- * COUNT_ERROR (Byte count is not a multiple of 4)
- * ADDR_ERROR
- * ADDR_NOT_MAPPED
- *
- **********************************************************************/
-IAP_STATUS_CODE Compare(uint8_t *addr1, uint8_t *addr2, uint32_t size)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_COMPARE;
- command.param[0] = (uint32_t)addr1;
- command.param[1] = (uint32_t)addr2;
- command.param[2] = size;
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-
- return (IAP_STATUS_CODE)command.status;
-}
-
-/*********************************************************************//**
- * @brief Re-invoke ISP.
- *
- * @param[in] None.
- *
- * @return None.
- *
- **********************************************************************/
-void InvokeISP(void)
-{
- IAP_COMMAND_Type command;
- command.cmd = IAP_REINVOKE_ISP;
- IAP_Call (&command.cmd, &command.status); // Call IAP Command
-}
-
-/**
- * @}
- */
-
-
-#endif /*_IAP*/
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_lcd.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_lcd.c
deleted file mode 100644
index ea2f6b5cdb..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_lcd.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_lcd.c 2011-10-14
-*//**
-* @file lpc_lcd.c
-* @brief Contains all functions support for LCD firmware library
-* on LPC
-* @version 1.0
-* @date 14. October. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _LCD
-
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-#include "lpc_gpio.h"
-#include "lpc_lcd.h"
-
-uint32_t lcd_hsize = 0, lcd_vsize = 0;
-uint32_t lcd_cursor_base_addr = 0;
-uint32_t lcd_cursor_size = 64;
-LCD_Config_Type lcd_config;
-static uint8_t bits_per_pixel[] = { 1, 2, 4, 8, 16, 32, 16, 16 };
-uint32_t rect[1024];
-
-
-static void LCD_SetHorizontalTiming(LCD_HConfig_Type* pConfig);
-static void LCD_SetVertialTiming(LCD_VConfig_Type* pConfig);
-static void LCD_SetPolarity(LCD_TYPES lcd_type, LCD_POLARITY_Type* pConfig);
-static void LCD_CtrlSetup(LCD_Config_Type* pConfig);
-
-/** @addtogroup LCD_Private_Functions LCD Private Function
- * @ingroup LCD
- * @{
- */
-
-
-/*********************************************************************//**
- * @brief Init LCD. The input clock is CClk
- *
- * @param[in] pConfig Configuration Information
- *
- * @return LCD_FUNC_OK Execute successfully
- * LCD_FUNC_ERR Error occurred.
- *
- **********************************************************************/
-LCD_RET_CODE LCD_Init (LCD_Config_Type* pConfig)
-{
- uint8_t clkdiv;
-
- if(pConfig == NULL)
- return LCD_FUNC_ERR;
-
- if(pConfig->big_endian_byte & !pConfig->big_endian_pixel)
- return LCD_FUNC_ERR;
-
- lcd_config = *pConfig;
-
- // Assign pins
- PINSEL_ConfigPin(0,4,7);
- PINSEL_ConfigPin(0,5,7);
- PINSEL_ConfigPin(0,6,7);
- PINSEL_ConfigPin(0,7,7);
- PINSEL_ConfigPin(0,8,7);
- PINSEL_ConfigPin(0,9,7);
- PINSEL_ConfigPin(1,20,7);
- PINSEL_ConfigPin(1,21,7);
- PINSEL_ConfigPin(1,22,7);
- PINSEL_ConfigPin(1,23,7);
- PINSEL_ConfigPin(1,24,7);
- PINSEL_ConfigPin(1,25,7);
- PINSEL_ConfigPin(1,26,7);
- PINSEL_ConfigPin(1,27,7);
- PINSEL_ConfigPin(1,28,7);
- PINSEL_ConfigPin(1,29,7);
- PINSEL_ConfigPin(2,0,7);
- PINSEL_ConfigPin(2,1,7);
- PINSEL_ConfigPin(2,2,7);
- PINSEL_ConfigPin(2,3,7);
- PINSEL_ConfigPin(2,4,7);
- PINSEL_ConfigPin(2,5,7);
- PINSEL_ConfigPin(2,6,7);
-#ifdef CORE_M4
- PINSEL_ConfigPin(0,10,7);
-#else
- PINSEL_ConfigPin(2,7,7);
-#endif
- PINSEL_ConfigPin(2,8,7);
- PINSEL_ConfigPin(2,9,7);
- PINSEL_ConfigPin(2,11,7);
- PINSEL_ConfigPin(2,12,7);
- PINSEL_ConfigPin(2,13,7);
- PINSEL_ConfigPin(4,28,7);
- PINSEL_ConfigPin(4,29,7);
-
- //Turn on LCD clock
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCLCD, ENABLE);
-
- // Set clock
- LPC_LCD->POL &= ~(0x01 << 5);
- if( pConfig->panel_clk > 0) {
- clkdiv = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) / pConfig->panel_clk - 1;
- LPC_SC->LCD_CFG = clkdiv & 0x1F;
- LPC_LCD->POL |=(1<<26);
- }
-
- // init Horizontal Timing
- LCD_SetHorizontalTiming(&pConfig->hConfig);
-
- // Init Vertical Timing
- LCD_SetVertialTiming(&pConfig->vConfig);
-
- // Set Polarity
- LCD_SetPolarity(pConfig->lcd_type, &pConfig->polarity);
-
- if(NULL != pConfig->lcd_palette)
- {
- LCD_SetPalette(pConfig->lcd_palette);
- }
-
- // Set Base address
- LCD_SetBaseAddress(LCD_PANEL_UPPER, pConfig->lcd_panel_upper);
- LCD_SetBaseAddress(LCD_PANEL_LOWER, pConfig->lcd_panel_lower);
-
- // Setup
- LCD_CtrlSetup(pConfig);
-
- return LCD_FUNC_OK;
-
-
-}
-/*********************************************************************//**
- * @brief Horizontal Timing Setting
- *
- * @param[in] pConfig Configuration Information
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetHorizontalTiming(LCD_HConfig_Type* pConfig)
-{
- LPC_LCD->TIMH = 0; //reset TIMH before set value
- LPC_LCD->TIMH |= ((pConfig->hbp - 1)& 0xFF)<<24;
- LPC_LCD->TIMH |= ((pConfig->hfp - 1)& 0xFF)<<16;
- LPC_LCD->TIMH |= ((pConfig->hsw - 1)& 0xFF)<<8;
- LPC_LCD->TIMH |= ((pConfig->ppl/16 - 1)& 0x3F)<<2;
- lcd_hsize = pConfig->ppl;
-}
-
-/*********************************************************************//**
- * @brief Vertical Timing Setting
- *
- * @param[in] pConfig Configuration Information
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetVertialTiming(LCD_VConfig_Type* pConfig)
-{
- LPC_LCD->TIMV = 0; //reset TIMV value before setting
- LPC_LCD->TIMV |= ((pConfig->vbp)& 0xFF)<<24;
- LPC_LCD->TIMV |= ((pConfig->vfp)& 0xFF)<<16;
- LPC_LCD->TIMV |= ((pConfig->vsw - 1)& 0x3F)<<10;
- LPC_LCD->TIMV |= ((pConfig->lpp - 1)& 0x03FF)<<0;
- lcd_vsize = pConfig->lpp;
-}
-
-/*********************************************************************//**
- * @brief Polarity Setting
- *
- * @param[in] pConfig Configuration Information
- * @param[in] lcd_type It can be:
- * - LCD_STN_MONOCHROME
- * - LCD_STN_COLOR
- * - LCD_TFT
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetPolarity(LCD_TYPES lcd_type, LCD_POLARITY_Type* pConfig)
-{
- // LCDFP pin is active LOW and inactive HIGH
- if(pConfig->invert_vsync)
- LPC_LCD->POL |= (1<<11);
- else
- LPC_LCD->POL &= ~(1<<11);
- // LCDLP pin is active LOW and inactive HIGH
- if(pConfig->invert_hsync)
- LPC_LCD->POL |= (1<<12);
- else
- LPC_LCD->POL &= ~(1<<12);
- // data is driven out into the LCD on the falling edge
- if(pConfig->invert_panel_clock)
- LPC_LCD->POL |= (1<<13);
- else
- LPC_LCD->POL &= ~(1<<13);
-
- // active high
- if(pConfig->active_high) {
- LPC_LCD->POL &= ~(1<<14);
- }
- else
- {
- LPC_LCD->POL |= (1<<14);
- }
-
- LPC_LCD->POL &= ~(0x3FF <<16);
- LPC_LCD->POL |= (pConfig->cpl - 1)<<16;
-
- if(lcd_type == LCD_STN_COLOR || lcd_type == LCD_STN_MONOCHROME)
- LPC_LCD->POL |= (pConfig->acb & 0x1F) << 6;
- }
-
-/*********************************************************************//**
- * @brief Set base address of frame buffer
- *
- * @param[in] panel identify which panel is.
- * @param[in] pAddress base address of the inputted panel.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetBaseAddress(LCD_PANEL panel, uint32_t pAddress)
-{
- // Frame Base Address doubleword aligned
- if(panel == LCD_PANEL_UPPER)
- LPC_LCD->UPBASE = pAddress & ~7UL ;
- else
- LPC_LCD->LPBASE = pAddress & ~7UL ;
-}
-
-/*********************************************************************//**
- * @brief LCD Setup.
- *
- * @param[in] pConfig Configuration information.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_CtrlSetup(LCD_Config_Type* pConfig)
-{
- // disable LCD controller
- LPC_LCD->CTRL = 0;
-
- // bpp
- LPC_LCD->CTRL &= ~(0x07 <<1);
- LPC_LCD->CTRL |=((pConfig->lcd_bpp & 0x07)<<1);
-
- if(pConfig->lcd_type == LCD_TFT) {
- LPC_LCD->CTRL |= (0x01 << 5); // TFT
- }
- else {
- // Color/Mono
- if(pConfig->lcd_type == LCD_STN_COLOR) {
- LPC_LCD->CTRL &= ~ (0x01 << 4); // Color
- }
- else if (pConfig->lcd_type == LCD_STN_MONOCHROME) {
- LPC_LCD->CTRL |= (0x01 << 4); // Mono
- }
-
- // STN/TFT
- LPC_LCD->CTRL &= ~ (0x01 << 5); // STN
-
- // Mono4/8
- if(pConfig->lcd_mono8)
- LPC_LCD->CTRL |= (0x01 << 6);
- else
- LPC_LCD->CTRL &= ~(0x01 << 6);
-
- // Single/dual
- if(pConfig->lcd_dual)
- LPC_LCD->CTRL |= (0x01 << 7);
- else
- LPC_LCD->CTRL &= ~(0x01 << 7);
- }
-
- // notmal output
- if(pConfig->lcd_bgr)
- LPC_LCD->CTRL |= (1<<8); // BGR
- else
- LPC_LCD->CTRL &= ~(1<<8); // RGB
-
- // Byte order
- if(pConfig->big_endian_byte)
- LPC_LCD->CTRL |= (1<<9);
- else
- LPC_LCD->CTRL &= ~(1<<9);
-
- // Pixel order
- if(pConfig->big_endian_pixel)
- LPC_LCD->CTRL |= (1<<10);
- else
- LPC_LCD->CTRL &= ~(1<<10);
-
- // disable power
- LPC_LCD->CTRL &= ~(1<<11);
-}
-
-/*********************************************************************//**
- * @brief Enable/disable LCD Display.
- *
- * @param[in] bEna 0: disable, 1: enable.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_Enable (Bool bEna)
-{
- volatile uint32_t i;
- if (bEna)
- {
- LPC_LCD->CTRL |= (1<<0);
- for(i = LCD_PWR_ENA_DIS_DLY; i; i--);
- LPC_LCD->CTRL |= (1<<11);
- }
- else
- {
- LPC_LCD->CTRL &= ~(1<<11);
- for(i = LCD_PWR_ENA_DIS_DLY; i; i--);
- LPC_LCD->CTRL &= ~(1<<0);
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set palette.
- *
- * @param[in] bEna 0: disable, 1: enable.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetPalette (const uint8_t* pPallete)
-{
- uint32_t i;
- uint32_t size = (0x01 << bits_per_pixel[lcd_config.lcd_bpp])/2 ;
- uint32_t * pDst = (uint32_t *)LPC_LCD->PAL;
- uint32_t * pInput = (uint32_t*) pPallete;
-
- for (i = 0; i < size; i++)
- {
- *pDst = *pInput;
- pDst++;
- pInput++;
- }
-}
-/*********************************************************************//**
- * @brief Get word offset for the given pixel
- *
- * @param[in] x x position of input pixel
- * @param[in] y y position of input pixel
- *
- * @return Offset
- *
- **********************************************************************/
-uint32_t LCD_GetWordOffset(uint32_t x, uint32_t y)
-{
- uint32_t pixel_num = x + y*lcd_hsize;
-
- return (pixel_num * bits_per_pixel[lcd_config.lcd_bpp])/32;
-}
-/*********************************************************************//**
- * @brief Get bit offset for the given pixel
- *
- * @param[in] x x position of input pixel
- * @param[in] y y position of input pixel
- *
- * @return Offset
- *
- **********************************************************************/
-uint32_t LCD_GetBitOffset(uint32_t x, uint32_t y)
-{
- uint32_t pixel_num;
- uint32_t ofs;
- pixel_num = x + y*lcd_hsize;
-
- ofs = (pixel_num * bits_per_pixel[lcd_config.lcd_bpp])%32;
-
- if(lcd_config.big_endian_pixel & lcd_config.big_endian_byte)
- {
- ofs = 32 - bits_per_pixel[lcd_config.lcd_bpp] - ofs;
- }
- else if (lcd_config.big_endian_pixel & !lcd_config.big_endian_byte)
- {
- if(bits_per_pixel[lcd_config.lcd_bpp] < 8)
- {
- ofs = (ofs/8)*8 + (8 - (ofs%8)-bits_per_pixel[lcd_config.lcd_bpp]);
- }
- }
- return ofs;
-}
-
-
-
-/*********************************************************************//**
- * @brief Copy pixel values from image buffer to frame buffer.
- *
- * @param[in] panel It can be:
- * - LCD_PANEL_UPPER
- * - LCD_PANEL_LOWER
- * @param[in] pPain point to image buffer.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_SetImage(LCD_PANEL panel, const uint8_t *pPain)
-{
- volatile uint32_t i;
- uint32_t * pWordDst = NULL;
- uint8_t* pByteDst = NULL;
- uint32_t bytes_num;
-
- if(panel == LCD_PANEL_UPPER)
- pWordDst = (uint32_t*) LPC_LCD->UPBASE;
- else
- pWordDst = (uint32_t*) LPC_LCD->LPBASE;
-
- pByteDst = (uint8_t*) pWordDst;
- bytes_num = ((lcd_hsize * lcd_vsize) * bits_per_pixel[lcd_config.lcd_bpp]) /8;
-
- if (NULL == pPain)
- {
- // clear display memory
- for( i = 0; bytes_num > i; i++)
- {
- *pByteDst++ = 0;
- }
- }
- else
- {
- // set display memory
- for(i = 0; bytes_num > i; i++)
- {
- *pByteDst++ = *pPain++;
- }
- }
-
- for(i = LCD_PWR_ENA_DIS_DLY; i; i--);
-}
-/*********************************************************************//**
- * @brief Draw a pixel on the given panel.
- *
- * @param[in] panel It can be:
- * - LCD_PANEL_UPPER
- * - LCD_PANEL_LOWER
- * @param[in] X_Left X position.
- * @param[in] Y_Up Y position.
- * @param[in] color Color which is placed to the given pixel.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_PutPixel (LCD_PANEL panel, uint32_t X_Left, uint32_t Y_Up, LcdPixel_t color)
-{
- uint32_t k;
- uint32_t * pWordData = NULL;
- uint8_t* pByteData = NULL;
- uint32_t bitOffset;
- uint8_t* pByteSrc = (uint8_t*)&color;
- uint8_t bpp = bits_per_pixel[lcd_config.lcd_bpp];
- uint8_t bytes_per_pixel = bpp/8;
- uint32_t start_bit;
-
- if((X_Left >= lcd_hsize)||(Y_Up >= lcd_vsize))
- return;
-
- if(panel == LCD_PANEL_UPPER)
- pWordData = (uint32_t*) LPC_LCD->UPBASE + LCD_GetWordOffset(X_Left,Y_Up);
- else
- pWordData = (uint32_t*) LPC_LCD->LPBASE + LCD_GetWordOffset(X_Left,Y_Up);
-
- bitOffset = LCD_GetBitOffset(X_Left,Y_Up);
- pByteData = (uint8_t*) pWordData;
- pByteData += bitOffset/8;
-
- start_bit = bitOffset%8;
-
- if(bpp < 8)
- {
- uint8_t bit_pos = start_bit;
- uint8_t bit_ofs = 0;
- for(bit_ofs = 0;bit_ofs <bpp; bit_ofs++,bit_pos++)
- {
- *pByteData &= ~ (0x01 << bit_pos);
- *pByteData |= ((*pByteSrc >> (k+bit_ofs)) & 0x01) << bit_pos;
- }
- }
- else
- {
- for(k = 0; k < bytes_per_pixel; k++)
- {
- *(pByteData+ k) = *pByteSrc++;
- }
- }
-}
-/*********************************************************************//**
- * @brief Place given image to given position.
- *
- * @param[in] panel It can be:
- * - LCD_PANEL_UPPER
- * - LCD_PANEL_LOWER
- * @param[in] X_Left Start X position.
- * @param[in] Y_Up Start Y position.
- * @param[in] pBmp Image information.
- * @param[in] Mask Mask on pixel values.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_LoadPic (LCD_PANEL panel, uint32_t X_Left, uint32_t Y_Up,
- Bmp_t * pBmp, uint32_t Mask)
-{
- uint32_t i, j, k, inc;
- uint32_t * pWordData = NULL;
- uint8_t* pByteData = NULL;
- uint32_t bitOffset;
- uint8_t* pByteSrc = (uint8_t*) pBmp->pPicStream;
- uint32_t X_LeftHold = X_Left;
- uint8_t bpp = bits_per_pixel[lcd_config.lcd_bpp];
- uint8_t bytes_per_pixel = bpp/8;
- uint8_t pixels_per_byte = 8/bpp;
- uint32_t hsize, vsize;
- uint32_t start_bit;
-
- if(pBmp->BytesPP == 0)
- pBmp->BytesPP = bytes_per_pixel;
-
- hsize = pBmp->H_Size;
- vsize = pBmp->V_Size;
- inc = (pixels_per_byte > 0) ? pixels_per_byte:1;
-
- for(i = 0; i < vsize; i++)
- {
- if(panel == LCD_PANEL_UPPER)
- pWordData = (uint32_t*) LPC_LCD->UPBASE + LCD_GetWordOffset(X_Left,Y_Up);
- else
- pWordData = (uint32_t*) LPC_LCD->LPBASE + LCD_GetWordOffset(X_Left,Y_Up);
-
- bitOffset = LCD_GetBitOffset(X_Left,Y_Up);
- pByteData = (uint8_t*) pWordData;
- pByteData += bitOffset/8;
-
- start_bit = bitOffset%8;
-
- if(pBmp->BytesPP > 0)
- pByteSrc = (uint8_t*) pBmp->pPicStream + i*hsize*pBmp->BytesPP; // storage of each line must be word alignment
- else
- pByteSrc = (uint8_t*) pBmp->pPicStream + (i*hsize*pBmp->BitsPP + 7)/8; // storage of each line must be word alignment
-
- X_LeftHold = X_Left;
-
- for(j = 0; j <= hsize; j+= inc)
- {
- if((X_LeftHold >= lcd_hsize) || (X_LeftHold - X_Left >= hsize))
- break;
- if(bpp < 8)
- {
- uint8_t bit_pos = start_bit;
- uint8_t bit_ofs = 0;
- for(k = 0; k < 8; k+= bpp)
- {
- for(bit_ofs = 0;bit_ofs <bpp; bit_ofs++,bit_pos++)
- {
- *pByteData &= ~ (0x01 << bit_pos);
- *pByteData |= ((*pByteSrc >> (k+bit_ofs)) & 0x01) << bit_pos;
- }
- if(lcd_config.big_endian_byte && lcd_config.big_endian_pixel)
- {
- if(bit_pos >= bpp*2)
- bit_pos -= bpp*2;
- else
- {
- bit_pos = 8-bpp;
- if((((uint32_t)pByteData)%4) == 0)
- pByteData += 7; // change to next word
- else
- pByteData--; // change to previous byte
- }
- }
- else if( !lcd_config.big_endian_byte && lcd_config.big_endian_pixel)
- {
- if(bit_pos >= bpp*2)
- bit_pos -= bpp*2;
- else
- {
- bit_pos = 8-bpp;
- pByteData++; // change to next byte
- }
- }
- else
- {
- if(bit_pos >= 8)
- {
- bit_pos = 0;
- pByteData++; // change to next byte
- }
-
- }
- X_LeftHold++;
- if((X_LeftHold >= lcd_hsize) ||
- (X_LeftHold - X_Left >= hsize))
- break;
- }
- pByteSrc++;
- continue;
- }
- else
- {
- for(k = 0; k < pBmp->BytesPP; k++)
- {
- *(pByteData+ k) = *pByteSrc++ ^ Mask;
- }
- if(lcd_config.big_endian_byte)
- {
- if((uint32_t)pByteData %4 > 0)
- pByteData -= bytes_per_pixel;
- else
- pByteData += 8 - bytes_per_pixel;
- }
- else
- pByteData+= bytes_per_pixel;
- X_LeftHold++;
- }
- }
- if(Y_Up++ >= lcd_vsize)
- {
- break;
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Fill a rectangle.
- *
- * @param[in] panel It can be:
- * - LCD_PANEL_UPPER
- * - LCD_PANEL_LOWER
- * @param[in] startx Start X position.
- * @param[in] endy End X position.
- * @param[in] starty Start Y position.
- * @param[in] endy End Y position.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_FillRect (LCD_PANEL panel, uint32_t startx,uint32_t endx,
- uint32_t starty, uint32_t endy,
- LcdPixel_t color)
-{
- uint32_t x, xs, xe, ys, ye;
- uint8_t bpp, pixels_per_word;
- uint32_t word_val, mask;
- uint32_t max_vsize = 0;
- Bmp_t bitmap;
- uint32_t hsize, vsize;
-
- bpp = bits_per_pixel[lcd_config.lcd_bpp];
- pixels_per_word = 32/bpp;
-
- mask = 0;
- for( x = 0; x < bpp; x++)
- mask |= 0x01 << x;
-
- color &= mask;
-
- word_val = 0;
- for(x = 0; x < pixels_per_word; x++)
- word_val |= color << (x*bpp);
-
- ys = (starty > endy) ? endy : starty;
- ye = (starty > endy) ? starty : endy;
-
- xs = (startx > endx) ? endx : startx;
- xe = (startx > endx) ? startx : endx;
-
- bitmap.BitsPP = bpp;
- bitmap.BytesPP = bpp/8;
- hsize = xe - xs + 1;
- bitmap.H_Size = hsize;
- vsize = ye - ys + 1;
- bitmap.pPicStream = (uint8_t*)rect;
-
- max_vsize = ((1024 * 32)/(hsize*bpp));
-
- for( x = 0; x < 1024; x++)
- {
- rect[x] = word_val;
- }
-
- while(1)
- {
- if(max_vsize >= vsize)
- {
- bitmap.V_Size = vsize;
- LCD_LoadPic(panel,xs,ys, &bitmap, 0);
- break;
- }
- else {
- bitmap.V_Size = max_vsize;
- vsize -= bitmap.V_Size;
- LCD_LoadPic(panel,xs,ys, &bitmap, 0);
- ys += max_vsize;
- }
- }
-
-
-}
-
-/*********************************************************************//**
- * @brief Configure display of cursor.
- *
- * @param[in] pConfig Configuration information.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_Cursor_Cfg(LCD_Cursor_Config_Type* pConfig)
-{
- if(pConfig->size32) {
- LPC_LCD->CRSR_CFG &= ~(0x01 << 0);
- lcd_cursor_size = 32;
- }
- else {
- LPC_LCD->CRSR_CFG |= (0x01 << 0);
- lcd_cursor_size = 64;
- }
-
- if(pConfig->framesync)
- LPC_LCD->CRSR_CFG &= ~(0x01 << 1);
- else
- LPC_LCD->CRSR_CFG |= (0x01 << 1);
-
- lcd_cursor_base_addr = pConfig->baseaddress;
-
- LPC_LCD->CRSR_PAL0 = pConfig->palette[0].Red |
- pConfig->palette[0].Green << 8 |
- pConfig->palette[0].Blue << 16;
- LPC_LCD->CRSR_PAL1 = pConfig->palette[1].Red |
- pConfig->palette[1].Green << 8 |
- pConfig->palette[1].Blue << 16;
-
-}
-/*********************************************************************//**
- * @brief Enable/disable cursor display.
- *
- * @param[in] enable 0: disable, 1: enable.
- * @param[in] cursor identify which cursor image is used.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_Cursor_Enable(int enable, int cursor)
-{
- if(enable) {
- LPC_LCD->CRSR_CTRL |= (1<<0);
- LPC_LCD->CRSR_CTRL |= (cursor<<4);
- }
- else {
- LPC_LCD->CRSR_CTRL &= ~(1<<0);
- }
-}
-
-
-/*********************************************************************//**
- * @brief move the cursor to the inputted position.
- *
- * @param[in] x Position in x-direction.
- * @param[in] y Position in y-direction.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_Move_Cursor(int x, int y)
-{
- LPC_LCD->CRSR_CLIP = 0;
- LPC_LCD->CRSR_XY = 0;
- if(0 <= x)
- {//no clipping
- LPC_LCD->CRSR_XY |= (x & 0x3FF);
- }
- else
- {//clip x
- LPC_LCD->CRSR_CLIP |= -x;
- }
-
- if(0 <= y)
- {//no clipping
-
- LPC_LCD->CRSR_XY |= (y << 16);
- }
- else
- {//clip y
- LPC_LCD->CRSR_CLIP |= (-y << 8);
- }
-}
-
-/*********************************************************************//**
- * @brief Set the cursor image.
- *
- * @param[in] pCursor point to cursor image.
- * @param[in] cursor cursor image number. It has no meaning when cursor size is 64x64
- * @param[in] cursor cursor size in words.
- *
- * @return None.
- *
- **********************************************************************/
-void LCD_Cursor_SetImage (const uint32_t *pCursor, int cursor, int size)
-{
- uint32_t i ;
- uint32_t * pDst = (uint32_t *)lcd_cursor_base_addr;
-
- if(lcd_cursor_size == 32)
- pDst += cursor*GET_CURSOR_IMG_SIZE(lcd_cursor_size);
-
-
- for(i = 0; i < size ; i++)
- {
- *pDst = *pCursor;
- pDst++;
- pCursor++;
- }
-}
-
-/**
- * @}
- */
-
-#endif /*_LCD*/
-
-
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_mci.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_mci.c
deleted file mode 100644
index 813d599be2..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_mci.c
+++ /dev/null
@@ -1,2508 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_mci.c 2011-06-02
-*//**
-* @file lpc_mci.c
-* @brief Contains all functions support for MCI firmware library
-* on LPC
-* @version 2.0
-* @date 29. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _MCI
-
-#include "LPC407x_8x_177x_8x.h"
-#include "lpc_types.h"
-#include "lpc_mci.h"
-#include "lpc_gpdma.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-#define DMA_MCI_SIZE BLOCK_LENGTH
-
-#define MCI_DMA_WRITE_CHANNEL (0)
-#define MCI_DMA_READ_CHANNEL (1)
-
-#define _SHIFT(x) (1 << x)
-#define _XSHIFT(x, y) (x << y)
-
-#define SHIFT_(x) (1 >> x)
-#define XSHIFT_(x, y) (x >> y)
-
-#define MCI_ACMD41_HCS_POS (30)
-
-#define MCI_PWRCTRL_BMASK (0xC3)
-
-#define MCI_PWRCTRL_OPENDRAIN_POS (6)
-#define MCI_PWRCTRL_OPENDRAIN_NUMBIT (1)
-#define MCI_PWRCTRL_OPENDRAIN_BMASK (0x01)
-
-
-volatile uint32_t Mci_Data_Xfer_End = 0;
-
-volatile uint32_t Mci_Data_Xfer_ERR = 0;
-
-volatile uint8_t fifo_plane = 0;
-
-volatile uint32_t CardRCA;
-
-volatile uint8_t CCS;
-
-volatile en_Mci_CardType MCI_CardType;
-
-// Terminal Counter flag, Error Counter flag for Channel 0
-uint32_t dmaWrCh_TermianalCnt, dmaWrCh_ErrorCnt;
-uint32_t dmaRdCh_TermianalCnt, dmaRdCh_ErrorCnt;
-
-
-uint32_t MCI_SettingDma(uint8_t* memBuf, uint32_t ChannelNum, uint32_t DMAMode );
-
-int32_t MCI_ReadFifo(uint32_t * dest);
-int32_t MCI_WriteFifo(uint32_t * src);
-
-void MCI_TXEnable( void );
-void MCI_RXEnable( void );
-void MCI_TXDisable( void );
-void MCI_RXDisable( void );
-
-void MCI_CmdProcess( void );
-void MCI_DataErrorProcess( void );
-void MCI_DataErrorProcess( void );
-void MCI_DATA_END_InterruptService( void );
-void MCI_FIFOInterruptService( void );
-
-int32_t MCI_CheckStatus(uint8_t expect_status);
-
-
-
-volatile uint8_t* dataSrcBlock = (uint8_t *) MCI_DMA_SRC_ADDR;
-volatile uint8_t* dataDestBlock = (uint8_t *) MCI_DMA_DST_ADDR;
-
-volatile uint32_t txBlockCnt=0, rxBlockCnt=0;
-
-/** @addtogroup MCI_Private_Functions MCI Private Function
- * @ingroup MCI
- * @{
- */
-
-#if MCI_DMA_ENABLED
-/*********************************************************************//**
- * @brief Do setting GPDMA for MCI working
- *
- * @param[in] DMAMode set for the Type of DMA Transfer. It may be memory
- * to peripheral (M2P) or peripheral to memory (P2M)
- * in MCI working
- *
- * @param[in] ChannelNum which channel is used for current transfer with
- * DMA compent
- *
- * @param[in] memBuf point to a UINT8 buffer. In 2 cases of DMAMode
- * seperated:
- * - M2P: it is the source address that hold the
- * expected buffer to transfer
- * - P2M: it is the destination address that will store
- * data that retrieved from the peripheral (the Card in slot)
- *
- * @return None
- *
- * @note This is only required if DMA support is enabled
- **********************************************************************/
-uint32_t MCI_SettingDma(uint8_t* memBuf, uint32_t ChannelNum, uint32_t DMAMode )
-{
- GPDMA_Channel_CFG_Type GPDMACfg;
-
- // Transfer size
- GPDMACfg.TransferSize = DMA_MCI_SIZE;
- // Transfer width
- GPDMACfg.TransferWidth = GPDMA_WIDTH_WORD;
- // Transfer type
- GPDMACfg.TransferType = DMAMode;
- // Linker List Item - unused
- GPDMACfg.DMALLI = 0;
-
- /* USB RAM is used for test.
- Please note, Ethernet has its own SRAM, but GPDMA can't access
- that. GPDMA can access USB SRAM and IRAM. Ethernet DMA controller can
- access both IRAM and Ethernet SRAM. */
- GPDMACfg.ChannelNum = ChannelNum;
-
- if ( DMAMode == GPDMA_TRANSFERTYPE_M2P_DEST_CTRL )
- {
- /* Ch0 set for M2P transfer from mempry to MCI FIFO. */
- // Source memory
- GPDMACfg.SrcMemAddr = (uint32_t)memBuf;
- // Destination memory
- GPDMACfg.DstMemAddr = (uint32_t)LPC_MCI->FIFO;
-
- // Source connection
- GPDMACfg.SrcConn = 0;
- // Destination connection
- GPDMACfg.DstConn = GPDMA_CONN_MCI;
-
- }
- else if ( DMAMode == GPDMA_TRANSFERTYPE_P2M_SRC_CTRL )
- {
- /* Ch0 set for P2M transfer from MCI FIFO to memory. */
- // Source memory
- GPDMACfg.SrcMemAddr = (uint32_t)LPC_MCI->FIFO;
- // Destination memory
- GPDMACfg.DstMemAddr = (uint32_t)memBuf;
-
- // Source connection
- GPDMACfg.SrcConn = GPDMA_CONN_MCI;
- // Destination connection
- GPDMACfg.DstConn = 0;
- }
- else
- {
- return ( FALSE );
- }
-
- // Setup channel with given parameter
- GPDMA_Setup(&GPDMACfg);
-
- // Enable GPDMA channel
- GPDMA_ChannelCmd(ChannelNum, ENABLE);
-
- /* Enable GPDMA interrupt */
- NVIC_EnableIRQ(DMA_IRQn);
-
- return (TRUE);
-}
-
-
-/*********************************************************************//**
- * @brief GPDMA interrupt handler sub-routine
- *
- * @param None
- *
- * @return None
- *
- * @note This is only executed if DMA support is enabled
- **********************************************************************/
-void MCI_DMA_IRQHandler (void)
-{
- // check GPDMA interrupt on channel 0
- if (GPDMA_IntGetStatus(GPDMA_STAT_INT, MCI_DMA_WRITE_CHANNEL))
- {
- //check interrupt status on channel 0
- // Check counter terminal status
- if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, MCI_DMA_WRITE_CHANNEL))
- {
- // Clear terminate counter Interrupt pending
- GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, MCI_DMA_WRITE_CHANNEL);
-
- dmaWrCh_TermianalCnt++;
- }
- if (GPDMA_IntGetStatus(GPDMA_STAT_INTERR, MCI_DMA_WRITE_CHANNEL))
- {
- // Clear error counter Interrupt pending
- GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, MCI_DMA_WRITE_CHANNEL);
-
- dmaWrCh_ErrorCnt++;
- }
- }
- else if (GPDMA_IntGetStatus(GPDMA_STAT_INT, MCI_DMA_READ_CHANNEL))
- {
- //check interrupt status on channel 0
- // Check counter terminal status
- if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, MCI_DMA_READ_CHANNEL))
- {
- // Clear terminate counter Interrupt pending
- GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, MCI_DMA_READ_CHANNEL);
-
- dmaRdCh_TermianalCnt++;
- }
- if (GPDMA_IntGetStatus(GPDMA_STAT_INTERR, MCI_DMA_READ_CHANNEL))
- {
- // Clear error counter Interrupt pending
- GPDMA_ClearIntPending (GPDMA_STATCLR_INTERR, MCI_DMA_READ_CHANNEL);
-
- dmaRdCh_ErrorCnt++;
- }
- }
-}
-#endif
-
-
-/*********************************************************************//**
- * @brief Read data from FIFO (after a transmission with card) to
- * a destination buffer
- *
- * @param[in] *dest The buffer to store the data that read from card
- *
- * @return MCI_FUNC_OK
- *************************************************************************/
-int32_t MCI_ReadFifo(uint32_t * dest)
-{
- uint8_t i;
- uint8_t start, end;
-
- if(fifo_plane == 0)
- {
- start = 0;
- end = 7;
- }
- else
- {
- start = 8;
- end = 15;
- }
- fifo_plane = (fifo_plane) ? 0:1;
-
- for (i = start; i <= end; i++)
- {
- *dest = LPC_MCI->FIFO[i];
-
- dest++;
- }
-
- return MCI_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Write data from a source buffer to FIFO for transmission
- *
- * @param[in] *src The buffer hold the data need to write to card
- *
- * @return MCI_FUNC_OK
- *************************************************************************/
-int32_t MCI_WriteFifo(uint32_t * src)
-{
- uint8_t i;
- uint8_t start, end;
-
- if(fifo_plane == 0)
- {
- start = 0;
- end = 7;
- }
- else
- {
- start = 8;
- end = 15;
- }
- fifo_plane = (fifo_plane) ? 0:1;
-
- for (i = start; i <= end; i++)
- {
- LPC_MCI->FIFO[i] = *src;
-
- src++;
- }
-
- return MCI_FUNC_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Enable Transmit data interrupt
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_TXEnable( void )
-{
-#if MCI_DMA_ENABLED
- LPC_MCI->MASK0 |= ((DATA_END_INT_MASK)|(ERR_TX_INT_MASK)); /* Enable TX interrupts only */
-#else
- LPC_MCI->MASK0 |= ((FIFO_TX_INT_MASK)|(DATA_END_INT_MASK)|(ERR_TX_INT_MASK)); /* FIFO TX interrupts only */
-#endif
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Disable Transmit data interrupt
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_TXDisable( void )
-{
-#if MCI_DMA_ENABLED
- LPC_MCI->MASK0 &= ~((DATA_END_INT_MASK)|(ERR_TX_INT_MASK)); /* Enable TX interrupts only */
-#else
- LPC_MCI->MASK0 &= ~((FIFO_TX_INT_MASK)|(DATA_END_INT_MASK)|(ERR_TX_INT_MASK)); /* FIFO TX interrupts only */
-#endif
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Enable Receive data interrupt
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_RXEnable( void )
-{
-#if MCI_DMA_ENABLED
- LPC_MCI->MASK0 |= ((DATA_END_INT_MASK)|(ERR_RX_INT_MASK)); /* Enable RX interrupts only */
-#else
- LPC_MCI->MASK0 |= ((FIFO_RX_INT_MASK)|(DATA_END_INT_MASK)|(ERR_RX_INT_MASK)); /* FIFO RX interrupts only */
-#endif
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Disable Receive data interrupt
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_RXDisable( void )
-{
-#if MCI_DMA_ENABLED
- LPC_MCI->MASK0 &= ~((DATA_END_INT_MASK)|(ERR_RX_INT_MASK)); /* Enable TX interrupts only */
-#else
- LPC_MCI->MASK0 &= ~((FIFO_RX_INT_MASK)|(DATA_END_INT_MASK)|(ERR_RX_INT_MASK)); /* FIFO TX interrupts only */
-#endif
-
- return;
-}
-
-/*********************************************************************//**
- * @brief Check if the card is in the given state.
- *@param expect_status expected status
- * @details Continuously get the card status until the card is ready. if its status matches
- * with the given state, return with success. Else, return MCI_FUNC_ERR_STATE.
- * If the card is still not ready, return MCI_FUNC_NOT_READY.
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- *************************************************************************/
-int32_t MCI_CheckStatus(uint8_t expect_status)
-{
- int32_t respValue, retval = MCI_FUNC_FAILED;
- uint32_t retryCnt = 0xFFFF, i;
- while (retryCnt > 0)
- {
- if (MCI_GetCardStatus(&respValue) != MCI_FUNC_OK)
- {
- break;
- }
- else
- {
- /* The only valid state is TRANS per MMC and SD state diagram.
- RCV state may be seen, but, it happens only when TX_ACTIVE or
- RX_ACTIVE occurs before the WRITE_BLOCK and READ_BLOCK cmds are
- being sent, which is not a valid sequence. */
- if(!(respValue & CARD_STATUS_READY_FOR_DATA ))
- {
- retval = MCI_FUNC_NOT_READY;
- }
- else if(CARDSTATEOF(respValue) != expect_status)
- {
- // If card is in prg state, wait until it changes to trans state
- // when "operation complete"
- if(CARDSTATEOF(respValue) != CARD_STATE_PRG)
- {
- return MCI_FUNC_ERR_STATE;
- }
- }
- else
- {
- return MCI_FUNC_OK;
- }
- }
- retryCnt--;
- for(i = 0; i < 0x20; i++);
-
- }
-
- return retval;
-}
-
-
-/*********************************************************************//**
- * @brief Called by MCI interrupt handler to simplify the command
- * process.
- *
- * @param None
- *
- * @return None
- *
- * @note In card initialization, the commnad interrupts are disabled
- *************************************************************************/
-void MCI_CmdProcess( void )
-{
- uint32_t MCIStatus;
-
- MCIStatus = LPC_MCI->STATUS;
-
- if ( MCIStatus & MCI_CMD_CRC_FAIL )
- {
- LPC_MCI->CLEAR = MCI_CMD_CRC_FAIL;
- }
-
- if ( MCIStatus & MCI_CMD_TIMEOUT )
- {
- LPC_MCI->CLEAR = MCI_CMD_TIMEOUT;
- }
-
- /* Cmd Resp End or Cmd Sent */
- if ( MCIStatus & MCI_CMD_RESP_END )
- {
- LPC_MCI->CLEAR = MCI_CMD_RESP_END;
- }
-
- if ( MCIStatus & MCI_CMD_SENT )
- {
- LPC_MCI->CLEAR = MCI_CMD_SENT;
- }
-
- if ( MCIStatus & MCI_CMD_ACTIVE )
- {
- LPC_MCI->CLEAR = MCI_CMD_ACTIVE;
- }
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Called by MCI interrupt handler to manage error on the bus
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_DataErrorProcess( void )
-{
- uint32_t MCIStatus;
-
- MCIStatus = LPC_MCI->STATUS;
-
- if ( MCIStatus & MCI_DATA_CRC_FAIL )
- {
- LPC_MCI->CLEAR = MCI_DATA_CRC_FAIL;
- }
-
- if ( MCIStatus & MCI_DATA_TIMEOUT )
- {
- LPC_MCI->CLEAR = MCI_DATA_TIMEOUT;
- }
-
- /* Underrun or overrun */
- if ( MCIStatus & MCI_TX_UNDERRUN )
- {
- LPC_MCI->CLEAR = MCI_TX_UNDERRUN;
- }
-
- if ( MCIStatus & MCI_RX_OVERRUN )
- {
- LPC_MCI->CLEAR = MCI_RX_OVERRUN;
- }
-
- /* Start bit error on data signal */
- if ( MCIStatus & MCI_START_BIT_ERR )
- {
- LPC_MCI->CLEAR = MCI_START_BIT_ERR;
- }
-
- Mci_Data_Xfer_End = 0;
- Mci_Data_Xfer_ERR = MCIStatus;
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Called by MCI interrupt handler. This is the last interrupt
- * manipulates the process of the data-block write and read
- * to/with card
- *
- * @details This service is also used with/without DMA support. It simply
- * clears the flag messages the in-process data-block transfer
- * has been done/ended
- *
- * @param None
- *
- * @return None
- *************************************************************************/
-void MCI_DATA_END_InterruptService( void )
-{
- uint32_t MCIStatus;
-
- MCIStatus = LPC_MCI->STATUS;
- if ( MCIStatus & MCI_DATA_END ) /* Data end, and Data block end */
- {
- LPC_MCI->CLEAR = MCI_DATA_END;
-
- Mci_Data_Xfer_End = 0;
-
- Mci_Data_Xfer_ERR = 0;
-
- MCI_TXDisable();
-
- MCI_RXDisable();
-
- return;
- }
-
- if ( MCIStatus & MCI_DATA_BLK_END )
- {
- LPC_MCI->CLEAR = MCI_DATA_BLK_END;
-
- //MCI_TXDisable();
-
- return;
- }
-
- /* Tx active */
- if ( MCIStatus & MCI_TX_ACTIVE )
- {
-
- }
-
- /* Rx active */
- if ( MCIStatus & MCI_RX_ACTIVE )
- {
-
- }
-
- return;
-}
-
-
-/*********************************************************************//**
- * @brief Called by MCI interrupt handler if requiring to using FIFO
- * for data transferring. It copy data to/from FIFO register
- * from/to a data buffer.
- *
- * @param None
- *
- * @return None
- *
- * @note This function is done without DMA transfer support
- **********************************************************************/
-void MCI_FIFOInterruptService( void )
-{
-#if !MCI_DMA_ENABLED
- uint32_t MCIStatus;
-
- MCIStatus = LPC_MCI->STATUS;
-
- if ( MCIStatus & (FIFO_TX_INT_MASK ) )
- {
- /* empty is multiple of 512 block size */
- if ( MCIStatus & MCI_TX_HALF_EMPTY )
- {
- //There's no data, return
- if(dataSrcBlock == NULL)
- return;
-
- /* write 8 words to fifo */
- MCI_WriteFifo((uint32_t *)&dataSrcBlock[txBlockCnt]);
-
- txBlockCnt += 32;
- }
-
- if (txBlockCnt == BLOCK_LENGTH) /* block complete */
- {
- dataSrcBlock += BLOCK_LENGTH;
-
- txBlockCnt = 0;
-
- /* disable FIFO int until next block write */
- //LPC_MCI->MASK0 &= ~(FIFO_TX_INT_MASK);
-
- /* wait for SD card to complete sending data i.e MCI_DATA_BLK_END interrupt */
- }
- }
- else if ( MCIStatus & (FIFO_RX_INT_MASK) )
- {
- /* if using RX_HALF_FULL remove one ReadFIFO below */
- if ( MCIStatus & MCI_RX_HALF_FULL )
- {
- //There's no store data, return
- if(dataDestBlock == NULL)
- return;
-
- /* read 8 words from fifo */
- MCI_ReadFifo((uint32_t *)&dataDestBlock[rxBlockCnt]);
-
- rxBlockCnt += 32;
- }
-
- /* block complete */
- if (rxBlockCnt == BLOCK_LENGTH)
- {
- dataDestBlock += BLOCK_LENGTH;
-
- rxBlockCnt = 0;
- }
- }
-#endif
-
- return;
-}
-
-/*********************************************************************//**
- * @brief MCI_IRQHandler is to manage the reasons that cause the
- * interrupt.
- *
- * @details It controls the data-block writing and reading by access
- * the FIFO register.
- * It handle the state changes on the MCI bus...
- *
- * @param None
- *
- * @return None
- **********************************************************************/
-void MCI_IRQHandler (void)
-{
- uint32_t MCI_Status;
-
- MCI_Status = LPC_MCI->STATUS;
-
- /* handle MCI_STATUS interrupt */
- if ( MCI_Status & DATA_ERR_INT_MASK )
- {
- MCI_DataErrorProcess();
-
- return;
- }
-
- if ( MCI_Status & DATA_END_INT_MASK )
- {
- MCI_DATA_END_InterruptService();
-
- return;
- }
- else if ( MCI_Status & FIFO_INT_MASK )
- {
- MCI_FIFOInterruptService();
-
- return;
- }
- else if ( MCI_Status & CMD_INT_MASK )
- {
- MCI_CmdProcess();
-
- return;
- }
-}
-
-
-/**
- * @}
- */
-
-
-
-/** @addtogroup MCI_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Set MCI clock rate, during initialization phase < 400K
- * during data phase < 20Mhz
- *
- * @param[in] ClockRate Clock rate to be set (in Hz)
- *
- * @return None
- **********************************************************************/
-void MCI_Set_MCIClock( uint32_t ClockRate )
-{
- volatile uint32_t i;
- uint32_t ClkValue = 0;
- uint32_t pclk;
-
- pclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- ClkValue = (pclk + 2*ClockRate - 1) /(2*ClockRate);
- if(ClkValue)
- ClkValue -= 1;
-
- LPC_MCI->CLOCK = (LPC_MCI->CLOCK & ~(0xFF)) | (1 << 8) | ClkValue;
-
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK before next write */
-
- return;
-}
-
-
-/**********************************************************************//**
- * @brief Set the Width to 1-bit Bus or 4-bit Bus
- *
- * @param[in] width buswidth expected to set
- *
- * @return MCI_FUNC_OK in case of success
- *************************************************************************/
-int32_t MCI_SetBusWidth( uint32_t width )
-{
- volatile uint32_t i;
- uint8_t bus_width = BUS_WIDTH_1BIT;
-
- if ( width == SD_1_BIT )
- {
- LPC_MCI->CLOCK &= ~(1 << 11); /* 1 bit bus */
- }
- else if ( width == SD_4_BIT )
- {
- LPC_MCI->CLOCK |= (1 << 11);/* 4 bit bus */
- bus_width = BUS_WIDTH_4BITS;
- }
-
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- if ( MCI_Acmd_SendBusWidth( bus_width ) != MCI_FUNC_OK )
- {
- return(MCI_FUNC_FAILED);
- }
- }
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Do initialization the MCI block as set its clock, registers,
- * setup NVIC for interrupts, configure the pins used for MCI
- * function, do initialize the card in slot...
- *
- * @param[in] powerActiveLevel the power level to activate the card in slot
- *
- * @return MCI_FUNC_OK in case of success
- ***************************************************************************/
-int32_t MCI_Init(uint8_t powerActiveLevel )
-{
- volatile uint32_t i;
-
- MCI_CardType = MCI_CARD_UNKNOWN;
-
- // Following block of code added to ensure card VCC drops to zero
- // before card is initialized
-
- // Force all MCI control pins to basic I/O mode
- LPC_IOCON->P1_2 &= ~0x1F; /* SD_CLK @ P1.2 */
- LPC_IOCON->P1_3 &= ~0x1F; /* SD_CMD @ P1.3 */
- LPC_IOCON->P1_5 &= ~0x1F; /* SD_PWR @ P1.5 */
- LPC_IOCON->P1_6 &= ~0x1F; /* SD_DAT_0 @ P1.6 */
- LPC_IOCON->P1_7 &= ~0x1F; /* SD_DAT_1 @ P1.7 */
- LPC_IOCON->P1_11 &= ~0x1F; /* SD_DAT_2 @ P1.11 */
- LPC_IOCON->P1_12 &= 0x1F; /* SD_DAT_3 @ P1.12 */
-
- // Set all MCI pins to outputs
- LPC_GPIO1->DIR |= 0x18EC;
-
- // Force all pins low (except power control pin)
- LPC_GPIO1->CLR = 0x1000;
- LPC_GPIO1->CLR = 0x0800;
- LPC_GPIO1->CLR = 0x0080;
- LPC_GPIO1->CLR = 0x0040;
-
- LPC_GPIO1->SET = 0x0020;
-
- LPC_GPIO1->CLR = 0x0008;
- LPC_GPIO1->CLR = 0x0004;
-
- // Crude delay of 50ms at 120MHz
- for ( i = 0; i < 0x100000; i++ );
-
- LPC_SC->PCONP |= ( 1 << 28 ); /* Enable clock to the MCI block */
-
- if ( LPC_MCI->CLOCK & (1 << 8) )
- {
- LPC_MCI->CLOCK &= ~(1 << 8);
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- }
-
- if ( LPC_MCI->POWER & 0x02 )
- {
- LPC_MCI->POWER = 0x00;
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- }
-
- /* Disable all interrupts for now */
- LPC_MCI->MASK0 = 0;
-
- //SD_CLK
- PINSEL_ConfigPin(1, 2, 2);
-
- //SD_CMD
- PINSEL_ConfigPin(1, 3, 2);
-
- //SD_PWR
- PINSEL_ConfigPin(1, 5, 2);
-
- //SD_DAT_0
- PINSEL_ConfigPin(1, 6, 2);
-
- //SD_DAT_1
- PINSEL_ConfigPin(1, 7, 2);
-
- //SD_DAT_2
- PINSEL_ConfigPin(1, 11, 2);
-
- //SD_DAT_3
- PINSEL_ConfigPin(1, 12, 2);
-
- // SD_PWR is active high (follows the output of the SD Card interface block).
- if(powerActiveLevel == LOW_LVL)
- {
- LPC_SC->SCS &= ~ 0x08;//Becase on EA board SD_PWR is active low
- }
- else
- {
- LPC_SC->SCS |= 0x08;
- }
-
- //Setting for timeout problem
- LPC_MCI->DATATMR = 0x1FFFFFFF;
-
- /*set up clocking default mode, clear any registers as needed */
- LPC_MCI->COMMAND = 0;
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- LPC_MCI->DATACTRL = 0;
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- LPC_MCI->CLEAR = 0x7FF; /* clear all pending interrupts */
-
- LPC_MCI->POWER = 0x02; /* power up */
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-
-
- /* delays for the supply output is stable*/
- for ( i = 0; i < 0x80000; i++ );
-
- /* During identification phase, the clock should be less than
- 400Khz. Once we pass this phase, the normal clock can be set up
- to 25Mhz on SD card and 20Mhz on MMC card. */
- MCI_Set_MCIClock(MCI_SLOW_RATE );
-
- LPC_MCI->POWER |= 0x01; /* bit 1 is set already, from power up to power on */
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-
- NVIC_EnableIRQ(MCI_IRQn);
-
- MCI_CardInit();
-
- /* During the initialization phase, to simplify the process, the CMD related
- interrupts are disabled. The DATA related interrupts are enabled when
- the FIFOs are used and just before WRITE_BLOCK READ_BLOCK cmds are issues, and
- disabled after the data block has been written and read. Please also note,
- before WRITE_BLOCK only TX related data interrupts are enabled, and before
- READ_BLOCK only RX related data interrupts are enabled. */
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Set output in open drain mode or pushpull mode
- *
- * @param[in] mode the mode going to set
- *
- * @return None
- ***************************************************************************/
-void MCI_SetOutputMode(uint32_t mode)
-{
- uint32_t i = 0;
- if(mode == MCI_OUTPUT_MODE_OPENDRAIN)
- {
- /* Set Open Drain output control for MMC */
- LPC_MCI->POWER |= (1 << MCI_PWRCTRL_OPENDRAIN_POS) & MCI_PWRCTRL_BMASK;
- }
- else
- {
- /* Clear Open Drain output control for SD */
- LPC_MCI->POWER &= (~(1 << MCI_PWRCTRL_OPENDRAIN_POS) & MCI_PWRCTRL_BMASK);
- }
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-}
-
-
-/************************************************************************//**
- * @brief The routine is used to send a CMD to the card
- *
- * @param[in] CmdIndex the command to be sent to cards
- *
- * @param[in] Argument the argument follows the command
- *
- * @param[in] ExpectResp the response type for the command. They may be:
- * - EXPECT_NO_RESP: means no response required
- * - EXPECT_SHORT_RESP: means a response in a word needed
- * - EXPECT_LONG_RESP: means a response in 4 words needed
- *
- * @param[in] AllowTimeout allow timeout the command or not
- *
- * @return None
- ***************************************************************************/
-void MCI_SendCmd(st_Mci_CmdInfo* pCmdIf)
-{
- volatile uint32_t i;
- uint32_t CmdData = 0;
- uint32_t CmdStatus;
-
- uint32_t CmdIndex = pCmdIf->CmdIndex;
- uint32_t Argument = pCmdIf->Argument;
- uint32_t ExpectResp = pCmdIf->ExpectResp;
- uint32_t AllowTimeout = pCmdIf->AllowTimeout;
-
- /* the command engine must be disabled when we modify the argument
- or the peripheral resends */
- while ( (CmdStatus = LPC_MCI->STATUS) & MCI_CMD_ACTIVE ) /* Command in progress. */
- {
- LPC_MCI->COMMAND = 0;
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- LPC_MCI->CLEAR = CmdStatus | MCI_CMD_ACTIVE;
- }
-
-
- /*set the command details, the CmdIndex should 0 through 0x3F only */
- CmdData |= (CmdIndex & 0x3F); /* bit 0 through 5 only */
-
- if ( ExpectResp == EXPECT_NO_RESP ) /* no response */
- {
- CmdData &= ~((1 << 6) | (1 << 7)); /* Clear long response bit as well */
- }
- else if ( ExpectResp == EXPECT_SHORT_RESP ) /* expect short response */
- {
- CmdData |= (1 << 6);
- }
- else if ( ExpectResp == EXPECT_LONG_RESP ) /* expect long response */
- {
- CmdData |= (1 << 6) | (1 << 7);
- }
-
- if ( AllowTimeout == ALLOW_CMD_TIMER ) /* allow timeout or not */
- {
- CmdData &= ~ MCI_DISABLE_CMD_TIMER;
- }
- else
- {
- CmdData |= MCI_DISABLE_CMD_TIMER;
- }
-
- /*send the command*/
- CmdData |= (1 << 10); /* This bit needs to be set last. */
-
- // clear status register
- LPC_MCI->CLEAR = 0x7FF;
-
- LPC_MCI->ARGUMENT = Argument; /* Set the argument first, finally command */
-
- LPC_MCI->COMMAND = CmdData;
-
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-
- // Wait until command is processed
- while(!LPC_MCI->STATUS);
-
- // Wait until command sent
- while(LPC_MCI->STATUS & MCI_CMD_ACTIVE);
-
- return;
-}
-
-
-/************************************************************************//**
- * @brief The routine is to get the reponse from card after commands.
- * This function is always used in pair of MCI_SendCmd() func
- *
- * @param[in] ExpectCmdData specify the command of which the data will be
- * retrieved. This field should be the same with CmdIndex of
- * MCI_SendCmd() function.
- *
- * @param[in] ExpectResp the response type for the command. They may be:
- * - EXPECT_NO_RESP: means no response required
- * - EXPECT_SHORT_RESP: means a response in a word needed
- * - EXPECT_LONG_RESP: means a response in 4 words needed
- *
- * @param[out] CmdResp the buffer stored the data replied from cards
- *
- * @return MCI_FUNC_OK in case of success
- ***************************************************************************/
-int32_t MCI_GetCmdResp(uint32_t ExpectCmdData, uint32_t ExpectResp, uint32_t *CmdResp)
-{
- uint32_t CmdRespStatus = 0;
- uint32_t LastCmdIndex;
- uint32_t i = 0;
-
- if ( ExpectResp == EXPECT_NO_RESP )
- {
- return MCI_FUNC_OK;
- }
-
- while (1)
- {
- // Get the status of the component
- CmdRespStatus = LPC_MCI->STATUS;
-
- if ( CmdRespStatus & (MCI_CMD_TIMEOUT) )
- {
- LPC_MCI->CLEAR = CmdRespStatus | MCI_CMD_TIMEOUT;
-
- LPC_MCI->COMMAND = 0;
- LPC_MCI->ARGUMENT = 0xFFFFFFFF;
-
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
-
- return (CmdRespStatus);
- }
-
- if ( CmdRespStatus & MCI_CMD_CRC_FAIL )
- {
- LPC_MCI->CLEAR = CmdRespStatus | MCI_CMD_CRC_FAIL;
- LastCmdIndex = LPC_MCI->COMMAND & 0x003F;
-
- if ( (LastCmdIndex == CMD1_SEND_OP_COND) || (LastCmdIndex == ACMD41_SEND_APP_OP_COND)
- || (LastCmdIndex == CMD12_STOP_TRANSMISSION) )
- {
- LPC_MCI->COMMAND = 0;
- LPC_MCI->ARGUMENT = 0xFFFFFFFF;
- for ( i = 0; i < 0x10; i++ ); /* delay 3MCLK + 2PCLK */
- break; /* ignore CRC error if it's a resp for SEND_OP_COND
- or STOP_TRANSMISSION. */
- }
- else
- {
- return (CmdRespStatus);
- }
- }
- else if (CmdRespStatus & MCI_CMD_RESP_END)
- {
- LPC_MCI->CLEAR = CmdRespStatus | MCI_CMD_RESP_END;
- break; /* cmd response is received, expecting response */
- }
-
- }
-
- if ((LPC_MCI->RESP_CMD & 0x3F) != ExpectCmdData)
- {
- /* If the response is not R1, in the response field, the Expected Cmd data
- won't be the same as the CMD data in SendCmd(). Below four cmds have
- R2 or R3 response. We don't need to check if MCI_RESP_CMD is the same
- as the Expected or not. */
- if ((ExpectCmdData != CMD1_SEND_OP_COND) && (ExpectCmdData != ACMD41_SEND_APP_OP_COND)
- && (ExpectCmdData != CMD2_ALL_SEND_CID) && (ExpectCmdData != CMD9_SEND_CSD))
- {
- CmdRespStatus = INVALID_RESPONSE; /* Reuse error status */
- return (INVALID_RESPONSE);
- }
- }
-
- /* Read MCI_RESP0 register assuming it's not long response. */
- if (CmdResp != NULL)
- {
- if (ExpectResp == EXPECT_SHORT_RESP)
- {
- *(CmdResp + 0) = LPC_MCI->RESP0;
- }
- else if (ExpectResp == EXPECT_LONG_RESP)
- {
- *(CmdResp + 0) = LPC_MCI->RESP0;
- *(CmdResp + 1) = LPC_MCI->RESP1;
- *(CmdResp + 2) = LPC_MCI->RESP2;
- *(CmdResp + 3) = LPC_MCI->RESP3;
- }
- }
-
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief The routine is to send command to cards then get back the
- * reponses (if required).
- *
- * @param[in] CmdIndex the command to be sent to cards
- *
- * @param[in] Argument the argument follows the command
- *
- * @param[in] ExpectResp the response type for the command. They may be:
- * - EXPECT_NO_RESP: means no response required
- * - EXPECT_SHORT_RESP: means a response in a word needed
- * - EXPECT_LONG_RESP: means a response in 4 words needed
- *
- * @param[out] CmdResp the buffer stored the data replied from cards
- *
- * @param[in] AllowTimeout allow timeout the command or not
- *
- * @return MCI_FUNC_OK in case of success
- ***************************************************************************/
-int32_t MCI_CmdResp(st_Mci_CmdInfo* pCmdIf)
-{
- int32_t respStatus;
- uint32_t CmdIndex = pCmdIf->CmdIndex;
- uint32_t ExpectResp = pCmdIf->ExpectResp;
- uint32_t *CmdResp = pCmdIf->CmdResp;
-
-
- MCI_SendCmd(pCmdIf);
-
- if((CmdResp != NULL) || (ExpectResp != EXPECT_NO_RESP))
- {
- respStatus = MCI_GetCmdResp(CmdIndex, ExpectResp, CmdResp);
- }
- else
- {
- respStatus = MCI_FUNC_BAD_PARAMETERS;
- }
-
- return respStatus;
-}
-
-
-/************************************************************************//**
- * @brief To reset the card, the CMD0 is sent and then the card is put
- * in idle state. This is the very first command to be sent to
- * initialize either MMC or SD card.
- *
- * @param None
- *
- * @return Always MCI_FUNC_OK
- ***************************************************************************/
-int32_t MCI_CardReset(void)
-{
- st_Mci_CmdInfo cmdIf;
- /* Because CMD0 command to put the device to idle state does not need response
- since, it's only sending commad */
- cmdIf.CmdIndex = CMD0_GO_IDLE_STATE;
- cmdIf.Argument = 0x00000000;
- cmdIf.ExpectResp = EXPECT_NO_RESP;
- cmdIf.AllowTimeout = 0;
- cmdIf.CmdResp = 0;
- MCI_SendCmd(&cmdIf);
-
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Send CMD1 (SEND_OP_COND) to card.
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_Cmd_SendOpCond( void )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- retryCount = 0x200; /* reset retry counter */
-
- cmdIf.CmdIndex = CMD1_SEND_OP_COND;
- cmdIf.Argument = OCR_INDEX;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- /* continuously sends until the busy bit is cleared */
- while ( retryCount > 0 )
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus & MCI_CMD_TIMEOUT)
- {
- retval = MCI_FUNC_TIMEOUT;
- }
- else if ((respValue[0] & 0x80000000) == 0)
- {
- //The card has not finished the power up routine
- retval = MCI_FUNC_BUS_NOT_IDLE;
- }
- else
- {
- retval = MCI_FUNC_OK;
- break;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return(retval);
-}
-
-
-/************************************************************************//**
- * @brief Send CMD8 (SEND_IF_COND) for interface condition to card.
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_Cmd_SendIfCond(void)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t CmdArgument;
- uint32_t respStatus;
- uint32_t respValue[4];
-
- int32_t retval = MCI_FUNC_FAILED;
-
- uint8_t voltageSupplied = MCI_CMD8_VOLATAGESUPPLIED_27_36;//in range 2.7-3.6V
- uint8_t checkPattern = 0xAA;
- st_Mci_CmdInfo cmdIf;
-
- CmdArgument = (voltageSupplied << MCI_CMD8_VOLTAGESUPPLIED_POS) | (checkPattern << MCI_CMD8_CHECKPATTERN_POS);
-
- retryCount = 20;
-
- cmdIf.CmdIndex = CMD8_SEND_IF_COND;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus & MCI_CMD_TIMEOUT)
- {
- //Consider as no response
- retval = MCI_FUNC_TIMEOUT;
- }
- else if (((respValue[0]>>MCI_CMD8_CHECKPATTERN_POS) & MCI_CMD8_CHECKPATTERN_BMASK) != checkPattern)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else if (((respValue[0] >> MCI_CMD8_VOLTAGESUPPLIED_POS) & MCI_CMD8_VOLTAGESUPPLIED_BMASK)
- != voltageSupplied)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- return MCI_FUNC_OK;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Send CMD55 (APP_CMD) to indicate to the card that the next
- * command is an application specific command rather than a
- * standard command. Before an ACMD, call this routine first
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_Cmd_SendACMD( void )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t CmdArgument;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- CmdArgument = CardRCA; /* Use the address from SET_RELATIVE_ADDR cmd */
- }
- else /* if MMC or unknown card type, use 0x0. */
- {
- CmdArgument = 0x00000000;
- }
-
- retryCount = 20;
-
- cmdIf.CmdIndex = CMD55_APP_CMD;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus != 0)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ACMD_ENABLE)
- {
- retval = MCI_FUNC_OK;
- break;
- }
- else
- {
- retval = MCI_FUNC_NOT_READY;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Send ACMD41 (SEND_APP_OP_COND) to Host Capacity Support (HCS)
- * information and asks the accessed card to send its operating
- * condition (OCR).
- *
- * @param[in] hcsVal input the Host Capacity Support
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note If SEND_APP_OP_COND is timeout, the card in the slot is not MMC
- * type, try this combination to see if we can communicate with
- * a SD type.
- ****************************************************************************/
-int32_t MCI_Acmd_SendOpCond(uint8_t hcsVal)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus, argument;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
-
- int32_t retval = MCI_FUNC_FAILED;
-
- argument = OCR_INDEX | (hcsVal << MCI_ACMD41_HCS_POS);
-
- /* timeout on SEND_OP_COND command on MMC, now, try SEND_APP_OP_COND
- command to SD */
- retryCount = 0x2000; /* reset retry counter */
-
- cmdIf.CmdIndex = ACMD41_SEND_APP_OP_COND;
- cmdIf.Argument = argument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
-
- /* Clear Open Drain output control for SD */
- MCI_SetOutputMode(MCI_OUTPUT_MODE_PUSHPULL);
-
- /* The host repeatedly issues ACMD41 for at least 1 second or */
- /* until the busy bit are set to 1 */
- while ( retryCount > 0 )
- {
- if ((retval = MCI_Cmd_SendACMD()) == MCI_FUNC_OK)
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus & MCI_CMD_TIMEOUT)
- {
- retval = MCI_FUNC_TIMEOUT;
- }
- else if (!(respValue[0] & 0x80000000))
- {
- retval = MCI_FUNC_BUS_NOT_IDLE;
- }
- else
- {
- CCS = (respValue[0]&(1<<30)) ? 1:0;
- retval = MCI_FUNC_OK;
- break;
- }
- }
- else /* The command isn't accepted by the card.*/
- {
- return retval;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-/************************************************************************//**
- * @brief Do initialization for the card in the slot
- *
- * @details Try CMD1 first for MMC, if it's timeout, try CMD55
- * and CMD41 for SD, if both failed, initialization faliure,
- * bailout with unknown card type. Otherwise, return the
- * card type, either MMC or SD. <<<KHOA_110708: checking>>>
- *
- * This is followed Figure 4-2: Card Initialization and
- * Identification Flow (SD mode) in Physical Layer Simplified
- * Specification Version 2.00 document
- *
- * @param None
- *
- * @return MCI_FUNC_OK if success
- ****************************************************************************/
-int32_t MCI_CardInit( void )
-{
- volatile uint32_t i;
- int32_t retval = MCI_FUNC_FAILED;
-
- MCI_CardType = MCI_CARD_UNKNOWN;
-
- if (MCI_CardReset() != MCI_FUNC_OK)
- {
- return MCI_FUNC_FAILED;
- }
-
- /* Clear Open Drain output control for SD */
- MCI_SetOutputMode(MCI_OUTPUT_MODE_PUSHPULL);
-
- for ( i = 0; i < 0x3000; i++ );
-
- retval = MCI_Cmd_SendIfCond();
-
- if(retval == MCI_FUNC_BAD_PARAMETERS)
- {
- //Unknow card is unusable
- return retval;
- }
-
- if(retval == MCI_FUNC_OK) /* Ver2.00 or later*/
- {
- //Check in case of High Capacity Supporting Host
- if ((retval = MCI_Acmd_SendOpCond(1)) == MCI_FUNC_OK)
- {
- MCI_CardType = MCI_SDSC_V2_CARD;//SDSC
-
- if(CCS )
- {
- MCI_CardType = MCI_SDHC_SDXC_CARD;//SDHC or SDXC
- }
-
- return MCI_FUNC_OK; /* Found the card, it's a hD */
- }
- }
-
- if(retval != MCI_FUNC_OK) /* voltage mismatch (ver2.00)or ver1.X SD Card or not SD Card*/
- {
-
- //Check in case of Standard Capacity Supporting Host
- if ((retval = MCI_Acmd_SendOpCond(0)) == MCI_FUNC_OK)
- {
- MCI_CardType = MCI_SDSC_V1_CARD;//Support Standard Capacity only
-
- return MCI_FUNC_OK; /* Found the card, it's a SD */
- }
- }
-
- if(retval != MCI_FUNC_OK)
- {
- /* Set Open Drain output control for MMC */
- MCI_SetOutputMode(MCI_OUTPUT_MODE_OPENDRAIN);
-
- for ( i = 0; i < 0x3000; i++ );
-
- /* Try CMD1 first for MMC, if it's timeout, try CMD55 and CMD41 for SD,
- if both failed, initialization faIlure, bailout. */
- if (MCI_Cmd_SendOpCond() == MCI_FUNC_OK)
- {
- MCI_CardType = MCI_MMC_CARD;
-
- return MCI_FUNC_OK; /* Found the card, it's a MMC */
- }
- }
-
- /* tried both MMC and SD card, give up */
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Get the type of card that is currently used in the slot
- *
- * @param None
- *
- * @return Card Type: MMC Card or SD card
- ****************************************************************************/
-en_Mci_CardType MCI_GetCardType(void)
-{
- return MCI_CardType;
-}
-
-
-/************************************************************************//**
- * @brief Get the all the Identifier (CID) of the card by sending the
- * CMD2 (ALL_SEND_CID) command. Then parse 4-byte data obtained
- * from the card by the CID meaning.
- *
- * @param[out] cidValue the CID Result after parsing the data from the card
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_GetCID(st_Mci_CardId* cidValue)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
-
- /* This command is normally after CMD1(MMC) or ACMD41(SD). */
- retryCount = 0x200;// 0x20; /* reset retry counter */
-
- cmdIf.CmdIndex = CMD2_ALL_SEND_CID;
- cmdIf.Argument = 0;
- cmdIf.ExpectResp = EXPECT_LONG_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- /* bit 0 and bit 2 must be zero, or it's timeout or CRC error */
- //if ((!(respStatus & MCI_CMD_TIMEOUT)) && (!(respStatus & MCI_CMD_CRC_FAIL)))
- if (!(respStatus & MCI_CMD_TIMEOUT))
- {
- // Parsing the data retrieved
- if(cidValue != NULL)
- {
- cidValue->MID = (respValue[0] >> MCI_CID_MANUFACTURER_ID_WPOS) & MCI_CID_MANUFACTURER_ID_WBMASK;
-
- cidValue->OID = (respValue[0] >> MCI_CID_OEMAPPLICATION_ID_WPOS) & MCI_CID_OEMAPPLICATION_ID_WBMASK;
-
- cidValue->PNM_H = (respValue[0] >> MCI_CID_PRODUCTNAME_ID_H_WPOS) & MCI_CID_PRODUCTNAME_ID_H_WBMASK;
-
- cidValue->PNM_L = (respValue[1] >> MCI_CID_PRODUCTNAME_ID_L_WPOS) & MCI_CID_PRODUCTNAME_ID_L_WBMASK;
-
- cidValue->PRV = (respValue[2] >> MCI_CID_PRODUCTREVISION_ID_WPOS) & MCI_CID_PRODUCTREVISION_ID_WBMASK;
-
- cidValue->PSN = (((respValue[2] >> MCI_CID_PRODUCTSERIALNUM_ID_H_WPOS) & MCI_CID_PRODUCTSERIALNUM_ID_H_WBMASK) << 8)
- | ((respValue[3] >> MCI_CID_PRODUCTSERIALNUM_ID_L_WPOS) & MCI_CID_PRODUCTSERIALNUM_ID_L_WBMASK);
-
- cidValue->reserved = (respValue[3] >> MCI_CID_RESERVED_ID_WPOS) & MCI_CID_RESERVED_ID_WBMASK;
-
- cidValue->MDT = (respValue[3] >> MCI_CID_MANUFACTURINGDATE_ID_WPOS) & MCI_CID_MANUFACTURINGDATE_ID_WBMASK;
-
- cidValue->CRC = (respValue[3] >> MCI_CID_CHECKSUM_ID_WPOS) & MCI_CID_CHECKSUM_ID_WBMASK;
-
- cidValue->unused = (respValue[3] >> MCI_CID_UNUSED_ID_WPOS) & MCI_CID_UNUSED_ID_WBMASK;
-
- }
-
- return MCI_FUNC_OK; /* response is back and correct. */
- }
-
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return MCI_FUNC_TIMEOUT;
-}
-
-
-/************************************************************************//**
- * @brief Set the address for the card in the slot by sending CMD3
- * (SET_RELATIVE_ADDR) command. To get the address of the card
- * currently in used, needs to call MCI_GetCardAddress()
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_SetCardAddress( void )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue;
- uint32_t CmdArgument;
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- /* If it's a SD card, SET_RELATIVE_ADDR is to get the address
- from the card and use this value in RCA, if it's a MMC, set default
- RCA addr. 0x00010000. */
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- CmdArgument = 0;
- }
- else /* If it's unknown or MMC_CARD, fix the RCA address */
- {
- CmdArgument = 0x00010000;
- }
-
- retryCount = 0x20; /* reset retry counter */
- cmdIf.CmdIndex = CMD3_SET_RELATIVE_ADDR;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = &respValue;
- while ( retryCount > 0 )
- {
- /* Send CMD3 command repeatedly until the response is back correctly */
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus & MCI_CMD_TIMEOUT)
- {
- retval = MCI_FUNC_TIMEOUT;
- }
- else if(!((respValue >> RCA_RES_CARD_STATUS_POS)& CARD_STATUS_READY_FOR_DATA))
- {
- retval = MCI_FUNC_NOT_READY;
- }
- else if((CARDSTATEOF(respValue) != MCI_CARDSTATE_IDENDTIFIED))
- {
- retval = MCI_FUNC_ERR_STATE;
- }
- else
- {
- CardRCA = (respValue >> RCA_RES_NEW_PUBLISHED_RCA_POS) & RCA_RES_NEW_PUBLISHED_RCA_MASK; /* Save the RCA value from SD card */
-
- CardRCA <<= RCA_ARGUMENT_POS;
-
- MCI_SetOutputMode(MCI_OUTPUT_MODE_PUSHPULL);
-
- return (MCI_FUNC_OK); /* response is back and correct. */
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Get the address for the card in the slot
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note This function must be called after MCI_SetCardAddress() executing
- ****************************************************************************/
-uint32_t MCI_GetCardAddress(void)
-{
- return CardRCA;
-}
-
-
-/************************************************************************//**
- * @brief Get the Card-Specific Data of in-slot card by sending CMD9
- * (SEND_CSD) command
- *
- * @param[out] csdVal a buffer stored the value of CSD obtained from the card
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note CMD9 (SEND_CSD) command should be sent only at standby state
- * (STBY) after CMD3
- ****************************************************************************/
-int32_t MCI_GetCSD(uint32_t* csdVal)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- uint32_t CmdArgument;
- st_Mci_CmdInfo cmdIf;
-
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- CmdArgument = CardRCA;
- }
- else /* if MMC or unknown card type, use default RCA addr. */
- {
- CmdArgument = 0x00010000;
- }
-
- retryCount = 0x20;
- cmdIf.CmdIndex = CMD9_SEND_CSD;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_LONG_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* Check current status */
- if(((MCI_CheckStatus(CARD_STATE_STBY) != MCI_FUNC_OK)))
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if ( !respStatus )
- {
- if(csdVal != NULL)
- {
- csdVal[0] = respValue[0];
- csdVal[1] = respValue[1];
- csdVal[2] = respValue[2];
- csdVal[3] = respValue[3];
- }
-
- return (MCI_FUNC_OK);
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return (MCI_FUNC_FAILED);
-}
-
-
-/************************************************************************//**
- * @brief Select the card by the specified address. This is done by sending
- * out the CMD7 with the address argument to needed card
- *
- * @param None
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note CMD7 (SELECT_CARD) command should be sent after CMD9 ((SEND_CSD).
- * The state will be inter-changed between STBY to TRANS by this
- * CMD7 command
- ****************************************************************************/
-int32_t MCI_Cmd_SelectCard( void )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- uint32_t CmdArgument;
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- CmdArgument = CardRCA;
- }
- else /* if MMC or unknown card type, use default RCA addr. */
- {
- CmdArgument = 0x00010000;
- }
-
- retryCount = 0x20;
- cmdIf.CmdIndex = CMD7_SELECT_CARD;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* Check current status */
- if(((MCI_CheckStatus(CARD_STATE_STBY) != MCI_FUNC_OK)) &&
- (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_DATA) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_PRG) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_DIS) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- if(((MCI_CheckStatus(CARD_STATE_STBY) != MCI_FUNC_OK)) &&
- (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_PRG) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_DIS) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
- return MCI_FUNC_OK;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Get the status of the card. The return is from the card.
- * By sending CMD13 (SEND_STATUS), the status of the card
- * will be responded from card addressed
- *
- * @param[out] cardStatus the status returned from the card
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_GetCardStatus(int32_t* cardStatus)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- uint32_t CmdArgument;
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- if(cardStatus == NULL)
- return MCI_FUNC_OK;
-
- if ((MCI_CardType == MCI_SDSC_V1_CARD) ||
- (MCI_CardType == MCI_SDSC_V2_CARD) ||
- (MCI_CardType == MCI_SDHC_SDXC_CARD))
- {
- CmdArgument = CardRCA;
- }
- else /* if MMC or unknown card type, use default RCA addr. */
- {
- CmdArgument = 0x00010000;
- }
-
- retryCount = 0x20;
- cmdIf.CmdIndex = CMD13_SEND_STATUS;
- cmdIf.Argument = CmdArgument;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus) /* only retry if sending command failed */
- {
- retval = MCI_FUNC_FAILED;
- }
- else
- {
- *cardStatus = respValue[0];
-
- return MCI_FUNC_OK;
- }
-
- retryCount--;
- for ( i = 0; i < 0x10; i++ );
- }
-
- return retval;
-}
-
-/************************************************************************//**
- * @brief Set the length for the blocks in the next action on data
- * manipulation (as read, write, erase). This function is to
- * send CMD16 (SET_BLOCK_LEN) to cards.
- *
- * @param[in] blockLength the value for the length of block will be handled
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note CMD16 command should be sent after the card is selected by CMD7
- * (SELECT_CARD).
- * In the case of SDHC and SDXC Cards, block length set by CMD16 command doen't
- * affect memory read and write commands. Always 512 Bytes fixed block length is
- * used. This command is effective for LOCK_UNLOCK command..
- ****************************************************************************/
-int32_t MCI_SetBlockLen(uint32_t blockLength)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- retryCount = 0x20;
- cmdIf.CmdIndex = CMD16_SET_BLOCK_LEN;
- cmdIf.Argument = blockLength;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* Check current status */
- if((MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK) )
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- return MCI_CheckStatus(CARD_STATE_TRAN);
- }
-
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Set bus-width (1 bit or 4 bit) to work with the card by command
- * CMD6 (SET_ACMD_BUS_WIDTH).
- *
- * @param[in] buswidth The value represented for bus-width
- * - 0b00: 1-bit bus-width
- * - 0b10: 4-bit bus-width
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note
- * - If SD card is currently in used, it's possible to enable 4-bit
- * bus-width instead of 1-bit to speed up.
- * - This command can only be transferred during TRANS state.
- * - Since, it's a ACMD, CMD55 (APP_CMD) needs to be sent out first
- ****************************************************************************/
-int32_t MCI_Acmd_SendBusWidth( uint32_t buswidth )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- retryCount = 0x20; /* reset retry counter */
- cmdIf.CmdIndex = ACMD6_SET_BUS_WIDTH;
- cmdIf.Argument = buswidth;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* The card must be in tran state in order to change the bus width */
- retval = MCI_CheckStatus(CARD_STATE_TRAN);
- if(retval!= MCI_FUNC_OK)
- return retval;
-
- if (MCI_Cmd_SendACMD() == MCI_FUNC_OK)
- {
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- return MCI_CheckStatus(CARD_STATE_TRAN);
- }
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Get the state of data transfer to see if it is ended or not
- *
- * @param None
- *
- * @return Transfer state (stored by Mci_Data_Xfer_End variable)
- ****************************************************************************/
-uint32_t MCI_GetDataXferEndState(void)
-{
- return Mci_Data_Xfer_End;
-}
-/************************************************************************//**
- * @brief Get the error state of the lastest data transfer
- *
- * @param None
- *
- * @return Error state (stored by Mci_Data_Xfer_ERR variable)
- ****************************************************************************/
-uint32_t MCI_GetXferErrState(void)
-{
- return Mci_Data_Xfer_ERR;
-}
-
-/************************************************************************//**
- * @brief Stop the current transmission on the bus by sending command CMD12
- * (STOP_TRANSMISSION). In this case, the card may be in a unknown
- * state. So that it need a warm reset for normal operation.
- *
- * @param[in] None
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_Cmd_StopTransmission( void )
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- /* do nothing when the card is in tran state */
- if(MCI_CheckStatus(CARD_STATE_TRAN) == MCI_FUNC_OK)
- {
- return MCI_FUNC_OK;
- }
-
- retryCount = 0x20;
- cmdIf.CmdIndex = CMD12_STOP_TRANSMISSION;
- cmdIf.Argument = 0x00000000;
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* Check current status */
- if((MCI_CheckStatus(CARD_STATE_DATA) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_RCV) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- if((MCI_CheckStatus(CARD_STATE_PRG) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
- return MCI_FUNC_OK;
- }
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Write blocks to card by sending command CMD24 (WRITE_BLOCK) or
- * command CMD25 (WRITE_MULTIPLE_BLOCK) followed by the blocks of
- * data to be written.
- *
- * @param[in] blockNum The block number to start writting
- *
- * @param[in] numOfBlock Determine how many blocks will be written (from the
- * starting block)
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note These commands should be sent in TRANS state.
- ****************************************************************************/
-int32_t MCI_Cmd_WriteBlock(uint32_t blockNum, uint32_t numOfBlock)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- st_Mci_CmdInfo cmdIf;
- uint32_t commandID;
-
- int32_t retval = MCI_FUNC_FAILED;
-
- if (numOfBlock > 1)
- {
- commandID = CMD25_WRITE_MULTIPLE_BLOCK;
- }
- else
- {
- commandID = CMD24_WRITE_BLOCK;
- }
-
- retryCount = 0x20;
- cmdIf.CmdIndex = commandID;
- if (MCI_CardType == MCI_SDHC_SDXC_CARD)
- {
- cmdIf.Argument = blockNum; /* Block Address */
- }
- else
- {
- cmdIf.Argument = blockNum * BLOCK_LENGTH; /* Byte Address */
- }
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
-
- while ( retryCount > 0 )
- {
- /* Check current status */
- if((MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- if((MCI_CheckStatus(CARD_STATE_RCV) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
- return MCI_FUNC_OK;
- }
-
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
-
- }
-
- return retval; /* Fatal error */
-}
-
-
-
-
-/************************************************************************//**
- * @brief Read blocks to card by sending CMD17 (READ_SINGLE_BLOCK) or
- * CMD18 (READ_MULTIPLE_BLOCK) commands followed by the blocks of
- * data to be read.
- *
- * @param[in] blockNum The block number to start reading
- *
- * @param[in] numOfBlock Determine how many blocks will be read (from the
- * starting block)
- *
- * @return MCI_FUNC_OK if all success
- *
- * @note These commands should be sent in TRANS state.
- ****************************************************************************/
-int32_t MCI_Cmd_ReadBlock(uint32_t blockNum, uint32_t numOfBlock)
-{
- volatile uint32_t i;
- uint32_t retryCount;
- uint32_t respStatus;
- uint32_t respValue[4];
- uint32_t commandID;
- st_Mci_CmdInfo cmdIf;
- int32_t retval = MCI_FUNC_FAILED;
-
- // To Do: Read Multi-Block
- if (numOfBlock > 1)
- commandID = CMD18_READ_MULTIPLE_BLOCK;
- else
- commandID = CMD17_READ_SINGLE_BLOCK;
-
- retryCount = 0x20;
- cmdIf.CmdIndex = commandID;
- if (MCI_CardType == MCI_SDHC_SDXC_CARD)
- {
- cmdIf.Argument = blockNum; /* Block Address */
- }
- else
- {
- cmdIf.Argument = blockNum * BLOCK_LENGTH; /* Byte Address */
- }
- cmdIf.ExpectResp = EXPECT_SHORT_RESP;
- cmdIf.AllowTimeout = ALLOW_CMD_TIMER;
- cmdIf.CmdResp = (uint32_t *)&respValue[0];
- while ( retryCount > 0 )
- {
- /* Check current status */
- if((MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
-
- respStatus = MCI_CmdResp(&cmdIf);
-
- if(respStatus)
- {
- retval = MCI_FUNC_FAILED;
- }
- else if (respValue[0] & CARD_STATUS_ERR_MASK)
- {
- return MCI_FUNC_BAD_PARAMETERS;
- }
- else
- {
- if((MCI_CheckStatus(CARD_STATE_DATA) != MCI_FUNC_OK) &&
- (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK))
- return MCI_FUNC_ERR_STATE;
- return MCI_FUNC_OK;
- }
-
-
- for ( i = 0; i < 0x20; i++ );
-
- retryCount--;
-
- }
-
- return retval;
-}
-
-
-/************************************************************************//**
- * @brief Write data at a specific address to starting block with number
- * of blocks will be written from first block
- * @details
- * - At preparation
- * - Set MCI data control register, data length and data timeout
- * - Send CMD24 (WRITE_BLOCK) or CMD25 (WRITE_MULTIPLE_BLOCK)
- * commands to card
- * - Enable interupt for MCI component
- * - At completion
- * - TX_ACTIVE interrupt is occured
- * - Write data to FIFO register continuously until the data block
- * length is reached
- *
- * @param[in] *memblock The pointer to location stored required data to be
- * written to card
- *
- * @param[in] blockNum The block number to start writting
- *
- * @param[in] numOfBlock Determine how many blocks will be written (from the
- * starting block)
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_WriteBlock(volatile uint8_t* memblock, uint32_t blockNum, uint32_t numOfBlock)
-{
- volatile uint32_t i;
- uint32_t DataCtrl = 0;
-
- if(BLOCK_LENGTH*numOfBlock > DATA_RW_MAX_LEN)
- return MCI_FUNC_BAD_PARAMETERS;
-
- dataSrcBlock = memblock;
-
- LPC_MCI->CLEAR = 0x7FF;
-
- LPC_MCI->DATACTRL = 0;
-
- for ( i = 0; i < 0x10; i++ );
-
- /* Wait the SD Card enters to TRANS state. */
- if (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK)
- return MCI_FUNC_ERR_STATE;
-
- LPC_MCI->DATATMR = DATA_TIMER_VALUE_W;
-
- LPC_MCI->DATALEN = BLOCK_LENGTH*numOfBlock;
-
- Mci_Data_Xfer_End = 1;
- Mci_Data_Xfer_ERR = 0;
- fifo_plane = 0;
-
- txBlockCnt = 0;
-
- MCI_TXEnable();
-
- if (MCI_Cmd_WriteBlock(blockNum, numOfBlock) != MCI_FUNC_OK)
- {
- return ( MCI_FUNC_FAILED );
- }
-
- //for(blockCnt = 0; blockCnt < numOfBlock; blockCnt++)
- {
-#if MCI_DMA_ENABLED
- MCI_SettingDma((uint8_t*) dataSrcBlock, MCI_DMA_WRITE_CHANNEL, GPDMA_TRANSFERTYPE_M2P_DEST_CTRL);
-
- /* Write, block transfer, DMA, and data length */
- DataCtrl |= MCI_DATACTRL_ENABLE | MCI_DATACTRL_DIR_TO_CARD
- | MCI_DATACTRL_DMA_ENABLE | MCI_DTATCTRL_BLOCKSIZE(DATA_BLOCK_LEN);
-#else
- /* Write, block transfer, and data length */
- DataCtrl |= MCI_DATACTRL_ENABLE | MCI_DATACTRL_DIR_TO_CARD | MCI_DTATCTRL_BLOCKSIZE(DATA_BLOCK_LEN);
-#endif
- }
-
- LPC_MCI->DATACTRL = DataCtrl;
-
- for ( i = 0; i < 0x10; i++ );
-
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Read data at a specific address to starting block with number
- * of blocks will be read from first block
- *
- * @details
- * - At preparation
- * - Set MCI data control register, data length and data timeout
- * - Send CMD17 (READ_SINGLE_BLOCK) or CMD18 (READ_MULTIPLE_BLOCK)
- * commands to card
- * - Enable interupt for MCI component
- * - At completion
- * - RX_ACTIVE interrupt is occured
- * - Read data from FIFO register continuously until the data block
- * length is reached to retrieve needed data
- *
- * @param[in] *destBlock The pointer to location will captured data read
- * from card
- *
- * @param[in] blockNum The block number to start reading
- *
- * @param[in] numOfBlock Determine how many blocks will be read (from the
- * starting block)
- *
- * @return MCI_FUNC_OK if all success
- ****************************************************************************/
-int32_t MCI_ReadBlock(volatile uint8_t* destBlock, uint32_t blockNum, uint32_t numOfBlock)
-{
- volatile uint32_t i;
- uint32_t DataCtrl = 0;
-
- if(BLOCK_LENGTH*numOfBlock > DATA_RW_MAX_LEN)
- return MCI_FUNC_BAD_PARAMETERS;
-
- dataDestBlock = destBlock;
-
- LPC_MCI->CLEAR = 0x7FF;
-
- LPC_MCI->DATACTRL = 0;
-
- for ( i = 0; i < 0x10; i++ );
-
- /* Wait the SD Card enters to TRANS state. */
- if (MCI_CheckStatus(CARD_STATE_TRAN) != MCI_FUNC_OK)
- return MCI_FUNC_ERR_STATE;
-
- MCI_RXEnable();
-
- LPC_MCI->DATATMR = DATA_TIMER_VALUE_R;
-
- LPC_MCI->DATALEN = BLOCK_LENGTH*numOfBlock;
-
- Mci_Data_Xfer_End = 1;
- Mci_Data_Xfer_ERR = 0;
- rxBlockCnt = 0;
- fifo_plane = 0;
-
-
- // Start data engine on READ before command to avoid overflow of the FIFO.
- {
-#if MCI_DMA_ENABLED
- MCI_SettingDma((uint8_t*) dataDestBlock, MCI_DMA_READ_CHANNEL, GPDMA_TRANSFERTYPE_P2M_SRC_CTRL);
-
- /* Write, block transfer, DMA, and data length */
- DataCtrl |= MCI_DATACTRL_ENABLE | MCI_DATACTRL_DIR_FROM_CARD
- | MCI_DATACTRL_DMA_ENABLE | MCI_DTATCTRL_BLOCKSIZE(DATA_BLOCK_LEN);
-#else
- //Retrieving the result after reading the card is done by the FIFO handling for interrupt
-
- /* Read, enable, block transfer, and data length */
- DataCtrl |= MCI_DATACTRL_ENABLE | MCI_DATACTRL_DIR_FROM_CARD | MCI_DTATCTRL_BLOCKSIZE(DATA_BLOCK_LEN);
-
-#endif
- }
-
- LPC_MCI->DATACTRL = DataCtrl;
-
- for ( i = 0; i < 0x10; i++ );
-
- if ( MCI_Cmd_ReadBlock(blockNum, numOfBlock) != MCI_FUNC_OK )
- {
- return MCI_FUNC_FAILED;
- }
-
- return MCI_FUNC_OK;
-}
-
-
-/************************************************************************//**
- * @brief Turn off the MCI power by disabling the Power Register for MCI
- *
- * @param None
- *
- * @return None
- ****************************************************************************/
-void MCI_PowerOff(void)
-{
- volatile uint32_t i;
-
- LPC_MCI->POWER = 0;
-
- for (i = 0; i < 0x100; i++);
-
- return;
-}
-
-
-/**
- * @}
- */
-
-#endif /*_MCI*/
-
-/*****************************************************************************
-** End Of File
-******************************************************************************/
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_mcpwm.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_mcpwm.c
deleted file mode 100644
index 479ec4d9a4..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_mcpwm.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_mcpwm.c 2011-06-02
-*//**
-* @file lpc_mcpwm.c
-* @brief Contains all functions support for Motor Control PWM
-* firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup MCPWM
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _MCPWM
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_mcpwm.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup MCPWM_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Initializes the MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected,
- * Should be: LPC_MCPWM
- * @return None
- **********************************************************************/
-void MCPWM_Init(LPC_MCPWM_TypeDef *MCPWMx)
-{
- /* Turn On MCPWM PCLK */
- CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCMCPWM, ENABLE);
-
- MCPWMx->CAP_CLR = MCPWM_CAPCLR_CAP(0) | MCPWM_CAPCLR_CAP(1) | MCPWM_CAPCLR_CAP(2);
-
- MCPWMx->INTF_CLR = MCPWM_INT_ILIM(0) | MCPWM_INT_ILIM(1) | MCPWM_INT_ILIM(2) \
- | MCPWM_INT_IMAT(0) | MCPWM_INT_IMAT(1) | MCPWM_INT_IMAT(2) \
- | MCPWM_INT_ICAP(0) | MCPWM_INT_ICAP(1) | MCPWM_INT_ICAP(2);
-
- MCPWMx->INTEN_CLR = MCPWM_INT_ILIM(0) | MCPWM_INT_ILIM(1) | MCPWM_INT_ILIM(2) \
- | MCPWM_INT_IMAT(0) | MCPWM_INT_IMAT(1) | MCPWM_INT_IMAT(2) \
- | MCPWM_INT_ICAP(0) | MCPWM_INT_ICAP(1) | MCPWM_INT_ICAP(2);
-}
-
-
-/*********************************************************************//**
- * @brief Configures each channel in MCPWM peripheral according to the
- * specified parameters in the MCPWM_CHANNEL_CFG_Type.
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * should be: LPC_MCPWM
- * @param[in] channelNum Channel number, should be: 0..2.
- * @param[in] channelSetup Pointer to a MCPWM_CHANNEL_CFG_Type structure
-* that contains the configuration information for the
-* specified MCPWM channel.
- * @return None
- **********************************************************************/
-void MCPWM_ConfigChannel(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CHANNEL_CFG_Type * channelSetup)
-{
- if (channelNum < MCPWM_MAX_CHANNEL)
- {
- if (channelNum == MCPWM_CHANNEL_0)
- {
- MCPWMx->TC0 = channelSetup->channelTimercounterValue;
- MCPWMx->LIM0 = channelSetup->channelPeriodValue;
- MCPWMx->MAT0 = channelSetup->channelPulsewidthValue;
- }
- else if (channelNum == MCPWM_CHANNEL_1)
- {
- MCPWMx->TC1 = channelSetup->channelTimercounterValue;
- MCPWMx->LIM1 = channelSetup->channelPeriodValue;
- MCPWMx->MAT1 = channelSetup->channelPulsewidthValue;
- }
- else if (channelNum == MCPWM_CHANNEL_2)
- {
- MCPWMx->TC2 = channelSetup->channelTimercounterValue;
- MCPWMx->LIM2 = channelSetup->channelPeriodValue;
- MCPWMx->MAT2 = channelSetup->channelPulsewidthValue;
- }
- else
- {
- return;
- }
-
- if (channelSetup->channelType == MCPWM_CHANNEL_CENTER_MODE)
- {
- MCPWMx->CON_SET = MCPWM_CON_CENTER(channelNum);
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_CENTER(channelNum);
- }
-
- if (channelSetup->channelPolarity == MCPWM_CHANNEL_PASSIVE_HI)
- {
- MCPWMx->CON_SET = MCPWM_CON_POLAR(channelNum);
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_POLAR(channelNum);
- }
-
- if (channelSetup->channelDeadtimeEnable == ENABLE)
- {
- MCPWMx->CON_SET = MCPWM_CON_DTE(channelNum);
-
- MCPWMx->DT &= ~(MCPWM_DT(channelNum, 0x3FF));
-
- MCPWMx->DT |= MCPWM_DT(channelNum, channelSetup->channelDeadtimeValue);
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_DTE(channelNum);
- }
-
- if (channelSetup->channelUpdateEnable == ENABLE)
- {
- MCPWMx->CON_CLR = MCPWM_CON_DISUP(channelNum);
- }
- else
- {
- MCPWMx->CON_SET = MCPWM_CON_DISUP(channelNum);
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Write to MCPWM shadow registers - Update the value for period
- * and pulse width in MCPWM peripheral.
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] channelNum Channel Number, should be: 0..2.
- * @param[in] channelSetup Pointer to a MCPWM_CHANNEL_CFG_Type structure
-* that contains the configuration information for the
-* specified MCPWM channel.
- * @return None
- **********************************************************************/
-void MCPWM_WriteToShadow(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CHANNEL_CFG_Type *channelSetup)
-{
- if (channelNum == MCPWM_CHANNEL_0)
- {
- MCPWMx->LIM0 = channelSetup->channelPeriodValue;
- MCPWMx->MAT0 = channelSetup->channelPulsewidthValue;
- }
- else if (channelNum == MCPWM_CHANNEL_1)
- {
- MCPWMx->LIM1 = channelSetup->channelPeriodValue;
- MCPWMx->MAT1 = channelSetup->channelPulsewidthValue;
- }
- else if (channelNum == MCPWM_CHANNEL_2)
- {
- MCPWMx->LIM2 = channelSetup->channelPeriodValue;
- MCPWMx->MAT2 = channelSetup->channelPulsewidthValue;
- }
-}
-
-
-
-/*********************************************************************//**
- * @brief Configures capture function in MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] channelNum MCI (Motor Control Input pin) number
- * Should be: 0..2
- * @param[in] captureConfig Pointer to a MCPWM_CAPTURE_CFG_Type structure
-* that contains the configuration information for the
-* specified MCPWM capture.
- * @return
- **********************************************************************/
-void MCPWM_ConfigCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- MCPWM_CAPTURE_CFG_Type *captureConfig)
-{
- if (channelNum < MCPWM_MAX_CHANNEL)
- {
-
- if (captureConfig->captureFalling == ENABLE)
- {
- MCPWMx->CAPCON_SET = MCPWM_CAPCON_CAPMCI_FE(captureConfig->captureChannel, channelNum);
- }
- else
- {
- MCPWMx->CAPCON_CLR = MCPWM_CAPCON_CAPMCI_FE(captureConfig->captureChannel, channelNum);
- }
-
- if (captureConfig->captureRising == ENABLE)
- {
- MCPWMx->CAPCON_SET = MCPWM_CAPCON_CAPMCI_RE(captureConfig->captureChannel, channelNum);
- }
- else
- {
- MCPWMx->CAPCON_CLR = MCPWM_CAPCON_CAPMCI_RE(captureConfig->captureChannel, channelNum);
- }
-
- if (captureConfig->timerReset == ENABLE)
- {
- MCPWMx->CAPCON_SET = MCPWM_CAPCON_RT(captureConfig->captureChannel);
- }
- else
- {
- MCPWMx->CAPCON_CLR = MCPWM_CAPCON_RT(captureConfig->captureChannel);
- }
-
- if (captureConfig->hnfEnable == ENABLE)
- {
- MCPWMx->CAPCON_SET = MCPWM_CAPCON_HNFCAP(channelNum);
- }
- else
- {
- MCPWMx->CAPCON_CLR = MCPWM_CAPCON_HNFCAP(channelNum);
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Clears current captured value in specified capture channel
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] captureChannel Capture channel number, should be: 0..2
- * @return None
- **********************************************************************/
-void MCPWM_ClearCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel)
-{
- MCPWMx->CAP_CLR = MCPWM_CAPCLR_CAP(captureChannel);
-}
-
-/*********************************************************************//**
- * @brief Get current captured value in specified capture channel
- * @param[in] MCPWMx Motor Control PWM peripheral selected,
- * Should be: LPC_MCPWM
- * @param[in] captureChannel Capture channel number, should be: 0..2
- * @return None
- **********************************************************************/
-uint32_t MCPWM_GetCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel)
-{
- if (captureChannel == MCPWM_CHANNEL_0)
- {
- return (MCPWMx->CAP0);
- }
- else if (captureChannel == MCPWM_CHANNEL_1)
- {
- return (MCPWMx->CAP1);
- }
- else if (captureChannel == MCPWM_CHANNEL_2)
- {
- return (MCPWMx->CAP2);
- }
- return (0);
-}
-
-
-/*********************************************************************//**
- * @brief Configures Count control in MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] channelNum Channel number, should be: 0..2
- * @param[in] countMode Count mode, should be:
- * - ENABLE: Enables count mode.
- * - DISABLE: Disable count mode, the channel is in timer mode.
- * @param[in] countConfig Pointer to a MCPWM_COUNT_CFG_Type structure
-* that contains the configuration information for the
-* specified MCPWM count control.
- * @return None
- **********************************************************************/
-void MCPWM_CountConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
- uint32_t countMode, MCPWM_COUNT_CFG_Type *countConfig)
-{
- if (channelNum < MCPWM_MAX_CHANNEL)
- {
- if (countMode == ENABLE)
- {
- MCPWMx->CNTCON_SET = MCPWM_CNTCON_CNTR(channelNum);
-
- if (countConfig->countFalling == ENABLE)
- {
- MCPWMx->CNTCON_SET = MCPWM_CNTCON_TCMCI_FE(countConfig->counterChannel,channelNum);
- }
- else
- {
- MCPWMx->CNTCON_CLR = MCPWM_CNTCON_TCMCI_FE(countConfig->counterChannel,channelNum);
- }
-
- if (countConfig->countRising == ENABLE)
- {
- MCPWMx->CNTCON_SET = MCPWM_CNTCON_TCMCI_RE(countConfig->counterChannel,channelNum);
- }
- else
- {
- MCPWMx->CNTCON_CLR = MCPWM_CNTCON_TCMCI_RE(countConfig->counterChannel,channelNum);
- }
- }
- else
- {
- MCPWMx->CNTCON_CLR = MCPWM_CNTCON_CNTR(channelNum);
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Start MCPWM activity for each MCPWM channel
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] channel0 State of this command on channel 0:
- * - ENABLE: 'Start' command will effect on channel 0
- * - DISABLE: 'Start' command will not effect on channel 0
- * @param[in] channel1 State of this command on channel 1:
- * - ENABLE: 'Start' command will effect on channel 1
- * - DISABLE: 'Start' command will not effect on channel 1
- * @param[in] channel2 State of this command on channel 2:
- * - ENABLE: 'Start' command will effect on channel 2
- * - DISABLE: 'Start' command will not effect on channel 2
- * @return None
- **********************************************************************/
-void MCPWM_Start(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channel0,
- uint32_t channel1, uint32_t channel2)
-{
- uint32_t regVal = 0;
-
- regVal = (channel0 ? MCPWM_CON_RUN(0) : 0) | (channel1 ? MCPWM_CON_RUN(1) : 0) \
- | (channel2 ? MCPWM_CON_RUN(2) : 0);
-
- MCPWMx->CON_SET = regVal;
-}
-
-
-/*********************************************************************//**
- * @brief Stop MCPWM activity for each MCPWM channel
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] channel0 State of this command on channel 0:
- * - ENABLE: 'Stop' command will effect on channel 0
- * - DISABLE: 'Stop' command will not effect on channel 0
- * @param[in] channel1 State of this command on channel 1:
- * - ENABLE: 'Stop' command will effect on channel 1
- * - DISABLE: 'Stop' command will not effect on channel 1
- * @param[in] channel2 State of this command on channel 2:
- * - ENABLE: 'Stop' command will effect on channel 2
- * - DISABLE: 'Stop' command will not effect on channel 2
- * @return None
- **********************************************************************/
-void MCPWM_Stop(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channel0,
- uint32_t channel1, uint32_t channel2)
-{
- uint32_t regVal = 0;
-
- regVal = (channel0 ? MCPWM_CON_RUN(0) : 0) | (channel1 ? MCPWM_CON_RUN(1) : 0) \
- | (channel2 ? MCPWM_CON_RUN(2) : 0);
-
- MCPWMx->CON_CLR = regVal;
-}
-
-
-/*********************************************************************//**
- * @brief Enables/Disables 3-phase AC motor mode on MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] acMode State of this command, should be:
- * - ENABLE.
- * - DISABLE.
- * @return None
- **********************************************************************/
-void MCPWM_ACMode(LPC_MCPWM_TypeDef *MCPWMx, uint32_t acMode)
-{
- if (acMode)
- {
- MCPWMx->CON_SET = MCPWM_CON_ACMODE;
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_ACMODE;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enables/Disables 3-phase DC motor mode on MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] dcMode State of this command, should be:
- * - ENABLE.
- * - DISABLE.
- * @param[in] outputInvered Polarity of the MCOB outputs for all 3 channels,
- * should be:
- * - ENABLE: The MCOB outputs have opposite polarity
- * from the MCOA outputs.
- * - DISABLE: The MCOB outputs have the same basic
- * polarity as the MCOA outputs.
- * @param[in] outputPattern A value contains bits that enables/disables the specified
- * output pins route to the internal MCOA0 signal, should be:
- - MCPWM_PATENT_A0: MCOA0 tracks internal MCOA0
- - MCPWM_PATENT_B0: MCOB0 tracks internal MCOA0
- - MCPWM_PATENT_A1: MCOA1 tracks internal MCOA0
- - MCPWM_PATENT_B1: MCOB1 tracks internal MCOA0
- - MCPWM_PATENT_A2: MCOA2 tracks internal MCOA0
- - MCPWM_PATENT_B2: MCOB2 tracks internal MCOA0
- * @return None
- *
- * Note: all these outputPatent values above can be ORed together for using as input parameter.
- **********************************************************************/
-void MCPWM_DCMode(LPC_MCPWM_TypeDef *MCPWMx, uint32_t dcMode,
- uint32_t outputInvered, uint32_t outputPattern)
-{
- if (dcMode)
- {
- MCPWMx->CON_SET = MCPWM_CON_DCMODE;
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_DCMODE;
- }
-
- if (outputInvered)
- {
- MCPWMx->CON_SET = MCPWM_CON_INVBDC;
- }
- else
- {
- MCPWMx->CON_CLR = MCPWM_CON_INVBDC;
- }
-
- MCPWMx->CP = outputPattern;
-}
-
-
-/*********************************************************************//**
- * @brief Configures the specified interrupt in MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be: LPC_MCPWM
- * @param[in] ulIntType Interrupt type, should be:
- * - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
- * - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
- * - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
- * - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
- * - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
- * - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
- * - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
- * - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
- * - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
- * - MCPWM_INTFLAG_ABORT: Fast abort interrupt
- * @param[in] NewState New State of this command, should be:
- * - ENABLE.
- * - DISABLE.
- * @return None
- *
- * Note: all these ulIntType values above can be ORed together for using as input parameter.
- **********************************************************************/
-void MCPWM_IntConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType, FunctionalState NewState)
-{
- if (NewState)
- {
- MCPWMx->INTEN_SET = ulIntType;
- }
- else
- {
- MCPWMx->INTEN_CLR = ulIntType;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Sets/Forces the specified interrupt for MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected
- * Should be LPC_MCPWM
- * @param[in] ulIntType Interrupt type, should be:
- * - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
- * - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
- * - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
- * - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
- * - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
- * - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
- * - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
- * - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
- * - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
- * - MCPWM_INTFLAG_ABORT: Fast abort interrupt
- * @return None
- * Note: all these ulIntType values above can be ORed together for using as input parameter.
- **********************************************************************/
-void MCPWM_IntSet(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
-{
- MCPWMx->INTF_SET = ulIntType;
-}
-
-
-/*********************************************************************//**
- * @brief Clear the specified interrupt pending for MCPWM peripheral
- * @param[in] MCPWMx Motor Control PWM peripheral selected,
- * should be: LPC_MCPWM
- * @param[in] ulIntType Interrupt type, should be:
- * - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
- * - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
- * - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
- * - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
- * - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
- * - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
- * - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
- * - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
- * - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
- * - MCPWM_INTFLAG_ABORT: Fast abort interrupt
- * @return None
- * Note: all these ulIntType values above can be ORed together for using as input parameter.
- **********************************************************************/
-void MCPWM_IntClear(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
-{
- MCPWMx->INTF_CLR = ulIntType;
-}
-
-
-/*********************************************************************//**
- * @brief Check whether if the specified interrupt in MCPWM is set or not
- * @param[in] MCPWMx Motor Control PWM peripheral selected,
- * should be: LPC_MCPWM
- * @param[in] ulIntType Interrupt type, should be:
- * - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
- * - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
- * - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
- * - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
- * - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
- * - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
- * - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
- * - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
- * - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
- * - MCPWM_INTFLAG_ABORT: Fast abort interrupt
- * @return None
- **********************************************************************/
-FlagStatus MCPWM_GetIntStatus(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
-{
- return ((MCPWMx->INTF & ulIntType) ? SET : RESET);
-}
-
-/**
- * @}
- */
-
-#endif /*_MCPWM*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_nvic.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_nvic.c
deleted file mode 100644
index 3de1316a82..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_nvic.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_nvic.c 2011-06-02
-*//**
-* @file lpc_nvic.c
-* @brief Contains all expansion functions support for Nesting
-* Vectored Interrupt Controller (NVIC) firmware library
-* on LPC. The main NVIC functions are defined
-* in core_cm3.h
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup NVIC
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _NVIC
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_nvic.h"
-
-
-/* Private Macros ------------------------------------------------------------- */
-/** @defgroup NVIC_Private_Macros NVIC Private Macros
- * @{
- */
-
-/* Vector table offset bit mask */
-#define NVIC_VTOR_MASK 0x3FFFFF80
-
-/**
- * @}
- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup NVIC_Public_Functions
- * @{
- */
-
-
-/*****************************************************************************//**
- * @brief De-initializes the NVIC peripheral registers to their default
- * reset values.
- * @param None
- * @return None
- *
- * These following NVIC peripheral registers will be de-initialized:
- * - Disable Interrupt (32 IRQ interrupt sources that matched with LPC178X)
- * - Clear all Pending Interrupts (32 IRQ interrupt source that matched with LPC178X)
- * - Clear all Interrupt Priorities (32 IRQ interrupt source that matched with LPC178X)
- *******************************************************************************/
-void NVIC_DeInit(void)
-{
- uint8_t tmp;
-
- /* Disable all interrupts */
- NVIC->ICER[0] = 0xFFFFFFFF;
- NVIC->ICER[1] = 0x00000001;
- /* Clear all pending interrupts */
- NVIC->ICPR[0] = 0xFFFFFFFF;
- NVIC->ICPR[1] = 0x00000001;
-
- /* Clear all interrupt priority */
- for (tmp = 0; tmp < 32; tmp++) {
- NVIC->IP[tmp] = 0x00;
- }
-}
-
-/*****************************************************************************//**
- * @brief De-initializes the SCB peripheral registers to their default
- * reset values.
- * @param none
- * @return none
- *
- * These following SCB NVIC peripheral registers will be de-initialized:
- * - Interrupt Control State register
- * - Interrupt Vector Table Offset register
- * - Application Interrupt/Reset Control register
- * - System Control register
- * - Configuration Control register
- * - System Handlers Priority Registers
- * - System Handler Control and State Register
- * - Configurable Fault Status Register
- * - Hard Fault Status Register
- * - Debug Fault Status Register
- *******************************************************************************/
-void NVIC_SCBDeInit(void)
-{
- uint8_t tmp;
-
- SCB->ICSR = 0x0A000000;
- SCB->VTOR = 0x00000000;
- SCB->AIRCR = 0x05FA0000;
- SCB->SCR = 0x00000000;
- SCB->CCR = 0x00000000;
-
- for (tmp = 0; tmp < 32; tmp++) {
- SCB->SHP[tmp] = 0x00;
- }
-
- SCB->SHCSR = 0x00000000;
- SCB->CFSR = 0xFFFFFFFF;
- SCB->HFSR = 0xFFFFFFFF;
- SCB->DFSR = 0xFFFFFFFF;
-}
-
-
-/*****************************************************************************//**
- * @brief Set Vector Table Offset value
- * @param offset Offset value
- * @return None
- *******************************************************************************/
-void NVIC_SetVTOR(uint32_t offset)
-{
-// SCB->VTOR = (offset & NVIC_VTOR_MASK);
- SCB->VTOR = offset;
-}
-
-/**
- * @}
- */
-
-#endif /*_NVIC*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_pinsel.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_pinsel.c
deleted file mode 100644
index 61809f5bd6..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_pinsel.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_pinsel.c 2011-06-02
-*//**
-* @file lpc_pinsel.c
-* @brief Contains all functions support for Pin-connection block
-* firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup PINSEL
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _PINSEL
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_pinsel.h"
-
-/* Private Functions ---------------------------------------------------------- */
-
-/*********************************************************************//**
- * @brief Get pointer to GPIO peripheral due to GPIO port
- * @param[in] portnum Port Number value, should be in range from 0..3.
- * @param[in] pinnum Pin number value, should be in range from 0..31
- * @return Pointer to GPIO peripheral
- **********************************************************************/
-static uint32_t * PIN_GetPointer(uint8_t portnum, uint8_t pinnum)
-{
- uint32_t *pPIN = NULL;
- pPIN = (uint32_t *)(LPC_IOCON_BASE + ((portnum * 32 + pinnum)*sizeof(uint32_t)));
- return pPIN;
-}
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup PINSEL_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Get type of a pin.
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @return Port type:
- * - PINSEL_PIN_TYPE_D
- * - PINSEL_PIN_TYPE_A
- * - PINSEL_PIN_TYPE_I
- * - PINSEL_PIN_TYPE_W
- * - PINSEL_PIN_TYPE_U
- * - PINSEL_PIN_TYPE_UNKNOWN: Invalid pin
- **********************************************************************/
-PinSel_PinType PINSEL_GetPinType(uint8_t portnum, uint8_t pinnum)
-{
- PinSel_PinType Ret = PINSEL_PIN_TYPE_UNKNOWN;
- switch(portnum)
- {
- case 0:
- if((pinnum <=6)||
- ((pinnum >= 10)&&(pinnum <=11))||
- ((pinnum >= 14)&&(pinnum <=22)))
- Ret = PINSEL_PIN_TYPE_D;
- else if ((pinnum == 12)||(pinnum==13)||
- ((pinnum >= 23)&&(pinnum <=26)))
- Ret = PINSEL_PIN_TYPE_A;
- else if ((pinnum == 29) || (pinnum==30)|| (pinnum==31))
- Ret = PINSEL_PIN_TYPE_U;
- else if ((pinnum == 27) || (pinnum==28))
- Ret = PINSEL_PIN_TYPE_I;
- else if ((pinnum == 7) || (pinnum==8)|| (pinnum==9))
- Ret = PINSEL_PIN_TYPE_W;
- break;
- case 1:
- if(pinnum <=29)
- Ret = PINSEL_PIN_TYPE_D;
- else if ((pinnum == 30) || (pinnum==31))
- Ret = PINSEL_PIN_TYPE_A;
- break;
- case 2:
- case 3:
- case 4:
- Ret = PINSEL_PIN_TYPE_D;
- break;
- case 5:
- if((pinnum <=1)||
- (pinnum == 4))
- Ret = PINSEL_PIN_TYPE_D;
- else if ((pinnum == 2) || (pinnum==3))
- Ret = PINSEL_PIN_TYPE_I;
- break;
- default:
- break;
- }
-
- return Ret;
-}
-
-/*********************************************************************//**
- * @brief Setup the pin selection function
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] funcnum Function number, should be range: 0..7
- * - 0: Select GPIO (Default)
- * - 1: Selects the 1st alternate function
- * - 2: Selects the 2nd alternate function
- * ...
- * - 7: Selects the 7th alternate function
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_ConfigPin ( uint8_t portnum, uint8_t pinnum, uint8_t funcnum)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- *pPIN &= ~IOCON_FUNC_MASK;//Clear function bits
- *pPIN |= funcnum&IOCON_FUNC_MASK;
-
- return PINSEL_RET_OK;
-}
-
-
-/*********************************************************************//**
- * @brief Setup resistor mode for pin of type D,A,W
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] modenum: Mode number, should be in range: 0..3
- - PINSEL_BASICMODE_PLAINOUT: Plain output
- - PINSEL_BASICMODE_PULLDOWN: Pull-down enable
- - PINSEL_BASICMODE_PULLUP: Pull-up enable
- - PINSEL_BASICMODE_REPEATER: Repeater mode
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetPinMode ( uint8_t portnum, uint8_t pinnum, PinSel_BasicMode modenum)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if((type != PINSEL_PIN_TYPE_D )&&
- (type != PINSEL_PIN_TYPE_A )&&
- (type != PINSEL_PIN_TYPE_W))
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- *(uint32_t *)pPIN &= ~(IOCON_MODE_MASK);//Clear function bits
- *(uint32_t *)pPIN |= (modenum << IOCON_MODE_POS)&IOCON_MODE_MASK;
-
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Setup hysteresis for pin of type D, W
- * @param[in] portnum Port number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] NewState new state of Hysteresis mode, should be:
- * - ENABLE: Hysteresis enable
- * - DISABLE: Hysteresis disable
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetHysMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if((type != PINSEL_PIN_TYPE_D )&&
- (type != PINSEL_PIN_TYPE_W))
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- if(NewState == DISABLE)
- {
- *(uint32_t *)pPIN &= ~IOCON_HYS_ENABLE;//Clear hys bits
- }
- else
- *(uint32_t *)pPIN |= IOCON_HYS_ENABLE;
-
- return PINSEL_RET_OK;
-}
-/*********************************************************************//**
- * @brief Setup input polarity for pin of type A,I,D,W
- * @param[in] portnum Port number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] NewState new state of Invert mode, should be:
- * - ENABLE: Input is inverted.
- * - DISABLE: Input isn't inverted.
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetInvertInput(uint8_t portnum, uint8_t pinnum, FunctionalState NewState)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if(type== PINSEL_PIN_TYPE_U)
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- if(NewState == DISABLE)
- {
- *(uint32_t *)pPIN &= ~IOCON_INVERT_INPUT;//Clear hys bits
- }
- else
- *(uint32_t *)pPIN |= IOCON_INVERT_INPUT;
-
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Setup Slew rate for pin of type D,W
- * @param[in] portnum Port number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] NewState new state of Slew rate control, should be:
- * - ENABLE: Output slew rate control is enable
- * - DISABLE: Output slew rate control is disable
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetSlewMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if((type!= PINSEL_PIN_TYPE_D) &&
- (type!= PINSEL_PIN_TYPE_W))
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- if(NewState == DISABLE)
- {
- *(uint32_t *)pPIN &= ~IOCON_SLEW_ENABLE;//Clear hys bits
- }
- else
- *(uint32_t *)pPIN |= IOCON_SLEW_ENABLE;
-
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Setup I2CMode for only pins that provide special I2C functionality
- * @param[in] portnum Port number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] I2CMode I2C mode, should be:
- * - PINSEL_I2CMODE_FAST_STANDARD: Fast mode and standard I2C mode
- * - PINSEL_I2CMODE_OPENDRAINIO: Open drain I/O
- * - PINSEL_I2CMODE_FASTMODEPLUS: Fast Mode Plus I/O
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetI2CMode(uint8_t portnum, uint8_t pinnum, PinSel_I2cMode I2CMode)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if(type != PINSEL_PIN_TYPE_I )
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
-
- switch(I2CMode)
- {
- // Standard/Fast Mode I2C: HS = HIDRIVE = 0
- case PINSEL_I2CMODE_FAST_STANDARD:
- PINSEL_SetI2CFilter(portnum,pinnum,ENABLE);
- *(uint32_t *)pPIN &= ~(IOCON_I2CMODE_FASTPLUS);
- break;
-
- // Non-I2C: HS = 1, HIDRIVE = 0
- case PINSEL_I2CMODE_OPENDRAINIO:
- PINSEL_SetI2CFilter(portnum,pinnum,DISABLE);
- *(uint32_t *)pPIN &= ~(IOCON_I2CMODE_FASTPLUS);
- break;
-
- // Fast Mode Plus I2C: HS = 0, HIDRIVE =1
- case PINSEL_I2CMODE_FASTMODEPLUS:
- PINSEL_SetI2CFilter(portnum,pinnum,ENABLE);
- *(uint32_t *)pPIN |= (IOCON_I2CMODE_FASTPLUS);
- break;
- default:
- return PINSEL_RET_ERR;
- }
-
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Setup Open-drain mode in pin of type D, A, W
- * @param[in] portnum Port number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] NewState new state of Open-drain mode:
- * - DISABLE: Normal pin I/O mode
- * - ENABLE: Open-drain enable
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetOpenDrainMode(uint8_t portnum, uint8_t pinnum, FunctionalState NewState)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if((type != PINSEL_PIN_TYPE_D ) &&
- (type != PINSEL_PIN_TYPE_A ) &&
- (type != PINSEL_PIN_TYPE_W ))
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
- if(NewState == DISABLE)
- {
- *(uint32_t *)pPIN &= ~IOCON_OPENDRAIN_MODE;//Clear hys bits
- }
- else
- {
- *(uint32_t *)pPIN |= IOCON_OPENDRAIN_MODE;
- }
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Enable the Analog mode for each pin of Type A(default is as Digital pins)
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] enable: the state of the pin that is expected to run
- - ENABLE: Enable the DAC mode of the pin
- - DISABLE: Disable the DAC mode
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetAnalogPinMode (uint8_t portnum, uint8_t pinnum, uint8_t enable)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if(type != PINSEL_PIN_TYPE_A )
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
-
- if(enable)
- {
- *(uint32_t *)pPIN &= ~(IOCON_DIGITIAL_MODE);
- }
- else
- {
- *(uint32_t *)pPIN |= IOCON_DIGITIAL_MODE;//Set 7th bit to one
- }
-
- return PINSEL_RET_OK;
-}
-
-
-
-/*********************************************************************//**
- * @brief Choose the DAC mode for pin P0.26
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] enable: the state of the pin that is expected to run
- - ENABLE: Enable the DAC mode of the pin
- - DISABLE: Disable the DAC mode
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_DacEnable (uint8_t portnum, uint8_t pinnum, uint8_t enable)
-{
- uint32_t *pPIN = NULL;
-
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
-
- // This setting is only for DAC pin (output pin)
- if(!((portnum == 0) && (pinnum == 26)))
- {
- return PINSEL_RET_NOT_SUPPORT;
- }
-
- pPIN = PIN_GetPointer(portnum, pinnum);
-
- if(enable)
- {
- *(uint32_t *)pPIN |= IOCON_DAC_ENABLE;//Set 16th bit to one
- }
- else
- {
- *(uint32_t *)pPIN &= ~IOCON_DAC_ENABLE;//Set 16th bit to one
-
- }
-
- return PINSEL_RET_OK;
-}
-
-/*********************************************************************//**
- * @brief Control the 10ns glitch filter for pin of type A,W
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] enable: the state of the pin that is expected to run
- - ENABLE: The noise pulses below approximately 10ns are filtered out
- - DISABLE: No input filtering is done.
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetFilter (uint8_t portnum, uint8_t pinnum, uint8_t enable)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if((type != PINSEL_PIN_TYPE_A ) &&
- (type != PINSEL_PIN_TYPE_W ))
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
-
-
- if(enable)
- {
- *(uint32_t *)pPIN &= ~(IOCON_10ns_FILTER_DISABLE);//Clear 8th bit to 0
- }
- else
- {
- *(uint32_t *)pPIN |= (IOCON_10ns_FILTER_DISABLE);//Set 8th bit to one
- }
-
-
- return PINSEL_RET_OK;
-}
-/*********************************************************************//**
- * @brief Control the 50ns glitch filter for I2C pins (type I)
- * @param[in] portnum PORT number, should be in range: 0..3
- * @param[in] pinnum Pin number, should be in range: 0..31
- * @param[in] enable: the state of the pin that is expected to run
- - ENABLE: The noise pulses below approximately 10ns are filtered out
- - DISABLE: No input filtering is done.
- * @return PINSEL Return Code
- * - PINSEL_RET_INVALID_PIN
- * - PINSEL_RET_NOT_SUPPORT
- * - PINSEL_RET_OK
- **********************************************************************/
-PINSEL_RET_CODE PINSEL_SetI2CFilter (uint8_t portnum, uint8_t pinnum, uint8_t enable)
-{
- uint32_t *pPIN = NULL;
- PinSel_PinType type = PINSEL_GetPinType(portnum,pinnum);
-
- if(type == PINSEL_PIN_TYPE_UNKNOWN)
- return PINSEL_RET_INVALID_PIN;
- if(type != PINSEL_PIN_TYPE_I)
- return PINSEL_RET_NOT_SUPPORT;
-
- pPIN = PIN_GetPointer(portnum, pinnum);
-
-
- if(enable)
- {
- *(uint32_t *)pPIN &= ~(IOCON_HS_MASK);//Clear 8th bit to 0
- }
- else
- {
- *(uint32_t *)pPIN |= (IOCON_I2C_FILTER_DISABLE);//Set 8th bit to one
- }
-
-
- return PINSEL_RET_OK;
-}
-
-
-/**
- * @}
- */
-#endif /*_PINSEL*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_pwm.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_pwm.c
deleted file mode 100644
index a9c79c25c4..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_pwm.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_pwm.c 2011-06-02
-*//**
-* @file lpc_pwm.c
-* @brief Contains all functions support for PWM firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup PWM
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _PWM
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_pwm.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup PWM_Public_Functions
- * @{
- */
-
-static LPC_PWM_TypeDef* PWM_GetPointer (uint8_t pwmId);
-
-/*********************************************************************//**
- * @brief Setting CAN baud rate (bps)
- * @param[in] canId point to LPC_CAN_TypeDef object, should be:
- * - LPC_CAN1: CAN1 peripheral
- * - LPC_CAN2: CAN2 peripheral
- * @return The pointer to CAN peripheral that's expected to use
- ***********************************************************************/
-static LPC_PWM_TypeDef* PWM_GetPointer (uint8_t pwmId)
-{
- LPC_PWM_TypeDef* pPwm;
-
- switch (pwmId)
- {
- case PWM_0:
- pPwm = LPC_PWM0;
- break;
-
- case PWM_1:
- pPwm = LPC_PWM1;
- break;
-
- default:
- pPwm = NULL;
- break;
- }
-
- return pPwm;
-}
-
-
-/*********************************************************************//**
- * @brief Check whether specified interrupt flag in PWM is set or not
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] IntFlag: PWM interrupt flag, should be:
- * - PWM_INTSTAT_MR0: Interrupt flag for PWM match channel 0
- * - PWM_INTSTAT_MR1: Interrupt flag for PWM match channel 1
- * - PWM_INTSTAT_MR2: Interrupt flag for PWM match channel 2
- * - PWM_INTSTAT_MR3: Interrupt flag for PWM match channel 3
- * - PWM_INTSTAT_MR4: Interrupt flag for PWM match channel 4
- * - PWM_INTSTAT_MR5: Interrupt flag for PWM match channel 5
- * - PWM_INTSTAT_MR6: Interrupt flag for PWM match channel 6
- * - PWM_INTSTAT_CAP0: Interrupt flag for capture input 0
- * - PWM_INTSTAT_CAP1: Interrupt flag for capture input 1
- * @return New State of PWM interrupt flag (SET or RESET)
- **********************************************************************/
-IntStatus PWM_GetIntStatus(uint8_t pwmId, uint32_t IntFlag)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- return ((pPwm->IR & IntFlag) ? SET : RESET);
-}
-
-
-
-/*********************************************************************//**
- * @brief Clear specified PWM Interrupt pending
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] IntFlag: PWM interrupt flag, should be:
- * - PWM_INTSTAT_MR0: Interrupt flag for PWM match channel 0
- * - PWM_INTSTAT_MR1: Interrupt flag for PWM match channel 1
- * - PWM_INTSTAT_MR2: Interrupt flag for PWM match channel 2
- * - PWM_INTSTAT_MR3: Interrupt flag for PWM match channel 3
- * - PWM_INTSTAT_MR4: Interrupt flag for PWM match channel 4
- * - PWM_INTSTAT_MR5: Interrupt flag for PWM match channel 5
- * - PWM_INTSTAT_MR6: Interrupt flag for PWM match channel 6
- * - PWM_INTSTAT_CAP0: Interrupt flag for capture input 0
- * - PWM_INTSTAT_CAP1: Interrupt flag for capture input 1
- * @return None
- **********************************************************************/
-void PWM_ClearIntPending(uint8_t pwmId, uint32_t IntFlag)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- pPwm->IR = IntFlag;
-}
-
-
-
-/*****************************************************************************//**
-* @brief Fills each PWM_InitStruct member with its default value:
-* - If PWMCounterMode = PWM_MODE_TIMER:
-* + PrescaleOption = PWM_TIMER_PRESCALE_USVAL
-* + PrescaleValue = 1
-* - If PWMCounterMode = PWM_MODE_COUNTER:
-* + CountInputSelect = PWM_COUNTER_PCAP1_0
-* + CounterOption = PWM_COUNTER_RISING
-* @param[in] PWMTimerCounterMode Timer or Counter mode, should be:
-* - PWM_MODE_TIMER: Counter of PWM peripheral is in Timer mode
-* - PWM_MODE_COUNTER: Counter of PWM peripheral is in Counter mode
-* @param[in] PWM_InitStruct Pointer to structure (PWM_TIMERCFG_Type or
-* PWM_COUNTERCFG_Type) which will be initialized.
-* @return None
-* Note: PWM_InitStruct pointer will be assigned to corresponding structure
-* (PWM_TIMERCFG_Type or PWM_COUNTERCFG_Type) due to PWMTimerCounterMode.
-*******************************************************************************/
-void PWM_ConfigStructInit(uint8_t PWMTimerCounterMode, void *PWM_InitStruct)
-{
- PWM_TIMERCFG_Type *pTimeCfg;
- PWM_COUNTERCFG_Type *pCounterCfg;
-
- pTimeCfg = (PWM_TIMERCFG_Type *) PWM_InitStruct;
- pCounterCfg = (PWM_COUNTERCFG_Type *) PWM_InitStruct;
-
- if (PWMTimerCounterMode == PWM_MODE_TIMER )
- {
- pTimeCfg->PrescaleOption = PWM_TIMER_PRESCALE_USVAL;
- pTimeCfg->PrescaleValue = 1;
- }
- else if (PWMTimerCounterMode == PWM_MODE_COUNTER)
- {
- pCounterCfg->CountInputSelect = PWM_COUNTER_PCAP1_0;
- pCounterCfg->CounterOption = PWM_COUNTER_RISING;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Initializes the pPwm peripheral corresponding to the specified
- * parameters in the PWM_ConfigStruct.
- * @param[in] pwmId The Id of the expected PWM component
- *
- *
- * @param[in] PWMTimerCounterMode Timer or Counter mode, should be:
- * - PWM_MODE_TIMER: Counter of PWM peripheral is in Timer mode
- * - PWM_MODE_COUNTER: Counter of PWM peripheral is in Counter mode
- * @param[in] PWM_ConfigStruct Pointer to structure (PWM_TIMERCFG_Type or
- * PWM_COUNTERCFG_Type) which will be initialized.
- * @return None
- * Note: PWM_ConfigStruct pointer will be assigned to corresponding structure
- * (PWM_TIMERCFG_Type or PWM_COUNTERCFG_Type) due to PWMTimerCounterMode.
- **********************************************************************/
-void PWM_Init(uint8_t pwmId, uint32_t PWMTimerCounterMode, void *PWM_ConfigStruct)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- PWM_TIMERCFG_Type *pTimeCfg;
- PWM_COUNTERCFG_Type *pCounterCfg;
- uint64_t clkdlycnt;
-
- pTimeCfg = (PWM_TIMERCFG_Type *)PWM_ConfigStruct;
- pCounterCfg = (PWM_COUNTERCFG_Type *)PWM_ConfigStruct;
-
- if(pwmId == PWM_0)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCPWM0, ENABLE);
- }
- else if(pwmId == PWM_1)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCPWM1, ENABLE);
- }
- else
- {
- //Trap the error
- while(1);
- }
-
- // Get peripheral clock of PWM1
- clkdlycnt = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- // Clear all interrupts pending
- pPwm->IR = 0xFF & PWM_IR_BITMASK;
- pPwm->TCR = 0x00;
- pPwm->CTCR = 0x00;
- pPwm->MCR = 0x00;
- pPwm->CCR = 0x00;
- pPwm->PCR = 0x00;
- pPwm->LER = 0x00;
-
- if (PWMTimerCounterMode == PWM_MODE_TIMER)
- {
- /* Absolute prescale value */
- if (pTimeCfg->PrescaleOption == PWM_TIMER_PRESCALE_TICKVAL)
- {
- pPwm->PR = pTimeCfg->PrescaleValue - 1;
- }
- /* uSecond prescale value */
- else
- {
- clkdlycnt = (clkdlycnt * pTimeCfg->PrescaleValue) / 1000000;
- pPwm->PR = ((uint32_t) clkdlycnt) - 1;
- }
-
- }
- else if (PWMTimerCounterMode == PWM_MODE_COUNTER)
- {
-
- pPwm->CTCR |= (PWM_CTCR_MODE((uint32_t)pCounterCfg->CounterOption)) \
- | (PWM_CTCR_SELECT_INPUT((uint32_t)pCounterCfg->CountInputSelect));
- }
-}
-
-/*********************************************************************//**
- * @brief De-initializes the PWM peripheral registers to their
-* default reset values.
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @return None
- **********************************************************************/
-void PWM_DeInit (uint8_t pwmId)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- // Disable PWM control (timer, counter and PWM)
- pPwm->TCR = 0x00;
-
- if(pwmId == PWM_0)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCPWM0, DISABLE);
- }
- else if(pwmId == PWM_1)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCPWM1, DISABLE);
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Enable PWM peripheral
- * - DISABLE: Disable PWM peripheral
- * @return None
- **********************************************************************/
-void PWM_Cmd(uint8_t pwmId, FunctionalState NewState)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- if (NewState == ENABLE)
- {
- pPwm->TCR |= PWM_TCR_PWM_ENABLE;
- }
- else
- {
- pPwm->TCR &= (~PWM_TCR_PWM_ENABLE) & PWM_TCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable Counter in PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Enable Counter in PWM peripheral
- * - DISABLE: Disable Counter in PWM peripheral
- * @return None
- **********************************************************************/
-void PWM_CounterCmd(uint8_t pwmId, FunctionalState NewState)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- if (NewState == ENABLE)
- {
- pPwm->TCR |= PWM_TCR_COUNTER_ENABLE;
- }
- else
- {
- pPwm->TCR &= (~PWM_TCR_COUNTER_ENABLE) & PWM_TCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Reset Counter in PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @return None
- **********************************************************************/
-void PWM_ResetCounter(uint8_t pwmId)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- pPwm->TCR |= PWM_TCR_COUNTER_RESET;
-
- pPwm->TCR &= (~PWM_TCR_COUNTER_RESET) & PWM_TCR_BITMASK;
-}
-
-
-/*********************************************************************//**
- * @brief Configures match for PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] PWM_MatchConfigStruct Pointer to a PWM_MATCHCFG_Type structure
-* that contains the configuration information for the
-* specified PWM match function.
- * @return None
- **********************************************************************/
-void PWM_ConfigMatch(uint8_t pwmId, PWM_MATCHCFG_Type *PWM_MatchConfigStruct)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- //interrupt on MRn
- if (PWM_MatchConfigStruct->IntOnMatch == ENABLE)
- {
- pPwm->MCR |= PWM_MCR_INT_ON_MATCH(PWM_MatchConfigStruct->MatchChannel);
- }
- else
- {
- pPwm->MCR &= (~ PWM_MCR_INT_ON_MATCH(PWM_MatchConfigStruct->MatchChannel)) \
- & PWM_MCR_BITMASK;
- }
-
- //reset on MRn
- if (PWM_MatchConfigStruct->ResetOnMatch == ENABLE)
- {
- pPwm->MCR |= PWM_MCR_RESET_ON_MATCH(PWM_MatchConfigStruct->MatchChannel);
- }
- else
- {
- pPwm->MCR &= (~ PWM_MCR_RESET_ON_MATCH(PWM_MatchConfigStruct->MatchChannel)) \
- & PWM_MCR_BITMASK;
- }
-
- //stop on MRn
- if (PWM_MatchConfigStruct->StopOnMatch == ENABLE)
- {
- pPwm->MCR |= PWM_MCR_STOP_ON_MATCH(PWM_MatchConfigStruct->MatchChannel);
- }
- else
- {
- pPwm->MCR &= (~ PWM_MCR_STOP_ON_MATCH(PWM_MatchConfigStruct->MatchChannel)) \
- & PWM_MCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Configures capture input for PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] PWM_CaptureConfigStruct Pointer to a PWM_CAPTURECFG_Type structure
- * that contains the configuration information for the
- * specified PWM capture input function.
- * @return None
- **********************************************************************/
-void PWM_ConfigCapture(uint8_t pwmId, PWM_CAPTURECFG_Type *PWM_CaptureConfigStruct)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- if (PWM_CaptureConfigStruct->RisingEdge == ENABLE)
- {
- pPwm->CCR |= PWM_CCR_CAP_RISING(PWM_CaptureConfigStruct->CaptureChannel);
- }
- else
- {
- pPwm->CCR &= (~ PWM_CCR_CAP_RISING(PWM_CaptureConfigStruct->CaptureChannel)) \
- & PWM_CCR_BITMASK;
- }
-
- if (PWM_CaptureConfigStruct->FallingEdge == ENABLE)
- {
- pPwm->CCR |= PWM_CCR_CAP_FALLING(PWM_CaptureConfigStruct->CaptureChannel);
- }
- else
- {
- pPwm->CCR &= (~ PWM_CCR_CAP_FALLING(PWM_CaptureConfigStruct->CaptureChannel)) \
- & PWM_CCR_BITMASK;
- }
-
- if (PWM_CaptureConfigStruct->IntOnCaption == ENABLE)
- {
- pPwm->CCR |= PWM_CCR_INT_ON_CAP(PWM_CaptureConfigStruct->CaptureChannel);
- }
- else
- {
- pPwm->CCR &= (~ PWM_CCR_INT_ON_CAP(PWM_CaptureConfigStruct->CaptureChannel)) \
- & PWM_CCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Read value of capture register PWM peripheral
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] CaptureChannel: capture channel number, should be in
- * range 0 to 1
- * @return Value of capture register
- **********************************************************************/
-uint32_t PWM_GetCaptureValue(uint8_t pwmId, uint8_t CaptureChannel)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- switch (CaptureChannel)
- {
- case 0:
- return pPwm->CR0;
-
- case 1:
- return pPwm->CR1;
-
- default:
- return (0);
- }
-}
-
-
-/********************************************************************//**
- * @brief Update value for each PWM channel with update type option
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] MatchChannel Match channel
- * @param[in] MatchValue Match value
- * @param[in] UpdateType Type of Update, should be:
- * - PWM_MATCH_UPDATE_NOW: The update value will be updated for
- * this channel immediately
- * - PWM_MATCH_UPDATE_NEXT_RST: The update value will be updated for
- * this channel on next reset by a PWM Match event.
- * @return None
- *********************************************************************/
-void PWM_MatchUpdate(uint8_t pwmId, uint8_t MatchChannel,
- uint32_t MatchValue, uint8_t UpdateType)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- switch (MatchChannel)
- {
- case 0:
- pPwm->MR0 = MatchValue;
- break;
-
- case 1:
- pPwm->MR1 = MatchValue;
- break;
-
- case 2:
- pPwm->MR2 = MatchValue;
- break;
-
- case 3:
- pPwm->MR3 = MatchValue;
- break;
-
- case 4:
- pPwm->MR4 = MatchValue;
- break;
-
- case 5:
- pPwm->MR5 = MatchValue;
- break;
-
- case 6:
- pPwm->MR6 = MatchValue;
- break;
- }
-
- // Write Latch register
- pPwm->LER |= PWM_LER_EN_MATCHn_LATCH(MatchChannel);
-
- // In case of update now
- if (UpdateType == PWM_MATCH_UPDATE_NOW)
- {
- pPwm->TCR |= PWM_TCR_COUNTER_RESET;
- pPwm->TCR &= (~PWM_TCR_COUNTER_RESET) & PWM_TCR_BITMASK;
- }
-}
-
-
-/********************************************************************//**
- * @brief Configure Edge mode for each PWM channel
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] PWMChannel PWM channel, should be in range from 2 to 6
- * @param[in] ModeOption PWM mode option, should be:
- * - PWM_CHANNEL_SINGLE_EDGE: Single Edge mode
- * - PWM_CHANNEL_DUAL_EDGE: Dual Edge mode
- * @return None
- * Note: PWM Channel 1 can not be selected for mode option
- *********************************************************************/
-void PWM_ChannelConfig(uint8_t pwmId, uint8_t PWMChannel, uint8_t ModeOption)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- // Single edge mode
- if (ModeOption == PWM_CHANNEL_SINGLE_EDGE)
- {
- pPwm->PCR &= (~ PWM_PCR_PWMSELn(PWMChannel)) & PWM_PCR_BITMASK;
- }
- // Double edge mode
- else if (PWM_CHANNEL_DUAL_EDGE)
- {
- pPwm->PCR |= PWM_PCR_PWMSELn(PWMChannel);
- }
-}
-
-
-
-/********************************************************************//**
- * @brief Enable/Disable PWM channel output
- * @param[in] pwmId The Id of the expected PWM component
- *
- * @param[in] PWMChannel PWM channel, should be in range from 1 to 6
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Enable this PWM channel output
- * - DISABLE: Disable this PWM channel output
- * @return None
- *********************************************************************/
-void PWM_ChannelCmd(uint8_t pwmId, uint8_t PWMChannel, FunctionalState NewState)
-{
- LPC_PWM_TypeDef* pPwm = PWM_GetPointer(pwmId);
-
- if (NewState == ENABLE)
- {
- pPwm->PCR |= PWM_PCR_PWMENAn(PWMChannel);
- }
- else
- {
- pPwm->PCR &= (~ PWM_PCR_PWMENAn(PWMChannel)) & PWM_PCR_BITMASK;
- }
-}
-
-/**
- * @}
- */
-
-#endif /*_PWM*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_qei.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_qei.c
deleted file mode 100644
index 8c098a7b69..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_qei.c
+++ /dev/null
@@ -1,599 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_qei.c 2011-06-02
-*//**
-* @file lpc_qei.c
-* @brief Contains all functions support for QEI firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup QEI
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _QEI
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_qei.h"
-#include "lpc_clkpwr.h"
-
-/* Private Types -------------------------------------------------------------- */
-/** @defgroup QEI_Private_Types QEI Private Types
- * @{
- */
-
-/**
- * @brief QEI configuration union type definition
- */
-typedef union {
- QEI_CFG_Type bmQEIConfig;
- uint32_t ulQEIConfig;
-} QEI_CFGOPT_Type;
-
-/**
- * @}
- */
-
-LPC_QEI_TypeDef* QEI_GetPointer(uint8_t qeiId);
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup QEI_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Get the point to typedef of QEI component
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- * @return None
- **********************************************************************/
-LPC_QEI_TypeDef* QEI_GetPointer(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = NULL;
-
- if(qeiId == 0)
- {
- pQei = LPC_QEI;
- }
-
- return pQei;
-}
-
-
-/*********************************************************************//**
- * @brief Resets value for each type of QEI value, such as velocity,
- * counter, position, etc..
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulResetType QEI Reset Type, should be one of the following:
- * - QEI_RESET_POS: Reset Position Counter
- * - QEI_RESET_POSOnIDX: Reset Position Counter on Index signal
- * - QEI_RESET_VEL: Reset Velocity
- * - QEI_RESET_IDX: Reset Index Counter
- * @return None
- **********************************************************************/
-void QEI_Reset(uint8_t qeiId, uint32_t ulResetType)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->CON = ulResetType;
-}
-
-/*********************************************************************//**
- * @brief Initializes the QEI peripheral according to the specified
-* parameters in the QEI_ConfigStruct.
-* @param[in] qeiId The Id of the expected QEI component
-* It should be 0 (zero) always with LPC
-*
-* @param[in] QEI_ConfigStruct Pointer to a QEI_CFG_Type structure
-* that contains the configuration information for the
-* specified QEI peripheral
- * @return None
- **********************************************************************/
-void QEI_Init(uint8_t qeiId, QEI_CFG_Type *QEI_ConfigStruct)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- /* Set up clock and power for QEI module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCQEI, ENABLE);
-
- // Reset all remaining value in QEI peripheral
-
- pQei->MAXPOS = 0x00;
- pQei->CMPOS0 = 0x00;
- pQei->CMPOS1 = 0x00;
- pQei->CMPOS2 = 0x00;
- pQei->INXCMP0 = 0x00;
- pQei->VELCOMP = 0x00;
-
- pQei->LOAD = 0x00;
- pQei->CON = QEI_CON_RESP | QEI_CON_RESV | QEI_CON_RESI;
-
- pQei->FILTERPHA = 0x00;
- pQei->FILTERPHB = 0x00;
- pQei->FILTERINX = 0x00;
-
- // Disable all Interrupt
- pQei->IEC = QEI_IECLR_BITMASK;
-
- // Clear all Interrupt pending
- pQei->CLR = QEI_INTCLR_BITMASK;
-
- // Set QEI configuration value corresponding to its setting up value
- pQei->CONF = ((QEI_CFGOPT_Type *)QEI_ConfigStruct)->ulQEIConfig;
-}
-
-
-/*********************************************************************//**
- * @brief De-initializes the QEI peripheral registers to their
- * default reset values.
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return None
- **********************************************************************/
-void QEI_DeInit(uint8_t qeiId)
-{
- /* Turn off clock and power for QEI module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCQEI, DISABLE);
-}
-
-
-/*****************************************************************************//**
-* @brief Fills each QIE_InitStruct member with its default value:
-* - DirectionInvert = QEI_DIRINV_NONE
-* - SignalMode = QEI_SIGNALMODE_QUAD
-* - CaptureMode = QEI_CAPMODE_4X
-* - InvertIndex = QEI_INVINX_NONE
-* @param[in] QIE_InitStruct Pointer to a QEI_CFG_Type structure
-* which will be initialized.
-* @return None
-*******************************************************************************/
-void QEI_GetCfgDefault(QEI_CFG_Type *QIE_InitStruct)
-{
- QIE_InitStruct->CaptureMode = QEI_CAPMODE_4X;
- QIE_InitStruct->DirectionInvert = QEI_DIRINV_NONE;
- QIE_InitStruct->InvertIndex = QEI_INVINX_NONE;
- QIE_InitStruct->SignalMode = QEI_SIGNALMODE_QUAD;
-}
-
-
-/*********************************************************************//**
- * @brief Check whether if specified flag status is set or not
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulFlagType Status Flag Type, should be one of the following:
- * - QEI_STATUS_DIR: Direction Status
- * @return New Status of this status flag (SET or RESET)
- **********************************************************************/
-FlagStatus QEI_GetStatus(uint8_t qeiId, uint32_t ulFlagType)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return ((pQei->STAT & ulFlagType) ? SET : RESET);
-}
-
-/*********************************************************************//**
- * @brief Get current position value in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return Current position value of QEI peripheral
- **********************************************************************/
-uint32_t QEI_GetPosition(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return (pQei->POS);
-}
-
-/*********************************************************************//**
- * @brief Set max position value for QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulMaxPos Max position value to set
- * @return None
- **********************************************************************/
-void QEI_SetMaxPosition(uint8_t qeiId, uint32_t ulMaxPos)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->MAXPOS = ulMaxPos;
-}
-
-/*********************************************************************//**
- * @brief Set position compare value for QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] bPosCompCh Compare Position channel, should be:
- * - QEI_COMPPOS_CH_0: QEI compare position channel 0
- * - QEI_COMPPOS_CH_1: QEI compare position channel 1
- * - QEI_COMPPOS_CH_2: QEI compare position channel 2
- * @param[in] ulPosComp Compare Position value to set
- * @return None
- **********************************************************************/
-void QEI_SetPositionComp(uint8_t qeiId, uint8_t bPosCompCh, uint32_t ulPosComp)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
- uint32_t *tmp;
-
- tmp = (uint32_t *) (&(pQei->CMPOS0) + bPosCompCh * 4);
- *tmp = ulPosComp;
-}
-
-/*********************************************************************//**
- * @brief Get current index counter of QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return Current value of QEI index counter
- **********************************************************************/
-uint32_t QEI_GetIndex(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return (pQei->INXCNT);
-}
-
-/*********************************************************************//**
- * @brief Set value for index compare in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulIndexComp Compare Index Value to set
- * @return None
- **********************************************************************/
-void QEI_SetIndexComp(uint8_t qeiId, uint32_t ulIndexComp)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->INXCMP0 = ulIndexComp;
-}
-
-/*********************************************************************//**
- * @brief Set timer reload value for QEI peripheral. When the velocity timer is
- * over-flow, the value that set for Timer Reload register will be loaded
- * into the velocity timer for next period. The calculated velocity in RPM
- * therefore will be affect by this value.
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] QEIReloadStruct QEI reload structure
- * @return None
- **********************************************************************/
-void QEI_SetTimerReload(uint8_t qeiId, QEI_RELOADCFG_Type *QEIReloadStruct)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
- uint64_t pclk;
-
-
- if (QEIReloadStruct->ReloadOption == QEI_TIMERRELOAD_TICKVAL)
- {
- pQei->LOAD = QEIReloadStruct->ReloadValue - 1;
- }
- else
- {
-#if 1
- pclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- pclk = (pclk /(1000000/QEIReloadStruct->ReloadValue)) - 1;
-
- pQei->LOAD = (uint32_t)pclk;
-#else
- ld = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- if (ld/1000000 > 0)
- {
- ld /= 1000000;
- ld *= QEIReloadStruct->ReloadValue;
- ld -= 1;
- }
- else
- {
- ld *= QEIReloadStruct->ReloadValue;
- ld /= 1000000;
- ld -= 1;
- }
-
- pQei->LOAD = ld;
-#endif
- }
-}
-
-/*********************************************************************//**
- * @brief Get current timer counter in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return Current timer counter in QEI peripheral
- **********************************************************************/
-uint32_t QEI_GetTimer(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return (pQei->TIME);
-}
-
-/*********************************************************************//**
- * @brief Get current velocity pulse counter in current time period
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return Current velocity pulse counter value
- **********************************************************************/
-uint32_t QEI_GetVelocity(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return (pQei->VEL);
-}
-
-/*********************************************************************//**
- * @brief Get the most recently measured velocity of the QEI. When
- * the Velocity timer in QEI is over-flow, the current velocity
- * value will be loaded into Velocity Capture register.
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @return The most recently measured velocity value
- **********************************************************************/
-uint32_t QEI_GetVelocityCap(uint8_t qeiId)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return (pQei->CAP);
-}
-
-/*********************************************************************//**
- * @brief Set Velocity Compare value for QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulVelComp Compare Velocity value to set
- * @return None
- **********************************************************************/
-void QEI_SetVelocityComp(uint8_t qeiId, uint32_t ulVelComp)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->VELCOMP = ulVelComp;
-}
-
-/*********************************************************************//**
- * @brief Set value of sampling count for the digital filter in
- * QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulSamplingPulse Value of sampling count to set
- * @return None
- **********************************************************************/
-void QEI_SetDigiFilter(uint8_t qeiId, st_Qei_FilterCfg FilterVal)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->FILTERPHA = FilterVal.PHA_FilterVal;
- pQei->FILTERPHB = FilterVal.PHB_FilterVal;
- pQei->FILTERINX = FilterVal.INX_FilterVal;
-}
-
-/*********************************************************************//**
- * @brief Check whether if specified interrupt flag status in QEI
- * peripheral is set or not
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulIntType Interrupt Flag Status type, should be:
- - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
- - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
- - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
- - QEI_INTFLAG_DIR_Int: Change of direction interrupt
- - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
- - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
- - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
- index count interrupt
- - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
- - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
- - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
- * @return New State of specified interrupt flag status (SET or RESET)
- **********************************************************************/
-FlagStatus QEI_GetIntStatus(uint8_t qeiId, uint32_t ulIntType)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- return((pQei->INTSTAT & ulIntType) ? SET : RESET);
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable specified interrupt in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulIntType Interrupt Flag Status type, should be:
- - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
- - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
- - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
- - QEI_INTFLAG_DIR_Int: Change of direction interrupt
- - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
- - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
- - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
- index count interrupt
- - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
- - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
- - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
- * @param[in] NewState New function state, should be:
- * - DISABLE
- * - ENABLE
- * @return None
- **********************************************************************/
-void QEI_IntCmd(uint8_t qeiId, uint32_t ulIntType, FunctionalState NewState)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- if (NewState == ENABLE)
- {
- pQei->IES = ulIntType;
- }
- else
- {
- pQei->IEC = ulIntType;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Sets (forces) specified interrupt in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulIntType Interrupt Flag Status type, should be:
- - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
- - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
- - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
- - QEI_INTFLAG_DIR_Int: Change of direction interrupt
- - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
- - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
- - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
- index count interrupt
- - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
- - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
- - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
- * @return None
- **********************************************************************/
-void QEI_IntSet(uint8_t qeiId, uint32_t ulIntType)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->SET = ulIntType;
-}
-
-/*********************************************************************//**
- * @brief Clear (force) specified interrupt (pending) in QEI peripheral
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulIntType Interrupt Flag Status type, should be:
- - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
- - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
- - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
- - QEI_INTFLAG_DIR_Int: Change of direction interrupt
- - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
- - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
- - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
- current position interrupt
- - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
- index count interrupt
- - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
- - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
- - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
- * @return None
- **********************************************************************/
-void QEI_IntClear(uint8_t qeiId, uint32_t ulIntType)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- pQei->CLR = ulIntType;
-}
-
-
-/*********************************************************************//**
- * @brief Calculates the actual velocity in RPM passed via velocity
- * capture value and Pulse Per Round (of the encoder) value
- * parameter input.
- * @param[in] qeiId The Id of the expected QEI component
- * It should be 0 (zero) always with LPC
- *
- * @param[in] ulVelCapValue Velocity capture input value that can
- * be got from QEI_GetVelocityCap() function
- * @param[in] ulPPR Pulse per round of encoder
- * @return The actual value of velocity in RPM (Round per minute)
- **********************************************************************/
-uint32_t QEI_CalculateRPM(uint8_t qeiId, uint32_t ulVelCapValue, uint32_t ulPPR)
-{
- LPC_QEI_TypeDef* pQei = QEI_GetPointer(qeiId);
-
- uint64_t rpm, clock, Load, edges;
-
- // Get current Clock rate for timer input
- clock = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- // Get Timer load value (velocity capture period)
- Load = (uint64_t)(pQei->LOAD + 1);
-
- // Get Edge
- edges = (uint64_t)((pQei->CONF & QEI_CONF_CAPMODE) ? 4 : 2);
-
- // Calculate RPM
- rpm = ((clock * ulVelCapValue * 60) / (Load * ulPPR * edges));
-
- return (uint32_t)(rpm);
-}
-
-
-/**
- * @}
- */
-
-#endif /*_QEI*/
-
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_rtc.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_rtc.c
deleted file mode 100644
index 9dd34b7228..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_rtc.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_rtc.c 2011-06-02
-*//**
-* @file lpc_rtc.c
-* @brief Contains all functions support for RTC firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup RTC
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _RTC
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_rtc.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup RTC_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initializes the RTC peripheral.
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @return None
- *********************************************************************/
-void RTC_Init (LPC_RTC_TypeDef *RTCx)
-{
- /* Set up clock and power for RTC module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, ENABLE);
-
- // Clear all register to be default
- RTCx->ILR = 0x00;
- RTCx->CCR = 0x00;
- RTCx->CIIR = 0x00;
- RTCx->AMR = 0xFF;
- RTCx->CALIBRATION = 0x00;
-}
-
-
-/*********************************************************************//**
- * @brief De-initializes the RTC peripheral registers to their
-* default reset values.
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @return None
- **********************************************************************/
-void RTC_DeInit(LPC_RTC_TypeDef *RTCx)
-{
- RTCx->CCR = 0x00;
- // Disable power and clock for RTC module
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, DISABLE);
-}
-
-/*********************************************************************//**
- * @brief Reset clock tick counter in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @return None
- **********************************************************************/
-void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx)
-{
- RTCx->CCR |= RTC_CCR_CTCRST;
- RTCx->CCR &= (~RTC_CCR_CTCRST) & RTC_CCR_BITMASK;
-}
-
-/*********************************************************************//**
- * @brief Start/Stop RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: The time counters are enabled
- * - DISABLE: The time counters are disabled
- * @return None
- **********************************************************************/
-void RTC_Cmd (LPC_RTC_TypeDef *RTCx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- RTCx->CCR |= RTC_CCR_CLKEN;
- }
- else
- {
- RTCx->CCR &= (~RTC_CCR_CLKEN) & RTC_CCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable Counter increment interrupt for each time type
- * in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] CntIncrIntType: Counter Increment Interrupt type,
- * an increment of this type value below will generates
- * an interrupt, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Counter Increment interrupt for this
- * time type are enabled
- * - DISABLE: Counter Increment interrupt for this
- * time type are disabled
- * @return None
- **********************************************************************/
-void RTC_CntIncrIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t CntIncrIntType, \
- FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- switch (CntIncrIntType)
- {
- case RTC_TIMETYPE_SECOND:
- RTCx->CIIR |= RTC_CIIR_IMSEC;
- break;
- case RTC_TIMETYPE_MINUTE:
- RTCx->CIIR |= RTC_CIIR_IMMIN;
- break;
- case RTC_TIMETYPE_HOUR:
- RTCx->CIIR |= RTC_CIIR_IMHOUR;
- break;
- case RTC_TIMETYPE_DAYOFWEEK:
- RTCx->CIIR |= RTC_CIIR_IMDOW;
- break;
- case RTC_TIMETYPE_DAYOFMONTH:
- RTCx->CIIR |= RTC_CIIR_IMDOM;
- break;
- case RTC_TIMETYPE_DAYOFYEAR:
- RTCx->CIIR |= RTC_CIIR_IMDOY;
- break;
- case RTC_TIMETYPE_MONTH:
- RTCx->CIIR |= RTC_CIIR_IMMON;
- break;
- case RTC_TIMETYPE_YEAR:
- RTCx->CIIR |= RTC_CIIR_IMYEAR;
- break;
- }
- }
- else
- {
- switch (CntIncrIntType)
- {
- case RTC_TIMETYPE_SECOND:
- RTCx->CIIR &= (~RTC_CIIR_IMSEC) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_MINUTE:
- RTCx->CIIR &= (~RTC_CIIR_IMMIN) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_HOUR:
- RTCx->CIIR &= (~RTC_CIIR_IMHOUR) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFWEEK:
- RTCx->CIIR &= (~RTC_CIIR_IMDOW) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFMONTH:
- RTCx->CIIR &= (~RTC_CIIR_IMDOM) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFYEAR:
- RTCx->CIIR &= (~RTC_CIIR_IMDOY) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_MONTH:
- RTCx->CIIR &= (~RTC_CIIR_IMMON) & RTC_CIIR_BITMASK;
- break;
- case RTC_TIMETYPE_YEAR:
- RTCx->CIIR &= (~RTC_CIIR_IMYEAR) & RTC_CIIR_BITMASK;
- break;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable Alarm interrupt for each time type
- * in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] AlarmTimeType: Alarm Time Interrupt type,
- * an matching of this type value below with current time
- * in RTC will generates an interrupt, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: Alarm interrupt for this
- * time type are enabled
- * - DISABLE: Alarm interrupt for this
- * time type are disabled
- * @return None
- **********************************************************************/
-void RTC_AlarmIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t AlarmTimeType, \
- FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- switch (AlarmTimeType)
- {
- case RTC_TIMETYPE_SECOND:
- RTCx->AMR &= (~RTC_AMR_AMRSEC) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_MINUTE:
- RTCx->AMR &= (~RTC_AMR_AMRMIN) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_HOUR:
- RTCx->AMR &= (~RTC_AMR_AMRHOUR) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFWEEK:
- RTCx->AMR &= (~RTC_AMR_AMRDOW) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFMONTH:
- RTCx->AMR &= (~RTC_AMR_AMRDOM) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_DAYOFYEAR:
- RTCx->AMR &= (~RTC_AMR_AMRDOY) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_MONTH:
- RTCx->AMR &= (~RTC_AMR_AMRMON) & RTC_AMR_BITMASK;
- break;
- case RTC_TIMETYPE_YEAR:
- RTCx->AMR &= (~RTC_AMR_AMRYEAR) & RTC_AMR_BITMASK;
- break;
- }
- }
- else
- {
- switch (AlarmTimeType)
- {
- case RTC_TIMETYPE_SECOND:
- RTCx->AMR |= (RTC_AMR_AMRSEC);
- break;
- case RTC_TIMETYPE_MINUTE:
- RTCx->AMR |= (RTC_AMR_AMRMIN);
- break;
- case RTC_TIMETYPE_HOUR:
- RTCx->AMR |= (RTC_AMR_AMRHOUR);
- break;
- case RTC_TIMETYPE_DAYOFWEEK:
- RTCx->AMR |= (RTC_AMR_AMRDOW);
- break;
- case RTC_TIMETYPE_DAYOFMONTH:
- RTCx->AMR |= (RTC_AMR_AMRDOM);
- break;
- case RTC_TIMETYPE_DAYOFYEAR:
- RTCx->AMR |= (RTC_AMR_AMRDOY);
- break;
- case RTC_TIMETYPE_MONTH:
- RTCx->AMR |= (RTC_AMR_AMRMON);
- break;
- case RTC_TIMETYPE_YEAR:
- RTCx->AMR |= (RTC_AMR_AMRYEAR);
- break;
- }
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set current time value for each time type in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Timetype: Time Type, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @param[in] TimeValue Time value to set
- * @return None
- **********************************************************************/
-void RTC_SetTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue)
-{
- switch ( Timetype)
- {
- case RTC_TIMETYPE_SECOND:
- if(TimeValue <= RTC_SECOND_MAX)
- RTCx->SEC = TimeValue & RTC_SEC_MASK;
- break;
-
- case RTC_TIMETYPE_MINUTE:
- if(TimeValue <= RTC_MINUTE_MAX)
- RTCx->MIN = TimeValue & RTC_MIN_MASK;
- break;
-
- case RTC_TIMETYPE_HOUR:
- if(TimeValue <= RTC_HOUR_MAX)
- RTCx->HOUR = TimeValue & RTC_HOUR_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFWEEK:
- if(TimeValue <= RTC_DAYOFWEEK_MAX)
- RTCx->DOW = TimeValue & RTC_DOW_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFMONTH:
- if((TimeValue >= RTC_DAYOFMONTH_MIN)&&(TimeValue <= RTC_DAYOFMONTH_MAX))
- RTCx->DOM = TimeValue & RTC_DOM_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFYEAR:
- if((TimeValue >= RTC_DAYOFYEAR_MIN)&&(TimeValue <= RTC_DAYOFYEAR_MAX))
- RTCx->DOY = TimeValue & RTC_DOY_MASK;
- break;
-
- case RTC_TIMETYPE_MONTH:
- if((TimeValue >= RTC_MONTH_MIN)&&(TimeValue <= RTC_MONTH_MAX))
- RTCx->MONTH = TimeValue & RTC_MONTH_MASK;
- break;
-
- case RTC_TIMETYPE_YEAR:
- if(TimeValue <= RTC_YEAR_MAX)
- RTCx->YEAR = TimeValue & RTC_YEAR_MASK;
- break;
- }
-}
-
-/*********************************************************************//**
- * @brief Get current time value for each type time type
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Timetype: Time Type, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @return Value of time according to specified time type
- **********************************************************************/
-uint32_t RTC_GetTime(LPC_RTC_TypeDef *RTCx, uint32_t Timetype)
-{
- switch (Timetype)
- {
- case RTC_TIMETYPE_SECOND:
- return (RTCx->SEC & RTC_SEC_MASK);
- case RTC_TIMETYPE_MINUTE:
- return (RTCx->MIN & RTC_MIN_MASK);
- case RTC_TIMETYPE_HOUR:
- return (RTCx->HOUR & RTC_HOUR_MASK);
- case RTC_TIMETYPE_DAYOFWEEK:
- return (RTCx->DOW & RTC_DOW_MASK);
- case RTC_TIMETYPE_DAYOFMONTH:
- return (RTCx->DOM & RTC_DOM_MASK);
- case RTC_TIMETYPE_DAYOFYEAR:
- return (RTCx->DOY & RTC_DOY_MASK);
- case RTC_TIMETYPE_MONTH:
- return (RTCx->MONTH & RTC_MONTH_MASK);
- case RTC_TIMETYPE_YEAR:
- return (RTCx->YEAR & RTC_YEAR_MASK);
- default:
- return (0);
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set full of time in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
- * contains time value in full.
- * @return None
- **********************************************************************/
-void RTC_SetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
-{
- RTCx->DOM = pFullTime->DOM & RTC_DOM_MASK;
- RTCx->DOW = pFullTime->DOW & RTC_DOW_MASK;
- RTCx->DOY = pFullTime->DOY & RTC_DOY_MASK;
- RTCx->HOUR = pFullTime->HOUR & RTC_HOUR_MASK;
- RTCx->MIN = pFullTime->MIN & RTC_MIN_MASK;
- RTCx->SEC = pFullTime->SEC & RTC_SEC_MASK;
- RTCx->MONTH = pFullTime->MONTH & RTC_MONTH_MASK;
- RTCx->YEAR = pFullTime->YEAR & RTC_YEAR_MASK;
-}
-
-
-/*********************************************************************//**
- * @brief Get full of time in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
- * will be stored time in full.
- * @return None
- **********************************************************************/
-void RTC_GetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
-{
- pFullTime->DOM = RTCx->DOM & RTC_DOM_MASK;
- pFullTime->DOW = RTCx->DOW & RTC_DOW_MASK;
- pFullTime->DOY = RTCx->DOY & RTC_DOY_MASK;
- pFullTime->HOUR = RTCx->HOUR & RTC_HOUR_MASK;
- pFullTime->MIN = RTCx->MIN & RTC_MIN_MASK;
- pFullTime->SEC = RTCx->SEC & RTC_SEC_MASK;
- pFullTime->MONTH = RTCx->MONTH & RTC_MONTH_MASK;
- pFullTime->YEAR = RTCx->YEAR & RTC_YEAR_MASK;
-}
-
-
-/*********************************************************************//**
- * @brief Set alarm time value for each time type
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Timetype: Time Type, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @param[in] ALValue Alarm time value to set
- * @return None
- **********************************************************************/
-void RTC_SetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t ALValue)
-{
- switch (Timetype)
- {
- case RTC_TIMETYPE_SECOND:
- if(ALValue <= RTC_SECOND_MAX)
- RTCx->ALSEC = ALValue & RTC_SEC_MASK;
- break;
-
- case RTC_TIMETYPE_MINUTE:
- if(ALValue <= RTC_MINUTE_MAX)
- RTCx->ALMIN = ALValue & RTC_MIN_MASK;
- break;
-
- case RTC_TIMETYPE_HOUR:
- if(ALValue <= RTC_HOUR_MAX)
- RTCx->ALHOUR = ALValue & RTC_HOUR_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFWEEK:
- if(ALValue <= RTC_DAYOFWEEK_MAX)
- RTCx->ALDOW = ALValue & RTC_DOW_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFMONTH:
- if((ALValue >= RTC_DAYOFMONTH_MIN)&&(ALValue <= RTC_DAYOFMONTH_MAX))
- RTCx->ALDOM = ALValue & RTC_DOM_MASK;
- break;
-
- case RTC_TIMETYPE_DAYOFYEAR:
- if((ALValue >= RTC_DAYOFYEAR_MIN)&&(ALValue <= RTC_DAYOFYEAR_MAX))
- RTCx->ALDOY = ALValue & RTC_DOY_MASK;
- break;
-
- case RTC_TIMETYPE_MONTH:
- if((ALValue >= RTC_MONTH_MIN)&&(ALValue <= RTC_MONTH_MAX))
- RTCx->ALMON = ALValue & RTC_MONTH_MASK;
- break;
-
- case RTC_TIMETYPE_YEAR:
- if(ALValue <= RTC_YEAR_MAX)
- RTCx->ALYEAR = ALValue & RTC_YEAR_MASK;
- break;
- }
-}
-
-
-
-/*********************************************************************//**
- * @brief Get alarm time value for each time type
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Timetype: Time Type, should be:
- * - RTC_TIMETYPE_SECOND
- * - RTC_TIMETYPE_MINUTE
- * - RTC_TIMETYPE_HOUR
- * - RTC_TIMETYPE_DAYOFWEEK
- * - RTC_TIMETYPE_DAYOFMONTH
- * - RTC_TIMETYPE_DAYOFYEAR
- * - RTC_TIMETYPE_MONTH
- * - RTC_TIMETYPE_YEAR
- * @return Value of Alarm time according to specified time type
- **********************************************************************/
-uint32_t RTC_GetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype)
-{
- switch (Timetype)
- {
- case RTC_TIMETYPE_SECOND:
- return (RTCx->ALSEC & RTC_SEC_MASK);
- case RTC_TIMETYPE_MINUTE:
- return (RTCx->ALMIN & RTC_MIN_MASK);
- case RTC_TIMETYPE_HOUR:
- return (RTCx->ALHOUR & RTC_HOUR_MASK);
- case RTC_TIMETYPE_DAYOFWEEK:
- return (RTCx->ALDOW & RTC_DOW_MASK);
- case RTC_TIMETYPE_DAYOFMONTH:
- return (RTCx->ALDOM & RTC_DOM_MASK);
- case RTC_TIMETYPE_DAYOFYEAR:
- return (RTCx->ALDOY & RTC_DOY_MASK);
- case RTC_TIMETYPE_MONTH:
- return (RTCx->ALMON & RTC_MONTH_MASK);
- case RTC_TIMETYPE_YEAR:
- return (RTCx->ALYEAR & RTC_YEAR_MASK);
- default:
- return (0);
- }
-}
-
-
-/*********************************************************************//**
- * @brief Set full of alarm time in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
- * contains alarm time value in full.
- * @return None
- **********************************************************************/
-void RTC_SetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
-{
- RTCx->ALDOM = pFullTime->DOM & RTC_DOM_MASK;
- RTCx->ALDOW = pFullTime->DOW & RTC_DOW_MASK;
- RTCx->ALDOY = pFullTime->DOY & RTC_DOY_MASK;
- RTCx->ALHOUR = pFullTime->HOUR & RTC_HOUR_MASK;
- RTCx->ALMIN = pFullTime->MIN & RTC_MIN_MASK;
- RTCx->ALSEC = pFullTime->SEC & RTC_SEC_MASK;
- RTCx->ALMON = pFullTime->MONTH & RTC_MONTH_MASK;
- RTCx->ALYEAR = pFullTime->YEAR & RTC_YEAR_MASK;
-}
-
-
-/*********************************************************************//**
- * @brief Get full of alarm time in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] pFullTime Pointer to a RTC_TIME_Type structure that
- * will be stored alarm time in full.
- * @return None
- **********************************************************************/
-void RTC_GetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime)
-{
- pFullTime->DOM = RTCx->ALDOM & RTC_DOM_MASK;
- pFullTime->DOW = RTCx->ALDOW & RTC_DOW_MASK;
- pFullTime->DOY = RTCx->ALDOY & RTC_DOY_MASK;
- pFullTime->HOUR = RTCx->ALHOUR & RTC_HOUR_MASK;
- pFullTime->MIN = RTCx->ALMIN & RTC_MIN_MASK;
- pFullTime->SEC = RTCx->ALSEC & RTC_SEC_MASK;
- pFullTime->MONTH = RTCx->ALMON & RTC_MONTH_MASK;
- pFullTime->YEAR = RTCx->ALYEAR & RTC_YEAR_MASK;
-}
-
-
-/*********************************************************************//**
- * @brief Check whether if specified Location interrupt in
- * RTC peripheral is set or not
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] IntType Interrupt location type, should be:
- * - RTC_INT_COUNTER_INCREASE: Counter Increment Interrupt
- * block generated an interrupt.
- * - RTC_INT_ALARM: Alarm generated an
- * interrupt.
- * @return New state of specified Location interrupt in RTC peripheral
- * (SET or RESET)
- **********************************************************************/
-IntStatus RTC_GetIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType)
-{
- return ((RTCx->ILR & IntType) ? SET : RESET);
-}
-
-
-/*********************************************************************//**
- * @brief Clear specified Location interrupt pending in
- * RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] IntType Interrupt location type, should be:
- * - RTC_INT_COUNTER_INCREASE: Clear Counter Increment
- * Interrupt pending.
- * - RTC_INT_ALARM: Clear alarm interrupt pending
- * @return None
- **********************************************************************/
-void RTC_ClearIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType)
-{
- RTCx->ILR |= IntType;
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable calibration counter in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] NewState New State of this function, should be:
- * - ENABLE: The calibration counter is enabled and counting
- * - DISABLE: The calibration counter is disabled and reset to zero
- * @return None
- **********************************************************************/
-void RTC_CalibCounterCmd(LPC_RTC_TypeDef *RTCx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- RTCx->CCR &= (~RTC_CCR_CCALEN) & RTC_CCR_BITMASK;
- }
- else
- {
- RTCx->CCR |= RTC_CCR_CCALEN;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Configures Calibration in RTC peripheral
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] CalibValue Calibration value, should be in range from
- * 0 to 131,072
- * @param[in] CalibDir Calibration Direction, should be:
- * - RTC_CALIB_DIR_FORWARD: Forward calibration
- * - RTC_CALIB_DIR_BACKWARD: Backward calibration
- * @return None
- **********************************************************************/
-void RTC_CalibConfig(LPC_RTC_TypeDef *RTCx, uint32_t CalibValue, uint8_t CalibDir)
-{
- RTCx->CALIBRATION = ((CalibValue) & RTC_CALIBRATION_CALVAL_MASK) \
- | ((CalibDir == RTC_CALIB_DIR_BACKWARD) ? RTC_CALIBRATION_LIBDIR : 0);
-}
-
-
-/*********************************************************************//**
- * @brief Write value to General purpose registers
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Channel General purpose registers Channel number,
- * should be in range from 0 to 4.
- * @param[in] Value Value to write
- * @return None
- * Note: These General purpose registers can be used to store important
- * information when the main power supply is off. The value in these
- * registers is not affected by chip reset.
- **********************************************************************/
-void RTC_WriteGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel, uint32_t Value)
-{
- uint32_t *preg;
-
- preg = (uint32_t *)&RTCx->GPREG0;
- preg += Channel;
- *preg = Value;
-}
-
-
-/*********************************************************************//**
- * @brief Read value from General purpose registers
- * @param[in] RTCx RTC peripheral selected, should be LPC_RTC
- * @param[in] Channel General purpose registers Channel number,
- * should be in range from 0 to 4.
- * @return Read Value
- * Note: These General purpose registers can be used to store important
- * information when the main power supply is off. The value in these
- * registers is not affected by chip reset.
- **********************************************************************/
-uint32_t RTC_ReadGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel)
-{
- uint32_t *preg;
- uint32_t value;
-
- preg = (uint32_t *)&RTCx->GPREG0;
- preg += Channel;
- value = *preg;
- return (value);
-}
-/*********************************************************************//**
- * @brief Initialize an variable of type RTC_ER_CONFIG_Type.
- * @param[in] pConfig The address of input variable.
- * @return None
- **********************************************************************/
-void RTC_ER_InitConfigStruct(RTC_ER_CONFIG_Type* pConfig)
-{
- uint32_t tmp;
- if(pConfig == NULL)
- return;
-
- for(tmp = 0; tmp < RTC_ER_INPUT_CHANNEL_NUM; tmp++)
- {
- pConfig->InputChannel[tmp].EventOnPosEdge = FALSE;
- pConfig->InputChannel[tmp].GPClear= FALSE;
- pConfig->InputChannel[tmp].IntWake= FALSE;
- }
- pConfig->Clk = 64;
-}
-
-/*********************************************************************//**
- * @brief Initialize Event Monitor/Recorder
- * @param[in] pConfig Configuration
- * @return SUCCESS/ERROR
- * Note: The RTC Module must be intialized before initializing this module.
- **********************************************************************/
-Status RTC_ER_Init(RTC_ER_CONFIG_Type* pConfig)
-{
- if(pConfig == NULL)
- return ERROR;
- if((LPC_RTC->CCR & RTC_CCR_CLKEN) == 0)
- return ERROR;
-
- /* EV0 */
- if(pConfig->InputChannel[0].EventOnPosEdge)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV0_POS_EDGE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV0_POS_EDGE;
-
- if(pConfig->InputChannel[0].IntWake)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV0_INTWAKE_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV0_INTWAKE_ENABLE;
-
- if(pConfig->InputChannel[0].GPClear)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV0_GPCLEAR_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV0_GPCLEAR_ENABLE;
-
- /* EV1 */
- if(pConfig->InputChannel[1].EventOnPosEdge)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV1_POS_EDGE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV1_POS_EDGE;
-
- if(pConfig->InputChannel[1].IntWake)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV1_INTWAKE_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV1_INTWAKE_ENABLE;
-
- if(pConfig->InputChannel[1].GPClear)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV1_GPCLEAR_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV1_GPCLEAR_ENABLE;
-
- /* EV2 */
- if(pConfig->InputChannel[2].EventOnPosEdge)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV2_POS_EDGE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV2_POS_EDGE;
-
- if(pConfig->InputChannel[2].IntWake)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV2_INTWAKE_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV2_INTWAKE_ENABLE;
-
- if(pConfig->InputChannel[2].GPClear)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV2_GPCLEAR_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV2_GPCLEAR_ENABLE;
-
- /* Sample Clock */
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_MODE_MASK;
- switch(pConfig->Clk)
- {
- case 0:
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_MODE_CLK_DISABLE;
- break;
- case 16:
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_MODE_16HZ;
- break;
- case 64:
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_MODE_64HZ;
- break;
- case 1000:
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_MODE_1KHZ;
- break;
- default:
- return ERROR;
- }
- return SUCCESS;
-}
-/*********************************************************************//**
- * @brief Enable/Disable a input channel for Event Monitor/Recorder
- * @param[in] channel Channel Number. It should be 0~2
- * @param[in]state ENABLE/DISABLE
- * @return SUCCESS/ERROR
- **********************************************************************/
-Status RTC_ER_Cmd(uint8_t channel, FunctionalState state)
-{
- switch(channel)
- {
- case 0:
- if(state)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV0_INPUT_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV0_INPUT_ENABLE;
- break;
- case 1:
- if(state)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV1_INPUT_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV1_INPUT_ENABLE;
- break;
- case 2:
- if(state)
- LPC_RTC->ERCONTROL |= RTC_ERCTRL_EV2_INPUT_ENABLE;
- else
- LPC_RTC->ERCONTROL &= ~RTC_ERCTRL_EV2_INPUT_ENABLE;
- break;
- default:
- return ERROR;
- }
- return SUCCESS;
-}
-/*********************************************************************//**
- * @brief Get event count on a given channel.
- * @param[in] channel Channel Number. It should be 0~2
- * @return counter
- **********************************************************************/
-uint8_t RTC_ER_GetEventCount(uint8_t channel)
-{
- uint8_t count = 0;
- switch(channel)
- {
- case 0:
- count = RTC_ER_EV0_COUNTER(LPC_RTC->ERCOUNTERS);
- break;
- case 1:
- count = RTC_ER_EV1_COUNTER(LPC_RTC->ERCOUNTERS);
- break;
- case 2:
- count = RTC_ER_EV2_COUNTER(LPC_RTC->ERCOUNTERS);
- break;
- default:
- break;
- }
- return count;
-}
-/*********************************************************************//**
- * @brief Get Event Monirot/Recorder Status.
- * @param[in] None
- * @return Status. It can includes:
- * RTC_ER_EVENTS_ON_EV0_FLG
- * RTC_ER_EVENTS_ON_EV1_FLG
- * RTC_ER_EVENTS_ON_EV2_FLG
- * RTC_ER_STATUS_GP_CLEARED_FLG
- * RTC_ER_STATUS_WAKEUP_REQ_PENDING
- **********************************************************************/
-uint32_t RTC_ER_GetStatus(void)
-{
- return LPC_RTC->ERSTATUS;
-}
-/*********************************************************************//**
- * @brief Clear Event Monitor/recoder status register.
- * @param[in] status Status Flag. It should be:
- * RTC_ER_EVENTS_ON_EV0_FLG
- * RTC_ER_EVENTS_ON_EV1_FLG
- * RTC_ER_EVENTS_ON_EV2_FLG
- * RTC_ER_STATUS_GP_CLEARED_FLG
- * RTC_ER_STATUS_WAKEUP_REQ_PENDING
- * @return None
- **********************************************************************/
-void RTC_ER_ClearStatus(uint32_t status)
-{
- LPC_RTC->ERSTATUS |= status;
-}
-/*********************************************************************//**
- * @brief Check whether a Wakup request is pending or not.
- * @param[in] None
- * @return TRUE/FALSE
- **********************************************************************/
-Bool RTC_ER_WakupReqPending(void)
-{
- if(LPC_RTC->ERSTATUS & RTC_ER_STATUS_WAKEUP_REQ_PENDING)
- return TRUE;
- else
- return FALSE;
-}
-/*********************************************************************//**
- * @brief Check whether RTC General Purpose registed has been cleared or not.
- * @param[in] None
- * @return TRUE/FALSE
- **********************************************************************/
-Bool RTC_ER_GPCleared(void)
-{
- if(LPC_RTC->ERSTATUS & RTC_ER_STATUS_GP_CLEARED_FLG)
- return TRUE;
- else
- return FALSE;
-}
-/*********************************************************************//**
- * @brief Get the timestamp of the fist event on a given channel.
- * @param[in] channel Channel number (It should be 0~2)
- * @param[in] pTimeStamp point to the buffer
- * @return SUCCESS/ERROR
- **********************************************************************/
-Status RTC_ER_GetFirstTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp)
-{
- if(pTimeStamp == NULL)
- return ERROR;
-
- switch(channel)
- {
- case 0:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV0_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERFIRSTSTAMP0);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERFIRSTSTAMP0);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERFIRSTSTAMP0);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERFIRSTSTAMP0);
- break;
- case 1:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV1_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERFIRSTSTAMP1);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERFIRSTSTAMP1);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERFIRSTSTAMP1);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERFIRSTSTAMP1);
- break;
- case 2:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV2_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERFIRSTSTAMP2);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERFIRSTSTAMP2);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERFIRSTSTAMP2);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERFIRSTSTAMP2);
- break;
- default:
- break;
- }
- return SUCCESS;
-
-}
-/*********************************************************************//**
- * @brief Get the timestamp of the last event on a given channel.
- * @param[in] channel Channel number (It should be 0~2)
- * @param[in] pTimeStamp point to the buffer
- * @return SUCCESS/ERROR
- **********************************************************************/
-Status RTC_ER_GetLastTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp)
-{
- if(pTimeStamp == NULL)
- return ERROR;
-
- switch(channel)
- {
- case 0:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV0_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERLASTSTAMP0);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERLASTSTAMP0);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERLASTSTAMP0);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERLASTSTAMP0);
- break;
- case 1:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV1_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERLASTSTAMP1);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERLASTSTAMP1);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERLASTSTAMP1);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERLASTSTAMP1);
- break;
- case 2:
- if((LPC_RTC->ERSTATUS & (1<<RTC_ER_STATUS_EV2_BIT)) == 0)
- return ERROR;
- pTimeStamp->SEC = RTC_ER_TIMESTAMP_SEC(LPC_RTC->ERLASTSTAMP2);
- pTimeStamp->MIN= RTC_ER_TIMESTAMP_MIN(LPC_RTC->ERLASTSTAMP2);
- pTimeStamp->HOUR= RTC_ER_TIMESTAMP_HOUR(LPC_RTC->ERLASTSTAMP2);
- pTimeStamp->DOY = RTC_ER_TIMESTAMP_DOY(LPC_RTC->ERLASTSTAMP2);
- break;
- default:
- break;
- }
- return SUCCESS;
-
-}
-
-
-/**
- * @}
- */
-
-#endif /*_RTC*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_ssp.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_ssp.c
deleted file mode 100644
index f197e5b4e4..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_ssp.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_ssp.c 2011-06-02
-*//**
-* @file lpc_ssp.c
-* @brief Contains all functions support for SSP firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup SSP
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _SSP
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_ssp.h"
-#include "lpc_clkpwr.h"
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup SSP_Public_Functions
- * @{
- */
-static void setSSPclock (LPC_SSP_TypeDef *SSPx, uint32_t target_clock);
-
-/*********************************************************************//**
- * @brief Setup clock rate for SSP device
- * @param[in] SSPx SSP peripheral definition, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] target_clock : clock of SSP (Hz)
- * @return None
- ***********************************************************************/
-static void setSSPclock (LPC_SSP_TypeDef *SSPx, uint32_t target_clock)
-{
- uint32_t prescale, cr0_div, cmp_clk, ssp_clk;
- ssp_clk = CLKPWR_GetCLK (CLKPWR_CLKTYPE_PER);
-
- /* Find closest divider to get at or under the target frequency.
- Use smallest prescale possible and rely on the divider to get
- the closest target frequency */
- cr0_div = 0;
- cmp_clk = 0xFFFFFFFF;
- prescale = 2;
- while (cmp_clk > target_clock)
- {
- cmp_clk = ssp_clk / ((cr0_div + 1) * prescale);
- if (cmp_clk > target_clock)
- {
- cr0_div++;
- if (cr0_div > 0xFF)
- {
- cr0_div = 0;
- prescale += 2;
- }
- }
- }
-
- /* Write computed prescaler and divider back to register */
- SSPx->CR0 &= (~SSP_CR0_SCR(0xFF)) & SSP_CR0_BITMASK;
- SSPx->CR0 |= (SSP_CR0_SCR(cr0_div)) & SSP_CR0_BITMASK;
- SSPx->CPSR = prescale & SSP_CPSR_BITMASK;
-}
-
-/**
- * @}
- */
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup SSP_Public_Functions
- * @{
- */
-
-/********************************************************************//**
- * @brief Initializes the SSPx peripheral according to the specified
-* parameters in the SSP_ConfigStruct.
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] SSP_ConfigStruct Pointer to a SSP_CFG_Type structure
-* that contains the configuration information for the
-* specified SSP peripheral.
- * @return None
- *********************************************************************/
-void SSP_Init(LPC_SSP_TypeDef *SSPx, SSP_CFG_Type *SSP_ConfigStruct)
-{
- uint32_t tmp;
-
- if(SSPx == LPC_SSP0) {
- /* Set up clock and power for SSP0 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP0, ENABLE);
- } else if(SSPx == LPC_SSP1) {
- /* Set up clock and power for SSP1 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP1, ENABLE);
- } else if(SSPx == LPC_SSP2) {
- /* Set up clock and power for SSP1 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP2, ENABLE);
- } else {
- return;
- }
-
- /* Configure SSP, interrupt is disable, LoopBack mode is disable,
- * SSP is disable, Slave output is disable as default
- */
- tmp = ((SSP_ConfigStruct->CPHA) | (SSP_ConfigStruct->CPOL) \
- | (SSP_ConfigStruct->FrameFormat) | (SSP_ConfigStruct->Databit))
- & SSP_CR0_BITMASK;
- // write back to SSP control register
- SSPx->CR0 = tmp;
-
- tmp = SSP_ConfigStruct->Mode & SSP_CR1_BITMASK;
- // Write back to CR1
- SSPx->CR1 = tmp;
-
- // Set clock rate for SSP peripheral
- setSSPclock(SSPx, SSP_ConfigStruct->ClockRate);
-}
-
-/*********************************************************************//**
- * @brief De-initializes the SSPx peripheral registers to their
-* default reset values.
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @return None
- **********************************************************************/
-void SSP_DeInit(LPC_SSP_TypeDef* SSPx)
-{
- if (SSPx == LPC_SSP0){
- /* Set up clock and power for SSP0 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP0, DISABLE);
- } else if (SSPx == LPC_SSP1) {
- /* Set up clock and power for SSP1 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP1, DISABLE);
- } else if (SSPx == LPC_SSP2) {
- /* Set up clock and power for SSP1 module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCSSP2, DISABLE);
- }
-}
-
-/*****************************************************************************//**
-* @brief Get data size bit selected
-* @param[in] SSPx pointer to LPC_SSP_TypeDef structure, should be:
-* - LPC_SSP0: SSP0 peripheral
-* - LPC_SSP1: SSP1 peripheral
-* @return Data size, could be:
-* - SSP_DATABIT_4: 4 bit transfer
-* - SSP_DATABIT_5: 5 bit transfer
-* ...
-* - SSP_DATABIT_16: 16 bit transfer
-*******************************************************************************/
-uint8_t SSP_GetDataSize(LPC_SSP_TypeDef* SSPx)
-{
- return (SSPx->CR0 & (0xF));
-}
-
-/*****************************************************************************//**
-* @brief Fills each SSP_InitStruct member with its default value:
-* - CPHA = SSP_CPHA_FIRST
-* - CPOL = SSP_CPOL_HI
-* - ClockRate = 1000000
-* - Databit = SSP_DATABIT_8
-* - Mode = SSP_MASTER_MODE
-* - FrameFormat = SSP_FRAME_SSP
-* @param[in] SSP_InitStruct Pointer to a SSP_CFG_Type structure
-* which will be initialized.
-* @return None
-*******************************************************************************/
-void SSP_ConfigStructInit(SSP_CFG_Type *SSP_InitStruct)
-{
- SSP_InitStruct->CPHA = SSP_CPHA_FIRST;
- SSP_InitStruct->CPOL = SSP_CPOL_HI;
- SSP_InitStruct->ClockRate = 1000000;
- SSP_InitStruct->Databit = SSP_DATABIT_8;
- SSP_InitStruct->Mode = SSP_MASTER_MODE;
- SSP_InitStruct->FrameFormat = SSP_FRAME_SPI;
-}
-
-
-/*********************************************************************//**
- * @brief Enable or disable SSP peripheral's operation
- * @param[in] SSPx SSP peripheral, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] NewState New State of SSPx peripheral's operation
- * @return none
- **********************************************************************/
-void SSP_Cmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- SSPx->CR1 |= SSP_CR1_SSP_EN;
- }
- else
- {
- SSPx->CR1 &= (~SSP_CR1_SSP_EN) & SSP_CR1_BITMASK;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable or disable Loop Back mode function in SSP peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] NewState New State of Loop Back mode, should be:
- * - ENABLE: Enable this function
- * - DISABLE: Disable this function
- * @return None
- **********************************************************************/
-void SSP_LoopBackCmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- SSPx->CR1 |= SSP_CR1_LBM_EN;
- }
- else
- {
- SSPx->CR1 &= (~SSP_CR1_LBM_EN) & SSP_CR1_BITMASK;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable or disable Slave Output function in SSP peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] NewState New State of Slave Output function, should be:
- * - ENABLE: Slave Output in normal operation
- * - DISABLE: Slave Output is disabled. This blocks
- * SSP controller from driving the transmit data
- * line (MISO)
- * Note: This function is available when SSP peripheral in Slave mode
- * @return None
- **********************************************************************/
-void SSP_SlaveOutputCmd(LPC_SSP_TypeDef* SSPx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- SSPx->CR1 &= (~SSP_CR1_SO_DISABLE) & SSP_CR1_BITMASK;
- }
- else
- {
- SSPx->CR1 |= SSP_CR1_SO_DISABLE;
- }
-}
-
-
-
-/*********************************************************************//**
- * @brief Transmit a single data through SSPx peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] Data Data to transmit (must be 16 or 8-bit long,
- * this depend on SSP data bit number configured)
- * @return none
- **********************************************************************/
-void SSP_SendData(LPC_SSP_TypeDef* SSPx, uint16_t Data)
-{
- SSPx->DR = SSP_DR_BITMASK(Data);
-}
-
-
-
-/*********************************************************************//**
- * @brief Receive a single data from SSPx peripheral
- * @param[in] SSPx SSP peripheral selected, should be
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @return Data received (16-bit long)
- **********************************************************************/
-uint16_t SSP_ReceiveData(LPC_SSP_TypeDef* SSPx)
-{
- return ((uint16_t) (SSP_DR_BITMASK(SSPx->DR)));
-}
-
-/*********************************************************************//**
- * @brief SSP Read write data function
- * @param[in] SSPx Pointer to SSP peripheral, should be
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] dataCfg Pointer to a SSP_DATA_SETUP_Type structure that
- * contains specified information about transmit
- * data configuration.
- * @param[in] xfType Transfer type, should be:
- * - SSP_TRANSFER_POLLING: Polling mode
- * - SSP_TRANSFER_INTERRUPT: Interrupt mode
- * @return Actual Data length has been transferred in polling mode.
- * In interrupt mode, always return (0)
- * Return (-1) if error.
- * Note: This function can be used in both master and slave mode.
- ***********************************************************************/
-int32_t SSP_ReadWrite (LPC_SSP_TypeDef *SSPx, SSP_DATA_SETUP_Type *dataCfg, \
- SSP_TRANSFER_Type xfType)
-{
- uint8_t *rdata8;
- uint8_t *wdata8;
- uint16_t *rdata16;
- uint16_t *wdata16;
- uint32_t stat;
- uint32_t tmp;
- int32_t dataword;
-
- dataCfg->rx_cnt = 0;
- dataCfg->tx_cnt = 0;
- dataCfg->status = 0;
-
-
- /* Clear all remaining data in RX FIFO */
- while (SSPx->SR & SSP_SR_RNE){
- tmp = (uint32_t) SSP_ReceiveData(SSPx);
- }
-
- // Clear status
- SSPx->ICR = SSP_ICR_BITMASK;
- if(SSP_GetDataSize(SSPx)>SSP_DATABIT_8)
- dataword = 1;
- else dataword = 0;
-
- // Polling mode ----------------------------------------------------------------------
- if (xfType == SSP_TRANSFER_POLLING){
- if (dataword == 0){
- rdata8 = (uint8_t *)dataCfg->rx_data;
- wdata8 = (uint8_t *)dataCfg->tx_data;
- } else {
- rdata16 = (uint16_t *)dataCfg->rx_data;
- wdata16 = (uint16_t *)dataCfg->tx_data;
- }
- while ((dataCfg->tx_cnt < dataCfg->length) || (dataCfg->rx_cnt < dataCfg->length)){
- if ((SSPx->SR & SSP_SR_TNF) && (dataCfg->tx_cnt < dataCfg->length)){
- // Write data to buffer
- if(dataCfg->tx_data == NULL){
- if (dataword == 0){
- SSP_SendData(SSPx, 0xFF);
- dataCfg->tx_cnt++;
- } else {
- SSP_SendData(SSPx, 0xFFFF);
- dataCfg->tx_cnt += 2;
- }
- } else {
- if (dataword == 0){
- SSP_SendData(SSPx, *wdata8);
- wdata8++;
- dataCfg->tx_cnt++;
- } else {
- SSP_SendData(SSPx, *wdata16);
- wdata16++;
- dataCfg->tx_cnt += 2;
- }
- }
- }
-
- // Check overrun error
- if ((stat = SSPx->RIS) & SSP_RIS_ROR){
- // save status and return
- dataCfg->status = stat | SSP_STAT_ERROR;
- return (-1);
- }
-
- // Check for any data available in RX FIFO
- while ((SSPx->SR & SSP_SR_RNE) && (dataCfg->rx_cnt < dataCfg->length)){
- // Read data from SSP data
- tmp = SSP_ReceiveData(SSPx);
-
- // Store data to destination
- if (dataCfg->rx_data != NULL)
- {
- if (dataword == 0){
- *(rdata8) = (uint8_t) tmp;
- rdata8++;
- } else {
- *(rdata16) = (uint16_t) tmp;
- rdata16++;
- }
- }
- // Increase counter
- if (dataword == 0){
- dataCfg->rx_cnt++;
- } else {
- dataCfg->rx_cnt += 2;
- }
- }
- }
-
- // save status
- dataCfg->status = SSP_STAT_DONE;
-
- if (dataCfg->tx_data != NULL){
- return dataCfg->tx_cnt;
- } else if (dataCfg->rx_data != NULL){
- return dataCfg->rx_cnt;
- } else {
- return (0);
- }
- }
-
- // Interrupt mode ----------------------------------------------------------------------
- else if (xfType == SSP_TRANSFER_INTERRUPT){
-
- while ((SSPx->SR & SSP_SR_TNF) && (dataCfg->tx_cnt < dataCfg->length)){
- // Write data to buffer
- if(dataCfg->tx_data == NULL){
- if (dataword == 0){
- SSP_SendData(SSPx, 0xFF);
- dataCfg->tx_cnt++;
- } else {
- SSP_SendData(SSPx, 0xFFFF);
- dataCfg->tx_cnt += 2;
- }
- } else {
- if (dataword == 0){
- SSP_SendData(SSPx, (*(uint8_t *)((uint32_t)dataCfg->tx_data + dataCfg->tx_cnt)));
- dataCfg->tx_cnt++;
- } else {
- SSP_SendData(SSPx, (*(uint16_t *)((uint32_t)dataCfg->tx_data + dataCfg->tx_cnt)));
- dataCfg->tx_cnt += 2;
- }
- }
-
- // Check error
- if ((stat = SSPx->RIS) & SSP_RIS_ROR){
- // save status and return
- dataCfg->status = stat | SSP_STAT_ERROR;
- return (-1);
- }
-
- // Check for any data available in RX FIFO
- while ((SSPx->SR & SSP_SR_RNE) && (dataCfg->rx_cnt < dataCfg->length)){
- // Read data from SSP data
- tmp = SSP_ReceiveData(SSPx);
-
- // Store data to destination
- if (dataCfg->rx_data != NULL)
- {
- if (dataword == 0){
- *(uint8_t *)((uint32_t)dataCfg->rx_data + dataCfg->rx_cnt) = (uint8_t) tmp;
- } else {
- *(uint16_t *)((uint32_t)dataCfg->rx_data + dataCfg->rx_cnt) = (uint16_t) tmp;
- }
- }
- // Increase counter
- if (dataword == 0){
- dataCfg->rx_cnt++;
- } else {
- dataCfg->rx_cnt += 2;
- }
- }
- }
-
- // If there more data to sent or receive
- if ((dataCfg->rx_cnt < dataCfg->length) || (dataCfg->tx_cnt < dataCfg->length)){
- // Enable all interrupt
- SSPx->IMSC = SSP_IMSC_BITMASK;
- } else {
- // Save status
- dataCfg->status = SSP_STAT_DONE;
- }
- return (0);
- }
-
- return (-1);
-}
-
-/*********************************************************************//**
- * @brief Checks whether the specified SSP status flag is set or not
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] FlagType Type of flag to check status, should be one
- * of following:
- * - SSP_STAT_TXFIFO_EMPTY: TX FIFO is empty
- * - SSP_STAT_TXFIFO_NOTFULL: TX FIFO is not full
- * - SSP_STAT_RXFIFO_NOTEMPTY: RX FIFO is not empty
- * - SSP_STAT_RXFIFO_FULL: RX FIFO is full
- * - SSP_STAT_BUSY: SSP peripheral is busy
- * @return New State of specified SSP status flag
- **********************************************************************/
-FlagStatus SSP_GetStatus(LPC_SSP_TypeDef* SSPx, uint32_t FlagType)
-{
- return ((SSPx->SR & FlagType) ? SET : RESET);
-}
-
-/*********************************************************************//**
- * @brief Enable or disable specified interrupt type in SSP peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] IntType Interrupt type in SSP peripheral, should be:
- * - SSP_INTCFG_ROR: Receive Overrun interrupt
- * - SSP_INTCFG_RT: Receive Time out interrupt
- * - SSP_INTCFG_RX: RX FIFO is at least half full interrupt
- * - SSP_INTCFG_TX: TX FIFO is at least half empty interrupt
- * @param[in] NewState New State of specified interrupt type, should be:
- * - ENABLE: Enable this interrupt type
- * - DISABLE: Disable this interrupt type
- * @return None
- * Note: We can enable/disable multi-interrupt type by OR multi value
- **********************************************************************/
-void SSP_IntConfig(LPC_SSP_TypeDef *SSPx, uint32_t IntType, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- SSPx->IMSC |= IntType;
- }
- else
- {
- SSPx->IMSC &= (~IntType) & SSP_IMSC_BITMASK;
- }
-}
-
-/*********************************************************************//**
- * @brief Check whether the specified Raw interrupt status flag is
- * set or not
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] RawIntType Raw Interrupt Type, should be:
- * - SSP_INTSTAT_RAW_ROR: Receive Overrun interrupt
- * - SSP_INTSTAT_RAW_RT: Receive Time out interrupt
- * - SSP_INTSTAT_RAW_RX: RX FIFO is at least half full interrupt
- * - SSP_INTSTAT_RAW_TX: TX FIFO is at least half empty interrupt
- * @return New State of specified Raw interrupt status flag in SSP peripheral
- * Note: Enabling/Disabling specified interrupt in SSP peripheral does not
- * effect to Raw Interrupt Status flag.
- **********************************************************************/
-IntStatus SSP_GetRawIntStatus(LPC_SSP_TypeDef *SSPx, uint32_t RawIntType)
-{
- return ((SSPx->RIS & RawIntType) ? SET : RESET);
-}
-
-/*********************************************************************//**
- * @brief Get Raw Interrupt Status register
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @return Raw Interrupt Status (RIS) register value
- **********************************************************************/
-uint32_t SSP_GetRawIntStatusReg(LPC_SSP_TypeDef *SSPx)
-{
- return (SSPx->RIS);
-}
-
-/*********************************************************************//**
- * @brief Check whether the specified interrupt status flag is
- * set or not
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] IntType Raw Interrupt Type, should be:
- * - SSP_INTSTAT_ROR: Receive Overrun interrupt
- * - SSP_INTSTAT_RT: Receive Time out interrupt
- * - SSP_INTSTAT_RX: RX FIFO is at least half full interrupt
- * - SSP_INTSTAT_TX: TX FIFO is at least half empty interrupt
- * @return New State of specified interrupt status flag in SSP peripheral
- * Note: Enabling/Disabling specified interrupt in SSP peripheral effects
- * to Interrupt Status flag.
- **********************************************************************/
-IntStatus SSP_GetIntStatus (LPC_SSP_TypeDef *SSPx, uint32_t IntType)
-{
- return ((SSPx->MIS & IntType) ? SET :RESET);
-}
-
-/*********************************************************************//**
- * @brief Clear specified interrupt pending in SSP peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] IntType Interrupt pending to clear, should be:
- * - SSP_INTCLR_ROR: clears the "frame was received when
- * RxFIFO was full" interrupt.
- * - SSP_INTCLR_RT: clears the "Rx FIFO was not empty and
- * has not been read for a timeout period" interrupt.
- * @return None
- **********************************************************************/
-void SSP_ClearIntPending(LPC_SSP_TypeDef *SSPx, uint32_t IntType)
-{
- SSPx->ICR = IntType;
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable DMA function for SSP peripheral
- * @param[in] SSPx SSP peripheral selected, should be:
- * - LPC_SSP0: SSP0 peripheral
- * - LPC_SSP1: SSP1 peripheral
- * @param[in] DMAMode Type of DMA, should be:
- * - SSP_DMA_TX: DMA for the transmit FIFO
- * - SSP_DMA_RX: DMA for the Receive FIFO
- * @param[in] NewState New State of DMA function on SSP peripheral,
- * should be:
- * - ENALBE: Enable this function
- * - DISABLE: Disable this function
- * @return None
- **********************************************************************/
-void SSP_DMACmd(LPC_SSP_TypeDef *SSPx, uint32_t DMAMode, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- SSPx->DMACR |= DMAMode;
- }
- else
- {
- SSPx->DMACR &= (~DMAMode) & SSP_DMA_BITMASK;
- }
-}
-
-/**
- * @}
- */
-
-#endif /*_SSP*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_systick.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_systick.c
deleted file mode 100644
index 66ea6d870a..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_systick.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_systick.c 2011-06-02
-*//**
-* @file lpc_systick.c
-* @brief Contains all functions support for SysTick firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup SYSTICK
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _SYSTICK
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_systick.h"
-#include "lpc_clkpwr.h"
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup SYSTICK_Public_Functions
- * @{
- */
-/*********************************************************************//**
- * @brief Initial System Tick with using internal CPU clock source
- * @param[in] time time interval(ms)
- * @return None
- * Note: time interval parameter should be less than:
- * 1/cclk * (2^24) * 1000 (ms)
- * In this case, with cclk = 96Mhz, time interval value < 174ms
- **********************************************************************/
-void SYSTICK_InternalInit(uint32_t time)
-{
- uint32_t cclk;
- float maxtime;
-
- cclk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU);
-
- /* With internal CPU clock frequency for LPC178X is 'SystemCoreClock'
- * And limit 24 bit for RELOAD value
- * So the maximum time can be set:
- * 1/SystemCoreClock * (2^24) * 1000 (ms)
- */
- //check time value is available or not
- maxtime = (1<<24)/(cclk / 1000) ;
-
- if(time > maxtime)
- {
- //Error loop
- while(1);
- }
- else
- {
- //Select CPU clock is System Tick clock source
- SysTick->CTRL |= ST_CTRL_CLKSOURCE;
-
- /* Set RELOAD value
- * RELOAD = (SystemCoreClock/1000) * time - 1
- * with time base is millisecond
- */
- SysTick->LOAD = (cclk/1000)*time - 1;
- }
-}
-
-/*********************************************************************//**
- * @brief Initial System Tick with using external clock source
- * @param[in] freq external clock frequency(Hz)
- * @param[in] time time interval(ms)
- * @return None
- **********************************************************************/
-void SYSTICK_ExternalInit(uint32_t freq, uint32_t time)
-{
- float maxtime;
-
- /* With external clock frequency for LPC178X is 'freq'
- * And limit 24 bit for RELOAD value
- * So the maximum time can be set:
- * 1/freq * (2^24) * 1000 (ms)
- */
- //check time value is available or not
- maxtime = (1<<24)/(freq / 1000) ;
- if (time>maxtime)
- {
- //Error Loop
- while(1);
- }
- else
- {
- //Select external clock is System Tick clock source
- SysTick->CTRL &= ~ ST_CTRL_CLKSOURCE;
-
- /* Set RELOAD value
- * RELOAD = (freq/1000) * time - 1
- * with time base is millisecond
- */
- maxtime = (freq/1000)*time - 1;
- SysTick->LOAD = (freq/1000)*time - 1;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable/disable System Tick counter
- * @param[in] NewState System Tick counter status, should be:
- * - ENABLE
- * - DISABLE
- * @return None
- **********************************************************************/
-void SYSTICK_Cmd(FunctionalState NewState)
-{
- if(NewState == ENABLE)
- //Enable System Tick counter
- SysTick->CTRL |= ST_CTRL_ENABLE;
- else
- //Disable System Tick counter
- SysTick->CTRL &= ~ST_CTRL_ENABLE;
-}
-
-/*********************************************************************//**
- * @brief Enable/disable System Tick interrupt
- * @param[in] NewState System Tick interrupt status, should be:
- * - ENABLE
- * - DISABLE
- * @return None
- **********************************************************************/
-void SYSTICK_IntCmd(FunctionalState NewState)
-{
- if(NewState == ENABLE)
- //Enable System Tick counter
- SysTick->CTRL |= ST_CTRL_TICKINT;
- else
- //Disable System Tick counter
- SysTick->CTRL &= ~ST_CTRL_TICKINT;
-}
-
-/*********************************************************************//**
- * @brief Get current value of System Tick counter
- * @param[in] None
- * @return current value of System Tick counter
- **********************************************************************/
-uint32_t SYSTICK_GetCurrentValue(void)
-{
- return (SysTick->VAL);
-}
-
-/*********************************************************************//**
- * @brief Clear Counter flag
- * @param[in] None
- * @return None
- **********************************************************************/
-void SYSTICK_ClearCounterFlag(void)
-{
- SysTick->CTRL &= ~ST_CTRL_COUNTFLAG;
-}
-/**
- * @}
- */
-#endif /*_SYSTICK*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_timer.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_timer.c
deleted file mode 100644
index dee26cc13c..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_timer.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_timer.c 2011-06-02
-*//**
-* @file lpc_timer.c
-* @brief Contains all functions support for Timer firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup TIMER
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _TIM
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_timer.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-/* Private Functions ---------------------------------------------------------- */
-
-static uint32_t getPClock (uint32_t timernum);
-static uint32_t converUSecToVal (uint32_t timernum, uint32_t usec);
-static int32_t converPtrToTimeNum (LPC_TIM_TypeDef *TIMx);
-
-
-/*********************************************************************//**
- * @brief Get peripheral clock of each timer controller
- * @param[in] timernum Timer number
- * @return Peripheral clock of timer
- **********************************************************************/
-static uint32_t getPClock (uint32_t timernum)
-{
- uint32_t clkdlycnt;
- clkdlycnt = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
- return clkdlycnt;
-}
-
-
-/*********************************************************************//**
- * @brief Convert a time to a timer count value
- * @param[in] timernum Timer number
- * @param[in] usec Time in microseconds
- * @return The number of required clock ticks to give the time delay
- **********************************************************************/
-uint32_t converUSecToVal (uint32_t timernum, uint32_t usec)
-{
- uint64_t clkdlycnt;
-
- // Get Pclock of timer
- clkdlycnt = (uint64_t) getPClock(timernum);
-
- clkdlycnt = (clkdlycnt * usec) / 1000000;
- return (uint32_t) clkdlycnt;
-}
-
-
-/*********************************************************************//**
- * @brief Convert a timer register pointer to a timer number
- * @param[in] TIMx Pointer to LPC_TIM_TypeDef, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @return The timer number (0 to 3) or -1 if register pointer is bad
- **********************************************************************/
-int32_t converPtrToTimeNum (LPC_TIM_TypeDef *TIMx)
-{
- int32_t tnum = -1;
-
- if (TIMx == LPC_TIM0)
- {
- tnum = 0;
- }
- else if (TIMx == LPC_TIM1)
- {
- tnum = 1;
- }
- else if (TIMx == LPC_TIM2)
- {
- tnum = 2;
- }
- else if (TIMx == LPC_TIM3)
- {
- tnum = 3;
- }
-
- return tnum;
-}
-
-/* End of Private Functions ---------------------------------------------------- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup TIM_Public_Functions
- * @{
- */
-
-/*********************************************************************//**
- * @brief Get Interrupt Status
- * @param[in] TIMx Timer selection, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] IntFlag Interrupt type, should be:
- * - TIM_MR0_INT: Interrupt for Match channel 0
- * - TIM_MR1_INT: Interrupt for Match channel 1
- * - TIM_MR2_INT: Interrupt for Match channel 2
- * - TIM_MR3_INT: Interrupt for Match channel 3
- * - TIM_CR0_INT: Interrupt for Capture channel 0
- * - TIM_CR1_INT: Interrupt for Capture channel 1
- * @return Flag Status for required interrupt
- * - SET : interrupt
- * - RESET : no interrupt
- **********************************************************************/
-FlagStatus TIM_GetIntStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag)
-{
- uint8_t temp;
- temp = (TIMx->IR)& TIM_IR_CLR(IntFlag);
- if (temp)
- return SET;
-
- return RESET;
-
-}
-/*********************************************************************//**
- * @brief Get Capture Interrupt Status
- * @param[in] TIMx Timer selection, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] IntFlag: interrupt type, should be:
- * - TIM_MR0_INT: Interrupt for Match channel 0
- * - TIM_MR1_INT: Interrupt for Match channel 1
- * - TIM_MR2_INT: Interrupt for Match channel 2
- * - TIM_MR3_INT: Interrupt for Match channel 3
- * - TIM_CR0_INT: Interrupt for Capture channel 0
- * - TIM_CR1_INT: Interrupt for Capture channel 1
- * @return FlagStatus
- * - SET : interrupt
- * - RESET : no interrupt
- **********************************************************************/
-FlagStatus TIM_GetIntCaptureStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag)
-{
- uint8_t temp;
- temp = (TIMx->IR) & (1<<(4+IntFlag));
- if(temp)
- return SET;
- return RESET;
-}
-/*********************************************************************//**
- * @brief Clear Interrupt pending
- * @param[in] TIMx Timer selection, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] IntFlag: interrupt type, should be:
- * - TIM_MR0_INT: Interrupt for Match channel 0
- * - TIM_MR1_INT: Interrupt for Match channel 1
- * - TIM_MR2_INT: Interrupt for Match channel 2
- * - TIM_MR3_INT: Interrupt for Match channel 3
- * - TIM_CR0_INT: Interrupt for Capture channel 0
- * - TIM_CR1_INT: Interrupt for Capture channel 1
- * @return None
- **********************************************************************/
-void TIM_ClearIntPending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag)
-{
- TIMx->IR = TIM_IR_CLR(IntFlag);
-}
-
-/*********************************************************************//**
- * @brief Clear Capture Interrupt pending
- * @param[in] TIMx Timer selection, should be
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] IntFlag interrupt type, should be:
- * - TIM_MR0_INT: Interrupt for Match channel 0
- * - TIM_MR1_INT: Interrupt for Match channel 1
- * - TIM_MR2_INT: Interrupt for Match channel 2
- * - TIM_MR3_INT: Interrupt for Match channel 3
- * - TIM_CR0_INT: Interrupt for Capture channel 0
- * - TIM_CR1_INT: Interrupt for Capture channel 1
- * @return None
- **********************************************************************/
-void TIM_ClearIntCapturePending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag)
-{
- TIMx->IR = (1<<(4+IntFlag));
-}
-
-/*********************************************************************//**
- * @brief Configuration for Timer at initial time
- * @param[in] TimerCounterMode timer counter mode, should be:
- * - TIM_TIMER_MODE: Timer mode
- * - TIM_COUNTER_RISING_MODE: Counter rising mode
- * - TIM_COUNTER_FALLING_MODE: Counter falling mode
- * - TIM_COUNTER_ANY_MODE:Counter on both edges
- * @param[in] TIM_ConfigStruct pointer to TIM_TIMERCFG_Type or
- * TIM_COUNTERCFG_Type
- * @return None
- **********************************************************************/
-void TIM_ConfigStructInit(TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct)
-{
- if (TimerCounterMode == TIM_TIMER_MODE )
- {
- TIM_TIMERCFG_Type * pTimeCfg = (TIM_TIMERCFG_Type *)TIM_ConfigStruct;
- pTimeCfg->PrescaleOption = TIM_PRESCALE_USVAL;
- pTimeCfg->PrescaleValue = 1;
- }
- else
- {
- TIM_COUNTERCFG_Type * pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct;
- pCounterCfg->CountInputSelect = TIM_COUNTER_INCAP0;
- }
-}
-
-/*********************************************************************//**
- * @brief Initial Timer/Counter device
- * Set Clock frequency for Timer
- * Set initial configuration for Timer
- * @param[in] TIMx Timer selection, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] TimerCounterMode Timer counter mode, should be:
- * - TIM_TIMER_MODE: Timer mode
- * - TIM_COUNTER_RISING_MODE: Counter rising mode
- * - TIM_COUNTER_FALLING_MODE: Counter falling mode
- * - TIM_COUNTER_ANY_MODE:Counter on both edges
- * @param[in] TIM_ConfigStruct pointer to TIM_TIMERCFG_Type
- * that contains the configuration information for the
- * specified Timer peripheral.
- * @return None
- **********************************************************************/
-void TIM_Init(LPC_TIM_TypeDef *TIMx, TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct)
-{
- TIM_TIMERCFG_Type *pTimeCfg;
- TIM_COUNTERCFG_Type *pCounterCfg;
-
- //set power
- if (TIMx== LPC_TIM0)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM0, ENABLE);
- }
- else if (TIMx== LPC_TIM1)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM1, ENABLE);
- }
-
- else if (TIMx== LPC_TIM2)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, ENABLE);
- }
- else if (TIMx== LPC_TIM3)
- {
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM3, ENABLE);
- }
-
- TIMx->CTCR &= ~TIM_CTCR_MODE_MASK;
- TIMx->CTCR |= TIM_TIMER_MODE;
-
- TIMx->TC =0;
- TIMx->PC =0;
- TIMx->PR =0;
- TIMx->TCR |= (1<<1); //Reset Counter
- TIMx->TCR &= ~(1<<1); //release reset
- if (TimerCounterMode == TIM_TIMER_MODE )
- {
- pTimeCfg = (TIM_TIMERCFG_Type *)TIM_ConfigStruct;
- if (pTimeCfg->PrescaleOption == TIM_PRESCALE_TICKVAL)
- {
- TIMx->PR = pTimeCfg->PrescaleValue -1 ;
- }
- else
- {
- TIMx->PR = converUSecToVal (converPtrToTimeNum(TIMx),pTimeCfg->PrescaleValue)-1;
- }
- }
- else
- {
-
- pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct;
- TIMx->CTCR &= ~TIM_CTCR_INPUT_MASK;
- if (pCounterCfg->CountInputSelect == TIM_COUNTER_INCAP1)
- TIMx->CCR |= _BIT(2);
- }
-
- // Clear interrupt pending
- TIMx->IR = 0xFFFFFFFF;
-
-}
-
-/*********************************************************************//**
- * @brief Close Timer/Counter device
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @return None
- **********************************************************************/
-void TIM_DeInit (LPC_TIM_TypeDef *TIMx)
-{
- // Disable timer/counter
- TIMx->TCR = 0x00;
-
- // Disable power
- if (TIMx== LPC_TIM0)
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM0, DISABLE);
-
- else if (TIMx== LPC_TIM1)
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM1, DISABLE);
-
- else if (TIMx== LPC_TIM2)
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, DISABLE);
-
- else if (TIMx== LPC_TIM3)
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, DISABLE);
-
-}
-
-/*********************************************************************//**
- * @brief Start/Stop Timer/Counter device
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] NewState
- * - ENABLE : set timer enable
- * - DISABLE : disable timer
- * @return None
- **********************************************************************/
-void TIM_Cmd(LPC_TIM_TypeDef *TIMx, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- TIMx->TCR |= TIM_ENABLE;
- }
- else
- {
- TIMx->TCR &= ~TIM_ENABLE;
- }
-}
-
-/*********************************************************************//**
- * @brief Reset Timer/Counter device,
- * Make TC and PC are synchronously reset on the next
- * positive edge of PCLK
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @return None
- **********************************************************************/
-void TIM_ResetCounter(LPC_TIM_TypeDef *TIMx)
-{
- TIMx->TCR |= TIM_RESET;
- TIMx->TCR &= ~TIM_RESET;
-}
-
-/*********************************************************************//**
- * @brief Configuration for Match register
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] TIM_MatchConfigStruct Pointer to TIM_MATCHCFG_Type
- * - MatchChannel : choose channel 0 or 1
- * - IntOnMatch : if SET, interrupt will be generated when MRxx match
- * the value in TC
- * - StopOnMatch : if SET, TC and PC will be stopped whenM Rxx match
- * the value in TC
- * - ResetOnMatch : if SET, Reset on MR0 when MRxx match
- * the value in TC
- * -ExtMatchOutputType: Select output for external match
- * + 0: Do nothing for external output pin if match
- * + 1: Force external output pin to low if match
- * + 2: Force external output pin to high if match
- * + 3: Toggle external output pin if match
- * MatchValue: Set the value to be compared with TC value
- * @return None
- **********************************************************************/
-void TIM_ConfigMatch(LPC_TIM_TypeDef *TIMx, TIM_MATCHCFG_Type *TIM_MatchConfigStruct)
-{
- switch(TIM_MatchConfigStruct->MatchChannel)
- {
- case 0:
- TIMx->MR0 = TIM_MatchConfigStruct->MatchValue;
- break;
- case 1:
- TIMx->MR1 = TIM_MatchConfigStruct->MatchValue;
- break;
- case 2:
- TIMx->MR2 = TIM_MatchConfigStruct->MatchValue;
- break;
- case 3:
- TIMx->MR3 = TIM_MatchConfigStruct->MatchValue;
- break;
- default:
- //Error match value
- //Error loop
- while(1);
- }
- //interrupt on MRn
- TIMx->MCR &= ~ TIM_MCR_CHANNEL_MASKBIT(TIM_MatchConfigStruct->MatchChannel);
-
- if (TIM_MatchConfigStruct->IntOnMatch)
- TIMx->MCR |= TIM_INT_ON_MATCH(TIM_MatchConfigStruct->MatchChannel);
-
- //reset on MRn
- if (TIM_MatchConfigStruct->ResetOnMatch)
- TIMx->MCR |= TIM_RESET_ON_MATCH(TIM_MatchConfigStruct->MatchChannel);
-
- //stop on MRn
- if (TIM_MatchConfigStruct->StopOnMatch)
- TIMx->MCR |= TIM_STOP_ON_MATCH(TIM_MatchConfigStruct->MatchChannel);
-
- // match output type
-
- TIMx->EMR &= ~ TIM_EM_MASK(TIM_MatchConfigStruct->MatchChannel);
- TIMx->EMR |= TIM_EM_SET(TIM_MatchConfigStruct->MatchChannel,TIM_MatchConfigStruct->ExtMatchOutputType);
-}
-/*********************************************************************//**
- * @brief Update Match value
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] MatchChannel Match channel, should be: 0..3
- * @param[in] MatchValue updated match value
- * @return None
- **********************************************************************/
-void TIM_UpdateMatchValue(LPC_TIM_TypeDef *TIMx,uint8_t MatchChannel, uint32_t MatchValue)
-{
- switch(MatchChannel)
- {
- case 0:
- TIMx->MR0 = MatchValue;
- break;
- case 1:
- TIMx->MR1 = MatchValue;
- break;
- case 2:
- TIMx->MR2 = MatchValue;
- break;
- case 3:
- TIMx->MR3 = MatchValue;
- break;
- default:
- //Error Loop
- while(1);
- }
-}
-
-/*********************************************************************//**
- * @brief Configuration for Capture register
- * @param[in] TIMx Pointer to timer device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] TIM_CaptureConfigStruct Pointer to TIM_CAPTURECFG_Type
- * - CaptureChannel: set the channel to capture data
- * - RisingEdge : if SET, Capture at rising edge
- * - FallingEdge : if SET, Capture at falling edge
- * - IntOnCaption : if SET, Capture generate interrupt
- * @return None
- **********************************************************************/
-void TIM_ConfigCapture(LPC_TIM_TypeDef *TIMx, TIM_CAPTURECFG_Type *TIM_CaptureConfigStruct)
-{
- TIMx->CCR &= ~TIM_CCR_CHANNEL_MASKBIT(TIM_CaptureConfigStruct->CaptureChannel);
-
- if (TIM_CaptureConfigStruct->RisingEdge)
- TIMx->CCR |= TIM_CAP_RISING(TIM_CaptureConfigStruct->CaptureChannel);
-
- if (TIM_CaptureConfigStruct->FallingEdge)
- TIMx->CCR |= TIM_CAP_FALLING(TIM_CaptureConfigStruct->CaptureChannel);
-
- if (TIM_CaptureConfigStruct->IntOnCaption)
- TIMx->CCR |= TIM_INT_ON_CAP(TIM_CaptureConfigStruct->CaptureChannel);
-}
-
-/*********************************************************************//**
- * @brief Read value of capture register in timer/counter device
- * @param[in] TIMx Pointer to timer/counter device, should be:
- * - LPC_TIM0: TIMER0 peripheral
- * - LPC_TIM1: TIMER1 peripheral
- * - LPC_TIM2: TIMER2 peripheral
- * - LPC_TIM3: TIMER3 peripheral
- * @param[in] CaptureChannel: capture channel number, should be:
- * - TIM_COUNTER_INCAP0: CAPn.0 input pin for TIMERn
- * - TIM_COUNTER_INCAP1: CAPn.1 input pin for TIMERn
- * @return Value of capture register
- **********************************************************************/
-uint32_t TIM_GetCaptureValue(LPC_TIM_TypeDef *TIMx, TIM_COUNTER_INPUT_OPT CaptureChannel)
-{
- if(CaptureChannel==0)
- return TIMx->CR0;
- else
- return TIMx->CR1;
-}
-
-/*---------------Advanced TIMER functions -----------------------------------------*/
-/*********************************************************************//**
- * @brief Timer wait (microseconds)
- * @param[in] time number of microseconds waiting
- * @return None
- **********************************************************************/
-void TIM_Waitus(uint32_t time)
-{
- TIM_MATCHCFG_Type MatchConfigStruct;
- LPC_TIM0->IR = 0xFFFFFFFF;
-
- MatchConfigStruct.MatchChannel = 0;
- MatchConfigStruct.IntOnMatch = ENABLE;
- MatchConfigStruct.ResetOnMatch = ENABLE;
- MatchConfigStruct.StopOnMatch = ENABLE;
- MatchConfigStruct.ExtMatchOutputType = 0;
- MatchConfigStruct.MatchValue = time;
-
- TIM_ConfigMatch(LPC_TIM0, &MatchConfigStruct);
- TIM_Cmd(LPC_TIM0,ENABLE);
- //wait until interrupt flag occur
- while(!(LPC_TIM0->IR & 0x01));
- TIM_ResetCounter(LPC_TIM0);
-}
-/*********************************************************************//**
- * @brief Timer wait (milliseconds)
- * @param[in] time number of millisecond waiting
- * @return None
- **********************************************************************/
-void TIM_Waitms(uint32_t time)
-{
- TIM_Waitus(time * 1000);
-}
-/**
- * @}
- */
-#endif /*_TIM*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_uart.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_uart.c
deleted file mode 100644
index bcd9ef51e0..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_uart.c
+++ /dev/null
@@ -1,1778 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_uart.c 2011-06-02
-*//**
-* @file lpc_uart.c
-* @brief Contains all functions support for UART firmware library
-* on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup UART
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _UART
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_uart.h"
-#include "lpc_clkpwr.h"
-
-/* Private Functions ---------------------------------------------------------- */
-
-static Status uart_set_divisors(UART_ID_Type UartID, uint32_t baudrate);
-static LPC_UART_TypeDef *uart_get_pointer(UART_ID_Type UartID);
-
-
-/*********************************************************************//**
- * @brief Determines best dividers to get a target clock rate
- * @param[in] UARTx Pointer to selected UART peripheral, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] baudrate Desired UART baud rate.
- * @return Error status, could be:
- * - SUCCESS
- * - ERROR
- **********************************************************************/
-static Status uart_set_divisors(UART_ID_Type UartID, uint32_t baudrate)
-{
- Status errorStatus = ERROR;
-
- uint32_t uClk;
- uint32_t d, m, bestd, bestm, tmp;
- uint64_t best_divisor, divisor;
- uint32_t current_error, best_error;
- uint32_t recalcbaud;
-
- /* get UART block clock */
- uClk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER);
-
- /* In the Uart IP block, baud rate is calculated using FDR and DLL-DLM registers
- * The formula is :
- * BaudRate= uClk * (mulFracDiv/(mulFracDiv+dividerAddFracDiv) / (16 * (DLL)
- * It involves floating point calculations. That's the reason the formulae are adjusted with
- * Multiply and divide method.*/
-
- /* The value of mulFracDiv and dividerAddFracDiv should comply to the following expressions:
- * 0 < mulFracDiv <= 15, 0 <= dividerAddFracDiv <= 15 */
- best_error = 0xFFFFFFFF; /* Worst case */
- bestd = 0;
- bestm = 0;
- best_divisor = 0;
-
- for (m = 1 ; m <= 15 ;m++)
- {
- for (d = 0 ; d < m ; d++)
- {
- divisor = ((uint64_t)uClk << 28)*m / (baudrate*(m+d));
- current_error = divisor & 0xFFFFFFFF;
-
- tmp = divisor>>32;
-
- /* Adjust error */
- if(current_error > ((uint32_t)1<<31))
- {
- current_error = -current_error;
- tmp++;
- }
-
- /* Out of range */
- if(tmp < 1 || tmp > 65536)
- continue;
-
- if( current_error < best_error)
- {
- best_error = current_error;
- best_divisor = tmp;
- bestd = d;
- bestm = m;
-
- if(best_error == 0)
- break;
- }
- } /* end of inner for loop */
-
- if (best_error == 0)
- break;
- } /* end of outer for loop */
-
- /* can not find best match */
- if(best_divisor == 0)
- return ERROR;
-
- recalcbaud = (uClk >> 4) * bestm / (best_divisor * (bestm + bestd));
-
- /* reuse best_error to evaluate baud error*/
- if(baudrate > recalcbaud)
- best_error = baudrate - recalcbaud;
- else
- best_error = recalcbaud -baudrate;
-
- best_error = best_error * 100 / baudrate;
-
- if (best_error < UART_ACCEPTED_BAUDRATE_ERROR)
- {
- if (UartID == UART_1)
- {
- LPC_UART1->LCR |= UART_LCR_DLAB_EN;
-
- LPC_UART1->DLM = UART_LOAD_DLM(best_divisor);
-
- LPC_UART1->DLL = UART_LOAD_DLL(best_divisor);
-
- /* Then reset DLAB bit */
- LPC_UART1->LCR &= (~UART_LCR_DLAB_EN) & UART_LCR_BITMASK;
-
- LPC_UART1->FDR = (UART_FDR_MULVAL(bestm)
- | UART_FDR_DIVADDVAL(bestd)) & UART_FDR_BITMASK;
- }
- else if (UartID == UART_4)
- {
- LPC_UART4->LCR |= UART_LCR_DLAB_EN;
-
- LPC_UART4->DLM = UART_LOAD_DLM(best_divisor);
-
- LPC_UART4->DLL = UART_LOAD_DLL(best_divisor);
-
- /* Then reset DLAB bit */
- LPC_UART4->LCR &= (~UART_LCR_DLAB_EN) & UART_LCR_BITMASK;
-
- LPC_UART4->FDR = (UART_FDR_MULVAL(bestm)
- | UART_FDR_DIVADDVAL(bestd)) & UART_FDR_BITMASK;
- }
-
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- UARTx->LCR |= UART_LCR_DLAB_EN;
-
- UARTx->DLM = UART_LOAD_DLM(best_divisor);
-
- UARTx->DLL = UART_LOAD_DLL(best_divisor);
-
- /* Then reset DLAB bit */
- UARTx->LCR &= (~UART_LCR_DLAB_EN) & UART_LCR_BITMASK;
-
- UARTx->FDR = (UART_FDR_MULVAL(bestm) \
- | UART_FDR_DIVADDVAL(bestd)) & UART_FDR_BITMASK;
- }
- errorStatus = SUCCESS;
- }
-
- return errorStatus;
-}
-/*********************************************************************//**
- * @brief Get the pointer of a given Uart
- * @param[in] UARTx Pointer to selected UART peripheral, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return LPC_UART0~LPC_UART4
- **********************************************************************/
-LPC_UART_TypeDef *uart_get_pointer(UART_ID_Type UartID)
-{
- LPC_UART_TypeDef *UARTx = NULL;
- switch(UartID)
- {
- case UART_0:
- UARTx = LPC_UART0;
- break;
- case UART_2:
- UARTx = LPC_UART2;
- break;
- case UART_3:
- UARTx = LPC_UART3;
- break;
- default:
- break;
- }
- return UARTx;
-}
-
-/* End of Private Functions ---------------------------------------------------- */
-
-
-/* Public Functions ----------------------------------------------------------- */
-/** @addtogroup UART_Public_Functions
- * @{
- */
-/* UART Init/DeInit functions -------------------------------------------------*/
-/********************************************************************//**
- * @brief Initializes the UARTx peripheral according to the specified
- * parameters in the UART_ConfigStruct.
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] UART_ConfigStruct Pointer to a UART_CFG_Type structure
-* that contains the configuration information for the
-* specified UART peripheral.
- * @return None
- *********************************************************************/
-void UART_Init(UART_ID_Type UartID, UART_CFG_Type *UART_ConfigStruct)
-{
- uint32_t tmp;
- switch (UartID)
- {
- case UART_0:
- case UART_2:
- case UART_3:
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- if(UartID == UART_0)
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART0, ENABLE);
- else if(UartID == UART_2)
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART2, ENABLE);
- else if(UartID == UART_3)
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART3, ENABLE);;
- /* FIFOs are empty */
- UARTx->FCR = ( UART_FCR_FIFO_EN | UART_FCR_RX_RS | UART_FCR_TX_RS);
-
- // Disable FIFO
- UARTx->FCR = 0;
-
- // Dummy reading
- while (UARTx->LSR & UART_LSR_RDR)
- {
- tmp = UARTx->RBR;
- }
-
- UARTx->TER = UART_TER_TXEN;
-
- // Wait for current transmit complete
- while (!(UARTx->LSR & UART_LSR_THRE));
-
- // Disable Tx
- UARTx->TER = 0;
-
- // Disable interrupt
- UARTx->IER = 0;
-
- // Set LCR to default state
- UARTx->LCR = 0;
-
- // Set ACR to default state
- UARTx->ACR = 0;
-
- // Set RS485 control to default state
- UARTx->RS485CTRL = 0;
-
- // Set RS485 delay timer to default state
- UARTx->RS485DLY = 0;
-
- // Set RS485 addr match to default state
- UARTx->ADRMATCH = 0;
-
- // Dummy reading
- tmp = UARTx->LSR;
- }
- break;
- case UART_1:
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART1, ENABLE);
-
- /* FIFOs are empty */
- LPC_UART1->FCR = ( UART_FCR_FIFO_EN | UART_FCR_RX_RS | UART_FCR_TX_RS);
-
- // Disable FIFO
- LPC_UART1->FCR = 0;
-
- // Dummy reading
- while (LPC_UART1->LSR & UART_LSR_RDR)
- {
- tmp = LPC_UART1->RBR;
- }
-
- LPC_UART1->TER = UART_TER_TXEN;
-
- // Wait for current transmit complete
- while (!(LPC_UART1->LSR & UART_LSR_THRE));
-
- // Disable Tx
- LPC_UART1->TER = 0;
-
- // Disable interrupt
- LPC_UART1->IER = 0;
-
- // Set LCR to default state
- LPC_UART1->LCR = 0;
-
- // Set ACR to default state
- LPC_UART1->ACR = 0;
-
- // Set RS485 control to default state
- LPC_UART1->RS485CTRL = 0;
-
- // Set RS485 delay timer to default state
- LPC_UART1->RS485DLY = 0;
-
- // Set RS485 addr match to default state
- LPC_UART1->ADRMATCH = 0;
-
- // Dummy reading
- tmp = LPC_UART1->LSR;
-
- // Set Modem Control to default state
- LPC_UART1->MCR = 0;
-
- //Dummy Reading to Clear Status
- tmp = LPC_UART1->MSR;
- }
- break;
- case UART_4:
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART4, ENABLE);
-
- /* FIFOs are empty */
- LPC_UART4->FCR = ( UART_FCR_FIFO_EN | UART_FCR_RX_RS | UART_FCR_TX_RS);
-
- // Disable FIFO
- LPC_UART4->FCR = 0;
-
- // Dummy reading
- while (LPC_UART4->LSR & UART_LSR_RDR)
- {
- tmp = LPC_UART4->RBR;
- }
-
- LPC_UART4->TER = UART4_TER_TXEN;
-
- // Wait for current transmit complete
- while (!(LPC_UART4->LSR & UART_LSR_THRE));
-
- // Disable Tx
- LPC_UART4->TER = 0;
-
- // Disable interrupt
- LPC_UART4->IER = 0;
-
- // Set LCR to default state
- LPC_UART4->LCR = 0;
-
- // Set ACR to default state
- LPC_UART4->ACR = 0;
-
- // Set RS485 control to default state
- LPC_UART4->RS485CTRL = 0;
-
- // Set RS485 delay timer to default state
- LPC_UART4->RS485DLY = 0;
-
- // Set RS485 addr match to default state
- LPC_UART4->ADRMATCH = 0;
-
- // Dummy reading
- tmp = LPC_UART4->LSR;
-
- // Set IrDA Mode to default state
- LPC_UART4->ICR = 0;
- }
- break;
- }
-
- // Set Line Control register ----------------------------
-
- uart_set_divisors(UartID, (UART_ConfigStruct->Baud_rate));
-
- if (UartID == UART_1)
- {
- tmp = (LPC_UART1->LCR & (UART_LCR_DLAB_EN | UART_LCR_BREAK_EN)) \
- & UART_LCR_BITMASK;
- }
- else if (UartID == UART_4)
- {
- tmp = (LPC_UART4->LCR & (UART_LCR_DLAB_EN | UART_LCR_BREAK_EN)) \
- & UART_LCR_BITMASK;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- tmp = (UARTx->LCR & (UART_LCR_DLAB_EN | UART_LCR_BREAK_EN)) & UART_LCR_BITMASK;
- }
-
- switch (UART_ConfigStruct->Databits)
- {
- case UART_DATABIT_5:
- tmp |= UART_LCR_WLEN5;
- break;
-
- case UART_DATABIT_6:
- tmp |= UART_LCR_WLEN6;
- break;
-
- case UART_DATABIT_7:
- tmp |= UART_LCR_WLEN7;
- break;
-
- case UART_DATABIT_8:
-
- default:
- tmp |= UART_LCR_WLEN8;
- break;
- }
-
- if (UART_ConfigStruct->Parity == UART_PARITY_NONE)
- {
- // Do nothing...
- }
- else
- {
- tmp |= UART_LCR_PARITY_EN;
- switch (UART_ConfigStruct->Parity)
- {
- case UART_PARITY_ODD:
- tmp |= UART_LCR_PARITY_ODD;
- break;
-
- case UART_PARITY_EVEN:
- tmp |= UART_LCR_PARITY_EVEN;
- break;
-
- case UART_PARITY_SP_1:
- tmp |= UART_LCR_PARITY_F_1;
- break;
-
- case UART_PARITY_SP_0:
- tmp |= UART_LCR_PARITY_F_0;
- break;
-
- default:
- break;
- }
- }
-
- switch (UART_ConfigStruct->Stopbits)
- {
- case UART_STOPBIT_2:
- tmp |= UART_LCR_STOPBIT_SEL;
- break;
-
- case UART_STOPBIT_1:
-
- default:
- // Do no thing
- break;
- }
-
-
- // Write back to LCR, configure FIFO and Disable Tx
- if (UartID == UART_1)
- {
- LPC_UART1->LCR = (uint8_t)(tmp & UART_LCR_BITMASK);
- }
- else if (UartID == UART_4)
- {
- LPC_UART4->LCR = (uint8_t)(tmp & UART_LCR_BITMASK);
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- UARTx->LCR = (uint8_t)(tmp & UART_LCR_BITMASK);
- }
-}
-
-/*********************************************************************//**
- * @brief De-initializes the UARTx peripheral registers to their
- * default reset values.
- * @param[in] UartID UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return None
- **********************************************************************/
-void UART_DeInit(UART_ID_Type UartID)
-{
- UART_TxCmd(UartID, DISABLE);
- if (UartID == UART_0)
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART0, DISABLE);
- }
-
- else if (UartID == UART_1)
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART1, DISABLE);
- }
-
- else if (UartID == UART_2)
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART2, DISABLE);
- }
-
- else if (UartID == UART_3)
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART3, DISABLE);
- }
- else if (UartID == UART_4)
- {
- /* Set up clock and power for UART module */
- CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART4, DISABLE);
- }
-}
-
-/*****************************************************************************//**
-* @brief Fills each UART_InitStruct member with its default value:
-* - 115200 bps
-* - 8-bit data
-* - 1 Stopbit
-* - None Parity
-* @param[in] UART_InitStruct Pointer to a UART_CFG_Type structure
-* which will be initialized.
-* @return None
-*******************************************************************************/
-void UART_ConfigStructInit(UART_CFG_Type *UART_InitStruct)
-{
- UART_InitStruct->Baud_rate = 115200;
-
- UART_InitStruct->Databits = UART_DATABIT_8;
-
- UART_InitStruct->Parity = UART_PARITY_NONE;
-
- UART_InitStruct->Stopbits = UART_STOPBIT_1;
-}
-
-/* UART Send/Recieve functions -------------------------------------------------*/
-/*********************************************************************//**
- * @brief Transmit a single data through UART peripheral
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] Data Data to transmit (must be 8-bit long)
- * @return None
- **********************************************************************/
-void UART_SendByte(UART_ID_Type UartID, uint8_t Data)
-{
- switch (UartID)
- {
- case UART_0:
- LPC_UART0->THR = Data & UART_THR_MASKBIT;
- break;
- case UART_1:
- LPC_UART1->THR = Data & UART_THR_MASKBIT;
- break;
- case UART_2:
- LPC_UART2->THR = Data & UART_THR_MASKBIT;
- break;
- case UART_3:
- LPC_UART3->THR = Data & UART_THR_MASKBIT;
- break;
- case UART_4:
- LPC_UART4->THR = Data & UART_THR_MASKBIT;
- break;
- }
-
-}
-
-
-/*********************************************************************//**
- * @brief Receive a single data from UART peripheral
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return Data received
- **********************************************************************/
-uint8_t UART_ReceiveByte(UART_ID_Type UartID)
-{
- switch (UartID)
- {
- case UART_0:
- return (LPC_UART0->RBR & UART_RBR_MASKBIT);
- case UART_1:
- return (LPC_UART1->RBR & UART_RBR_MASKBIT);
- case UART_2:
- return (LPC_UART2->RBR & UART_RBR_MASKBIT);
- case UART_3:
- return (LPC_UART3->RBR & UART_RBR_MASKBIT);
- case UART_4:
- return (LPC_UART4->RBR & UART_RBR_MASKBIT);
- }
- return 0x00;
-}
-
-/*********************************************************************//**
- * @brief Send a block of data via UART peripheral
- * @param[in] UARTx Selected UART peripheral used to send data, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] txbuf Pointer to Transmit buffer
- * @param[in] buflen Length of Transmit buffer
- * @param[in] flag Flag used in UART transfer, should be
- * NONE_BLOCKING or BLOCKING
- * @return Number of bytes sent.
- *
- * Note: when using UART in BLOCKING mode, a time-out condition is used
- * via defined symbol UART_BLOCKING_TIMEOUT.
- **********************************************************************/
-uint32_t UART_Send(UART_ID_Type UartID, uint8_t *txbuf,
- uint32_t buflen, TRANSFER_BLOCK_Type flag)
-{
- uint32_t bToSend, bSent, timeOut, fifo_cnt;
- uint8_t *pChar = txbuf;
- __IO uint32_t *LSR = NULL;
-
- switch (UartID)
- {
- case UART_0:
- LSR = (__IO uint32_t *)&LPC_UART0->LSR;
- break;
- case UART_1:
- LSR = (__IO uint32_t *)&LPC_UART1->LSR;
- break;
- case UART_2:
- LSR = (__IO uint32_t *)&LPC_UART2->LSR;
- break;
- case UART_3:
- LSR = (__IO uint32_t *)&LPC_UART3->LSR;
- break;
- case UART_4:
- LSR = (__IO uint32_t *)&LPC_UART4->LSR;
- break;
- }
-
- bToSend = buflen;
-
- // blocking mode
- if (flag == BLOCKING)
- {
- bSent = 0;
- while (bToSend)
- {
- timeOut = UART_BLOCKING_TIMEOUT;
-
- // Wait for THR empty with timeout
- while (!(*LSR & UART_LSR_THRE))
- {
- if (timeOut == 0)
- break;
-
- timeOut--;
- }
-
- // Time out!
- if(timeOut == 0)
- break;
-
- fifo_cnt = UART_TX_FIFO_SIZE;
-
- while (fifo_cnt && bToSend)
- {
- UART_SendByte(UartID, (*pChar++));
-
- fifo_cnt--;
-
- bToSend--;
-
- bSent++;
- }
- }
- }
-
- // None blocking mode
- else
- {
- bSent = 0;
- while (bToSend)
- {
- if (bToSend == 0)
- break;
-
- if (!(*LSR & UART_LSR_THRE))
- {
- break;
- }
-
- fifo_cnt = UART_TX_FIFO_SIZE;
-
- while (fifo_cnt && bToSend)
- {
- UART_SendByte(UartID, (*pChar++));
-
- bToSend--;
-
- fifo_cnt--;
-
- bSent++;
- }
- }
- }
-
- return bSent;
-}
-
-/*********************************************************************//**
- * @brief Receive a block of data via UART peripheral
- * @param[in] UARTx Selected UART peripheral used to send data,
- * should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[out] rxbuf Pointer to Received buffer
- * @param[in] buflen Length of Received buffer
- * @param[in] flag Flag mode, should be NONE_BLOCKING or BLOCKING
-
- * @return Number of bytes received
- *
- * Note: when using UART in BLOCKING mode, a time-out condition is used
- * via defined symbol UART_BLOCKING_TIMEOUT.
- **********************************************************************/
-uint32_t UART_Receive(UART_ID_Type UartID, uint8_t *rxbuf,
- uint32_t buflen, TRANSFER_BLOCK_Type flag)
-{
- uint32_t bToRecv, bRecv, timeOut;
- uint8_t *pChar = rxbuf;
- __IO uint32_t *LSR = NULL;
-
- switch (UartID)
- {
- case UART_0:
- LSR = (__IO uint32_t *)&LPC_UART0->LSR;
- break;
- case UART_1:
- LSR = (__IO uint32_t *)&LPC_UART1->LSR;
- break;
- case UART_2:
- LSR = (__IO uint32_t *)&LPC_UART2->LSR;
- break;
- case UART_3:
- LSR = (__IO uint32_t *)&LPC_UART3->LSR;
- break;
- case UART_4:
- LSR = (__IO uint32_t *)&LPC_UART4->LSR;
- break;
- }
-
- bToRecv = buflen;
-
- // Blocking mode
- if (flag == BLOCKING)
- {
- bRecv = 0;
- while (bToRecv)
- {
- timeOut = UART_BLOCKING_TIMEOUT;
- while (!(*LSR & UART_LSR_RDR))
- {
- if (timeOut == 0)
- break;
-
- timeOut--;
- }
-
- // Time out!
- if(timeOut == 0)
- break;
-
- // Get data from the buffer
- (*pChar++) = UART_ReceiveByte(UartID);
-
- bToRecv--;
-
- bRecv++;
- }
- }
- // None blocking mode
- else
- {
- bRecv = 0;
- while (bToRecv)
- {
- if (!(*LSR & UART_LSR_RDR))
- {
- break;
- }
- else
- {
- (*pChar++) = UART_ReceiveByte(UartID);
-
- bRecv++;
-
- bToRecv--;
- }
- }
- }
-
- return bRecv;
-}
-
-/*********************************************************************//**
- * @brief Force BREAK character on UART line, output pin UARTx TXD is
- forced to logic 0.
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return None
- **********************************************************************/
-void UART_ForceBreak(UART_ID_Type UartID)
-{
- switch (UartID)
- {
- case UART_0:
- LPC_UART0->LCR |= UART_LCR_BREAK_EN;
- break;
- case UART_1:
- LPC_UART1->LCR |= UART_LCR_BREAK_EN;
- break;
- case UART_2:
- LPC_UART2->LCR |= UART_LCR_BREAK_EN;
- break;
- case UART_3:
- LPC_UART3->LCR |= UART_LCR_BREAK_EN;
- break;
- case UART_4:
- LPC_UART4->LCR |= UART_LCR_BREAK_EN;
- break;
- }
-}
-
-
-/********************************************************************//**
- * @brief Enable or disable specified UART interrupt.
- * @param[in] UARTx UART peripheral selected, should be
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] UARTIntCfg Specifies the interrupt flag,
- * should be one of the following:
- - UART_INTCFG_RBR : RBR Interrupt enable
- - UART_INTCFG_THRE : THR Interrupt enable
- - UART_INTCFG_RLS : RX line status interrupt enable
- - UART1_INTCFG_MS : Modem status interrupt enable (UART1 only)
- - UART1_INTCFG_CTS : CTS1 signal transition interrupt enable (UART1 only)
- - UART_INTCFG_ABEO : Enables the end of auto-baud interrupt
- - UART_INTCFG_ABTO : Enables the auto-baud time-out interrupt
- * @param[in] NewState New state of specified UART interrupt type,
- * should be:
- * - ENALBE: Enable this UART interrupt type.
-* - DISALBE: Disable this UART interrupt type.
- * @return None
- *********************************************************************/
-void UART_IntConfig(UART_ID_Type UartID, UART_INT_Type UARTIntCfg, FunctionalState NewState)
-{
- uint32_t tmp;
- __IO uint32_t *IER = NULL;
- uint32_t IERMask = 0;
-
- switch (UartID)
- {
- case UART_0:
- IER = &LPC_UART0->IER;
- IERMask = UART_IER_BITMASK;
- break;
- case UART_1:
- IER = &LPC_UART1->IER;
- IERMask = UART1_IER_BITMASK;
- break;
- case UART_2:
- IER = &LPC_UART2->IER;
- IERMask = UART_IER_BITMASK;
- break;
- case UART_3:
- IER = &LPC_UART3->IER;
- IERMask = UART_IER_BITMASK;
- break;
- case UART_4:
- IER = &LPC_UART4->IER;
- IERMask = UART_IER_BITMASK;
- break;
- }
-
-
- switch(UARTIntCfg)
- {
- case UART_INTCFG_RBR:
- tmp = UART_IER_RBRINT_EN;
- break;
-
- case UART_INTCFG_THRE:
- tmp = UART_IER_THREINT_EN;
- break;
-
- case UART_INTCFG_RLS:
- tmp = UART_IER_RLSINT_EN;
- break;
-
- case UART_INTCFG_MS:
- tmp = UART1_IER_MSINT_EN;
- break;
-
- case UART_INTCFG_CTS:
- tmp = UART1_IER_CTSINT_EN;
- break;
-
- case UART_INTCFG_ABEO:
- tmp = UART_IER_ABEOINT_EN;
- break;
-
- case UART_INTCFG_ABTO:
- tmp = UART_IER_ABTOINT_EN;
- break;
- }
-
- if (NewState == ENABLE)
- {
- *IER |= tmp& IERMask;
- }
- else
- {
- *IER &= (~tmp) & IERMask;
- }
-}
-
-
-/********************************************************************//**
- * @brief Get current value of Line Status register in UART peripheral.
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return Current value of Line Status register in UART peripheral.
- * Note: The return value of this function must be ANDed with each member in
- * UART_LS_Type enumeration to determine current flag status
- * corresponding to each Line status type. Because some flags in
- * Line Status register will be cleared after reading, the next reading
- * Line Status register could not be correct. So this function used to
- * read Line status register in one time only, then the return value
- * used to check all flags.
- *********************************************************************/
-uint8_t UART_GetLineStatus(UART_ID_Type UartID)
-{
- switch (UartID)
- {
- case UART_0:
- return ((LPC_UART0->LSR) & UART_LSR_BITMASK);
- case UART_1:
- return ((LPC_UART1->LSR) & UART_LSR_BITMASK);
- case UART_2:
- return ((LPC_UART2->LSR) & UART_LSR_BITMASK);
- case UART_3:
- return ((LPC_UART3->LSR) & UART_LSR_BITMASK);
- case UART_4:
- return ((LPC_UART4->LSR) & UART_LSR_BITMASK);
- }
- return 0;
-}
-
-/********************************************************************//**
- * @brief Get Interrupt Identification value
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return Current value of UART UIIR register in UART peripheral.
- *********************************************************************/
-uint32_t UART_GetIntId(UART_ID_Type UartID)
-{
- switch (UartID)
- {
- case UART_0:
- return ((LPC_UART0->IIR) & UART_IIR_BITMASK);
- case UART_1:
- return ((LPC_UART1->IIR) & UART_IIR_BITMASK);
- case UART_2:
- return ((LPC_UART2->IIR) & UART_IIR_BITMASK);
- case UART_3:
- return ((LPC_UART3->IIR) & UART_IIR_BITMASK);
- case UART_4:
- return ((LPC_UART4->IIR) & UART_IIR_BITMASK);
- }
- return 0;
-}
-
-/*********************************************************************//**
- * @brief Check whether if UART is busy or not
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @return RESET if UART is not busy, otherwise return SET.
- **********************************************************************/
-FlagStatus UART_CheckBusy(UART_ID_Type UartID)
-{
- uint32_t LSR = 0;
- switch (UartID)
- {
- case UART_0:
- LSR = (LPC_UART0)->LSR & UART_LSR_TEMT;
- break;
- case UART_1:
- LSR = (LPC_UART1)->LSR & UART_LSR_TEMT;
- break;
- case UART_2:
- LSR = (LPC_UART2)->LSR & UART_LSR_TEMT;
- break;
- case UART_3:
- LSR = (LPC_UART3)->LSR & UART_LSR_TEMT;
- break;
- case UART_4:
- LSR = (LPC_UART4)->LSR & UART_LSR_TEMT;
- break;
- }
-
- if (LSR & UART_LSR_TEMT)
- {
- return RESET;
- }
- return SET;
-}
-
-
-/*********************************************************************//**
- * @brief Configure FIFO function on selected UART peripheral
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] FIFOCfg Pointer to a UART_FIFO_CFG_Type Structure that
- * contains specified information about FIFO configuration
- * @return none
- **********************************************************************/
-void UART_FIFOConfig(UART_ID_Type UartID, UART_FIFO_CFG_Type *FIFOCfg)
-{
- uint8_t tmp = 0;
-
- tmp |= UART_FCR_FIFO_EN;
-
- switch (FIFOCfg->FIFO_Level)
- {
- case UART_FIFO_TRGLEV0:
- tmp |= UART_FCR_TRG_LEV0;
- break;
-
- case UART_FIFO_TRGLEV1:
- tmp |= UART_FCR_TRG_LEV1;
- break;
-
- case UART_FIFO_TRGLEV2:
- tmp |= UART_FCR_TRG_LEV2;
- break;
-
- case UART_FIFO_TRGLEV3:
-
- default:
- tmp |= UART_FCR_TRG_LEV3;
- break;
- }
-
- if (FIFOCfg->FIFO_ResetTxBuf == ENABLE)
- {
- tmp |= UART_FCR_TX_RS;
- }
-
- if (FIFOCfg->FIFO_ResetRxBuf == ENABLE)
- {
- tmp |= UART_FCR_RX_RS;
- }
-
- if (FIFOCfg->FIFO_DMAMode == ENABLE)
- {
- tmp |= UART_FCR_DMAMODE_SEL;
- }
-
-
- //write to FIFO control register
- switch (UartID)
- {
- case UART_0:
- LPC_UART0->FCR = tmp & UART_FCR_BITMASK;
- break;
- case UART_1:
- LPC_UART1->FCR = tmp & UART_FCR_BITMASK;
- break;
- case UART_2:
- LPC_UART2->FCR = tmp & UART_FCR_BITMASK;
- break;
- case UART_3:
- LPC_UART3->FCR = tmp & UART_FCR_BITMASK;
- break;
- case UART_4:
- LPC_UART4->FCR = tmp & UART_FCR_BITMASK;
- break;
- }
-}
-
-/*****************************************************************************//**
-* @brief Fills each UART_FIFOInitStruct member with its default value:
-* - FIFO_DMAMode = DISABLE
-* - FIFO_Level = UART_FIFO_TRGLEV0
-* - FIFO_ResetRxBuf = ENABLE
-* - FIFO_ResetTxBuf = ENABLE
-* - FIFO_State = ENABLE
-* @param[in] UART_FIFOInitStruct Pointer to a UART_FIFO_CFG_Type structure
-* which will be initialized.
-* @return None
-*******************************************************************************/
-void UART_FIFOConfigStructInit(UART_FIFO_CFG_Type *UART_FIFOInitStruct)
-{
- UART_FIFOInitStruct->FIFO_DMAMode = DISABLE;
-
- UART_FIFOInitStruct->FIFO_Level = UART_FIFO_TRGLEV0;
-
- UART_FIFOInitStruct->FIFO_ResetRxBuf = ENABLE;
-
- UART_FIFOInitStruct->FIFO_ResetTxBuf = ENABLE;
-}
-
-
-/*********************************************************************//**
- * @brief Start/Stop Auto Baudrate activity
- * @param[in] UARTx UART peripheral selected, should be
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] ABConfigStruct A pointer to UART_AB_CFG_Type structure that
- * contains specified information about UART
- * auto baudrate configuration
- * @param[in] NewState New State of Auto baudrate activity, should be:
- * - ENABLE: Start this activity
- * - DISABLE: Stop this activity
- * Note: Auto-baudrate mode enable bit will be cleared once this mode
- * completed.
- * @return none
- **********************************************************************/
-void UART_ABCmd(UART_ID_Type UartID, UART_AB_CFG_Type *ABConfigStruct,
- FunctionalState NewState)
-{
- uint32_t tmp;
-
- tmp = 0;
- if (NewState == ENABLE)
- {
- if (ABConfigStruct->ABMode == UART_AUTOBAUD_MODE1)
- {
- tmp |= UART_ACR_MODE;
- }
- if (ABConfigStruct->AutoRestart == ENABLE)
- {
- tmp |= UART_ACR_AUTO_RESTART;
- }
- }
-
- if (UartID == UART_1)
- {
- if (NewState == ENABLE)
- {
- // Clear DLL and DLM value
- LPC_UART1->LCR |= UART_LCR_DLAB_EN;
-
- LPC_UART1->DLL = 0;
-
- LPC_UART1->DLM = 0;
-
- LPC_UART1->LCR &= ~UART_LCR_DLAB_EN;
-
- // FDR value must be reset to default value
- LPC_UART1->FDR = 0x10;
-
- LPC_UART1->ACR = UART_ACR_START | tmp;
- }
- else
- {
- LPC_UART1->ACR = 0;
- }
- }
- else if (UartID == UART_4)
- {
- if (NewState == ENABLE)
- {
- // Clear DLL and DLM value
- LPC_UART4->LCR |= UART_LCR_DLAB_EN;
-
- LPC_UART4->DLL = 0;
-
- LPC_UART4->DLM = 0;
-
- LPC_UART4->LCR &= ~UART_LCR_DLAB_EN;
-
- // FDR value must be reset to default value
- LPC_UART4->FDR = 0x10;
-
- LPC_UART4->ACR = UART_ACR_START | tmp;
- }
- else
- {
- LPC_UART4->ACR = 0;
- }
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- if (NewState == ENABLE)
- {
- // Clear DLL and DLM value
- UARTx->LCR |= UART_LCR_DLAB_EN;
-
- UARTx->DLL = 0;
-
- UARTx->DLM = 0;
-
- UARTx->LCR &= ~UART_LCR_DLAB_EN;
-
- // FDR value must be reset to default value
- UARTx->FDR = 0x10;
-
- UARTx->ACR = UART_ACR_START | tmp;
- }
- else
- {
- UARTx->ACR = 0;
- }
- }
-}
-
-/*********************************************************************//**
- * @brief Clear Autobaud Interrupt Pending
- * @param[in] UARTx UART peripheral selected, should be
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] ABIntType type of auto-baud interrupt, should be:
- * - UART_AUTOBAUD_INTSTAT_ABEO: End of Auto-baud interrupt
- * - UART_AUTOBAUD_INTSTAT_ABTO: Auto-baud time out interrupt
- * @return none
- **********************************************************************/
-void UART_ABClearIntPending(UART_ID_Type UartID, UART_ABEO_Type ABIntType)
-{
- if (UartID == UART_1)
- {
- LPC_UART1->ACR |= ABIntType;
- }
- else if (UartID == UART_4)
- {
- LPC_UART4->ACR |= ABIntType;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- UARTx->ACR |= ABIntType;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable transmission on UART TxD pin
- * @param[in] UARTx UART peripheral selected, should be:
- * - UART_0: UART0 peripheral
- * - UART_1: UART1 peripheral
- * - UART_2: UART2 peripheral
- * - UART_3: UART3 peripheral
- * - UART_4: UART4 peripheral
- * @param[in] NewState New State of Tx transmission function, should be:
- * - ENABLE: Enable this function
- - DISABLE: Disable this function
- * @return none
- **********************************************************************/
-void UART_TxCmd(UART_ID_Type UartID, FunctionalState NewState)
-{
- if (NewState == ENABLE)
- {
- if (UartID == UART_1)
- {
- LPC_UART1->TER |= UART_TER_TXEN;
- }
- else if (UartID == UART_4)
- {
- LPC_UART4->TER |= UART4_TER_TXEN;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- UARTx->TER |= UART_TER_TXEN;
- }
- }
- else
- {
- if (UartID == UART_1)
- {
- LPC_UART1->TER &= (~UART_TER_TXEN) & UART_TER_BITMASK;
- }
- else if (UartID == UART_4)
- {
- LPC_UART4->TER &= (~UART4_TER_TXEN) & UART4_TER_BITMASK;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- UARTx->TER &= (~UART_TER_TXEN) & UART_TER_BITMASK;
- }
- }
-}
-
-/* UART IrDA functions ---------------------------------------------------*/
-/*********************************************************************//**
- * @brief Enable or disable inverting serial input function of IrDA
- * on UART peripheral.
- * @param[in] UARTx UART peripheral selected, should be LPC_UART4 (only)
- * @param[in] NewState New state of inverting serial input, should be:
- * - ENABLE: Enable this function.
- * - DISABLE: Disable this function.
- * @return none
- **********************************************************************/
-void UART_IrDAInvtInputCmd(UART_ID_Type UartID, FunctionalState NewState)
-{
- if (UartID != UART_4)
- return;
-
- if (NewState == ENABLE)
- {
- LPC_UART4->ICR |= UART_ICR_IRDAINV;
- }
- else if (NewState == DISABLE)
- {
- LPC_UART4->ICR &= (~UART_ICR_IRDAINV) & UART_ICR_BITMASK;
- }
-
-}
-
-
-/*********************************************************************//**
- * @brief Enable or disable IrDA function on UART peripheral.
- * @param[in] UARTx UART peripheral selected, should be LPC_UART4 (only)
- * @param[in] NewState New state of IrDA function, should be:
- * - ENABLE: Enable this function.
- * - DISABLE: Disable this function.
- * @return none
- **********************************************************************/
-void UART_IrDACmd(UART_ID_Type UartID, FunctionalState NewState)
-{
- if (UartID != UART_4)
- return;
-
- if (NewState == ENABLE)
- {
- LPC_UART4->ICR |= UART_ICR_IRDAEN;
- }
- else
- {
- LPC_UART4->ICR &= (~UART_ICR_IRDAEN) & UART_ICR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Configure Pulse divider for IrDA function on UART peripheral.
- * @param[in] UARTx UART peripheral selected, should be LPC_UART4 (only)
- * @param[in] PulseDiv Pulse Divider value from Peripheral clock,
- * should be one of the following:
- - UART_IrDA_PULSEDIV2 : Pulse width = 2 * Tpclk
- - UART_IrDA_PULSEDIV4 : Pulse width = 4 * Tpclk
- - UART_IrDA_PULSEDIV8 : Pulse width = 8 * Tpclk
- - UART_IrDA_PULSEDIV16 : Pulse width = 16 * Tpclk
- - UART_IrDA_PULSEDIV32 : Pulse width = 32 * Tpclk
- - UART_IrDA_PULSEDIV64 : Pulse width = 64 * Tpclk
- - UART_IrDA_PULSEDIV128 : Pulse width = 128 * Tpclk
- - UART_IrDA_PULSEDIV256 : Pulse width = 256 * Tpclk
-
- * @return none
- **********************************************************************/
-void UART_IrDAPulseDivConfig(UART_ID_Type UartID, UART_IrDA_PULSE_Type PulseDiv)
-{
- uint32_t tmp, tmp1;
-
- if (UartID != UART_4)
- return;
-
- tmp1 = UART_ICR_PULSEDIV(PulseDiv);
-
- tmp = LPC_UART4->ICR & (~ UART_ICR_PULSEDIV(7));
-
- tmp |= tmp1 | UART_ICR_FIXPULSE_EN;
-
- LPC_UART4->ICR = tmp & UART_ICR_BITMASK;
-}
-
-/* UART1 FullModem function ---------------------------------------------*/
-
-/*********************************************************************//**
- * @brief Force pin DTR/RTS corresponding to given state (Full modem mode)
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] Pin Pin that NewState will be applied to, should be:
- * - UART1_MODEM_PIN_DTR: DTR pin.
- * - UART1_MODEM_PIN_RTS: RTS pin.
- * @param[in] NewState New State of DTR/RTS pin, should be:
- * - INACTIVE: Force the pin to inactive signal.
- - ACTIVE: Force the pin to active signal.
- * @return none
- **********************************************************************/
-void UART_FullModemForcePinState(UART_ID_Type UartID,
- UART_MODEM_PIN_Type Pin,
- UART1_SignalState NewState)
-{
- uint8_t tmp = 0;
- if (UartID != UART_1)
- return;
- switch (Pin)
- {
- case UART1_MODEM_PIN_DTR:
- tmp = UART1_MCR_DTR_CTRL;
- break;
-
- case UART1_MODEM_PIN_RTS:
- tmp = UART1_MCR_RTS_CTRL;
- break;
-
- default:
- break;
- }
-
- if (NewState == ACTIVE)
- {
- LPC_UART1->MCR |= tmp;
- }
- else
- {
- LPC_UART1->MCR &= (~tmp) & UART1_MCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Configure Full Modem mode for UART peripheral
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] Mode Full Modem mode, should be:
- * - UART1_MODEM_MODE_LOOPBACK: Loop back mode.
- * - UART1_MODEM_MODE_AUTO_RTS: Auto-RTS mode.
- * - UART1_MODEM_MODE_AUTO_CTS: Auto-CTS mode.
- * @param[in] NewState New State of this mode, should be:
- * - ENABLE: Enable this mode.
- - DISABLE: Disable this mode.
- * @return none
- **********************************************************************/
-void UART_FullModemConfigMode(UART_ID_Type UartID, UART_MODEM_MODE_Type Mode,
- FunctionalState NewState)
-{
- uint8_t tmp;
-
- if(UartID != UART_1)
- return;
-
- switch(Mode)
- {
- case UART1_MODEM_MODE_LOOPBACK:
- tmp = UART1_MCR_LOOPB_EN;
- break;
-
- case UART1_MODEM_MODE_AUTO_RTS:
- tmp = UART1_MCR_AUTO_RTS_EN;
- break;
-
- case UART1_MODEM_MODE_AUTO_CTS:
- tmp = UART1_MCR_AUTO_CTS_EN;
- break;
-
- default:
- break;
- }
-
- if (NewState == ENABLE)
- {
- LPC_UART1->MCR |= tmp;
- }
- else
- {
- LPC_UART1->MCR &= (~tmp) & UART1_MCR_BITMASK;
- }
-}
-
-
-/*********************************************************************//**
- * @brief Get current status of modem status register
- * @param[in] UARTx LPC_UART1 (only)
- * @return Current value of modem status register
- * Note: The return value of this function must be ANDed with each member
- * UART_MODEM_STAT_type enumeration to determine current flag status
- * corresponding to each modem flag status. Because some flags in
- * modem status register will be cleared after reading, the next reading
- * modem register could not be correct. So this function used to
- * read modem status register in one time only, then the return value
- * used to check all flags.
- **********************************************************************/
-uint8_t UART_FullModemGetStatus(UART_ID_Type UartID)
-{
- if(UartID != UART_1)
- return 0;
-
- return ((LPC_UART1->MSR) & UART1_MSR_BITMASK);
-}
-
-
-/* UART RS485 functions --------------------------------------------------------------*/
-/*********************************************************************//**
- * @brief Configure UART peripheral in RS485 mode according to the specified
-* parameters in the RS485ConfigStruct.
- * @param[in] UARTx LPC_UART0 ~LPC_UART4
- * @param[in] RS485ConfigStruct Pointer to a UART1_RS485_CTRLCFG_Type structure
-* that contains the configuration information for specified UART
-* in RS485 mode.
- * @return None
- **********************************************************************/
-void UART_RS485Config(UART_ID_Type UartID, UART1_RS485_CTRLCFG_Type *RS485ConfigStruct)
-{
- uint32_t tmp;
- __IO uint32_t *RS485DLY, *ADRMATCH, *RS485CTRL, *LCR;
-
- tmp = 0;
- if (UartID == UART_1)
- {
- RS485DLY = (__IO uint32_t *)&LPC_UART1->RS485DLY;
- ADRMATCH = (__IO uint32_t *)&LPC_UART1->ADRMATCH;
- LCR = (__IO uint32_t *)&LPC_UART1->LCR;
- RS485CTRL = (__IO uint32_t *)&LPC_UART1->RS485CTRL;
- }
- else if (UartID == UART_4)
- {
- RS485DLY = (__IO uint32_t *)&LPC_UART4->RS485DLY;
- ADRMATCH = (__IO uint32_t *)&LPC_UART4->ADRMATCH;
- LCR = (__IO uint32_t *)&LPC_UART4->LCR;
- RS485CTRL = (__IO uint32_t *)&LPC_UART4->RS485CTRL;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- RS485DLY = (__IO uint32_t *)&UARTx->RS485DLY;
- ADRMATCH = (__IO uint32_t *)&UARTx->ADRMATCH;
- LCR = (__IO uint32_t *)&UARTx->LCR;
- RS485CTRL = (__IO uint32_t *)&UARTx->RS485CTRL;
- }
- // If Auto Direction Control is enabled - This function is used in Master mode
- if (RS485ConfigStruct->AutoDirCtrl_State == ENABLE)
- {
- tmp |= UART_RS485CTRL_DCTRL_EN;
-
- // Set polar
- if (RS485ConfigStruct->DirCtrlPol_Level == SET)
- {
- tmp |= UART_RS485CTRL_OINV_1;
- }
-
- // Set pin according to. This condition is only with UART1. The others are used
- // OE pin as default for control the direction of RS485 buffer IC
- if ((RS485ConfigStruct->DirCtrlPin == UART_RS485_DIRCTRL_DTR) &&
- (UartID == UART_1))
- {
- tmp |= UART_RS485CTRL_SEL_DTR;
- }
-
- // Fill delay time
- *RS485DLY = RS485ConfigStruct->DelayValue & UART_RS485DLY_BITMASK;
- }
-
- // MultiDrop mode is enable
- if (RS485ConfigStruct->NormalMultiDropMode_State == ENABLE)
- {
- tmp |= UART_RS485CTRL_NMM_EN;
- }
-
- // Auto Address Detect function
- if (RS485ConfigStruct->AutoAddrDetect_State == ENABLE)
- {
- tmp |= UART_RS485CTRL_AADEN;
-
- // Fill Match Address
- *ADRMATCH = RS485ConfigStruct->MatchAddrValue & UART_RS485ADRMATCH_BITMASK;
- }
-
- // Receiver is disable
- if (RS485ConfigStruct->Rx_State == DISABLE)
- {
- tmp |= UART_RS485CTRL_RX_DIS;
- }
-
- // write back to RS485 control register
- *RS485CTRL = tmp & UART_RS485CTRL_BITMASK;
-
- // Enable Parity function and leave parity in stick '0' parity as default
- *LCR |= (UART_LCR_PARITY_F_0 | UART_LCR_PARITY_EN);
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable receiver in RS485 module in UART1
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] NewState New State of command, should be:
- * - ENABLE: Enable this function.
- * - DISABLE: Disable this function.
- * @return None
- **********************************************************************/
-void UART_RS485ReceiverCmd(UART_ID_Type UartID, FunctionalState NewState)
-{
- __IO uint32_t *RS485CTRL;
- if (UartID == UART_1)
- {
- RS485CTRL = (__IO uint32_t *)&LPC_UART1->RS485DLY;
- }
- else if (UartID == UART_4)
- {
- RS485CTRL = (__IO uint32_t *)&LPC_UART4->RS485DLY;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- RS485CTRL = (__IO uint32_t *)&UARTx->RS485DLY;
- }
- if (NewState == ENABLE)
- {
- *RS485CTRL &= ~UART_RS485CTRL_RX_DIS;
- }
- else
- {
- *RS485CTRL |= UART_RS485CTRL_RX_DIS;
- }
-}
-
-/*********************************************************************//**
- * @brief Send data on RS485 bus with specified parity stick value (9-bit mode).
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] pDatFrm Pointer to data frame.
- * @param[in] size Size of data.
- * @param[in] ParityStick Parity Stick value, should be 0 or 1.
- * @return None
- **********************************************************************/
-uint32_t UART_RS485Send(UART_ID_Type UartID, uint8_t *pDatFrm,
- uint32_t size, uint8_t ParityStick)
-{
- uint8_t tmp, save;
- uint32_t cnt;
- __IO uint32_t *LCR, *LSR;
- if (UartID == UART_1)
- {
- LCR = (__IO uint32_t *)&LPC_UART1->LCR;
- LSR = (__IO uint32_t *)&LPC_UART1->LSR;
- }
- else if (UartID == UART_4)
- {
- LCR = (__IO uint32_t *)&LPC_UART4->LCR;
- LSR = (__IO uint32_t *)&LPC_UART4->LSR;
- }
- else
- {
- LPC_UART_TypeDef *UARTx = uart_get_pointer(UartID);
- LCR = (__IO uint32_t *)&UARTx->LCR;
- LSR = (__IO uint32_t *)&UARTx->LSR;
- }
-
- if (ParityStick)
- {
- save = tmp = *LCR & UART_LCR_BITMASK;
-
- tmp &= ~(UART_LCR_PARITY_EVEN);
-
- *LCR = tmp;
-
- cnt = UART_Send(UartID, pDatFrm, size, BLOCKING);
-
- while (!(*LSR & UART_LSR_TEMT));
-
- *LCR = save;
- }
- else
- {
- cnt = UART_Send(UartID, pDatFrm, size, BLOCKING);
-
- while (!(*LSR & UART_LSR_TEMT));
- }
-
- return cnt;
-}
-
-/*********************************************************************//**
- * @brief Send Slave address frames on RS485 bus.
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] SlvAddr Slave Address.
- * @return None
- **********************************************************************/
-void UART_RS485SendSlvAddr(UART_ID_Type UartID, uint8_t SlvAddr)
-{
- UART_RS485Send(UartID, &SlvAddr, 1, 1);
-}
-
-/*********************************************************************//**
- * @brief Send Data frames on RS485 bus.
- * @param[in] UARTx LPC_UART1 (only)
- * @param[in] pData Pointer to data to be sent.
- * @param[in] size Size of data frame to be sent.
- * @return None
- **********************************************************************/
-uint32_t UART_RS485SendData(UART_ID_Type UartID, uint8_t *pData, uint32_t size)
-{
- return (UART_RS485Send(UartID, pData, size, 0));
-}
-
-/**
- * @}
- */
-#endif /*_UART*/
-/**
- * @}
- */
-/* --------------------------------- End Of File ------------------------------ */
-
diff --git a/bsp/lpc408x/Libraries/Drivers/source/lpc_wwdt.c b/bsp/lpc408x/Libraries/Drivers/source/lpc_wwdt.c
deleted file mode 100644
index b4ca9465fc..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/lpc_wwdt.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/**********************************************************************
-* $Id$ lpc_wwdt.c 2011-06-02
-*//**
-* @file lpc_wwdt.c
-* @brief Contains all functions support for Wachtdog Timer
-* firmware library on LPC
-* @version 1.0
-* @date 02. June. 2011
-* @author NXP MCU SW Application Team
-*
-* Copyright(C) 2011, NXP Semiconductor
-* All rights reserved.
-*
-***********************************************************************
-* Software that is described herein is for illustrative purposes only
-* which provides customers with programming information regarding the
-* products. This software is supplied "AS IS" without any warranties.
-* NXP Semiconductors assumes no responsibility or liability for the
-* use of the software, conveys no license or title under any patent,
-* copyright, or mask work right to the product. NXP Semiconductors
-* reserves the right to make changes in the software without
-* notification. NXP Semiconductors also make no representation or
-* warranty that such application will be suitable for the specified
-* use without further testing or modification.
-* Permission to use, copy, modify, and distribute this software and its
-* documentation is hereby granted, under NXP Semiconductors'
-* relevant copyright in the software, without fee, provided that it
-* is used in conjunction with NXP Semiconductors microcontrollers. This
-* copyright, permission, and disclaimer notice must appear in all copies of
-* this code.
-**********************************************************************/
-
-/* Peripheral group ----------------------------------------------------------- */
-/** @addtogroup WWDT
- * @{
- */
-#ifdef __BUILD_WITH_EXAMPLE__
-#include "lpc_libcfg.h"
-#else
-#include "lpc_libcfg_default.h"
-#endif /* __BUILD_WITH_EXAMPLE__ */
-#ifdef _WDT
-
-/* Includes ------------------------------------------------------------------- */
-#include "lpc_wwdt.h"
-#include "lpc_clkpwr.h"
-#include "lpc_pinsel.h"
-
-
- /* Public Functions ----------------------------------------------------------- */
- /** @addtogroup WDT_Public_Functions
- * @{
- */
-
- /********************************************************************//**
- * @brief Set timeout value to Timer Constant register
- * (if enable) to generate a WatchDog event if match
- *
- * @param[in] timeoutVal The value (counter) will write directly to
- * Register w/o pre-calc
- *
- * @return None
- *********************************************************************/
-int8_t WWDT_SetTimeOutRaw(uint32_t timeoutVal)
-{
- int8_t retval = 0;
-
- if(timeoutVal < WWDT_TIMEOUT_MIN)
- {
- timeoutVal = WWDT_TIMEOUT_MIN;
- retval = WWDT_FUNC_BAD_PARAM;
- }
- else if (timeoutVal > WWDT_TIMEOUT_MAX)
- {
- timeoutVal = WWDT_TIMEOUT_MAX;
- retval = WWDT_FUNC_BAD_PARAM;
- }
-
- LPC_WDT->TC = timeoutVal;
-
- return retval;
-}
-
-
-/********************************************************************//**
- * @brief Set WDT timeout (cal by usec) to TC register
- *
- * @param[in] timeout The time (usec) to generate watchdog event if
- * the watchdog counter reach this value
- *
- * @return WWDT_FUNC_OK if success
- *********************************************************************/
-int8_t WWDT_SetTimeOut(uint32_t timeout)
-{
- return WWDT_SetTimeOutRaw(WDT_GET_FROM_USEC(timeout));
-}
-
-
-/*********************************************************************//**
-* @brief Initial for Watchdog function by setting timeout
-*
-* @param[in] TimeOut time out value, should be in range:
-* 2048 .. 134217728
-*
-* @return WWDT_FUNC_OK if success
- **********************************************************************/
-int8_t WWDT_Init(uint32_t TimeOut)
-{
- return WWDT_SetTimeOut(TimeOut);
-}
-
-/*********************************************************************//**
- * @brief Configure the WatchDog by initialization all the timing
- * value for register (Warning value, Window value,...)
- *
- * @param wdtCfg a the st_Wdt_Config type value
- *
- * @return None
- **********************************************************************/
-void WWDT_Configure(st_Wdt_Config wdtCfg)
-{
- WWDT_SetTimeOut(wdtCfg.wdtTmrConst);
-
- if(wdtCfg.wdtEnable)
- {
- LPC_WDT->MOD |= WWDT_WDMOD_WDEN;
- }
- else
- {
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDEN;
- }
-
- if(wdtCfg.wdtReset)
- {
- LPC_WDT->MOD |= WWDT_WDMOD_WDRESET;
- }
- else
- {
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDRESET;
- }
-
- if(wdtCfg.wdtProtect)
- {
- LPC_WDT->MOD |= WWDT_WDMOD_WDPROTECT;
- }
- else
- {
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDPROTECT;
- }
-
- WWDT_SetWarning(wdtCfg.wdtWarningVal);
-
- WWDT_SetWindow(wdtCfg.wdtWindowVal);
-}
-
-/*********************************************************************//**
- * @brief Start WatchDog with specific Timeout
- *
- * @param TimeOut specific Timeout for WatchDog event
- *
- * @return WWDT_FUNC_OK if success
- **********************************************************************/
-int8_t WWDT_Start(uint32_t TimeOut)
-{
- int8_t retval = WWDT_FUNC_OK;
-
- retval = WWDT_SetTimeOut(TimeOut);
-
- WWDT_Cmd(ENABLE);
-
- return retval;
-}
-
-
-/********************************************************************//**
- * @brief Update WDT timeout value and feed
- *
- * @param[in] WarnTime time to generate watchdog warning interrupt(us)
- * should be in range: 2048 .. 134217728
- *
- * @return None
- *********************************************************************/
-void WWDT_SetTimerConstant(uint32_t constVal)
-{
- LPC_WDT->TC = constVal;
-}
-
-
-/*********************************************************************//**
- * @brief Enable/Disable WDT function
- *
- * @param[in] Mode WWDT mode that will be enabled/disabled, should be:
- * - WWDT_PROTECT_MODE : protect mode
- * - WWDT_RESET_MODE : reset mode
- *
- * @param[in] NewState new state of protection function, should be:
- * - ENABLE: The watchdog reload value can be changed at any time
- * - DISABLE: The watchdog reload value can be changed only after
- * the counter is below the value of WDWARNINT and WDWINDOW
- *
- * @return None
- **********************************************************************/
-void WWDT_SetMode(uint8_t mode, FunctionalState NewState)
-{
- if (mode == WWDT_PROTECT_MODE )
- {
- if(NewState == ENABLE)
- LPC_WDT->MOD |= WWDT_WDMOD_WDPROTECT;
- else
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDPROTECT;
- }
- else if(mode == WWDT_RESET_MODE)
- {
- if(NewState == ENABLE)
- LPC_WDT->MOD |= WWDT_WDMOD_WDRESET;
- else
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDRESET;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable WWDT activity
- *
- * @param[in] NewState To enable/disable the WatchDog
- *
- * @return None
- **********************************************************************/
-void WWDT_Enable(FunctionalState NewState)
-{
- if(NewState == ENABLE)
- {
- LPC_WDT->MOD |= WWDT_WDMOD_WDEN;
- }
- else
- {
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDEN;
- }
-}
-
-/*********************************************************************//**
- * @brief Enable/Disable WWDT activity. In case of Enable, it will
- * do feeding WatchDog for its normal operation.
- *
- * @param[in] NewState To enable/disable the WatchDog
- *
- * @return None
- **********************************************************************/
-void WWDT_Cmd(FunctionalState NewState)
-{
- if(NewState == ENABLE)
- {
- LPC_WDT->MOD |= WWDT_WDMOD_WDEN;
-
- //Load the Feed register to start using WDT
- WWDT_Feed();
- }
- else
- {
- LPC_WDT->MOD &= ~WWDT_WDMOD_WDEN;
- }
-}
-
-/********************************************************************//**
- * @brief Set the warning value to register to generate interrupt
- * (if enable) if the watchdog timer matches this value.
- *
- * @param[in] warnVal The value (counter) will write directly to Warning
- * Register w/o pre-calc
- *
- * @return WWDT_FUNC_OK if success
- *********************************************************************/
-int8_t WWDT_SetWarningRaw(uint32_t warnVal)
-{
- int8_t retval = WWDT_FUNC_OK;
-
- if(warnVal < WWDT_WARNINT_MIN)
- {
- warnVal = WWDT_WARNINT_MIN;
- retval = WWDT_FUNC_BAD_PARAM;
- }
- else if (warnVal > WWDT_WARNINT_MAX)
- {
- warnVal = WWDT_WARNINT_MAX;
- retval = WWDT_FUNC_BAD_PARAM;
- }
-
- LPC_WDT->WARNINT = warnVal;
-
- return retval;
-}
-
-/********************************************************************//**
- * @brief Update WDT warning time (cal by usec) to warning register
- *
- * @param[in] WarnTime The time (usec) to generate watchdog warning
- * interrupt should be in range: 2048 .. 8192
- *
- * @return WWDT_FUNC_OK if success
- *********************************************************************/
-int8_t WWDT_SetWarning(uint32_t WarnTime)
-{
- return WWDT_SetWarningRaw(WDT_GET_FROM_USEC(WarnTime));
-}
-
-
-/********************************************************************//**
- * @brief Update WDT Windows value (by counter) to Window Register
- * of WatchDog
- *
- * @param[in] wndVal The value (counter) will write directly to Window
- * Register w/o pre-calc
- *
- * @return WWDT_FUNC_OK if success
- *********************************************************************/
-int8_t WWDT_SetWindowRaw(uint32_t wndVal)
-{
- int8_t retval = WWDT_FUNC_OK;
-
- if(wndVal < WWDT_WINDOW_MIN)
- {
- wndVal = WWDT_WINDOW_MIN;
- retval = WWDT_FUNC_BAD_PARAM;
- }
- else if (wndVal > WWDT_WINDOW_MAX)
- {
- wndVal = WWDT_WINDOW_MAX;
- retval = WWDT_FUNC_BAD_PARAM;
- }
-
- LPC_WDT->WINDOW = wndVal;
-
- return retval;
-}
-
-
-/********************************************************************//**
- * @brief Update WDT Windows value (by usec) to Window Register
- * of WatchDog
- *
- * @param[in] WindowedTime Expected time (usec) to set watchdog window event
- *
- * @return WWDT_FUNC_OK if success
- *********************************************************************/
-int8_t WWDT_SetWindow(uint32_t WindowedTime)
-{
- return WWDT_SetWindowRaw(WDT_GET_FROM_USEC(WindowedTime));
-}
-
-
-/********************************************************************//**
- * @brief Update WDT timeout value for WatchDog event(s)
- *
- * @param[in] TimeOut Time Out value (usec) to be updated, should be
- * in range: 2048 .. 134217728
- *
- * @return None
- *********************************************************************/
-void WDT_UpdateTimeOut(uint32_t TimeOut)
-{
- /* check WDPROTECT,
- * if it is enable, wait until the counter is below the value of
- * WDWARNINT and WDWINDOW
- */
- if(LPC_WDT->MOD & (1<<4))
- {
- while((LPC_WDT->TV <(LPC_WDT->WARNINT & WWDT_WDWARNINT_MASK))\
- &&(LPC_WDT->TV <(LPC_WDT->WINDOW & WWDT_WDTC_MASK)));
- }
-
- WWDT_SetTimeOut(TimeOut);
-}
-
-
-/********************************************************************//**
- * @brief Read WWDT status flag
- *
- * @param[in] Status kind of status flag that you want to get, should be:
- * - WWDT_WARNINT_FLAG: watchdog interrupt flag
- * - WWDT_TIMEOUT_FLAG: watchdog time-out flag
- *
- * @return Time out flag status of WDT
- *********************************************************************/
-FlagStatus WWDT_GetStatus (uint8_t Status)
-{
- if(Status == WWDT_WARNINT_FLAG)
- {
- return ((FlagStatus)(LPC_WDT->MOD & (1<<3)));
- }
- else if (Status == WWDT_TIMEOUT_FLAG)
- {
- return ((FlagStatus)(LPC_WDT->MOD & (1<<2)));
- }
- return RESET;
-}
-
-/********************************************************************//**
- * @brief Clear WWDT status flag
- *
- * @param[in] Status kind of status flag that you want to get, should be:
- * - WWDT_WARNINT_FLAG: watchdog interrupt flag
- * - WWDT_TIMEOUT_FLAG: watchdog time-out flag
- *
- * @return None
- *********************************************************************/
-void WWDT_ClearStatusFlag (uint8_t flag)
-{
- if(flag == WWDT_WARNINT_FLAG)
- {
- // Write 1 to this bit to clear itself
- LPC_WDT->MOD |= WWDT_WDMOD_WDINT;
- }
- else if(flag == WWDT_TIMEOUT_FLAG)
- {
- // Write 0 to this bit to clear itself
- LPC_WDT->MOD &= ~ WWDT_WDMOD_WDTOF;
- }
-}
-
-/********************************************************************//**
- * @brief Clear WDT Time out flag
- * @param None
- * @return None
- *********************************************************************/
-void WWDT_ClrTimeOutFlag (void)
-{
- LPC_WDT->MOD &= ~ WWDT_WDMOD_WDTOF;
-}
-
-
-/********************************************************************//**
- * @brief Following the standard sequence to Feed the WatchDog Timer
- *
- * @param None
- *
- * @return None
- *********************************************************************/
-void WWDT_FeedStdSeq (void)
-{
- LPC_WDT->FEED = 0xAA;
-
- LPC_WDT->FEED = 0x55;
-}
-
-/********************************************************************//**
- * @brief After set WDTEN, call this function to start Watchdog
- * or reload the Watchdog timer
- *
- * @param None
- *
- * @return None
- *********************************************************************/
-void WWDT_Feed (void)
-{
- // Disable irq interrupt
- __disable_irq();
-
- WWDT_FeedStdSeq();
-
- // Then enable irq interrupt
- __enable_irq();
-}
-
-/********************************************************************//**
- * @brief Get the current value of WDT
- *
- * @param None
- *
- * @return Current value of WDT
- *********************************************************************/
-uint32_t WWDT_GetCurrentCount(void)
-{
- return LPC_WDT->TV;
-}
-
-/**
- * @}
- */
-
-#endif /*_WDT*/
-/**
- * @}
- */
-
-/* --------------------------------- End Of File ------------------------------ */
diff --git a/bsp/lpc408x/Libraries/Drivers/source/makefile b/bsp/lpc408x/Libraries/Drivers/source/makefile
deleted file mode 100644
index 75cb107193..0000000000
--- a/bsp/lpc408x/Libraries/Drivers/source/makefile
+++ /dev/null
@@ -1,91 +0,0 @@
-########################################################################
-# $Id:: makefile 814 2008-06-19 19:57:32Z pdurgesh $
-#
-# Project: Standard compile makefile
-#
-# Description:
-# Makefile
-#
-########################################################################
-# Software that is described herein is for illustrative purposes only
-# which provides customers with programming information regarding the
-# products. This software is supplied "AS IS" without any warranties.
-# NXP Semiconductors assumes no responsibility or liability for the
-# use of the software, conveys no license or title under any patent,
-# copyright, or mask work right to the product. NXP Semiconductors
-# reserves the right to make changes in the software without
-# notification. NXP Semiconductors also make no representation or
-# warranty that such application will be suitable for the specified
-# use without further testing or modification.
-########################################################################
-
-########################################################################
-#
-# Get the project root
-#
-########################################################################
-PROJ_ROOT = $(CURDIR)/../..
-
-########################################################################
-#
-# Pick up the configuration file in make section
-#
-########################################################################
-include ../../makesection/makeconfig
-
-########################################################################
-#
-# Pick up the default build rules
-#
-########################################################################
-
-include $(PROJ_ROOT)/makesection/makerule/LPC/make.LPC.$(TOOL)
-
-########################################################################
-#
-# Pick up the assembler and C source files in the directory
-#
-########################################################################
-include $(PROJ_ROOT)/makesection/makerule/common/make.rules.ftypes
-AFLAGS +=-I../include
-CFLAGS +=-I../include
-
-
-########################################################################
-#
-# Build the library
-#
-########################################################################
-
-$(TARGET_FWLIB_LIB) : .vias $(OBJS) $(FWLIB_LIB_DIR)
- $(ECHO) "creating" $(FWLIB) "Firmware support package library"
- $(AR) $@ $(OBJS)
-
-$(FWLIB_LIB_DIR):
- $(MKDIR) $(FWLIB_LIB_DIR)
-
-# delete all targets this Makefile can make
-lib_clean:
- -@$(RM) $(TARGET_FWLIB_LIB)
-
-# delete all targets this Makefile can make and all built libraries
-# linked in
-lib_realclean:
- -@$(RM) $(FWLIB_LIB_DIR)/*.a
- -@$(RMDIR) $(FWLIB_LIB_DIR)
-
-clean: lib_clean
-realclean: lib_realclean
-
-########################################################################
-#
-# Compile the code base
-#
-########################################################################
-
-include $(PROJ_ROOT)/makesection/makerule/common/make.rules.build
-
-.PHONY: all lib_clean lib_realclean
-
-
-
diff --git a/bsp/lpc408x/Libraries/SConscript b/bsp/lpc408x/Libraries/SConscript
deleted file mode 100644
index 4c815c49b8..0000000000
--- a/bsp/lpc408x/Libraries/SConscript
+++ /dev/null
@@ -1,15 +0,0 @@
-# RT-Thread building script for bridge
-
-import os
-from building import *
-
-cwd = GetCurrentDir()
-objs = []
-list = os.listdir(cwd)
-
-for d in list:
- path = os.path.join(cwd, d)
- if os.path.isfile(os.path.join(path, 'SConscript')):
- objs = objs + SConscript(os.path.join(d, 'SConscript'))
-
-Return('objs')