diff --git a/.travis.yml b/.travis.yml index 8288d507be2..10f48e6650a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -134,77 +134,77 @@ matrix: fi - bash -c "$STATUS" success "$STATUSM" - - env: - - NAME=littlefs - - LITTLEFS=features/filesystem/littlefs - install: - # Install dependencies - - sudo apt-get install gcc-arm-embedded fuse libfuse-dev - - pip install -r requirements.txt - - git clone https://github.com/armmbed/spiflash-driver.git - # Print versions - - arm-none-eabi-gcc --version - - gcc --version - - python --version - - fusermount --version - before_script: - # Setup and patch littlefs-fuse - - git clone https://github.com/geky/littlefs-fuse littlefs_fuse - - git -C littlefs_fuse checkout 3f1ed6e37799e49e3710830dc6abb926d5503cf2 - - echo '*' > littlefs_fuse/.mbedignore - - rm -rf littlefs_fuse/littlefs/* - - cp -r $(git ls-tree --name-only HEAD $LITTLEFS/littlefs/) littlefs_fuse/littlefs - # Create file-backed disk - - mkdir MOUNT - - sudo chmod a+rw /dev/loop0 - - dd if=/dev/zero bs=512 count=2048 of=DISK - - losetup /dev/loop0 DISK - - CFLAGS="-Werror -Wno-format" - script: - # Check that example compiles - - export CFLAGS="-Werror -Wno-format" - - sed -n '/``` c++/,/```/{/```/d;p;}' $LITTLEFS/README.md > main.cpp - - python tools/make.py -t GCC_ARM -m K82F --source=. --build=BUILD/K82F/GCC_ARM -j0 - # Run local littlefs tests - - make -C$LITTLEFS/littlefs test QUIET=1 - # Run local littlefs tests with set of variations - - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=64 -DLFS_PROG_SIZE=64" - - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" - - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" - - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" - - make -C$LITTLEFS/littlefs clean test QUIET=1 CFLAGS+="-DLFS_NO_INTRINSICS" - # Self-hosting littlefs fuzz test with littlefs-fuse - - make -Clittlefs_fuse - - littlefs_fuse/lfs --format /dev/loop0 - - littlefs_fuse/lfs /dev/loop0 MOUNT - - ls MOUNT - - mkdir MOUNT/littlefs - - cp -r $(git ls-tree --name-only HEAD $LITTLEFS/littlefs/) MOUNT/littlefs - - ls MOUNT/littlefs - - CFLAGS="-Wno-format" make -CMOUNT/littlefs -B test_dirs test_files QUIET=1 - # Compile and find the code size with smallest configuration - - cd $TRAVIS_BUILD_DIR/$LITTLEFS/littlefs - - make clean size - CC='arm-none-eabi-gcc -mthumb' - OBJ="$(ls lfs*.o | tr '\n' ' ')" - CFLAGS+="-DLFS_NO{ASSERT,DEBUG,WARN,ERROR}" - | tee sizes - after_success: - # update status if we succeeded, compare with master if possible - - | - CURR=$(tail -n1 sizes | awk '{print $1}') - PREV=$(curl -u "$MBED_BOT" https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \ - | jq -re "select(.sha != \"$TRAVIS_COMMIT\") - | .statuses[] | select(.context == \"travis-ci/$NAME\").description - | capture(\"code size is (?[0-9]+)\").size" \ - || echo 0) - - STATUSM="Passed, code size is ${CURR}B" - if [ "$PREV" -ne 0 ] - then - STATUSM="$STATUSM ($(python -c "print '%+.2f' % (100*($CURR-$PREV)/$PREV.0)")%)" - fi - - bash -c "$STATUS" success "$STATUSM" +# - env: +# - NAME=littlefs +# - LITTLEFS=features/filesystem/littlefs +# install: +# # Install dependencies +# - sudo apt-get install gcc-arm-embedded fuse libfuse-dev +# - pip install -r requirements.txt +# - git clone https://github.com/armmbed/spiflash-driver.git +# # Print versions +# - arm-none-eabi-gcc --version +# - gcc --version +# - python --version +# - fusermount --version +# before_script: +# # Setup and patch littlefs-fuse +# - git clone https://github.com/geky/littlefs-fuse littlefs_fuse +# - git -C littlefs_fuse checkout 3f1ed6e37799e49e3710830dc6abb926d5503cf2 +# - echo '*' > littlefs_fuse/.mbedignore +# - rm -rf littlefs_fuse/littlefs/* +# - cp -r $(git ls-tree --name-only HEAD $LITTLEFS/littlefs/) littlefs_fuse/littlefs +# # Create file-backed disk +# - mkdir MOUNT +# - sudo chmod a+rw /dev/loop0 +# - dd if=/dev/zero bs=512 count=2048 of=DISK +# - losetup /dev/loop0 DISK +# - CFLAGS="-Werror -Wno-format" +# script: +# # Check that example compiles +# - export CFLAGS="-Werror -Wno-format" +# - sed -n '/``` c++/,/```/{/```/d;p;}' $LITTLEFS/README.md > main.cpp +# - python tools/make.py -t GCC_ARM -m K82F --source=. --build=BUILD/K82F/GCC_ARM -j0 +# # Run local littlefs tests +# - make -C$LITTLEFS/littlefs test QUIET=1 +# # Run local littlefs tests with set of variations +# - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=64 -DLFS_PROG_SIZE=64" +# - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" +# - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" +# - make -C$LITTLEFS/littlefs test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" +# - make -C$LITTLEFS/littlefs clean test QUIET=1 CFLAGS+="-DLFS_NO_INTRINSICS" +# # Self-hosting littlefs fuzz test with littlefs-fuse +# - make -Clittlefs_fuse +# - littlefs_fuse/lfs --format /dev/loop0 +# - littlefs_fuse/lfs /dev/loop0 MOUNT +# - ls MOUNT +# - mkdir MOUNT/littlefs +# - cp -r $(git ls-tree --name-only HEAD $LITTLEFS/littlefs/) MOUNT/littlefs +# - ls MOUNT/littlefs +# - CFLAGS="-Wno-format" make -CMOUNT/littlefs -B test_dirs test_files QUIET=1 +# # Compile and find the code size with smallest configuration +# - cd $TRAVIS_BUILD_DIR/$LITTLEFS/littlefs +# - make clean size +# CC='arm-none-eabi-gcc -mthumb' +# OBJ="$(ls lfs*.o | tr '\n' ' ')" +# CFLAGS+="-DLFS_NO{ASSERT,DEBUG,WARN,ERROR}" +# | tee sizes +# after_success: +# # update status if we succeeded, compare with master if possible +# - | +# CURR=$(tail -n1 sizes | awk '{print $1}') +# PREV=$(curl -u "$MBED_BOT" https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \ +# | jq -re "select(.sha != \"$TRAVIS_COMMIT\") +# | .statuses[] | select(.context == \"travis-ci/$NAME\").description +# | capture(\"code size is (?[0-9]+)\").size" \ +# || echo 0) +# +# STATUSM="Passed, code size is ${CURR}B" +# if [ "$PREV" -ne 0 ] +# then +# STATUSM="$STATUSM ($(python -c "print '%+.2f' % (100*($CURR-$PREV)/$PREV.0)")%)" +# fi +# - bash -c "$STATUS" success "$STATUSM" - env: - NAME=gitattributestest diff --git a/hal/spi_api.h b/hal/spi_api.h index 90117c822bd..7542f6338a7 100644 --- a/hal/spi_api.h +++ b/hal/spi_api.h @@ -1,8 +1,7 @@ - -/** \addtogroup hal */ +/** \ingroup hal */ /** @{*/ /* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited + * Copyright (c) 2006-2018 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,220 +18,256 @@ #ifndef MBED_SPI_API_H #define MBED_SPI_API_H +#include +#include #include "device.h" -#include "hal/dma_api.h" -#include "hal/buffer.h" #if DEVICE_SPI - -#define SPI_EVENT_ERROR (1 << 1) -#define SPI_EVENT_COMPLETE (1 << 2) -#define SPI_EVENT_RX_OVERFLOW (1 << 3) -#define SPI_EVENT_ALL (SPI_EVENT_ERROR | SPI_EVENT_COMPLETE | SPI_EVENT_RX_OVERFLOW) - -#define SPI_EVENT_INTERNAL_TRANSFER_COMPLETE (1 << 30) // Internal flag to report that an event occurred - -#define SPI_FILL_WORD (0xFFFF) -#define SPI_FILL_CHAR (0xFF) - -#if DEVICE_SPI_ASYNCH -/** Asynch SPI HAL structure - */ -typedef struct { - struct spi_s spi; /**< Target specific SPI structure */ - struct buffer_s tx_buff; /**< Tx buffer */ - struct buffer_s rx_buff; /**< Rx buffer */ -} spi_t; - -#else -/** Non-asynch SPI HAL structure - */ -typedef struct spi_s spi_t; - -#endif - -#ifdef __cplusplus -extern "C" { -#endif - /** - * \defgroup hal_GeneralSPI SPI Configuration Functions - * @{ - */ - -/** Initialize the SPI peripheral + * \defgroup hal_spi SPI: Serial peripheral interface HAL API. + * Low level interface to the serial peripheral interface of a target. * - * Configures the pins used by SPI, sets a default format and frequency, and enables the peripheral - * @param[out] obj The SPI object to initialize - * @param[in] mosi The pin to use for MOSI - * @param[in] miso The pin to use for MISO - * @param[in] sclk The pin to use for SCLK - * @param[in] ssel The pin to use for SSEL - */ -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel); - -/** Release a SPI object + * # Programming model + * This is an OOP like API. spi_t is used a "this".
+ * Methods not having this type as their first parameter are **class** methods.
+ * Methods with an spi_t object as their first parameter are **instance** methods.
+ * `spi_init()` acts as the "constructor"(/initialiser) of this *class*.
+ * `spi_free()` acts as the "destructor"(/deinitialiser) of this *class*.
+ * + * # Defined behaviours + * - Multiple instances can share pins such as MISO/MOSI/MCLK but not their SS pin. This pin is used + * to distinguish communication channels (master or slaves). + * - As the instance allocation is at the user's responsibility, the hal implementation cannot keep + * a copy of the pointer (keep an alias to the object) as it may be stack allocated and/or moved. + * - The hal implementation must support both clock phases. + * - The hal implementation must support both clock polarities. + * - The hal implementation must support master mode. + * - The hal implementation must support both lsb first and msb first. + * - The hal implementation must support both continuous and noncontinuous modes. + * - The hal implementation must support at least a word length of 8 bit and any value in the range + * 4 to 32. + * - The hal implementation must support the simplex and full duplex modes. + * - The hal implementation may support slave mode. + * - The generated clock must be lower than or equal to the requested frequency minimising the + * deviation. + * + * - spi_get_capabilities(..) + * - returns a constant pointer to a constant structure describing the capabilities of the + * related peripheral. + * - returned value is independent from the SPI channel usage. + * - spi_init(..) + * - initialises the pins. + * - spi_transfer(..) + * - returns `true` if the operation succeeded. + * - returns `false` if the peripheral is busy with another transaction. + * - returns `false` if an error occurred. An error can be due to : + * - conflicting master ; + * - rx or tx overflow ; + * - rx or tx underflow... + * - sends and received up to `max(tx_count, rx_count)`. + * - if `tx` is not NULL then writes up to `tx_count` symbol from `tx` then sends + * `max(tx_count, rx_count) - tx_count` times the `fill_symbol` . + * - if `rx` is not NULL then stores in `rx` up to `rx_count` symbol and continue popping symbol + * from the peripheral until `max(tx_count, rx_count) - rx_count` is reached. All spare symbol + * are dropped. + * - if the device is available, it locks the device and blocks until completion (or error). + * - spi_free(..) + * - cancel all pending or on going transaction/transfer and then deinitialise (clock out) this + * device if it was the last channel associated to this SPI peripheral. + * - deinitialise the pins. * - * TODO: spi_free is currently unimplemented - * This will require reference counting at the C++ level to be safe + * # Undefined behaviours + * - calling any instance method before `spi_init()`. + * - calling any other instance method than `spi_init()` after `spi_free()`. + * - calling any instance method while another one is running. + * - calling any method from an interrupt context. + * - calling any method with an invalid parameter. + * - killing the spi_transfer_args_t or any of the pointer buffer before the end of the transaction. * - * Return the pins owned by the SPI object to their reset state - * Disable the SPI peripheral - * Disable the SPI clock - * @param[in] obj The SPI object to deinitialize + * # Lexicon + * ## Transfer/Transaction + * In this documentation a *transfer* is an operation of emission, reception or both that occur + * during a single call to spi_transfer(). + * + * ## Continuous mode + * In this mode SS is kept asserted between words. For example with 4 bits words msb first, + * continuous mode would transmit 5 symbols: 0x9 0x4 0x8 0xF 0x0 + * ``` + * ___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + * MCLK \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + * _ _ + * SS \_______________________________________________________________________________/ + * _ ___ ___ ___ ___ _______________ _ + * DATA _X \_______/ \___/ \_______/ \___________/ \_______________X_ + * _ + * ``` + * where non-continuous mode would require a "pause" of a defined duration between symbols thus + * reducing the overall throughput of the bus : 0x9 0x9 0x3 0x8 + * ``` + * ___ _ _ _ _ ___ _ _ _ _ ___ _ _ _ _ ___ _ _ _ __ + * MCLK \_/ \_/ \_/ \_/ -- \_/ \_/ \_/ \_/ -- \_/ \_/ \_/ \_/ -- \_/ \_/ \_/ \_/ + * _ _ _ _ _ _ _ __ + * SS \_______________/ -- \_______________/ -- \_______________/ -- \_______________/ + * _ ___ _____ _____ _____ _ _________ _____ __ + * DATA _X \_______/ X_--_X \_______/ X_--_X_______/ X_--_X \___________X__ + * _ + * ``` + * ## Symbol/Word + * Even though documentations usually uses `word` to mean the unit of data that is sent/received + * it is ambiguous as it may not correspond to an actual `word` on the platform. To avoid any + * confusion we will use in this API the word `symbol` instead. + * ## SPI channel + * This is the virtual communication channel created between a master and its slave. + * @{ */ -void spi_free(spi_t *obj); -/** Configure the SPI format +/** + * This is the hal level SPI "class". * - * Set the number of bits per frame, configure clock polarity and phase, shift order and master/slave mode. - * The default bit order is MSB. - * @param[in,out] obj The SPI object to configure - * @param[in] bits The number of bits per frame - * @param[in] mode The SPI mode (clock polarity, phase, and shift direction) - * @param[in] slave Zero for master mode or non-zero for slave mode + * The actual definition of this structure is delegated to the device implementation of the hal. */ -void spi_format(spi_t *obj, int bits, int mode, int slave); +typedef struct spi_t spi_t; -/** Set the SPI baud rate +/** + * This holds together the pins related to a single SPI channel. * - * Actual frequency may differ from the desired frequency due to available dividers and bus clock - * Configures the SPI peripheral's baud rate - * @param[in,out] obj The SPI object to configure - * @param[in] hz The baud rate in Hz + * Any pin but the Slave Select pin may be shared between any number of SPI channels. + * The Slave Select pin serves as a "unique identifier". */ -void spi_frequency(spi_t *obj, int hz); +typedef struct { + PinName ss; /**< Slave select pin. */ + PinName miso; /**< Master In Slave Out. */ + PinName mosi; /**< Master Out Slave In. */ + PinName mclk; /**< Master Clock pin. */ +} spi_pins_t; -/**@}*/ /** - * \defgroup SynchSPI Synchronous SPI Hardware Abstraction Layer - * @{ + * This structure groups all initialisation parameters required by a SPI interface. */ +typedef struct { + /**< This symbol will be sent as a place holder in full-duplex mode in case more symbols are to + be read than to be sent. */ + uint32_t fill_symbol; + uint32_t clock_frequency; /**< MCLK frequency in Hz. */ + + uint32_t word_length; /**< Length of a symbol in bit. */ + bool is_master; /**< True to configure the device in Master mode. */ + bool msb_first; /**< True to send/receive the most significant bit first. */ + bool clock_phase; /**< True if data line is valid when leaving active state. */ + bool clock_polarity; /**< True if the clock's rest state is high (+Vcc). */ + bool continuous_mode; /**< True to use the continuous mode. */ +} spi_config_t; -/** Write a byte out in master mode and receive a value - * - * @param[in] obj The SPI peripheral to use for sending - * @param[in] value The value to send - * @return Returns the value received during send - */ -int spi_master_write(spi_t *obj, int value); - -/** Write a block out in master mode and receive a value - * - * The total number of bytes sent and received will be the maximum of - * tx_length and rx_length. The bytes written will be padded with the - * value 0xff. - * - * @param[in] obj The SPI peripheral to use for sending - * @param[in] tx_buffer Pointer to the byte-array of data to write to the device - * @param[in] tx_length Number of bytes to write, may be zero - * @param[in] rx_buffer Pointer to the byte-array of data to read from the device - * @param[in] rx_length Number of bytes to read, may be zero - * @param[in] write_fill Default data transmitted while performing a read - * @returns - * The number of bytes written and read from the device. This is - * maximum of tx_length and rx_length. +/** + * This is describes the capabilities of a SPI channel. + * The elements of this structure are independent. This means that a supported feature is supported + * regardless of other feature settings. */ -int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, char write_fill); +typedef struct { + /** Minimum frequency supported must be set by target device and it will be assessed during + * testing. + */ + uint32_t minimum_frequency; + /** Maximum frequency supported must be set by target device and it will be assessed during + * testing. + */ + uint32_t maximum_frequency; + /** Each bit represents the corresponding word length. lsb => 1bit, msb => 32bit. */ + uint32_t word_length; + bool support_slave_mode; /**< If true, the device can handle SPI slave mode. */ +} spi_capabilities_t; -/** Check if a value is available to read +/** + * This structure groups all required data to handle a SPI transaction. * - * @param[in] obj The SPI peripheral to check - * @return non-zero if a value is available + * A symbol might be bigger than a byte. In such case symbols are read/written following the + * platform's endianness. */ -int spi_slave_receive(spi_t *obj); +typedef struct { + spi_config_t config; /**< Configuration to use on this transfer. */ + const uint8_t *tx; /**< A buffer containing the data to be sent. */ + uint32_t tx_count; /**< The number of symbol to send. */ + uint8_t *rx; /**< A buffer to store the received data. */ + uint32_t rx_count; /**< The number of symbol to read. */ +} spi_transfer_args_t; -/** Get a received value out of the SPI receive buffer in slave mode - * - * Blocks until a value is available - * @param[in] obj The SPI peripheral to read - * @return The value received - */ -int spi_slave_read(spi_t *obj); +#ifdef __cplusplus +extern "C" { +#endif -/** Write a value to the SPI peripheral in slave mode +/** + * Obtains the capabilities of a SPI channel. * - * Blocks until the SPI peripheral can be written to - * @param[in] obj The SPI peripheral to write - * @param[in] value The value to write - */ -void spi_slave_write(spi_t *obj, int value); - -/** Checks if the specified SPI peripheral is in use + * - returns a constant pointer to a constant structure describing the capabilities of the + * related peripheral regardless of whether the device is in use or not. * - * @param[in] obj The SPI peripheral to check - * @return non-zero if the peripheral is currently transmitting + * @param[in] pins spi_pins_t structure identifying a SPI channel. + * @return A constant pointer to a constant structure describing the capabilities of the device. */ -int spi_busy(spi_t *obj); +const spi_capabilities_t *const spi_get_capabilities(const spi_pins_t *pins); -/** Get the module number +/** + * Initialises a SPI instance. * - * @param[in] obj The SPI peripheral to check - * @return The module number + * - initialises the pins. + * + * @param[in,out] obj A spi_t instance to initialise. + * @param[in] pins spi_pins_t structure identifying a SPI channel. */ -uint8_t spi_get_module(spi_t *obj); - -/**@}*/ +void spi_init(spi_t *obj, const spi_pins_t *pins); -#if DEVICE_SPI_ASYNCH /** - * \defgroup AsynchSPI Asynchronous SPI Hardware Abstraction Layer - * @{ - */ - -/** Begin the SPI transfer. Buffer pointers and lengths are specified in tx_buff and rx_buff - * - * @param[in] obj The SPI object that holds the transfer information - * @param[in] tx The transmit buffer - * @param[in] tx_length The number of bytes to transmit - * @param[in] rx The receive buffer - * @param[in] rx_length The number of bytes to receive - * @param[in] bit_width The bit width of buffer words - * @param[in] event The logical OR of events to be registered - * @param[in] handler SPI interrupt handler - * @param[in] hint A suggestion for how to use DMA with this transfer - */ -void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint); - -/** The asynchronous IRQ handler + * Processes a transfer blocking until completion if the device is available. * - * Reads the received values out of the RX FIFO, writes values into the TX FIFO and checks for transfer termination - * conditions, such as buffer overflows or transfer complete. - * @param[in] obj The SPI object that holds the transfer information - * @return Event flags if a transfer termination condition was met; otherwise 0. - */ -uint32_t spi_irq_handler_asynch(spi_t *obj); - -/** Attempts to determine if the SPI peripheral is already in use - * - * If a temporary DMA channel has been allocated, peripheral is in use. - * If a permanent DMA channel has been allocated, check if the DMA channel is in use. If not, proceed as though no DMA - * channel were allocated. - * If no DMA channel is allocated, check whether tx and rx buffers have been assigned. For each assigned buffer, check - * if the corresponding buffer position is less than the buffer length. If buffers do not indicate activity, check if - * there are any bytes in the FIFOs. - * @param[in] obj The SPI object to check for activity - * @return Non-zero if the SPI port is active or zero if it is not. + * - returns `true` if the operation succeeded. + * - returns `false` if the peripheral is busy with another transaction. + * - returns `false` if an error occurred. An error can be due to : + * - conflicting master ; + * - rx or tx overflow ; + * - rx or tx underflow... + * - sends and received up to `max(tx_count, rx_count)`. + * - if `tx` is not NULL then writes up to `tx_count` symbol from `tx` then sends + * `max(tx_count, rx_count) - tx_count` times the `fill_symbol` . + * - if `rx` is not NULL then stores in `rx` up to `rx_count` symbol and continue popping symbol + * from the peripheral until `max(tx_count, rx_count) - rx_count` is reached. All spare symbol + * are dropped. + * - if the device is available, it locks the device and blocks until completion (or error). + * + * @warning The spi_transfer_args_t and the pointed buffers must live for the whole duration of this + * method. + * + * @param[in,out] obj An initialised spi_t instance. + * @param[in] args An spi_transfer_args_t instance. + * + * @return True on success. */ -uint8_t spi_active(spi_t *obj); +bool spi_transfer(spi_t *obj, const spi_transfer_args_t *args); -/** Abort an SPI transfer +/** + * Frees the SPI instance. + * + * - cancel all pending or on going transaction/transfer and then deinitialise (clock out) this + * device if it was the last device associated to this peripheral. + * - deinitialise the pins. * - * @param obj The SPI peripheral to stop + * @param[in,out] obj An initialised spi_t instance. + * + * @return `true` on success. */ -void spi_abort_asynch(spi_t *obj); - - -#endif +void spi_free(spi_t *obj); -/**@}*/ +/** + * @} + */ #ifdef __cplusplus } -#endif // __cplusplus +#endif -#endif // SPI_DEVICE +#endif /* DEVICE_SPI */ -#endif // MBED_SPI_API_H +#endif /* MBED_SPI_API_H */ +/** + * @} + */ -/** @}*/ diff --git a/hal/spi_async_api.h b/hal/spi_async_api.h new file mode 100644 index 00000000000..ab1714942d4 --- /dev/null +++ b/hal/spi_async_api.h @@ -0,0 +1,179 @@ +/** \ingroup hal_spi */ +/** @{*/ +/* mbed Microcontroller Library + * Copyright (c) 2006-2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_SPI_API_ASYNC_H +#define MBED_SPI_API_ASYNC_H + +#include "hal/spi_api.h" + +#if DEVICE_SPI +#if DEVICE_SPI_ASYNCH + +/** \defgroup hal_spi_async SPI: Asynchronous API. + * Asynchronous extension to the SPI HAL API. + * + * # Programming model + * This is an OOP like API. spi_async_transfer_t is used a "this".
+ * Methods not having this type as their first parameter are **class** methods.
+ * Methods with an spi_t object as their first paremeter are **instance** methods.
+ * `spi_async_transfer_new()` acts as the "constructor" of this *class*.
+ * `spi_async_transfer_free()` acts as the "desctructor" of this *class*. + * + * This API extends the hal_spi API. + * + * # Defined behaviours + +## Defined behaviours + * - A repeating transfer must not restart until the invocation of the completion callback has not returned. + * - A repeating transfer must not restart until the invokation of the completion callback has not returned. + * - The implementation may use interrupt or + * + * - spi_async_transfer_new(..) + * - enqueues a transfer request that will processed as the device become available. + * - on successfull enqueueing returns a counted reference to the related hal implementation + * resource. + * @warning if `repeat` is `false` then any element passed to this function must live at least + * until the callback is invoked. + * @warning if `repeat` is `true` then any element passed to this function must live at least + * until the transfer is freed. + * - spi_async_transfer_free(..) + * - aborts/cancels a transaction if not completed yet and release the associated memory. + * - it does **NOT** free the spi_transfer_args_t **nor** the referenced buffers. + * - spi_event_f(..) + * - may update the spi_transfer_args_t structure initialy given to `spi_async_transfer_new(..)` + * on a repeating transfer. + * - does not block/busy wait/perform heavy calculation. + * - does not perfom any rtos unsafe operation. + * + * # Undefined behaviours + * - Calling any method on a `spi_async_tranfer_t` after calling `spi_async_free_handle()`. + * - Passing invalid pointers to any method. + * - Freeing buffers before freeing the associated transaction. + * + * # Lexicon + * ## `Completion`/`Cancelletion`/`Abort` + * The `completion` of a transfer is reached when one of the following condition is verified : + * - the transfer has sent and received the amount of symbol specified in `tx_count` and `rx_count`. + * - an error has occured during the transfer. + * - an abort was triggered during the transfer. + * + * The `cancellation` refers to an `abort request` occuring before the transfer is actually initiated. + * + * The `abort` refers to `abort request` occuring during the processing of the transfer. + * + * @{ + */ + +/** + * This enumerates the possible event types generated by the SPI ASYNC api. + */ +typedef enum spi_event_type_t { + SPI_EVENT_TYPE_COMPLETION, /**< The operation has completed successfully. */ + SPI_EVENT_TYPE_ERROR /**< An error occured. */ +} spi_event_type_t; + +/** + * This gives informations on the transaction state when the completion callback is invoked. + */ +typedef struct spi_transfer_state_s { + spi_event_type_t event_type; /**< Even type triggering this invocation. */ + uint32_t received; /**< Actual count of received symbols at the time being. */ + uint32_t transmitted; /**< Actual count of transmitted symbols at the time being. */ +} spi_transfer_state_t; + +/** + * SPI asynchronous transfer type. + * This has to be defined by the low-level implementation. + * This is only manipulated by pointer and thus can be an opaque type. + */ +typedef struct spi_async_transfer_s spi_async_transfer_t; + +/** + * Signature for a SPI async completion event. + * + * As this may be executed from an interrupt context it is highly adviced to restrict this callback + * to signaling completion to a thread. + * + * @note This method may update the spi_transfer_args_t initialy passed to spi_async_transfer_new(). + * This is very handful for chaining transfer saving time from reallocation. + * + * @warning This method may be called from an interrupt context and thus shall not call any interrupt + * unsafe function. It should also be as quick as possible in order to avoid any latency on + * the rest of the system. + * + * @param[in,out] context Any object that was passed to spi_async_transfer_new(). + * @param[in] transfer The handle that was returned by spi_async_transfer_new(). + * @param[in] transfer_state Transfer state at the moment of the call. This state will be valid + * until this method returns. + */ +typedef void (*spi_event_f)(void *context, spi_async_transfer_t* transfer, spi_transfer_state_t transfer_state); + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Schedules a transfer using the given parameters. + * + * - enqueues a transfer request that will processed as the device become available. + * - on successfull enqueueing returns a reference to the related hal implementation resource. + * + * @warning if `repeat` is `false` then any element passed to this function must live at least + * until the callback is invoked. + * @warning if `repeat` is `true` then any element passed to this function must live at least until + * the callback is invoked with the an event type not being `SPI_EVENT_TYPE_ON_DONE`. + * + * @param[in,out] obj A pointer to a spi_t object. + * @param[in,out] args A pointer to a spi_transfer_args_t object. + * @param[in] context A context to be used by the callback. + * @param[in] cb A callback invoked upon completion of this transaction. + * @param[in] repeat If true, the transaction will be repeated until it is cancelled. + * + * @return A reference counted handle to the transaction. + */ +spi_async_transfer_t* spi_async_transfer_new( + spi_t *obj, + spi_transfer_args_t *args, + void *context, + spi_event_f cb, + bool repeat); + +/** + * Tells the low-level driver that the upper layer is no longer keeping this handle. + * + * - aborts/cancels a transaction if not completed yet and release the associated memory. + * - it does **NOT** free the spi_transfer_args_t **nor** the referenced buffers. + * + * @param[in] transfer A spi_async_tranfer_t object. + */ +void spi_async_transfer_free(spi_async_tranfer_t* transfer); +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#endif /* DEVICE_SPI_ASYNCH */ +#endif /* DEVICE_SPI */ + +#endif /* MBED_SPI_API_ASYNC_H */ +/** + * @} + */ + diff --git a/targets/TARGET_ARM_SSG/TARGET_BEETLE/spi_api.c b/targets/TARGET_ARM_SSG/TARGET_BEETLE/spi_api.c index 8385ecedae2..406cf262b13 100644 --- a/targets/TARGET_ARM_SSG/TARGET_BEETLE/spi_api.c +++ b/targets/TARGET_ARM_SSG/TARGET_BEETLE/spi_api.c @@ -22,6 +22,7 @@ #include "mbed_error.h" #include "mbed_wait_api.h" +#if DEVICE_SPI /* * Driver private data structure that should not be shared by multiple * instances of the driver (same driver for multiple instances of the IP) @@ -284,3 +285,4 @@ uint8_t spi_get_module(spi_t *obj) { int spi_busy(spi_t *obj) { return 0; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/spi_api.c b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/spi_api.c index 3ce247cc937..da0279ecb71 100644 --- a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/spi_api.c +++ b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/spi_api.c @@ -21,6 +21,7 @@ #include "platform_devices.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {SPI_SCLK, SPI_0, 0}, {CLCD_SCLK, SPI_1, 0}, @@ -263,3 +264,4 @@ int spi_busy(spi_t *obj) int32_t status = spi_pl022_get_status(obj->spi); return (status & SPI_PL022_SSPSR_BSY_MSK); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c b/targets/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c index 88b2e89be27..a8a4796ac7f 100644 --- a/targets/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c +++ b/targets/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c @@ -15,6 +15,7 @@ */ #include +#if DEVICE_SPI #include "spi_api.h" #include "spi_def.h" #include "cmsis.h" @@ -299,3 +300,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c b/targets/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c index affd5b25148..32cc28f39ac 100644 --- a/targets/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c +++ b/targets/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c @@ -22,6 +22,7 @@ #include "mbed_error.h" #include "mbed_wait_api.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {SCLK_SPI , SPI_0, 0}, {CLCD_SCLK , SPI_1, 0}, @@ -299,3 +300,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Atmel/TARGET_SAM_CortexM0P/spi_api.c b/targets/TARGET_Atmel/TARGET_SAM_CortexM0P/spi_api.c index 9da9a458dda..d7e54a1757d 100644 --- a/targets/TARGET_Atmel/TARGET_SAM_CortexM0P/spi_api.c +++ b/targets/TARGET_Atmel/TARGET_SAM_CortexM0P/spi_api.c @@ -16,6 +16,7 @@ #include "mbed_assert.h" #include "spi_api.h" +#if DEVICE_SPI #include "cmsis.h" #include "pinmap.h" #include "sercom.h" @@ -1014,3 +1015,4 @@ void spi_abort_asynch(spi_t *obj) } #endif /* DEVICE_SPI_ASYNCH */ +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Atmel/TARGET_SAM_CortexM4/spi_api.c b/targets/TARGET_Atmel/TARGET_SAM_CortexM4/spi_api.c index 13a326eab35..1974c220c52 100644 --- a/targets/TARGET_Atmel/TARGET_SAM_CortexM4/spi_api.c +++ b/targets/TARGET_Atmel/TARGET_SAM_CortexM4/spi_api.c @@ -24,6 +24,7 @@ #include "pdc.h" +#if DEVICE_SPI /* Chip select. */ #define SPI_CHIP_SEL 0 @@ -518,4 +519,5 @@ void spi_abort_asynch(spi_t *obj) NVIC_DisableIRQ(obj->spi.irq_type); } -#endif \ No newline at end of file +#endif /* DEVICE_SPI_ASYNCH */ +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Freescale/TARGET_K20XX/spi_api.c b/targets/TARGET_Freescale/TARGET_K20XX/spi_api.c index 391615e3681..d684dcb1e01 100644 --- a/targets/TARGET_Freescale/TARGET_K20XX/spi_api.c +++ b/targets/TARGET_Freescale/TARGET_K20XX/spi_api.c @@ -16,6 +16,7 @@ #include "mbed_assert.h" #include "spi_api.h" +#if DEVICE_SPI #include #include "cmsis.h" @@ -167,3 +168,4 @@ int spi_slave_read(spi_t *obj) { void spi_slave_write(spi_t *obj, int value) { while (!spi_writeable(obj)); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL05Z/spi_api.c b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL05Z/spi_api.c index 1e9de30ce52..62cfa5c1b7b 100644 --- a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL05Z/spi_api.c +++ b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL05Z/spi_api.c @@ -15,6 +15,7 @@ */ #include "spi_api.h" +#if DEVICE_SPI #include #include "cmsis.h" @@ -168,3 +169,4 @@ void spi_slave_write(spi_t *obj, int value) { while (!spi_writeable(obj)); obj->spi->D = value; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/spi_api.c b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/spi_api.c index cfbc20384c1..098b3012e1d 100644 --- a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/spi_api.c +++ b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL25Z/spi_api.c @@ -15,6 +15,7 @@ */ #include "spi_api.h" +#if DEVICE_SPI #include #include "cmsis.h" @@ -147,3 +148,4 @@ void spi_slave_write(spi_t *obj, int value) { while (!spi_writeable(obj)); obj->spi->D = value; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL26Z/spi_api.c b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL26Z/spi_api.c index 3d9b072b778..01e4feee04f 100644 --- a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL26Z/spi_api.c +++ b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL26Z/spi_api.c @@ -16,6 +16,7 @@ #include "mbed_assert.h" #include "spi_api.h" +#if DEVICE_SPI #include #include "cmsis.h" @@ -239,3 +240,4 @@ void spi_slave_write(spi_t *obj, int value) { } } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL46Z/spi_api.c b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL46Z/spi_api.c index 3d9b072b778..2ba9c653d67 100644 --- a/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL46Z/spi_api.c +++ b/targets/TARGET_Freescale/TARGET_KLXX/TARGET_KL46Z/spi_api.c @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#if DEVICE_SPI #include "mbed_assert.h" #include "spi_api.h" @@ -239,3 +240,4 @@ void spi_slave_write(spi_t *obj, int value) { } } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32600/spi_api.c index edf5ab2f137..de9ea3e5a52 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32600/spi_api.c @@ -31,6 +31,7 @@ ******************************************************************************* */ +#if DEVICE_SPI #include #include "mbed_assert.h" #include "cmsis.h" @@ -199,3 +200,4 @@ int spi_busy(spi_t *obj) { return !(obj->spi->intfl & MXC_F_SPI_INTFL_TX_READY); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32610/spi_api.c index edf5ab2f137..de9ea3e5a52 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32610/spi_api.c @@ -31,6 +31,7 @@ ******************************************************************************* */ +#if DEVICE_SPI #include #include "mbed_assert.h" #include "cmsis.h" @@ -199,3 +200,4 @@ int spi_busy(spi_t *obj) { return !(obj->spi->intfl & MXC_F_SPI_INTFL_TX_READY); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c index d2a194366dd..b104e798206 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c @@ -31,6 +31,7 @@ ******************************************************************************* */ +#if DEVICE_SPI #include #include "mbed_assert.h" #include "cmsis.h" @@ -572,4 +573,5 @@ void SPI0_IRQHandler(void) { SPI_IRQHandler(0); } void SPI1_IRQHandler(void) { SPI_IRQHandler(1); } void SPI2_IRQHandler(void) { SPI_IRQHandler(2); } -#endif +#endif /* DEVICE_SPI_ASYNCH */ +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32620C/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32620C/spi_api.c index 4410bdd3cd4..28e5c6ebc77 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620C/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620C/spi_api.c @@ -31,6 +31,7 @@ ******************************************************************************* */ +#if DEVICE_SPI #include "mbed_assert.h" #include "mbed_critical.h" #include "spi_api.h" // mbed HAL @@ -233,3 +234,4 @@ uint8_t spi_get_module(spi_t *obj) { return obj->index; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32625/spi_api.c index 4410bdd3cd4..082c3a20c8a 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32625/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32625/spi_api.c @@ -39,6 +39,7 @@ #include "pinmap.h" #include "PeripheralPins.h" +#if DEVICE_SPI //****************************************************************************** void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { @@ -233,3 +234,4 @@ uint8_t spi_get_module(spi_t *obj) { return obj->index; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32630/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32630/spi_api.c index 676a7e08256..fd8ab8e0092 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32630/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32630/spi_api.c @@ -39,6 +39,7 @@ #include "pinmap.h" #include "PeripheralPins.h" +#if DEVICE_SPI //****************************************************************************** void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { @@ -233,3 +234,4 @@ uint8_t spi_get_module(spi_t *obj) { return obj->index; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/spi_api.c b/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/spi_api.c index b1f354e77ef..2f8346cd151 100755 --- a/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/spi_api.c +++ b/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/spi_api.c @@ -20,6 +20,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI #define SPIS_MESSAGE_SIZE 1 volatile uint8_t m_tx_buf[SPIS_MESSAGE_SIZE] = {0}; volatile uint8_t m_rx_buf[SPIS_MESSAGE_SIZE] = {0}; @@ -299,3 +300,4 @@ void spi_slave_write(spi_t *obj, int value) obj->spis->EVENTS_ACQUIRED = 0; obj->spis->EVENTS_END = 0; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC11UXX/spi_api.c b/targets/TARGET_NXP/TARGET_LPC11UXX/spi_api.c index 19d40f2ff36..a4bc760d225 100644 --- a/targets/TARGET_NXP/TARGET_LPC11UXX/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC11UXX/spi_api.c @@ -21,6 +21,7 @@ #include "mbed_error.h" #include "PeripheralPins.h" // For the Peripheral to Pin Definitions found in the individual Target's Platform +#if DEVICE_SPI static inline int ssp_disable(spi_t *obj); static inline int ssp_enable(spi_t *obj); @@ -187,3 +188,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC11XX_11CXX/spi_api.c b/targets/TARGET_NXP/TARGET_LPC11XX_11CXX/spi_api.c index f7ac3488b02..bfe05950c66 100644 --- a/targets/TARGET_NXP/TARGET_LPC11XX_11CXX/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC11XX_11CXX/spi_api.c @@ -20,6 +20,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {P0_6 , SPI_0, 0x02}, // {P0_10, SPI_0, 0x02}, -- should be mapped to SWCLK only @@ -223,3 +224,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC13XX/spi_api.c b/targets/TARGET_NXP/TARGET_LPC13XX/spi_api.c index f6243fde4a4..8f6212ef434 100644 --- a/targets/TARGET_NXP/TARGET_LPC13XX/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC13XX/spi_api.c @@ -20,6 +20,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {P0_6 , SPI_0, 0x02}, {P0_10, SPI_0, 0x02}, @@ -215,3 +216,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC15XX/spi_api.c b/targets/TARGET_NXP/TARGET_LPC15XX/spi_api.c index 9d7d8f5f001..36c5e9476e0 100644 --- a/targets/TARGET_NXP/TARGET_LPC15XX/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC15XX/spi_api.c @@ -21,6 +21,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const SWM_Map SWM_SPI_SSEL[] = { {4, 0}, {5, 24}, @@ -278,3 +279,4 @@ void spi_slave_write(spi_t *obj, int value) while (spi_writeable(obj) == 0) ; obj->spi->TXDAT = value; } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC176X/spi_api.c b/targets/TARGET_NXP/TARGET_LPC176X/spi_api.c index cc30a264e8a..bc605b1e919 100644 --- a/targets/TARGET_NXP/TARGET_LPC176X/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC176X/spi_api.c @@ -21,6 +21,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {P0_7 , SPI_1, 2}, {P0_15, SPI_0, 2}, @@ -221,3 +222,5 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } + +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c index 9fdf2331db7..6f9633afe8b 100644 --- a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c @@ -20,6 +20,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {P0_7 , SPI_1, 2}, {P0_15, SPI_0, 2}, @@ -229,3 +230,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088_DM/spi_api.c b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088_DM/spi_api.c index b6a158b4812..b39d5612551 100644 --- a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088_DM/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088_DM/spi_api.c @@ -20,6 +20,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {P0_7 , SPI_1, 2}, {P1_19, SPI_1, 5}, @@ -208,3 +209,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC43XX/spi_api.c b/targets/TARGET_NXP/TARGET_LPC43XX/spi_api.c index ac30524aef4..417ebe5d804 100644 --- a/targets/TARGET_NXP/TARGET_LPC43XX/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC43XX/spi_api.c @@ -23,6 +23,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI // SCU mode for SPI pins #define SCU_PINIO_SPI SCU_PINIO_FAST @@ -227,3 +228,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_NXP/TARGET_LPC81X/spi_api.c b/targets/TARGET_NXP/TARGET_LPC81X/spi_api.c index 88ba0a725fe..87771cb3a69 100644 --- a/targets/TARGET_NXP/TARGET_LPC81X/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC81X/spi_api.c @@ -21,6 +21,7 @@ #include "pinmap.h" #include "mbed_error.h" +#if DEVICE_SPI static const SWM_Map SWM_SPI_SSEL[] = { {4, 16}, {5, 16}, @@ -209,3 +210,4 @@ void spi_slave_write(spi_t *obj, int value) { int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c index fd3db3716f3..f319a78c767 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c @@ -23,6 +23,7 @@ #include "RZ_A1_Init.h" #include "mbed_drv_cfg.h" +#if DEVICE_SPI static const struct st_rspi *RSPI[] = RSPI_ADDRESS_LIST; static inline void spi_disable(spi_t *obj); @@ -533,4 +534,5 @@ void spi_abort_asynch(spi_t *obj) spi_enable(obj); } -#endif +#endif /* DEVICE_SPI_ASYNCH */ +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c index b1e91098008..799f58d055a 100644 --- a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c +++ b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c @@ -17,6 +17,7 @@ #include "objects.h" #include "spi_api.h" +#if DEVICE_SPI #include "PinNames.h" #include "pinmap.h" #include "hal_ssi.h" @@ -295,4 +296,4 @@ int spi_busy (spi_t *obj) return (int)pHalSsiOp->HalSsiBusy(pHalSsiAdaptor); } - +#endif diff --git a/targets/TARGET_TOSHIBA/TARGET_TMPM46B/spi_api.c b/targets/TARGET_TOSHIBA/TARGET_TMPM46B/spi_api.c index e81c1196684..b754b31736e 100644 --- a/targets/TARGET_TOSHIBA/TARGET_TMPM46B/spi_api.c +++ b/targets/TARGET_TOSHIBA/TARGET_TMPM46B/spi_api.c @@ -32,6 +32,7 @@ #include "pinmap.h" #include "tmpm46b_ssp.h" +#if DEVICE_SPI static const PinMap PinMap_SPI_SCLK[] = { {PK4, SPI_0, PIN_DATA(2, 1)}, {PF3, SPI_1, PIN_DATA(5, 1)}, @@ -281,3 +282,4 @@ uint8_t spi_get_module(spi_t *obj) { return (uint8_t)(obj->module); } +#endif /* DEVICE_SPI */ diff --git a/targets/TARGET_WIZNET/TARGET_W7500x/spi_api.c b/targets/TARGET_WIZNET/TARGET_W7500x/spi_api.c index 33aa6798a93..bde666075b8 100644 --- a/targets/TARGET_WIZNET/TARGET_W7500x/spi_api.c +++ b/targets/TARGET_WIZNET/TARGET_W7500x/spi_api.c @@ -37,6 +37,7 @@ #include "mbed_error.h" #include "PeripheralPins.h" +#if DEVICE_SPI static inline int ssp_disable(spi_t *obj); static inline int ssp_enable(spi_t *obj); @@ -215,3 +216,4 @@ int spi_busy(spi_t *obj) { return ssp_busy(obj); } +#endif /* DEVICE_SPI */ diff --git a/targets/targets.json b/targets/targets.json index 44c4d3dc424..1b4ffd378c4 100755 --- a/targets/targets.json +++ b/targets/targets.json @@ -59,7 +59,7 @@ "OUTPUT_EXT": "hex", "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], - "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "device_name": "LPC11C24FBD48/301" }, "LPC1114": { @@ -69,7 +69,7 @@ "extra_labels": ["NXP", "LPC11XX_11CXX", "LPC11XX"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC1114FN28/102" @@ -82,7 +82,7 @@ "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "detect_code": ["1040"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U24FBD48/401" @@ -91,7 +91,7 @@ "inherits": ["LPC11U24"], "macros": ["TARGET_LPC11U24", "CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "extra_labels": ["NXP", "LPC11UXX"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2"] }, "LPC11U24_301": { @@ -100,7 +100,7 @@ "extra_labels": ["NXP", "LPC11UXX"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "device_name": "LPC11U24FHI33/301" }, "LPC11U34_421": { @@ -110,7 +110,7 @@ "extra_labels": ["NXP", "LPC11UXX"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "device_name": "LPC11U34FBD48/311" }, @@ -128,7 +128,7 @@ "extra_labels": ["NXP", "LPC11UXX"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U35FBD48/401" @@ -140,7 +140,7 @@ "extra_labels": ["NXP", "LPC11UXX", "MCU_LPC11U35_501"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U35FHI33/501" @@ -152,7 +152,7 @@ "extra_labels": ["NXP", "LPC11UXX", "MCU_LPC11U35_501"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "device_name": "LPC11U35FHI33/501" }, @@ -166,7 +166,7 @@ "extra_labels": ["NXP", "LPC11UXX", "MCU_LPC11U35_501"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "device_name": "LPC11U35FHI33/501" }, @@ -182,7 +182,7 @@ }, "LPCCAPPUCCINO": { "inherits": ["LPC11U37_501"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "device_name": "LPC11U37FBD64/501" }, "ARCH_GPRS": { @@ -193,7 +193,7 @@ "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], "inherits": ["LPCTarget"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U37FBD64/501" @@ -206,7 +206,7 @@ "supported_toolchains": ["ARM", "uARM", "GCC_CR", "GCC_ARM", "IAR"], "inherits": ["LPCTarget"], "detect_code": ["1168"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "RTC", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U68JBD100" @@ -216,7 +216,7 @@ "core": "Cortex-M3", "extra_labels": ["NXP", "LPC13XX"], "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "LPC1347FBD48" }, @@ -228,7 +228,7 @@ "supported_toolchains": ["uARM", "GCC_CR", "GCC_ARM", "IAR"], "inherits": ["LPCTarget"], "detect_code": ["1549"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "INTERRUPTIN", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "INTERRUPTIN", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC1549JBD64" @@ -239,7 +239,7 @@ "extra_labels": ["NXP", "LPC176X", "MBED_LPC1768"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR", "IAR"], "detect_code": ["1010"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "FLASH"], "release_versions": ["2", "5"], "features": ["LWIP"], "device_name": "LPC1768", @@ -256,7 +256,7 @@ "extra_labels": ["NXP", "LPC176X"], "macros": ["TARGET_LPC1768"], "inherits": ["LPCTarget"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "FLASH"], "release_versions": ["2", "5"], "features": ["LWIP"], "device_name": "LPC1768", @@ -281,7 +281,7 @@ }, "macros": ["TARGET_LPC1768"], "inherits": ["LPCTarget"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "FLASH"], "release_versions": ["2", "5"], "features": ["LWIP"], "device_name": "LPC1768", @@ -294,7 +294,7 @@ "extra_labels": ["NXP", "LPC176X", "XBED_LPC1768"], "macros": ["TARGET_LPC1768"], "detect_code": ["1010"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOCALFILESYSTEM", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "FLASH"], "device_name": "LPC1768" }, "LPC810": { @@ -304,7 +304,7 @@ "extra_labels": ["NXP", "LPC81X"], "is_disk_virtual": true, "supported_toolchains": ["uARM", "IAR", "GCC_ARM"], - "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP"], "default_lib": "small", "device_name": "LPC810M021FN8" }, @@ -317,7 +317,7 @@ "supported_toolchains": ["uARM", "IAR", "GCC_ARM"], "inherits": ["LPCTarget"], "detect_code": ["1050"], - "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC812M101JDH20" @@ -330,7 +330,7 @@ "is_disk_virtual": true, "supported_toolchains": ["uARM", "GCC_ARM", "GCC_CR", "IAR"], "inherits": ["LPCTarget"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC824M201JDH20" @@ -342,7 +342,7 @@ "extra_labels": ["NXP", "LPC82X"], "is_disk_virtual": true, "supported_toolchains": ["uARM", "GCC_ARM"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"] }, @@ -355,7 +355,7 @@ "post_binary_hook": { "function": "LPC4088Code.binary_hook" }, - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "features": ["LWIP"], "device_name": "LPC4088FBD144" }, @@ -372,7 +372,7 @@ "core": "Cortex-M4F", "extra_labels": ["NXP", "LPC43XX", "LPC4330"], "supported_toolchains": ["ARM", "GCC_CR", "IAR", "GCC_ARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "device_name": "LPC4330" }, "LPC4330_M0": { @@ -380,14 +380,14 @@ "core": "Cortex-M0", "extra_labels": ["NXP", "LPC43XX", "LPC4330"], "supported_toolchains": ["ARM", "GCC_CR", "IAR"], - "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"] + "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"] }, "LPC4337": { "inherits": ["LPCTarget"], "core": "Cortex-M4F", "extra_labels": ["NXP", "LPC43XX", "LPC4337"], "supported_toolchains": ["ARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "DEBUG_AWARENESS", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "LPC4337" }, @@ -406,7 +406,7 @@ "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "GCC_CR"], "inherits": ["LPCTarget"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "default_lib": "small", "release_versions": ["2"], "device_name": "LPC11U37HFBD64/401" @@ -430,7 +430,7 @@ "is_disk_virtual": true, "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "MKL05Z32xxx4" @@ -443,7 +443,7 @@ "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "inherits": ["Target"], "detect_code": ["0200"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "MKL25Z128xxx4" }, @@ -454,7 +454,7 @@ "is_disk_virtual": true, "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "device_name": "MKL26Z128xxx4" }, "KL46Z": { @@ -465,7 +465,7 @@ "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], "inherits": ["Target"], "detect_code": ["0220"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES", "FLASH"], "release_versions": ["2", "5"], "device_name": "MKL46Z256xxx4", "bootloader_supported": true @@ -477,7 +477,7 @@ "is_disk_virtual": true, "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], "detect_code": ["0230"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "MK20DX128xxx5" }, @@ -493,7 +493,7 @@ "toolchains": ["ARM_STD", "ARM_MICRO", "GCC_ARM"] }, "detect_code": ["0230"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "MK20DX256xxx7" }, @@ -506,7 +506,7 @@ "macros": ["CPU_MK22FN512VLH12", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0231"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES", "TRNG"], "device_name": "MK22DN512xxx5" }, "K22F": { @@ -525,7 +525,7 @@ "is_disk_virtual": true, "default_toolchain": "ARM", "detect_code": ["0261"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "default_lib": "std", "release_versions": ["2"], "device_name": "MKL27Z64xxx4" @@ -539,7 +539,7 @@ "is_disk_virtual": true, "inherits": ["Target"], "detect_code": ["0262"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "MKL43Z256xxx4" }, @@ -552,7 +552,7 @@ "is_disk_virtual": true, "inherits": ["Target"], "detect_code": ["0218"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "STDIO_MESSAGES", "TRNG"], "release_versions": ["2", "5"], "device_name": "MKL82Z128xxx7" }, @@ -571,7 +571,7 @@ "macros": ["CPU_MKW24D512VHA5", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0250"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "release_versions": ["2", "5"], "device_name": "MKW24D512xxx5", "bootloader_supported": true @@ -585,7 +585,7 @@ "macros": ["CPU_MKW41Z512VHT4", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0201"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "TRNG", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "TRNG", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "MKW41Z512xxx4" }, @@ -597,7 +597,7 @@ "public": false, "macros": ["CPU_MK24FN1M0VDC12", "FSL_RTOS_MBED"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "device_name": "MK24FN1M0xxx12" }, "RO359B": { @@ -615,7 +615,7 @@ "macros": ["CPU_MK64FN1M0VMD12", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0240"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "STORAGE", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "STORAGE", "TRNG", "FLASH"], "features": ["LWIP", "STORAGE"], "release_versions": ["2", "5"], "device_name": "MK64FN1M0xxx12", @@ -627,7 +627,7 @@ "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "macros": ["__ADUCM4050__", "EV_COG_AD4050LZ"], "extra_labels": ["Analog_Devices", "ADUCM4X50", "ADUCM4050", "EV_COG_AD4050LZ", "FLASH_CMSIS_ALGO"], - "device_has": ["SERIAL", "STDIO_MESSAGES", "TRNG", "SLEEP", "INTERRUPTIN", "RTC", "SPI", "I2C", "FLASH", "ANALOGIN"], + "device_has": ["SERIAL", "STDIO_MESSAGES", "TRNG", "SLEEP", "INTERRUPTIN", "RTC", "I2C", "FLASH", "ANALOGIN"], "device_name": "ADuCM4050", "detect_code": ["0603"], "release_versions": ["5"], @@ -639,7 +639,7 @@ "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "macros": ["__ADUCM3029__", "EV_COG_AD3029LZ"], "extra_labels": ["Analog_Devices", "ADUCM302X", "ADUCM3029", "EV_COG_AD3029LZ", "FLASH_CMSIS_ALGO"], - "device_has": ["SERIAL", "STDIO_MESSAGES", "TRNG", "SLEEP", "INTERRUPTIN", "RTC", "SPI", "I2C", "FLASH", "ANALOGIN"], + "device_has": ["SERIAL", "STDIO_MESSAGES", "TRNG", "SLEEP", "INTERRUPTIN", "RTC", "I2C", "FLASH", "ANALOGIN"], "device_name": "ADuCM3029", "detect_code": ["0602"], "release_versions": ["5"], @@ -652,7 +652,7 @@ "extra_labels": ["Freescale", "MCUXpresso_MCUS", "KSDK2_MCUS", "KPSDK_MCUS", "KPSDK_CODE", "MCU_K64F"], "is_disk_virtual": true, "macros": ["CPU_MK64FN1M0VMD12", "FSL_RTOS_MBED", "TARGET_K64F"], - "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "device_name": "MK64FN1M0xxx12" }, "HEXIWEAR": { @@ -664,7 +664,7 @@ "is_disk_virtual": true, "default_toolchain": "ARM", "detect_code": ["0214"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "default_lib": "std", "release_versions": ["2", "5"], "device_name": "MK64FN1M0xxx12", @@ -679,7 +679,7 @@ "macros": ["CPU_MK66FN2M0VMD18", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0311"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name": "MK66FN2M0xxx18", @@ -694,7 +694,7 @@ "macros": ["CPU_MK82FN256VDC15", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0217"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "release_versions": ["2", "5"], "device_name": "MK82FN256xxx15" }, @@ -721,7 +721,7 @@ "help": "default RX STDIO pins is defined in PinNames.h file, but it can be overridden" } }, - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"] + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES"] }, "MIMXRT1050_EVK": { "supported_form_factors": ["ARDUINO"], @@ -732,7 +732,7 @@ "macros": ["CPU_MIMXRT1052DVL6A", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["0227"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "ERROR_RED", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "ERROR_RED", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "MIMXRT1052" }, @@ -745,7 +745,7 @@ "macros": ["CPU_LPC54114J256BD64_cm4", "FSL_RTOS_MBED"], "inherits": ["Target"], "detect_code": ["1054"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES", "FLASH"], "release_versions": ["2", "5"], "device_name" : "LPC54114J256BD64" }, @@ -756,7 +756,7 @@ "is_disk_virtual": true, "macros": ["CPU_LPC54628J512ET180", "FSL_RTOS_MBED"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "FLASH", "TRNG"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "RTC", "SERIAL", "SLEEP", "STDIO_MESSAGES", "FLASH", "TRNG"], "features": ["LWIP"], "device_name" : "LPC54628J512ET180" }, @@ -2235,7 +2235,7 @@ }, "program_cycle_s": 6, "features": ["BLE"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"] + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"] }, "MCU_NRF51_16K_BASE": { "inherits": ["MCU_NRF51"], @@ -2468,7 +2468,7 @@ "inherits": ["MCU_NRF51_32K"], "program_cycle_s": 10, "macros_add": ["TARGET_NRF_LFCLK_RC"], - "device_has": ["ANALOGIN", "DEBUG_AWARENESS", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "DEBUG_AWARENESS", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP"], "release_versions": ["2"], "device_name": "nRF51822_xxAA" }, @@ -2487,7 +2487,7 @@ "DELTA_DFCM_NNN50": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K_UNIFIED"], - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "device_name": "nRF51822_xxAC" }, "DELTA_DFCM_NNN50_BOOT": { @@ -2584,7 +2584,7 @@ }, "MTB_LAIRD_BL600": { "inherits": ["MCU_NRF51_32K_UNIFIED"], - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "device_name": "nRF51822_xxAA", "release_versions" : ["5"], "extra_labels_add": ["MTB_LAIRD_BL600"], @@ -2610,7 +2610,7 @@ "TY51822R3": { "inherits": ["MCU_NRF51_32K_UNIFIED"], "macros_add": ["TARGET_NRF_32MHZ_XTAL"], - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP"], "detect_code": ["1019"], "release_versions": ["2", "5"], "overrides": {"uart_hwfc": 0}, @@ -2629,7 +2629,7 @@ "ARM_MPS2_Target": { "inherits": ["Target"], "public": false, - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"] + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"] }, "ARM_MPS2_M0": { "inherits": ["ARM_MPS2_Target"], @@ -2637,7 +2637,7 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "MPS2", "MPS2_M0"], "macros": ["CMSDK_CM0", "CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_MPS2_M0P": { @@ -2646,7 +2646,7 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "MPS2", "MPS2_M0P"], "macros": ["CMSDK_CM0plus"], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_MPS2_M3": { @@ -2655,7 +2655,7 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "MPS2", "MPS2_M3"], "macros": ["CMSDK_CM3"], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_MPS2_M4": { @@ -2664,7 +2664,7 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "MPS2", "MPS2_M4"], "macros": ["CMSDK_CM4"], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_MPS2_M7": { @@ -2673,13 +2673,13 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "MPS2", "MPS2_M7"], "macros": ["CMSDK_CM7"], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_IOTSS_Target": { "inherits": ["Target"], "public": false, - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"] + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"] }, "ARM_IOTSS_BEID": { "inherits": ["ARM_IOTSS_Target"], @@ -2687,7 +2687,7 @@ "supported_toolchains": ["ARM"], "extra_labels": ["ARM_SSG", "IOTSS", "IOTSS_BEID"], "macros": ["CMSDK_BEID"], - "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "TSC"], + "device_has": ["AACI", "ANALOGIN", "CLCD", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SERIAL_FC", "TSC"], "release_versions": ["2"] }, "ARM_CM3DS_MPS2": { @@ -2697,7 +2697,7 @@ "extra_labels": ["ARM_SSG", "CM3DS_MPS2"], "OUTPUT_EXT": "elf", "macros": ["CMSDK_CM3DS"], - "device_has": ["ANALOGIN", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SPI", "RTC", "LOWPOWERTIMER", "TRNG"], + "device_has": ["ANALOGIN", "ETHERNET", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "RTC", "LOWPOWERTIMER", "TRNG"], "release_versions": ["2", "5"], "copy_method": "mps2", "reset_method": "reboot.txt" @@ -2709,7 +2709,7 @@ "default_toolchain": "ARM", "extra_labels": ["ARM_SSG", "BEETLE"], "macros": ["CMSDK_BEETLE", "WSF_MS_PER_TICK=20", "WSF_TOKEN_ENABLED=FALSE", "WSF_TRACE_ENABLED=TRUE", "WSF_ASSERT_ENABLED=FALSE", "WSF_PRINTF_MAX_LEN=128", "ASIC", "CONFIG_HOST_REV=0x20", "CONFIG_ALLOW_DEEP_SLEEP=FALSE", "HCI_VS_TARGET", "CONFIG_ALLOW_SETTING_WRITE=TRUE", "WSF_MAX_HANDLERS=20", "NO_LEDS"], - "device_has": ["ANALOGIN", "CLCD", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SLEEP", "SPI"], + "device_has": ["ANALOGIN", "CLCD", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "SERIAL", "SLEEP"], "features": ["BLE"], "release_versions": ["2", "5"] }, @@ -2718,7 +2718,7 @@ "core": "Cortex-A9", "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "extra_labels": ["RENESAS", "RZ_A1XX"], - "device_has": ["ANALOGIN", "CAN", "ETHERNET", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "CAN", "ETHERNET", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES"], "features": ["LWIP"], "program_cycle_s": 2 }, @@ -2748,7 +2748,7 @@ "macros": ["__SYSTEM_HFX=24000000"], "extra_labels": ["Maxim", "MAX32610"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "features": ["BLE"], "release_versions": ["2", "5"] }, @@ -2758,7 +2758,7 @@ "macros": ["__SYSTEM_HFX=24000000"], "extra_labels": ["Maxim", "MAX32600"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "MAX32620HSP": { @@ -2766,7 +2766,7 @@ "core": "Cortex-M4F", "extra_labels": ["Maxim", "MAX32620"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "features": ["BLE"], "release_versions": ["2", "5"] }, @@ -2776,7 +2776,7 @@ "macros": ["__SYSTEM_HFX=96000000","TARGET=MAX32620","TARGET_REV=0x4332","OPEN_DRAIN_LEDS"], "extra_labels": ["Maxim", "MAX32620C"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "MAX32625MBED": { @@ -2785,7 +2785,7 @@ "macros": ["__SYSTEM_HFX=96000000","TARGET=MAX32625","TARGET_REV=0x4132"], "extra_labels": ["Maxim", "MAX32625"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "MAX32625NEXPAQ": { @@ -2794,7 +2794,7 @@ "macros": ["__SYSTEM_HFX=96000000","TARGET=MAX32625","TARGET_REV=0x4132"], "extra_labels": ["Maxim", "MAX32625"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "MAX32630FTHR": { @@ -2803,7 +2803,7 @@ "macros": ["__SYSTEM_HFX=96000000", "TARGET=MAX32630", "TARGET_REV=0x4132", "BLE_HCI_UART", "OPEN_DRAIN_LEDS"], "extra_labels": ["Maxim", "MAX32630"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "STDIO_MESSAGES"], "features": ["BLE"], "release_versions": ["2", "5"] }, @@ -2827,7 +2827,7 @@ "EFM32GG_STK3700": { "inherits": ["EFM32GG990F1024"], "progen": {"target": "efm32gg-stk"}, - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH", "ITM"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH", "ITM"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -2880,7 +2880,7 @@ }, "EFM32LG_STK3600": { "inherits": ["EFM32LG990F256"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "forced_reset_timeout": 2, "device_name": "EFM32LG990F256", "config": { @@ -2935,7 +2935,7 @@ "EFM32WG_STK3800": { "inherits": ["EFM32WG990F256"], "progen": {"target": "efm32wg-stk"}, - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -2989,7 +2989,7 @@ }, "EFM32ZG_STK3200": { "inherits": ["EFM32ZG222F32"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -3043,7 +3043,7 @@ }, "EFM32HG_STK3400": { "inherits": ["EFM32HG322F64"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -3096,7 +3096,7 @@ }, "EFM32PG_STK3401": { "inherits": ["EFM32PG1B100F256GM32"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -3159,7 +3159,7 @@ }, "EFR32MG1_BRD4150": { "inherits": ["EFR32MG1P132F256GM48"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -3202,7 +3202,7 @@ }, "TB_SENSE_1": { "inherits": ["EFR32MG1P233F256GM48"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "FLASH"], "forced_reset_timeout": 5, "config": { "hf_clock_src": { @@ -3250,7 +3250,7 @@ }, "EFM32PG12_STK3402": { "inherits": ["EFM32PG12B500F1024GL125"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "forced_reset_timeout": 2, "config": { "hf_clock_src": { @@ -3304,7 +3304,7 @@ "TB_SENSE_12": { "inherits": ["EFR32MG12P332F1024GL125"], "device_name": "EFR32MG12P332F1024GL125", - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "STDIO_MESSAGES", "TRNG", "FLASH"], "forced_reset_timeout": 5, "config": { "hf_clock_src": { @@ -3346,7 +3346,7 @@ "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["uARM", "ARM", "GCC_ARM", "IAR"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "WIZWIKI_W7500P": { @@ -3356,7 +3356,7 @@ "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["uARM", "ARM", "GCC_ARM", "IAR"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "WIZWIKI_W7500ECO": { @@ -3365,7 +3365,7 @@ "extra_labels": ["WIZNET", "W7500x", "WIZwiki_W7500ECO"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\""], "supported_toolchains": ["uARM", "ARM", "GCC_ARM", "IAR"], - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "STDIO_MESSAGES"], "release_versions": ["2", "5"] }, "SAMR21G18A": { @@ -3374,7 +3374,7 @@ "macros": ["__SAMR21G18A__", "I2C_MASTER_CALLBACK_MODE=true", "EXTINT_CALLBACK_MODE=true", "USART_CALLBACK_MODE=true", "TC_ASYNC=true"], "extra_labels": ["Atmel", "SAM_CortexM0P", "SAMR21"], "supported_toolchains": ["GCC_ARM", "ARM", "uARM"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "release_versions": ["2"], "device_name": "ATSAMR21G18A" }, @@ -3384,7 +3384,7 @@ "macros": ["__SAMD21J18A__", "I2C_MASTER_CALLBACK_MODE=true", "EXTINT_CALLBACK_MODE=true", "USART_CALLBACK_MODE=true", "TC_ASYNC=true"], "extra_labels": ["Atmel", "SAM_CortexM0P", "SAMD21"], "supported_toolchains": ["GCC_ARM", "ARM", "uARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "release_versions": ["2"], "device_name": "ATSAMD21J18A" }, @@ -3394,7 +3394,7 @@ "macros": ["__SAMD21G18A__", "I2C_MASTER_CALLBACK_MODE=true", "EXTINT_CALLBACK_MODE=true", "USART_CALLBACK_MODE=true", "TC_ASYNC=true"], "extra_labels": ["Atmel", "SAM_CortexM0P", "SAMD21"], "supported_toolchains": ["GCC_ARM", "ARM", "uARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "release_versions": ["2"], "device_name": "ATSAMD21G18A" }, @@ -3404,7 +3404,7 @@ "macros": ["__SAML21J18A__", "I2C_MASTER_CALLBACK_MODE=true", "EXTINT_CALLBACK_MODE=true", "USART_CALLBACK_MODE=true", "TC_ASYNC=true"], "extra_labels": ["Atmel", "SAM_CortexM0P", "SAML21"], "supported_toolchains": ["GCC_ARM", "ARM", "uARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "device_name": "ATSAML21J18A" }, "SAMG55J19": { @@ -3414,7 +3414,7 @@ "macros": ["__SAMG55J19__", "BOARD=75", "I2C_MASTER_CALLBACK_MODE=true", "EXTINT_CALLBACK_MODE=true", "USART_CALLBACK_MODE=true", "TC_ASYNC=true"], "supported_toolchains": ["GCC_ARM", "ARM", "uARM"], "default_toolchain": "ARM", - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "default_lib": "std", "device_name": "ATSAMG55J19" }, @@ -3466,7 +3466,7 @@ "macro_name": "MBED_CONF_NORDIC_UART_HWFC" } }, - "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"] + "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"] }, "MCU_NRF51_32K_UNIFIED": { "inherits": ["MCU_NRF51_UNIFIED"], @@ -3477,27 +3477,27 @@ "NRF51_DK": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K_UNIFIED"], - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "release_versions": ["2", "5"], "device_name": "nRF51822_xxAA" }, "NRF51_DONGLE": { "inherits": ["MCU_NRF51_32K_UNIFIED"], "progen": {"target": "nrf51-dongle"}, - "device_has": ["I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP"], "release_versions": ["2", "5"] }, "OSHCHIP": { "inherits": ["MCU_NRF51_32K_UNIFIED"], "overrides": {"lf_clock_src": "NRF_LF_SRC_RC"}, - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP"], "device_name": "nRF51822_xxAC" }, "MCU_NRF52832": { "inherits": ["Target"], "core": "Cortex-M4F", "macros": [ - "BOARD_PCA10040", + "BOARD_PCA10040", "NRF52", "TARGET_NRF52832", "CMSIS_VECTAB_VIRTUAL", @@ -3505,27 +3505,25 @@ "MBED_TICKLESS" ], "device_has": [ - "ANALOGIN", + "ANALOGIN", "FLASH", - "I2C", - "I2C_ASYNCH", - "INTERRUPTIN", + "I2C", + "I2C_ASYNCH", + "INTERRUPTIN", "ITM", - "LOWPOWERTIMER", - "PORTIN", - "PORTINOUT", - "PORTOUT", - "PWMOUT", - "RTC", - "SERIAL", - "SERIAL_ASYNCH", - "SERIAL_FC", - "SLEEP", - "SPI", - "SPI_ASYNCH", + "LOWPOWERTIMER", + "PORTIN", + "PORTINOUT", + "PORTOUT", + "PWMOUT", + "RTC", + "SERIAL", + "SERIAL_ASYNCH", + "SERIAL_FC", + "SLEEP", "STCLK_OFF_DURING_SLEEP", "TRNG" - ], + ], "extra_labels": [ "NORDIC", "NRF5x", @@ -3594,7 +3592,7 @@ "inherits": ["Target"], "core": "Cortex-M4F", "macros": [ - "BOARD_PCA10056", + "BOARD_PCA10056", "NRF52840_XXAA", "TARGET_NRF52840", "CMSIS_VECTAB_VIRTUAL", @@ -3602,24 +3600,22 @@ "MBED_TICKLESS" ], "device_has": [ - "ANALOGIN", + "ANALOGIN", "FLASH", - "I2C", - "I2C_ASYNCH", - "INTERRUPTIN", + "I2C", + "I2C_ASYNCH", + "INTERRUPTIN", "ITM", - "LOWPOWERTIMER", - "PORTIN", - "PORTINOUT", - "PORTOUT", - "PWMOUT", - "RTC", - "SERIAL", - "SERIAL_ASYNCH", - "SERIAL_FC", - "SLEEP", - "SPI", - "SPI_ASYNCH", + "LOWPOWERTIMER", + "PORTIN", + "PORTINOUT", + "PORTOUT", + "PWMOUT", + "RTC", + "SERIAL", + "SERIAL_ASYNCH", + "SERIAL_FC", + "SLEEP", "STCLK_OFF_DURING_SLEEP", "TRNG" ], @@ -3695,7 +3691,7 @@ }, "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "CAN", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "TRNG", "CAN", "FLASH"], "features": ["LWIP"], "release_versions": ["5"], "device_name": "NUC472HI8AE", @@ -3735,7 +3731,7 @@ "post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"}, "macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"], + "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP", "LOWPOWERTIMER", "TRNG"], "release_versions": ["2", "5"] }, "NUMAKER_PFM_M453": { @@ -3764,7 +3760,7 @@ }, "inherits": ["Target"], "progen": {"target": "numaker-pfm-m453"}, - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "CAN", "FLASH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "CAN", "FLASH"], "release_versions": ["2", "5"], "device_name": "M453VG6AE", "bootloader_supported": true @@ -3795,7 +3791,7 @@ }, "inherits": ["Target"], "macros": ["CMSIS_VECTAB_VIRTUAL", "CMSIS_VECTAB_VIRTUAL_HEADER_FILE=\"cmsis_nvic.h\"","MBED_FAULT_HANDLER_DISABLED"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP"], "release_versions": ["5"], "device_name": "NANO130KE3BN" }, @@ -3834,7 +3830,7 @@ "extra_labels": ["Realtek", "AMEBA", "RTL8195A"], "macros": ["__RTL8195A__","CONFIG_PLATFORM_8195A","CONFIG_MBED_ENABLED","PLATFORM_CMSIS_RTOS","MBED_FAULT_HANDLER_DISABLED"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SPI", "TRNG", "EMAC", "FLASH"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "TRNG", "EMAC", "FLASH"], "features": ["LWIP"], "post_binary_hook": { "function": "RTL8195ACode.binary_hook", @@ -3870,7 +3866,7 @@ "inherits": ["MCU_NRF51_32K_UNIFIED"], "detect_code": ["C006"], "overrides": {"uart_hwfc": 0}, - "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], + "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP"], "release_versions": ["2"], "device_name": "nRF51822_xxAC" }, @@ -3960,7 +3956,7 @@ }, "inherits": ["Target"], "macros_add": ["MBEDTLS_CONFIG_HW_SUPPORT"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH", "CAN"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "TRNG", "FLASH", "CAN"], "features": ["LWIP"], "release_versions": ["5"], "device_name": "M487JIDAE", @@ -3983,7 +3979,7 @@ "supported_form_factors": [], "core": "Cortex-M4F", "extra_labels_add": ["STM32F4", "STM32F411xE", "STM32F411RE"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "STDIO_MESSAGES"], "config": { "clock_source": { "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", @@ -4002,7 +3998,7 @@ "extra_labels": ["TOSHIBA"], "macros": ["__TMPM46B__"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SPI", "I2C", "STDIO_MESSAGES", "TRNG", "FLASH", "SLEEP"], + "device_has": ["ANALOGIN", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "I2C", "STDIO_MESSAGES", "TRNG", "FLASH", "SLEEP"], "device_name": "TMPM46BF10FG", "detect_code": ["7013"], "release_versions": ["5"],