/*
 * Only the CMSIS required parts for ASF are included here, go to the below
 * address for the full package:
 * http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
 *
 * The library file thirdparty/CMSIS/Lib/GCC/libarm_cortexM4lf_math_softfp.a was generated by ATMEL, which
 * is support -mfloat-abi=softfp compiler flag, and this is also the default selection for device that
 * have FPU module and enabled.
 * If customer want to use -mfloat-abi=hard compiler flag, the project compile/link flag and link library
 * should be manual modified. The library thirdparty/CMSIS/Lib/GCC/libarm_cortexM4lf_math.a is used for
 * -mfloat-abi=hard configration.
 *
 * __CORTEX_SC is not defined for cortex-m0+, and may cause compiler warning, so the include file 
 * thirdparty/CMSIS/Include/core_cmInstr.h was modified to void such warning.
 * Modified from: 
 *  #if       (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300)
 * to:
 * #if       (__CORTEX_M >= 0x03) || ((defined(__CORTEX_SC)) && (__CORTEX_SC >= 300))
 *
 */
