Nuvoton / Mbed OS NuMaker-mbed-cloud-example-Ethernet

This application contains the example codes to:

1) Connect PFM-M487/PFM-NUC472 boards to Pelion

2) Enable Firmware update

For storage, PFM-M487/PFM-NUC472 support both SPI interface SD and built-in SD bus SD.

For connectivity, PFM-M487/PFM-NUC472 support Ethernet (on-board) by default.

This example supports Ethernet and built-in SD by default.

https://os.mbed.com/media/cache/platforms/NuMaker-PFM-M487.png.170x170_q85.png https://os.mbed.com/media/cache/platforms/NuMaker-PFM-NUC472Small.png.170x170_q85.png

Committer:
cyliang
Date:
Fri Jul 06 04:15:24 2018 +0000
Revision:
0:83caa8fa1d2c
Support cloud client v1.3.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cyliang 0:83caa8fa1d2c 1 // ----------------------------------------------------------------------------
cyliang 0:83caa8fa1d2c 2 // Copyright 2015-2017 ARM Ltd.
cyliang 0:83caa8fa1d2c 3 //
cyliang 0:83caa8fa1d2c 4 // SPDX-License-Identifier: Apache-2.0
cyliang 0:83caa8fa1d2c 5 //
cyliang 0:83caa8fa1d2c 6 // Licensed under the Apache License, Version 2.0 (the "License");
cyliang 0:83caa8fa1d2c 7 // you may not use this file except in compliance with the License.
cyliang 0:83caa8fa1d2c 8 // You may obtain a copy of the License at
cyliang 0:83caa8fa1d2c 9 //
cyliang 0:83caa8fa1d2c 10 // http://www.apache.org/licenses/LICENSE-2.0
cyliang 0:83caa8fa1d2c 11 //
cyliang 0:83caa8fa1d2c 12 // Unless required by applicable law or agreed to in writing, software
cyliang 0:83caa8fa1d2c 13 // distributed under the License is distributed on an "AS IS" BASIS,
cyliang 0:83caa8fa1d2c 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
cyliang 0:83caa8fa1d2c 15 // See the License for the specific language governing permissions and
cyliang 0:83caa8fa1d2c 16 // limitations under the License.
cyliang 0:83caa8fa1d2c 17 // ----------------------------------------------------------------------------
cyliang 0:83caa8fa1d2c 18
cyliang 0:83caa8fa1d2c 19 // This critical section implementation is generic for mbed OS targets,
cyliang 0:83caa8fa1d2c 20 // except Nordic ones
cyliang 0:83caa8fa1d2c 21 #if defined(TARGET_LIKE_MBED) && !defined(TARGET_NORDIC)
cyliang 0:83caa8fa1d2c 22
cyliang 0:83caa8fa1d2c 23 #include <stdint.h> // uint32_t, UINT32_MAX
cyliang 0:83caa8fa1d2c 24 #include <stddef.h> // NULL
cyliang 0:83caa8fa1d2c 25
cyliang 0:83caa8fa1d2c 26 #if defined(YOTTA_CFG_MBED_OS)
cyliang 0:83caa8fa1d2c 27 #include "cmsis-core/core_generic.h" //__disable_irq, __enable_irq
cyliang 0:83caa8fa1d2c 28 #else
cyliang 0:83caa8fa1d2c 29 #include "cmsis.h"
cyliang 0:83caa8fa1d2c 30 #endif
cyliang 0:83caa8fa1d2c 31
cyliang 0:83caa8fa1d2c 32 #include <assert.h>
cyliang 0:83caa8fa1d2c 33
cyliang 0:83caa8fa1d2c 34 // Module include
cyliang 0:83caa8fa1d2c 35 #include "aq_critical.h"
cyliang 0:83caa8fa1d2c 36
cyliang 0:83caa8fa1d2c 37 static volatile uint32_t interruptEnableCounter = 0;
cyliang 0:83caa8fa1d2c 38 static volatile uint32_t critical_primask = 0;
cyliang 0:83caa8fa1d2c 39
cyliang 0:83caa8fa1d2c 40 void aq_critical_section_enter()
cyliang 0:83caa8fa1d2c 41 {
cyliang 0:83caa8fa1d2c 42 uint32_t primask;
cyliang 0:83caa8fa1d2c 43 #if defined(__CORTEX_A9)
cyliang 0:83caa8fa1d2c 44 primask = __get_CPSR(); // get the current interrupt enabled state
cyliang 0:83caa8fa1d2c 45 #else
cyliang 0:83caa8fa1d2c 46 primask = __get_PRIMASK(); // get the current interrupt enabled state
cyliang 0:83caa8fa1d2c 47 #endif
cyliang 0:83caa8fa1d2c 48 __disable_irq();
cyliang 0:83caa8fa1d2c 49
cyliang 0:83caa8fa1d2c 50 // Save the interrupt enabled state as it was prior to any nested critical section lock use
cyliang 0:83caa8fa1d2c 51 if (!interruptEnableCounter) {
cyliang 0:83caa8fa1d2c 52 #if defined(__CORTEX_A9)
cyliang 0:83caa8fa1d2c 53 critical_primask = primask & 0x80;
cyliang 0:83caa8fa1d2c 54 #else
cyliang 0:83caa8fa1d2c 55 critical_primask = primask & 0x1;
cyliang 0:83caa8fa1d2c 56 #endif
cyliang 0:83caa8fa1d2c 57 }
cyliang 0:83caa8fa1d2c 58
cyliang 0:83caa8fa1d2c 59 /* If the interruptEnableCounter overflows or we are in a nested critical section and interrupts
cyliang 0:83caa8fa1d2c 60 are enabled, then something has gone badly wrong thus assert an error.
cyliang 0:83caa8fa1d2c 61 */
cyliang 0:83caa8fa1d2c 62
cyliang 0:83caa8fa1d2c 63 /* FIXME: This assertion needs to be commented out for the moment, as it
cyliang 0:83caa8fa1d2c 64 * triggers a fault when uVisor is enabled. For more information on
cyliang 0:83caa8fa1d2c 65 * the fault please checkout ARMmbed/mbed-drivers#176. */
cyliang 0:83caa8fa1d2c 66 /* assert(interruptEnableCounter < UINT32_MAX); */
cyliang 0:83caa8fa1d2c 67 if (interruptEnableCounter > 0) {
cyliang 0:83caa8fa1d2c 68 /* FIXME: This assertion needs to be commented out for the moment, as it
cyliang 0:83caa8fa1d2c 69 * triggers a fault when uVisor is enabled. For more information
cyliang 0:83caa8fa1d2c 70 * on the fault please checkout ARMmbed/mbed-drivers#176. */
cyliang 0:83caa8fa1d2c 71 /* assert(primask & 0x1); */
cyliang 0:83caa8fa1d2c 72 }
cyliang 0:83caa8fa1d2c 73 interruptEnableCounter++;
cyliang 0:83caa8fa1d2c 74 }
cyliang 0:83caa8fa1d2c 75
cyliang 0:83caa8fa1d2c 76 void aq_critical_section_exit()
cyliang 0:83caa8fa1d2c 77 {
cyliang 0:83caa8fa1d2c 78 // If critical_section_enter has not previously been called, do nothing
cyliang 0:83caa8fa1d2c 79 if (interruptEnableCounter) {
cyliang 0:83caa8fa1d2c 80
cyliang 0:83caa8fa1d2c 81 uint32_t primask;
cyliang 0:83caa8fa1d2c 82 #if defined(__CORTEX_A9)
cyliang 0:83caa8fa1d2c 83 primask = __get_CPSR(); // get the current interrupt enabled state
cyliang 0:83caa8fa1d2c 84 #else
cyliang 0:83caa8fa1d2c 85 primask = __get_PRIMASK(); // get the current interrupt enabled state
cyliang 0:83caa8fa1d2c 86 #endif
cyliang 0:83caa8fa1d2c 87 /* FIXME: This assertion needs to be commented out for the moment, as it
cyliang 0:83caa8fa1d2c 88 * triggers a fault when uVisor is enabled. For more information
cyliang 0:83caa8fa1d2c 89 * on the fault please checkout ARMmbed/mbed-drivers#176. */
cyliang 0:83caa8fa1d2c 90 /* assert(primask & 0x1); // Interrupts must be disabled on invoking an exit from a critical section */
cyliang 0:83caa8fa1d2c 91
cyliang 0:83caa8fa1d2c 92 interruptEnableCounter--;
cyliang 0:83caa8fa1d2c 93
cyliang 0:83caa8fa1d2c 94 /* Only re-enable interrupts if we are exiting the last of the nested critical sections and
cyliang 0:83caa8fa1d2c 95 interrupts were enabled on entry to the first critical section.
cyliang 0:83caa8fa1d2c 96 */
cyliang 0:83caa8fa1d2c 97 if (!interruptEnableCounter && !critical_primask) {
cyliang 0:83caa8fa1d2c 98 __enable_irq();
cyliang 0:83caa8fa1d2c 99 }
cyliang 0:83caa8fa1d2c 100 }
cyliang 0:83caa8fa1d2c 101 }
cyliang 0:83caa8fa1d2c 102
cyliang 0:83caa8fa1d2c 103 #endif // defined(TARGET_LIKE_MBED) && !defined(TARGET_NORDIC)