mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Merge pull request #9888 from ARMmbed/feature-armc6
ARM Toolchain update to ARM Compiler 6.11(ARMC6)pull/9926/head
						commit
						e75794ec6e
					
				| 
						 | 
					@ -39,7 +39,7 @@ void test_sys_info()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__IAR_SYSTEMS_ICC__)
 | 
					#if defined(__IAR_SYSTEMS_ICC__)
 | 
				
			||||||
    TEST_ASSERT_EQUAL(IAR, stats.compiler_id);
 | 
					    TEST_ASSERT_EQUAL(IAR, stats.compiler_id);
 | 
				
			||||||
#elif defined(__CC_ARM)
 | 
					#elif defined(__ARMCC_VERSION)
 | 
				
			||||||
    TEST_ASSERT_EQUAL(ARM, stats.compiler_id);
 | 
					    TEST_ASSERT_EQUAL(ARM, stats.compiler_id);
 | 
				
			||||||
#elif defined(__GNUC__)
 | 
					#elif defined(__GNUC__)
 | 
				
			||||||
    TEST_ASSERT_EQUAL(GCC_ARM, stats.compiler_id);
 | 
					    TEST_ASSERT_EQUAL(GCC_ARM, stats.compiler_id);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,7 @@ typedef struct _ARM_CFSTORE_STATUS {
 | 
				
			||||||
    ARM_CFSTORE_HANDLE (__name) = (ARM_CFSTORE_HANDLE) (__name##_buf_cFsToRe);  \
 | 
					    ARM_CFSTORE_HANDLE (__name) = (ARM_CFSTORE_HANDLE) (__name##_buf_cFsToRe);  \
 | 
				
			||||||
    memset((__name##_buf_cFsToRe), 0, CFSTORE_HANDLE_BUFSIZE)
 | 
					    memset((__name##_buf_cFsToRe), 0, CFSTORE_HANDLE_BUFSIZE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined __MBED__ && (defined TOOLCHAIN_GCC_ARM || defined TOOLCHAIN_ARMC6)
 | 
					#if defined __MBED__ && (defined TOOLCHAIN_GCC_ARM || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)))
 | 
				
			||||||
/** @brief  Helper macro to swap 2 handles, which is useful for the Find() idiom. */
 | 
					/** @brief  Helper macro to swap 2 handles, which is useful for the Find() idiom. */
 | 
				
			||||||
#define CFSTORE_HANDLE_SWAP(__a_HaNdLe, __b_HaNdLe)         \
 | 
					#define CFSTORE_HANDLE_SWAP(__a_HaNdLe, __b_HaNdLe)         \
 | 
				
			||||||
    do{ ARM_CFSTORE_HANDLE __temp_HaNdLe = (__a_HaNdLe);    \
 | 
					    do{ ARM_CFSTORE_HANDLE __temp_HaNdLe = (__a_HaNdLe);    \
 | 
				
			||||||
| 
						 | 
					@ -174,6 +174,7 @@ typedef struct _ARM_CFSTORE_STATUS {
 | 
				
			||||||
        __asm volatile("" ::: "memory");                    \
 | 
					        __asm volatile("" ::: "memory");                    \
 | 
				
			||||||
    }while(0)
 | 
					    }while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
#elif defined __MBED__ && defined TOOLCHAIN_ARM
 | 
					#elif defined __MBED__ && defined TOOLCHAIN_ARM
 | 
				
			||||||
/** @brief  Helper macro to swap 2 handles, which is useful for the Find() idiom. */
 | 
					/** @brief  Helper macro to swap 2 handles, which is useful for the Find() idiom. */
 | 
				
			||||||
#define CFSTORE_HANDLE_SWAP(__a_HaNdLe, __b_HaNdLe)         \
 | 
					#define CFSTORE_HANDLE_SWAP(__a_HaNdLe, __b_HaNdLe)         \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,11 @@ static SingletonPtr<PlatformMutex> _mutex;
 | 
				
			||||||
#   define PREFIX(x)    _sys##x
 | 
					#   define PREFIX(x)    _sys##x
 | 
				
			||||||
#   define OPEN_MAX     _SYS_OPEN
 | 
					#   define OPEN_MAX     _SYS_OPEN
 | 
				
			||||||
#   ifdef __MICROLIB
 | 
					#   ifdef __MICROLIB
 | 
				
			||||||
#       pragma import(__use_full_stdio)
 | 
					#       if __ARMCC_VERSION >= 6010050
 | 
				
			||||||
 | 
					asm(" .global __use_full_stdio\n");
 | 
				
			||||||
 | 
					#       else
 | 
				
			||||||
 | 
					#           pragma import(__use_full_stdio)
 | 
				
			||||||
 | 
					#       endif
 | 
				
			||||||
#   endif
 | 
					#   endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(__ICCARM__)
 | 
					#elif defined(__ICCARM__)
 | 
				
			||||||
| 
						 | 
					@ -1253,7 +1257,7 @@ extern "C" WEAK caddr_t _sbrk(int incr)
 | 
				
			||||||
    /* __HeapLimit is end of heap section */
 | 
					    /* __HeapLimit is end of heap section */
 | 
				
			||||||
    if (new_heap > (uint32_t) &__HeapLimit) {
 | 
					    if (new_heap > (uint32_t) &__HeapLimit) {
 | 
				
			||||||
        errno = ENOMEM;
 | 
					        errno = ENOMEM;
 | 
				
			||||||
        return (caddr_t) -1;
 | 
					        return (caddr_t) - 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    heap = new_heap;
 | 
					    heap = new_heap;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,26 +104,26 @@ __STATIC_INLINE uint32_t StackOffsetR0 (uint8_t stack_frame) {
 | 
				
			||||||
/// Get xPSR Register - emulate M profile: SP_usr - (8*4)
 | 
					/// Get xPSR Register - emulate M profile: SP_usr - (8*4)
 | 
				
			||||||
/// \return      xPSR Register value
 | 
					/// \return      xPSR Register value
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__CC_ARM)
 | 
				
			||||||
 | 
					#pragma push
 | 
				
			||||||
 | 
					#pragma arm
 | 
				
			||||||
static __asm    uint32_t __get_PSP (void) {
 | 
					static __asm    uint32_t __get_PSP (void) {
 | 
				
			||||||
  arm
 | 
					 | 
				
			||||||
  sub   sp, sp, #4
 | 
					  sub   sp, sp, #4
 | 
				
			||||||
  stm   sp, {sp}^
 | 
					  stm   sp, {sp}^
 | 
				
			||||||
  pop   {r0}
 | 
					  pop   {r0}
 | 
				
			||||||
  sub   r0, r0, #32
 | 
					  sub   r0, r0, #32
 | 
				
			||||||
  bx    lr
 | 
					  bx    lr
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#pragma pop
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#ifdef __ICCARM__
 | 
					#ifdef __ICCARM__
 | 
				
			||||||
__arm
 | 
					__arm
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					__attribute__((target("arm")))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
__STATIC_INLINE uint32_t __get_PSP (void) {
 | 
					__STATIC_INLINE uint32_t __get_PSP (void) {
 | 
				
			||||||
  register uint32_t ret;
 | 
					  register uint32_t ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  __ASM volatile (
 | 
					  __ASM volatile (
 | 
				
			||||||
#ifndef __ICCARM__
 | 
					 | 
				
			||||||
    ".syntax unified\n\t"
 | 
					 | 
				
			||||||
    ".arm\n\t"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    "sub  sp,sp,#4\n\t"
 | 
					    "sub  sp,sp,#4\n\t"
 | 
				
			||||||
    "stm  sp,{sp}^\n\t"
 | 
					    "stm  sp,{sp}^\n\t"
 | 
				
			||||||
    "pop  {%[ret]}\n\t"
 | 
					    "pop  {%[ret]}\n\t"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,11 +53,11 @@ LR_IROM1 MAPPABLE_START MAPPABLE_SIZE  {
 | 
				
			||||||
LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
					LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
				
			||||||
  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
					  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
				
			||||||
   *(InRoot$$Sections)
 | 
					   *(InRoot$$Sections)
 | 
				
			||||||
   .ANY (+RO)
 | 
					   *(+RO)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
					  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
				
			||||||
  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE)  {  ; RW data
 | 
					  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE)  {  ; RW data
 | 
				
			||||||
   .ANY (+RW +ZI)
 | 
					   *(+RW +ZI)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
					  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,11 +57,11 @@ LR_IROM1 MAPPABLE_START MAPPABLE_SIZE  {
 | 
				
			||||||
LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
					LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
				
			||||||
  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
					  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
				
			||||||
   *(InRoot$$Sections)
 | 
					   *(InRoot$$Sections)
 | 
				
			||||||
   .ANY (+RO)
 | 
					   *(+RO)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
					  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
				
			||||||
  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
					  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
				
			||||||
   .ANY (+RW +ZI)
 | 
					   *(+RW +ZI)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
					  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,11 +57,11 @@ LR_IROM1 MAPPABLE_START MAPPABLE_SIZE  {
 | 
				
			||||||
LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
					LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
				
			||||||
  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
					  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
				
			||||||
   *(InRoot$$Sections)
 | 
					   *(InRoot$$Sections)
 | 
				
			||||||
   .ANY (+RO)
 | 
					   *(+RO)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
					  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
				
			||||||
  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
					  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
				
			||||||
   .ANY (+RW +ZI)
 | 
					   *(+RW +ZI)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
					  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,11 +57,11 @@ LR_IROM1 MAPPABLE_START MAPPABLE_SIZE  {
 | 
				
			||||||
LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
					LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
				
			||||||
  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
					  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
				
			||||||
   *(InRoot$$Sections)
 | 
					   *(InRoot$$Sections)
 | 
				
			||||||
   .ANY (+RO)
 | 
					   *(+RO)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
					  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
				
			||||||
  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
					  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
				
			||||||
   .ANY (+RW +ZI)
 | 
					   *(+RW +ZI)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
					  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,11 +57,11 @@ LR_IROM1 MAPPABLE_START MAPPABLE_SIZE  {
 | 
				
			||||||
LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
					LR_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {    ; load region size_region
 | 
				
			||||||
  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
					  ER_IROM2 ZBT_SRAM1_START ZBT_SRAM1_SIZE  {  ; load address = execution address
 | 
				
			||||||
   *(InRoot$$Sections)
 | 
					   *(InRoot$$Sections)
 | 
				
			||||||
   .ANY (+RO)
 | 
					   *(+RO)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
					  ; NVIC_VECTORS_SIZE Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
 | 
				
			||||||
  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
					  RW_IRAM1 (ZBT_SRAM2_START + NVIC_VECTORS_SIZE) (ZBT_SRAM2_SIZE - NVIC_VECTORS_SIZE - STACK_SIZE)  {  ; RW data
 | 
				
			||||||
   .ANY (+RW +ZI)
 | 
					   *(+RW +ZI)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
					  ARM_LIB_STACK (ZBT_SRAM2_START + ZBT_SRAM2_SIZE) EMPTY - STACK_SIZE { ; Stack region growing down
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,7 @@ NRF_SECTION_SET_DEF(sdh_ble_observers, nrf_sdh_ble_evt_observer_t, NRF_SDH_BLE_O
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//lint -save -e10 -e19 -e40 -e27 Illegal character (0x24)
 | 
					//lint -save -e10 -e19 -e40 -e27 Illegal character (0x24)
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
    extern uint32_t  Image$$RW_IRAM1$$Base;
 | 
					    extern uint32_t  Image$$RW_IRAM1$$Base;
 | 
				
			||||||
    uint32_t const * const m_ram_start = &Image$$RW_IRAM1$$Base;
 | 
					    uint32_t const * const m_ram_start = &Image$$RW_IRAM1$$Base;
 | 
				
			||||||
#elif defined(__ICCARM__)
 | 
					#elif defined(__ICCARM__)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,7 @@ extern "C" {
 | 
				
			||||||
 * param[in]    section_name    Name of the section.
 | 
					 * param[in]    section_name    Name of the section.
 | 
				
			||||||
 * @hideinitializer
 | 
					 * @hideinitializer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
#define NRF_SECTION_START_ADDR(section_name)       &CONCAT_2(section_name, $$Base)
 | 
					#define NRF_SECTION_START_ADDR(section_name)       &CONCAT_2(section_name, $$Base)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(__GNUC__)
 | 
					#elif defined(__GNUC__)
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ extern "C" {
 | 
				
			||||||
 * @param[in]   section_name    Name of the section.
 | 
					 * @param[in]   section_name    Name of the section.
 | 
				
			||||||
 * @hideinitializer
 | 
					 * @hideinitializer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
#define NRF_SECTION_END_ADDR(section_name)         &CONCAT_2(section_name, $$Limit)
 | 
					#define NRF_SECTION_END_ADDR(section_name)         &CONCAT_2(section_name, $$Limit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(__GNUC__)
 | 
					#elif defined(__GNUC__)
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@ extern "C" {
 | 
				
			||||||
 * @warning Data type must be word aligned to prevent padding.
 | 
					 * @warning Data type must be word aligned to prevent padding.
 | 
				
			||||||
 * @hideinitializer
 | 
					 * @hideinitializer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
#define NRF_SECTION_DEF(section_name, data_type)                \
 | 
					#define NRF_SECTION_DEF(section_name, data_type)                \
 | 
				
			||||||
    extern data_type * CONCAT_2(section_name, $$Base);          \
 | 
					    extern data_type * CONCAT_2(section_name, $$Base);          \
 | 
				
			||||||
    extern void      * CONCAT_2(section_name, $$Limit)
 | 
					    extern void      * CONCAT_2(section_name, $$Limit)
 | 
				
			||||||
| 
						 | 
					@ -140,7 +140,7 @@ extern "C" {
 | 
				
			||||||
 * @param[in]   section_var     Variable to register in the given section.
 | 
					 * @param[in]   section_var     Variable to register in the given section.
 | 
				
			||||||
 * @hideinitializer
 | 
					 * @hideinitializer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
#define NRF_SECTION_ITEM_REGISTER(section_name, section_var) \
 | 
					#define NRF_SECTION_ITEM_REGISTER(section_name, section_var) \
 | 
				
			||||||
    section_var __attribute__ ((section(STRINGIFY(section_name)))) __attribute__((used))
 | 
					    section_var __attribute__ ((section(STRINGIFY(section_name)))) __attribute__((used))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,7 +87,7 @@ typedef struct
 | 
				
			||||||
typedef struct
 | 
					typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    nrf_section_set_t const * p_set;        //!< Pointer to the appropriate section set.
 | 
					    nrf_section_set_t const * p_set;        //!< Pointer to the appropriate section set.
 | 
				
			||||||
#if !defined(__GNUC__) || defined(__CC_ARM)
 | 
					#if !defined(__GNUC__) || defined(__ARMCC_VERSION)
 | 
				
			||||||
    nrf_section_t const     * p_section;    //!< Pointer to the selected section.
 | 
					    nrf_section_t const     * p_section;    //!< Pointer to the selected section.
 | 
				
			||||||
                                            /**<
 | 
					                                            /**<
 | 
				
			||||||
                                             * In case of GCC all sections in the set are sorted and
 | 
					                                             * In case of GCC all sections in the set are sorted and
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,73 +0,0 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					 | 
				
			||||||
 * @file     mem_RZ_A1LU.h
 | 
					 | 
				
			||||||
 * @brief    Memory base and size definitions (used in scatter file)
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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 __MEM_RZ_A1LU_H
 | 
					 | 
				
			||||||
#define __MEM_RZ_A1LU_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  User Stack & Heap size definition
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- ROM Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> ROM Configuration
 | 
					 | 
				
			||||||
//   <o0> ROM Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> ROM Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- RAM Configuration -----------------------------------
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define __RAM_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __RAM_SIZE       0x00300000
 | 
					 | 
				
			||||||
#define __NC_RAM_SIZE    0x00100000
 | 
					 | 
				
			||||||
#define __NM_RAM_SIZE    (__RAM_SIZE - __NC_RAM_SIZE)
 | 
					 | 
				
			||||||
#define __DATA_NC_BASE   (__RAM_BASE + __NM_RAM_SIZE + 0x40000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __UND_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __SVC_STACK_SIZE 0x00008000
 | 
					 | 
				
			||||||
#define __ABT_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __FIQ_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __IRQ_STACK_SIZE 0x0000F000
 | 
					 | 
				
			||||||
#define __STACK_SIZE     (__UND_STACK_SIZE + __SVC_STACK_SIZE + __ABT_STACK_SIZE + __FIQ_STACK_SIZE + __IRQ_STACK_SIZE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- TTB Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> TTB Configuration
 | 
					 | 
				
			||||||
//   <o0> TTB Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define __TTB_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __TTB_SIZE       0x00004000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __MEM_RZ_A1H_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					;/******************************************************************************
 | 
				
			||||||
 | 
					; * @file     startup_RZ_A1H.S
 | 
				
			||||||
 | 
					; * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * @note
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; ******************************************************************************/
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__UND_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__SVC_STACK_SIZE   EQU      0x00008000
 | 
				
			||||||
 | 
					__ABT_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__FIQ_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__IRQ_STACK_SIZE   EQU      0x0000F000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USR_MODE           EQU      0x10            ; User mode
 | 
				
			||||||
 | 
					FIQ_MODE           EQU      0x11            ; Fast Interrupt Request mode
 | 
				
			||||||
 | 
					IRQ_MODE           EQU      0x12            ; Interrupt Request mode
 | 
				
			||||||
 | 
					SVC_MODE           EQU      0x13            ; Supervisor mode
 | 
				
			||||||
 | 
					ABT_MODE           EQU      0x17            ; Abort mode
 | 
				
			||||||
 | 
					UND_MODE           EQU      0x1B            ; Undefined Instruction mode
 | 
				
			||||||
 | 
					SYS_MODE           EQU      0x1F            ; System mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                ARM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    RESET, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vectors         PROC
 | 
				
			||||||
 | 
					                EXPORT  Vectors
 | 
				
			||||||
 | 
					                IMPORT  Undef_Handler
 | 
				
			||||||
 | 
					                IMPORT  SVC_Handler
 | 
				
			||||||
 | 
					                IMPORT  PAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  DAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_Handler
 | 
				
			||||||
 | 
					                IMPORT  FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                LDR    PC, =Reset_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =Undef_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =SVC_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =PAbt_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =DAbt_Handler
 | 
				
			||||||
 | 
					                NOP
 | 
				
			||||||
 | 
					                LDR    PC, =IRQ_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reset_Handler   PROC
 | 
				
			||||||
 | 
					                EXPORT  Reset_Handler
 | 
				
			||||||
 | 
					                IMPORT  SystemInit
 | 
				
			||||||
 | 
					                IMPORT  __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Mask interrupts
 | 
				
			||||||
 | 
					                CPSID   if                           
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Put any cores other than 0 to sleep
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c0, c0, 5       ; Read MPIDR
 | 
				
			||||||
 | 
					                ANDS    R0, R0, #3
 | 
				
			||||||
 | 
					goToSleep
 | 
				
			||||||
 | 
					                WFINE
 | 
				
			||||||
 | 
					                BNE     goToSleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Reset SCTLR Settings
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c1, c0, 0       ; Read CP15 System Control register
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 12)        ; Clear I bit 12 to disable I Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 <<  2)        ; Clear C bit  2 to disable D Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #0x1                ; Clear M bit  0 to disable MMU
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 11)        ; Clear Z bit 11 to disable branch prediction
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 13)        ; Clear V bit 13 to disable hivecs
 | 
				
			||||||
 | 
					                MCR     p15, 0, R0, c1, c0, 0       ; Write value back to CP15 System Control register
 | 
				
			||||||
 | 
					                ISB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Configure ACTLR
 | 
				
			||||||
 | 
					                MRC     p15, 0, r0, c1, c0, 1       ; Read CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					                ORR     r0, r0, #(1 <<  1)          ; Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
				
			||||||
 | 
					                MCR     p15, 0, r0, c1, c0, 1       ; Write CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
				
			||||||
 | 
					                LDR    R0, =Vectors
 | 
				
			||||||
 | 
					                MCR    p15, 0, R0, c12, c0, 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Setup Stack for each exceptional mode
 | 
				
			||||||
 | 
					                IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					                LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ;Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #UND_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__UND_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Abort Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #ABT_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__ABT_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter FIQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #FIQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter IRQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #IRQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Supervisor Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #SVC_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__SVC_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter System Mode to complete initialization and enter kernel 
 | 
				
			||||||
 | 
					                CPS    #SYS_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call SystemInit
 | 
				
			||||||
 | 
					                IMPORT SystemInit
 | 
				
			||||||
 | 
					                BL     SystemInit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Unmask interrupts
 | 
				
			||||||
 | 
					                CPSIE  if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call __main
 | 
				
			||||||
 | 
					                IMPORT __main
 | 
				
			||||||
 | 
					                BL     __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -1,145 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 * @file     startup_RZ_A1LU.c
 | 
					 | 
				
			||||||
 * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "MBRZA1LU.h"
 | 
					 | 
				
			||||||
#include "mem_RZ_A1LU.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Definitions
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define USR_MODE 0x10            // User mode
 | 
					 | 
				
			||||||
#define FIQ_MODE 0x11            // Fast Interrupt Request mode
 | 
					 | 
				
			||||||
#define IRQ_MODE 0x12            // Interrupt Request mode
 | 
					 | 
				
			||||||
#define SVC_MODE 0x13            // Supervisor mode
 | 
					 | 
				
			||||||
#define ABT_MODE 0x17            // Abort mode
 | 
					 | 
				
			||||||
#define UND_MODE 0x1B            // Undefined Instruction mode
 | 
					 | 
				
			||||||
#define SYS_MODE 0x1F            // System mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Internal References
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Vectors       (void) __attribute__ ((section("RESET")));
 | 
					 | 
				
			||||||
void Reset_Handler(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Vector Table
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Vectors(void) {
 | 
					 | 
				
			||||||
  IMPORT Undef_Handler
 | 
					 | 
				
			||||||
  IMPORT SVC_Handler
 | 
					 | 
				
			||||||
  IMPORT PAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT DAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT IRQ_Handler
 | 
					 | 
				
			||||||
  IMPORT FIQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Reset_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Undef_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =SVC_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =PAbt_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =DAbt_Handler
 | 
					 | 
				
			||||||
  NOP
 | 
					 | 
				
			||||||
  LDR    PC, =IRQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =FIQ_Handler
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Reset Handler called on controller reset
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Reset_Handler(void) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Mask interrupts
 | 
					 | 
				
			||||||
  CPSID   if                           
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Put any cores other than 0 to sleep
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c0, c0, 5       // Read MPIDR
 | 
					 | 
				
			||||||
  ANDS    R0, R0, #3
 | 
					 | 
				
			||||||
goToSleep
 | 
					 | 
				
			||||||
  WFINE
 | 
					 | 
				
			||||||
  BNE     goToSleep
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Reset SCTLR Settings
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c1, c0, 0       // Read CP15 System Control register
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 12)        // Clear I bit 12 to disable I Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 <<  2)        // Clear C bit  2 to disable D Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #0x1                // Clear M bit  0 to disable MMU
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 11)        // Clear Z bit 11 to disable branch prediction
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 13)        // Clear V bit 13 to disable hivecs
 | 
					 | 
				
			||||||
  MCR     p15, 0, R0, c1, c0, 0       // Write value back to CP15 System Control register
 | 
					 | 
				
			||||||
  ISB
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Configure ACTLR
 | 
					 | 
				
			||||||
  MRC     p15, 0, r0, c1, c0, 1       // Read CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
  ORR     r0, r0, #(1 <<  1)          // Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
					 | 
				
			||||||
  MCR     p15, 0, r0, c1, c0, 1       // Write CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
					 | 
				
			||||||
  LDR    R0, =Vectors
 | 
					 | 
				
			||||||
  MCR    p15, 0, R0, c12, c0, 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Setup Stack for each exceptional mode
 | 
					 | 
				
			||||||
  IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
  LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #UND_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__UND_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Abort Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #ABT_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__ABT_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter FIQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #FIQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter IRQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #IRQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Supervisor Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #SVC_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__SVC_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter System Mode to complete initialization and enter kernel 
 | 
					 | 
				
			||||||
  CPS    #SYS_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call SystemInit
 | 
					 | 
				
			||||||
  IMPORT SystemInit
 | 
					 | 
				
			||||||
  BL     SystemInit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Unmask interrupts
 | 
					 | 
				
			||||||
  CPSIE  if
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call __main
 | 
					 | 
				
			||||||
  IMPORT __main
 | 
					 | 
				
			||||||
  BL     __main
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * Project:     CMSIS-RTOS RTX
 | 
				
			||||||
 | 
					; * Title:       Cortex-A Exception handlers
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODE_SVC        EQU      0x13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                THUMB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA     |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_Handler     PROC
 | 
				
			||||||
 | 
					                EXPORT  IRQ_Handler [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetActiveIRQ
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetHandler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_EndOfInterrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                SUB     LR, LR, #4                  ; Pre-adjust LR
 | 
				
			||||||
 | 
					                SRSFD   SP!, #MODE_SVC              ; Save LR_irq and SPSR_irq on to the SVC stack
 | 
				
			||||||
 | 
					                CPS     #MODE_SVC                   ; Change to SVC mode
 | 
				
			||||||
 | 
					                PUSH    {R0-R3, R12, LR}            ; Save APCS corruptible registers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                MOV     R3, SP                      ; Move SP into R3
 | 
				
			||||||
 | 
					                AND     R3, R3, #4                  ; Get stack adjustment to ensure 8-byte alignment
 | 
				
			||||||
 | 
					                SUB     SP, SP, R3                  ; Adjust stack
 | 
				
			||||||
 | 
					                PUSH    {R3, R4}                    ; Store stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetActiveIRQ            ; Retrieve interrupt ID into R0
 | 
				
			||||||
 | 
					                MOV     R4, R0                      ; Move interrupt ID to R4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetHandler              ; Retrieve interrupt handler address for current ID
 | 
				
			||||||
 | 
					                CMP     R0, #0                      ; Check if handler address is 0
 | 
				
			||||||
 | 
					                BEQ     IRQ_End                     ; If 0, end interrupt and return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                CPSIE   i                           ; Re-enable interrupts
 | 
				
			||||||
 | 
					                BLX     R0                          ; Call IRQ handler
 | 
				
			||||||
 | 
					                CPSID   i                           ; Disable interrupts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_End
 | 
				
			||||||
 | 
					                MOV     R0, R4                      ; Move interrupt ID to R0
 | 
				
			||||||
 | 
					                BLX     IRQ_EndOfInterrupt          ; Signal end of interrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R3, R4}                    ; Restore stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					                ADD     SP, SP, R3                  ; Unadjust stack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R0-R3, R12, LR}            ; Restore stacked APCS registers
 | 
				
			||||||
 | 
					                RFEFD   SP!                         ; Return from IRQ handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Default_Handler PROC
 | 
				
			||||||
 | 
					                EXPORT  Undef_Handler             [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  SVC_Handler               [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  PAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  DAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  FIQ_Handler               [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Undef_Handler
 | 
				
			||||||
 | 
					SVC_Handler
 | 
				
			||||||
 | 
					PAbt_Handler
 | 
				
			||||||
 | 
					DAbt_Handler
 | 
				
			||||||
 | 
					FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                B       .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -1,84 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * -----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Project:     CMSIS-RTOS RTX
 | 
					 | 
				
			||||||
 * Title:       Cortex-A Exception handlers
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * -----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "core_ca.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define MODE_SVC 0x13
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Handler
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Undef_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void SVC_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void PAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void DAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void FIQ_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Default Handler for Exceptions / Interrupts
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Default_Handler(void) {
 | 
					 | 
				
			||||||
	while(1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Default IRQ Handler for Exceptions / Interrupts
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__WEAK __ASM void IRQ_Handler(void) {
 | 
					 | 
				
			||||||
    IMPORT  IRQ_GetActiveIRQ
 | 
					 | 
				
			||||||
    IMPORT  IRQ_GetHandler
 | 
					 | 
				
			||||||
    IMPORT  IRQ_EndOfInterrupt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SUB     LR, LR, #4                  // Pre-adjust LR
 | 
					 | 
				
			||||||
    SRSFD   SP!, #MODE_SVC              // Save LR_irq and SPSR_irq on to the SVC stack
 | 
					 | 
				
			||||||
    CPS     #MODE_SVC                   // Change to SVC mode
 | 
					 | 
				
			||||||
    PUSH    {R0-R3, R12, LR}            // Save APCS corruptible registers
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    MOV     R3, SP                      // Move SP into R3
 | 
					 | 
				
			||||||
    AND     R3, R3, #4                  // Get stack adjustment to ensure 8-byte alignment
 | 
					 | 
				
			||||||
    SUB     SP, SP, R3                  // Adjust stack
 | 
					 | 
				
			||||||
    PUSH    {R3, R4}                    // Store stack adjustment(R3) and user data(R4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    BLX     IRQ_GetActiveIRQ            // Retrieve interrupt ID into R0
 | 
					 | 
				
			||||||
    MOV     R4, R0                      // Move interrupt ID to R4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    BLX     IRQ_GetHandler              // Retrieve interrupt handler address for current ID
 | 
					 | 
				
			||||||
    CMP     R0, #0                      // Check if handler address is 0
 | 
					 | 
				
			||||||
    BEQ     IRQ_End                     // If 0, end interrupt and return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CPSIE   i                           // Re-enable interrupts
 | 
					 | 
				
			||||||
    BLX     R0                          // Call IRQ handler
 | 
					 | 
				
			||||||
    CPSID   i                           // Disable interrupts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRQ_End
 | 
					 | 
				
			||||||
    MOV     R0, R4                      // Move interrupt ID to R0
 | 
					 | 
				
			||||||
    BLX     IRQ_EndOfInterrupt          // Signal end of interrupt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    POP     {R3, R4}                    // Restore stack adjustment(R3) and user data(R4)
 | 
					 | 
				
			||||||
    ADD     SP, SP, R3                  // Unadjust stack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    POP     {R0-R3, R12, LR}            // Restore stacked APCS registers
 | 
					 | 
				
			||||||
    RFEFD   SP!                         // Return from IRQ handler
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -38,12 +38,12 @@ const char  * boot_loader = (char  *)0x18000000;
 | 
				
			||||||
#if defined  (__CC_ARM)
 | 
					#if defined  (__CC_ARM)
 | 
				
			||||||
#pragma arm section rodata = "BOOT_LOADER"
 | 
					#pragma arm section rodata = "BOOT_LOADER"
 | 
				
			||||||
const char boot_loader[]  __attribute__((used)) =
 | 
					const char boot_loader[]  __attribute__((used)) =
 | 
				
			||||||
 | 
					#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
				
			||||||
 | 
					const char boot_loader[]  __attribute__ ((section("BOOT_LOADER"), used)) =
 | 
				
			||||||
#elif defined (__ICCARM__)
 | 
					#elif defined (__ICCARM__)
 | 
				
			||||||
__root const char boot_loader[] @ 0x18000000 =
 | 
					__root const char boot_loader[] @ 0x18000000 =
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
const char boot_loader[]  __attribute__ ((section(".boot_loader"), used)) =
 | 
					const char boot_loader[]  __attribute__ ((section(".boot_loader"), used)) =
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
 | 
					    0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,7 +116,7 @@ extern uint32_t Image$$RW_IRAM1$$Base;
 | 
				
			||||||
extern uint32_t Image$$TTB$$ZI$$Base;
 | 
					extern uint32_t Image$$TTB$$ZI$$Base;
 | 
				
			||||||
#endif 
 | 
					#endif 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#elif defined( __ICCARM__ )
 | 
					#elif defined( __ICCARM__ )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,7 @@ extern uint32_t Image$$VECTORS$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RO_DATA$$Limit;
 | 
					extern uint32_t Image$$RO_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_DATA$$Limit;
 | 
					extern uint32_t Image$$RW_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
					extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
				
			||||||
extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
					#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
					#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
					#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
| 
						 | 
					@ -250,7 +250,7 @@ void MMU_CreateTranslationTable(void)
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
#elif defined ( __ICCARM__ ) 
 | 
					#elif defined ( __ICCARM__ ) 
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,73 +0,0 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					 | 
				
			||||||
 * @file     mem_RZ_A1H.h
 | 
					 | 
				
			||||||
 * @brief    Memory base and size definitions (used in scatter file)
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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 __MEM_RZ_A1H_H
 | 
					 | 
				
			||||||
#define __MEM_RZ_A1H_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  User Stack & Heap size definition
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- ROM Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> ROM Configuration
 | 
					 | 
				
			||||||
//   <o0> ROM Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> ROM Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- RAM Configuration -----------------------------------
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define __RAM_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __RAM_SIZE       0x00A00000
 | 
					 | 
				
			||||||
#define __NC_RAM_SIZE    0x00100000
 | 
					 | 
				
			||||||
#define __NM_RAM_SIZE    (__RAM_SIZE - __NC_RAM_SIZE)
 | 
					 | 
				
			||||||
#define __DATA_NC_BASE   (__RAM_BASE + __NM_RAM_SIZE + 0x40000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __UND_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __SVC_STACK_SIZE 0x00008000
 | 
					 | 
				
			||||||
#define __ABT_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __FIQ_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __IRQ_STACK_SIZE 0x0000F000
 | 
					 | 
				
			||||||
#define __STACK_SIZE     (__UND_STACK_SIZE + __SVC_STACK_SIZE + __ABT_STACK_SIZE + __FIQ_STACK_SIZE + __IRQ_STACK_SIZE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- TTB Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> TTB Configuration
 | 
					 | 
				
			||||||
//   <o0> TTB Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define __TTB_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __TTB_SIZE       0x00004000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __MEM_RZ_A1H_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					;/******************************************************************************
 | 
				
			||||||
 | 
					; * @file     startup_RZ_A1H.S
 | 
				
			||||||
 | 
					; * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * @note
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; ******************************************************************************/
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__UND_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__SVC_STACK_SIZE   EQU      0x00008000
 | 
				
			||||||
 | 
					__ABT_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__FIQ_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__IRQ_STACK_SIZE   EQU      0x0000F000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USR_MODE           EQU      0x10            ; User mode
 | 
				
			||||||
 | 
					FIQ_MODE           EQU      0x11            ; Fast Interrupt Request mode
 | 
				
			||||||
 | 
					IRQ_MODE           EQU      0x12            ; Interrupt Request mode
 | 
				
			||||||
 | 
					SVC_MODE           EQU      0x13            ; Supervisor mode
 | 
				
			||||||
 | 
					ABT_MODE           EQU      0x17            ; Abort mode
 | 
				
			||||||
 | 
					UND_MODE           EQU      0x1B            ; Undefined Instruction mode
 | 
				
			||||||
 | 
					SYS_MODE           EQU      0x1F            ; System mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                ARM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    RESET, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vectors         PROC
 | 
				
			||||||
 | 
					                EXPORT  Vectors
 | 
				
			||||||
 | 
					                IMPORT  Undef_Handler
 | 
				
			||||||
 | 
					                IMPORT  SVC_Handler
 | 
				
			||||||
 | 
					                IMPORT  PAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  DAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_Handler
 | 
				
			||||||
 | 
					                IMPORT  FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                LDR    PC, =Reset_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =Undef_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =SVC_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =PAbt_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =DAbt_Handler
 | 
				
			||||||
 | 
					                NOP
 | 
				
			||||||
 | 
					                LDR    PC, =IRQ_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reset_Handler   PROC
 | 
				
			||||||
 | 
					                EXPORT  Reset_Handler
 | 
				
			||||||
 | 
					                IMPORT  SystemInit
 | 
				
			||||||
 | 
					                IMPORT  __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Mask interrupts
 | 
				
			||||||
 | 
					                CPSID   if                           
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Put any cores other than 0 to sleep
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c0, c0, 5       ; Read MPIDR
 | 
				
			||||||
 | 
					                ANDS    R0, R0, #3
 | 
				
			||||||
 | 
					goToSleep
 | 
				
			||||||
 | 
					                WFINE
 | 
				
			||||||
 | 
					                BNE     goToSleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Reset SCTLR Settings
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c1, c0, 0       ; Read CP15 System Control register
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 12)        ; Clear I bit 12 to disable I Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 <<  2)        ; Clear C bit  2 to disable D Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #0x1                ; Clear M bit  0 to disable MMU
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 11)        ; Clear Z bit 11 to disable branch prediction
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 13)        ; Clear V bit 13 to disable hivecs
 | 
				
			||||||
 | 
					                MCR     p15, 0, R0, c1, c0, 0       ; Write value back to CP15 System Control register
 | 
				
			||||||
 | 
					                ISB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Configure ACTLR
 | 
				
			||||||
 | 
					                MRC     p15, 0, r0, c1, c0, 1       ; Read CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					                ORR     r0, r0, #(1 <<  1)          ; Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
				
			||||||
 | 
					                MCR     p15, 0, r0, c1, c0, 1       ; Write CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
				
			||||||
 | 
					                LDR    R0, =Vectors
 | 
				
			||||||
 | 
					                MCR    p15, 0, R0, c12, c0, 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Setup Stack for each exceptional mode
 | 
				
			||||||
 | 
					                IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					                LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ;Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #UND_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__UND_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Abort Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #ABT_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__ABT_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter FIQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #FIQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter IRQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #IRQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Supervisor Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #SVC_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__SVC_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter System Mode to complete initialization and enter kernel 
 | 
				
			||||||
 | 
					                CPS    #SYS_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call SystemInit
 | 
				
			||||||
 | 
					                IMPORT SystemInit
 | 
				
			||||||
 | 
					                BL     SystemInit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Unmask interrupts
 | 
				
			||||||
 | 
					                CPSIE  if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call __main
 | 
				
			||||||
 | 
					                IMPORT __main
 | 
				
			||||||
 | 
					                BL     __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -1,145 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 * @file     startup_RZ_A1H_H.c
 | 
					 | 
				
			||||||
 * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "MBRZA1H.h"
 | 
					 | 
				
			||||||
#include "mem_RZ_A1H.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Definitions
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define USR_MODE 0x10            // User mode
 | 
					 | 
				
			||||||
#define FIQ_MODE 0x11            // Fast Interrupt Request mode
 | 
					 | 
				
			||||||
#define IRQ_MODE 0x12            // Interrupt Request mode
 | 
					 | 
				
			||||||
#define SVC_MODE 0x13            // Supervisor mode
 | 
					 | 
				
			||||||
#define ABT_MODE 0x17            // Abort mode
 | 
					 | 
				
			||||||
#define UND_MODE 0x1B            // Undefined Instruction mode
 | 
					 | 
				
			||||||
#define SYS_MODE 0x1F            // System mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Internal References
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Vectors       (void) __attribute__ ((section("RESET")));
 | 
					 | 
				
			||||||
void Reset_Handler(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Vector Table
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Vectors(void) {
 | 
					 | 
				
			||||||
  IMPORT Undef_Handler
 | 
					 | 
				
			||||||
  IMPORT SVC_Handler
 | 
					 | 
				
			||||||
  IMPORT PAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT DAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT IRQ_Handler
 | 
					 | 
				
			||||||
  IMPORT FIQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Reset_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Undef_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =SVC_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =PAbt_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =DAbt_Handler
 | 
					 | 
				
			||||||
  NOP
 | 
					 | 
				
			||||||
  LDR    PC, =IRQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =FIQ_Handler
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Reset Handler called on controller reset
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Reset_Handler(void) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Mask interrupts
 | 
					 | 
				
			||||||
  CPSID   if                           
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Put any cores other than 0 to sleep
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c0, c0, 5       // Read MPIDR
 | 
					 | 
				
			||||||
  ANDS    R0, R0, #3
 | 
					 | 
				
			||||||
goToSleep
 | 
					 | 
				
			||||||
  WFINE
 | 
					 | 
				
			||||||
  BNE     goToSleep
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Reset SCTLR Settings
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c1, c0, 0       // Read CP15 System Control register
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 12)        // Clear I bit 12 to disable I Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 <<  2)        // Clear C bit  2 to disable D Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #0x1                // Clear M bit  0 to disable MMU
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 11)        // Clear Z bit 11 to disable branch prediction
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 13)        // Clear V bit 13 to disable hivecs
 | 
					 | 
				
			||||||
  MCR     p15, 0, R0, c1, c0, 0       // Write value back to CP15 System Control register
 | 
					 | 
				
			||||||
  ISB
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Configure ACTLR
 | 
					 | 
				
			||||||
  MRC     p15, 0, r0, c1, c0, 1       // Read CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
  ORR     r0, r0, #(1 <<  1)          // Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
					 | 
				
			||||||
  MCR     p15, 0, r0, c1, c0, 1       // Write CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
					 | 
				
			||||||
  LDR    R0, =Vectors
 | 
					 | 
				
			||||||
  MCR    p15, 0, R0, c12, c0, 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Setup Stack for each exceptional mode
 | 
					 | 
				
			||||||
  IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
  LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #UND_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__UND_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Abort Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #ABT_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__ABT_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter FIQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #FIQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter IRQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #IRQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Supervisor Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #SVC_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__SVC_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter System Mode to complete initialization and enter kernel 
 | 
					 | 
				
			||||||
  CPS    #SYS_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call SystemInit
 | 
					 | 
				
			||||||
  IMPORT SystemInit
 | 
					 | 
				
			||||||
  BL     SystemInit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Unmask interrupts
 | 
					 | 
				
			||||||
  CPSIE  if
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call __main
 | 
					 | 
				
			||||||
  IMPORT __main
 | 
					 | 
				
			||||||
  BL     __main
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * Project:     CMSIS-RTOS RTX
 | 
				
			||||||
 | 
					; * Title:       Cortex-A Exception handlers
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODE_SVC        EQU      0x13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                THUMB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA     |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_Handler     PROC
 | 
				
			||||||
 | 
					                EXPORT  IRQ_Handler [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetActiveIRQ
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetHandler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_EndOfInterrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                SUB     LR, LR, #4                  ; Pre-adjust LR
 | 
				
			||||||
 | 
					                SRSFD   SP!, #MODE_SVC              ; Save LR_irq and SPSR_irq on to the SVC stack
 | 
				
			||||||
 | 
					                CPS     #MODE_SVC                   ; Change to SVC mode
 | 
				
			||||||
 | 
					                PUSH    {R0-R3, R12, LR}            ; Save APCS corruptible registers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                MOV     R3, SP                      ; Move SP into R3
 | 
				
			||||||
 | 
					                AND     R3, R3, #4                  ; Get stack adjustment to ensure 8-byte alignment
 | 
				
			||||||
 | 
					                SUB     SP, SP, R3                  ; Adjust stack
 | 
				
			||||||
 | 
					                PUSH    {R3, R4}                    ; Store stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetActiveIRQ            ; Retrieve interrupt ID into R0
 | 
				
			||||||
 | 
					                MOV     R4, R0                      ; Move interrupt ID to R4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetHandler              ; Retrieve interrupt handler address for current ID
 | 
				
			||||||
 | 
					                CMP     R0, #0                      ; Check if handler address is 0
 | 
				
			||||||
 | 
					                BEQ     IRQ_End                     ; If 0, end interrupt and return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                CPSIE   i                           ; Re-enable interrupts
 | 
				
			||||||
 | 
					                BLX     R0                          ; Call IRQ handler
 | 
				
			||||||
 | 
					                CPSID   i                           ; Disable interrupts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_End
 | 
				
			||||||
 | 
					                MOV     R0, R4                      ; Move interrupt ID to R0
 | 
				
			||||||
 | 
					                BLX     IRQ_EndOfInterrupt          ; Signal end of interrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R3, R4}                    ; Restore stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					                ADD     SP, SP, R3                  ; Unadjust stack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R0-R3, R12, LR}            ; Restore stacked APCS registers
 | 
				
			||||||
 | 
					                RFEFD   SP!                         ; Return from IRQ handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Default_Handler PROC
 | 
				
			||||||
 | 
					                EXPORT  Undef_Handler             [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  SVC_Handler               [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  PAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  DAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  FIQ_Handler               [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Undef_Handler
 | 
				
			||||||
 | 
					SVC_Handler
 | 
				
			||||||
 | 
					PAbt_Handler
 | 
				
			||||||
 | 
					DAbt_Handler
 | 
				
			||||||
 | 
					FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                B       .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -1,84 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * -----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Project:     CMSIS-RTOS RTX
 | 
					 | 
				
			||||||
 * Title:       Cortex-A Exception handlers
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * -----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "core_ca.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define MODE_SVC 0x13
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Handler
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Undef_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void SVC_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void PAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void DAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void FIQ_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Default Handler for Exceptions / Interrupts
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Default_Handler(void) {
 | 
					 | 
				
			||||||
	while(1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Default IRQ Handler for Exceptions / Interrupts
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__WEAK __ASM void IRQ_Handler(void) {
 | 
					 | 
				
			||||||
    IMPORT  IRQ_GetActiveIRQ
 | 
					 | 
				
			||||||
    IMPORT  IRQ_GetHandler
 | 
					 | 
				
			||||||
    IMPORT  IRQ_EndOfInterrupt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SUB     LR, LR, #4                  // Pre-adjust LR
 | 
					 | 
				
			||||||
    SRSFD   SP!, #MODE_SVC              // Save LR_irq and SPSR_irq on to the SVC stack
 | 
					 | 
				
			||||||
    CPS     #MODE_SVC                   // Change to SVC mode
 | 
					 | 
				
			||||||
    PUSH    {R0-R3, R12, LR}            // Save APCS corruptible registers
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    MOV     R3, SP                      // Move SP into R3
 | 
					 | 
				
			||||||
    AND     R3, R3, #4                  // Get stack adjustment to ensure 8-byte alignment
 | 
					 | 
				
			||||||
    SUB     SP, SP, R3                  // Adjust stack
 | 
					 | 
				
			||||||
    PUSH    {R3, R4}                    // Store stack adjustment(R3) and user data(R4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    BLX     IRQ_GetActiveIRQ            // Retrieve interrupt ID into R0
 | 
					 | 
				
			||||||
    MOV     R4, R0                      // Move interrupt ID to R4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    BLX     IRQ_GetHandler              // Retrieve interrupt handler address for current ID
 | 
					 | 
				
			||||||
    CMP     R0, #0                      // Check if handler address is 0
 | 
					 | 
				
			||||||
    BEQ     IRQ_End                     // If 0, end interrupt and return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CPSIE   i                           // Re-enable interrupts
 | 
					 | 
				
			||||||
    BLX     R0                          // Call IRQ handler
 | 
					 | 
				
			||||||
    CPSID   i                           // Disable interrupts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRQ_End
 | 
					 | 
				
			||||||
    MOV     R0, R4                      // Move interrupt ID to R0
 | 
					 | 
				
			||||||
    BLX     IRQ_EndOfInterrupt          // Signal end of interrupt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    POP     {R3, R4}                    // Restore stack adjustment(R3) and user data(R4)
 | 
					 | 
				
			||||||
    ADD     SP, SP, R3                  // Unadjust stack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    POP     {R0-R3, R12, LR}            // Restore stacked APCS registers
 | 
					 | 
				
			||||||
    RFEFD   SP!                         // Return from IRQ handler
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -38,12 +38,12 @@ const char  * boot_loader = (char  *)0x18000000;
 | 
				
			||||||
#if defined  (__CC_ARM)
 | 
					#if defined  (__CC_ARM)
 | 
				
			||||||
#pragma arm section rodata = "BOOT_LOADER"
 | 
					#pragma arm section rodata = "BOOT_LOADER"
 | 
				
			||||||
const char boot_loader[]  __attribute__((used)) =
 | 
					const char boot_loader[]  __attribute__((used)) =
 | 
				
			||||||
 | 
					#elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
				
			||||||
 | 
					const char boot_loader[]  __attribute__ ((section("BOOT_LOADER"), used)) =
 | 
				
			||||||
#elif defined (__ICCARM__)
 | 
					#elif defined (__ICCARM__)
 | 
				
			||||||
__root const char boot_loader[] @ 0x18000000 =
 | 
					__root const char boot_loader[] @ 0x18000000 =
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
const char boot_loader[]  __attribute__ ((section(".boot_loader"), used)) =
 | 
					const char boot_loader[]  __attribute__ ((section(".boot_loader"), used)) =
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
 | 
					    0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,7 +116,7 @@ extern uint32_t Image$$RW_IRAM1$$Base;
 | 
				
			||||||
extern uint32_t Image$$TTB$$ZI$$Base;
 | 
					extern uint32_t Image$$TTB$$ZI$$Base;
 | 
				
			||||||
#endif 
 | 
					#endif 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#elif defined( __ICCARM__ )
 | 
					#elif defined( __ICCARM__ )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,7 @@ extern uint32_t Image$$VECTORS$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RO_DATA$$Limit;
 | 
					extern uint32_t Image$$RO_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_DATA$$Limit;
 | 
					extern uint32_t Image$$RW_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
					extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
				
			||||||
extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
					#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
					#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
					#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
| 
						 | 
					@ -251,7 +251,7 @@ void MMU_CreateTranslationTable(void)
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
#elif defined ( __ICCARM__ ) 
 | 
					#elif defined ( __ICCARM__ ) 
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,95 +0,0 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					 | 
				
			||||||
 * @file     mem_VK_RZ_A1H.h
 | 
					 | 
				
			||||||
 * @brief    Memory base and size definitions (used in scatter file)
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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 __MEM_VK_RZ_A1H_H
 | 
					 | 
				
			||||||
#define __MEM_VK_RZ_A1H_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  User Stack & Heap size definition
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- ROM Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> ROM Configuration
 | 
					 | 
				
			||||||
//   <o0> ROM Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> ROM Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#ifdef RUN_FROM_SDRAM
 | 
					 | 
				
			||||||
 #define __ROM_BASE       0x08000000
 | 
					 | 
				
			||||||
 #define __ROM_SIZE       0x02000000
 | 
					 | 
				
			||||||
 #define __VECTOR_BASE    0x08000000
 | 
					 | 
				
			||||||
 #define __DATA_BASE	  +0 ALIGN 0x100000
 | 
					 | 
				
			||||||
#elif defined (RUN_FROM_SRAM)
 | 
					 | 
				
			||||||
 #define __ROM_BASE       0x200A0000
 | 
					 | 
				
			||||||
 #define __ROM_SIZE       0x00960000
 | 
					 | 
				
			||||||
 #define __VECTOR_BASE    0x200A0000
 | 
					 | 
				
			||||||
 #define __DATA_BASE	  +0 ALIGN 0x100000 NOCOMPRESS
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 #define __ROM_BASE       0x18020000
 | 
					 | 
				
			||||||
 #define __ROM_SIZE       0x01FE0000
 | 
					 | 
				
			||||||
 #define __VECTOR_BASE    0x18020000
 | 
					 | 
				
			||||||
 #define __DATA_BASE	  0x20020000
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- RAM Configuration -----------------------------------
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#ifdef RUN_FROM_SDRAM
 | 
					 | 
				
			||||||
#define __RAM_BASE       0x08000000
 | 
					 | 
				
			||||||
#define __RAM_SIZE       0x02000000
 | 
					 | 
				
			||||||
#define __NC_RAM_SIZE    0x00200000
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define __RAM_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __RAM_SIZE       0x00A00000
 | 
					 | 
				
			||||||
#define __NC_RAM_SIZE    0x00100000
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#define __NM_RAM_SIZE    (__RAM_SIZE - __NC_RAM_SIZE)
 | 
					 | 
				
			||||||
#define __DATA_NC_BASE   (__RAM_BASE + __NM_RAM_SIZE + 0x40000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __UND_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __SVC_STACK_SIZE 0x00008000
 | 
					 | 
				
			||||||
#define __ABT_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __FIQ_STACK_SIZE 0x00000100
 | 
					 | 
				
			||||||
#define __IRQ_STACK_SIZE 0x0000F000
 | 
					 | 
				
			||||||
#define __STACK_SIZE     (__UND_STACK_SIZE + __SVC_STACK_SIZE + __ABT_STACK_SIZE + __FIQ_STACK_SIZE + __IRQ_STACK_SIZE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*--------------------- TTB Configuration ------------------------------------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// <h> TTB Configuration
 | 
					 | 
				
			||||||
//   <o0> TTB Base Address <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
//   <o1> TTB Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
					 | 
				
			||||||
// </h>
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define __TTB_BASE       0x20000000
 | 
					 | 
				
			||||||
#define __TTB_SIZE       0x00004000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __MEM_VK_RZ_A1H_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					;/******************************************************************************
 | 
				
			||||||
 | 
					; * @file     startup_RZ_A1H.S
 | 
				
			||||||
 | 
					; * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * @note
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; ******************************************************************************/
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__UND_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__SVC_STACK_SIZE   EQU      0x00008000
 | 
				
			||||||
 | 
					__ABT_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__FIQ_STACK_SIZE   EQU      0x00000100
 | 
				
			||||||
 | 
					__IRQ_STACK_SIZE   EQU      0x0000F000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USR_MODE           EQU      0x10            ; User mode
 | 
				
			||||||
 | 
					FIQ_MODE           EQU      0x11            ; Fast Interrupt Request mode
 | 
				
			||||||
 | 
					IRQ_MODE           EQU      0x12            ; Interrupt Request mode
 | 
				
			||||||
 | 
					SVC_MODE           EQU      0x13            ; Supervisor mode
 | 
				
			||||||
 | 
					ABT_MODE           EQU      0x17            ; Abort mode
 | 
				
			||||||
 | 
					UND_MODE           EQU      0x1B            ; Undefined Instruction mode
 | 
				
			||||||
 | 
					SYS_MODE           EQU      0x1F            ; System mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                ARM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    RESET, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vectors         PROC
 | 
				
			||||||
 | 
					                EXPORT  Vectors
 | 
				
			||||||
 | 
					                IMPORT  Undef_Handler
 | 
				
			||||||
 | 
					                IMPORT  SVC_Handler
 | 
				
			||||||
 | 
					                IMPORT  PAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  DAbt_Handler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_Handler
 | 
				
			||||||
 | 
					                IMPORT  FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                LDR    PC, =Reset_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =Undef_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =SVC_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =PAbt_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =DAbt_Handler
 | 
				
			||||||
 | 
					                NOP
 | 
				
			||||||
 | 
					                LDR    PC, =IRQ_Handler
 | 
				
			||||||
 | 
					                LDR    PC, =FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA    |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reset_Handler   PROC
 | 
				
			||||||
 | 
					                EXPORT  Reset_Handler
 | 
				
			||||||
 | 
					                IMPORT  SystemInit
 | 
				
			||||||
 | 
					                IMPORT  __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Mask interrupts
 | 
				
			||||||
 | 
					                CPSID   if                           
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Put any cores other than 0 to sleep
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c0, c0, 5       ; Read MPIDR
 | 
				
			||||||
 | 
					                ANDS    R0, R0, #3
 | 
				
			||||||
 | 
					goToSleep
 | 
				
			||||||
 | 
					                WFINE
 | 
				
			||||||
 | 
					                BNE     goToSleep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Reset SCTLR Settings
 | 
				
			||||||
 | 
					                MRC     p15, 0, R0, c1, c0, 0       ; Read CP15 System Control register
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 12)        ; Clear I bit 12 to disable I Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 <<  2)        ; Clear C bit  2 to disable D Cache
 | 
				
			||||||
 | 
					                BIC     R0, R0, #0x1                ; Clear M bit  0 to disable MMU
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 11)        ; Clear Z bit 11 to disable branch prediction
 | 
				
			||||||
 | 
					                BIC     R0, R0, #(0x1 << 13)        ; Clear V bit 13 to disable hivecs
 | 
				
			||||||
 | 
					                MCR     p15, 0, R0, c1, c0, 0       ; Write value back to CP15 System Control register
 | 
				
			||||||
 | 
					                ISB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Configure ACTLR
 | 
				
			||||||
 | 
					                MRC     p15, 0, r0, c1, c0, 1       ; Read CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					                ORR     r0, r0, #(1 <<  1)          ; Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
				
			||||||
 | 
					                MCR     p15, 0, r0, c1, c0, 1       ; Write CP15 Auxiliary Control Register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
				
			||||||
 | 
					                LDR    R0, =Vectors
 | 
				
			||||||
 | 
					                MCR    p15, 0, R0, c12, c0, 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Setup Stack for each exceptional mode
 | 
				
			||||||
 | 
					                IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					                LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ;Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #UND_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__UND_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Abort Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #ABT_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__ABT_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter FIQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #FIQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter IRQ Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #IRQ_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter Supervisor Mode and set its Stack Pointer 
 | 
				
			||||||
 | 
					                CPS    #SVC_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					                SUB    R0, R0, #__SVC_STACK_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Enter System Mode to complete initialization and enter kernel 
 | 
				
			||||||
 | 
					                CPS    #SYS_MODE
 | 
				
			||||||
 | 
					                MOV    SP, R0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call SystemInit
 | 
				
			||||||
 | 
					                IMPORT SystemInit
 | 
				
			||||||
 | 
					                BL     SystemInit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Unmask interrupts
 | 
				
			||||||
 | 
					                CPSIE  if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ; Call __main
 | 
				
			||||||
 | 
					                IMPORT __main
 | 
				
			||||||
 | 
					                BL     __main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -1,162 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 * @file     startup_RZ_A1H_H.c
 | 
					 | 
				
			||||||
 * @brief    CMSIS Device System Source File for ARM Cortex-A9 Device Series
 | 
					 | 
				
			||||||
 * @version  V1.00
 | 
					 | 
				
			||||||
 * @date     10 Mar 2017
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @note
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "VKRZA1H.h"
 | 
					 | 
				
			||||||
#include "mem_VK_RZ_A1H.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Definitions
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
#define USR_MODE 0x10            // User mode
 | 
					 | 
				
			||||||
#define FIQ_MODE 0x11            // Fast Interrupt Request mode
 | 
					 | 
				
			||||||
#define IRQ_MODE 0x12            // Interrupt Request mode
 | 
					 | 
				
			||||||
#define SVC_MODE 0x13            // Supervisor mode
 | 
					 | 
				
			||||||
#define ABT_MODE 0x17            // Abort mode
 | 
					 | 
				
			||||||
#define UND_MODE 0x1B            // Undefined Instruction mode
 | 
					 | 
				
			||||||
#define SYS_MODE 0x1F            // System mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Internal References
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Vectors       (void) __attribute__ ((section("RESET")));
 | 
					 | 
				
			||||||
void Reset_Handler(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Handler
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Undef_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void SVC_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void PAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void DAbt_Handler  (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void IRQ_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
void FIQ_Handler   (void) __attribute__ ((weak, alias("Default_Handler")));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Exception / Interrupt Vector Table
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Vectors(void) {
 | 
					 | 
				
			||||||
  IMPORT Undef_Handler
 | 
					 | 
				
			||||||
  IMPORT SVC_Handler
 | 
					 | 
				
			||||||
  IMPORT PAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT DAbt_Handler
 | 
					 | 
				
			||||||
  IMPORT IRQ_Handler
 | 
					 | 
				
			||||||
  IMPORT FIQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Reset_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =Undef_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =SVC_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =PAbt_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =DAbt_Handler
 | 
					 | 
				
			||||||
  NOP
 | 
					 | 
				
			||||||
  LDR    PC, =IRQ_Handler
 | 
					 | 
				
			||||||
  LDR    PC, =FIQ_Handler
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Reset Handler called on controller reset
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
__ASM void Reset_Handler(void) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Mask interrupts
 | 
					 | 
				
			||||||
  CPSID   if                           
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Put any cores other than 0 to sleep
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c0, c0, 5       // Read MPIDR
 | 
					 | 
				
			||||||
  ANDS    R0, R0, #3
 | 
					 | 
				
			||||||
goToSleep
 | 
					 | 
				
			||||||
  WFINE
 | 
					 | 
				
			||||||
  BNE     goToSleep
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Reset SCTLR Settings
 | 
					 | 
				
			||||||
  MRC     p15, 0, R0, c1, c0, 0       // Read CP15 System Control register
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 12)        // Clear I bit 12 to disable I Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 <<  2)        // Clear C bit  2 to disable D Cache
 | 
					 | 
				
			||||||
  BIC     R0, R0, #0x1                // Clear M bit  0 to disable MMU
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 11)        // Clear Z bit 11 to disable branch prediction
 | 
					 | 
				
			||||||
  BIC     R0, R0, #(0x1 << 13)        // Clear V bit 13 to disable hivecs
 | 
					 | 
				
			||||||
  MCR     p15, 0, R0, c1, c0, 0       // Write value back to CP15 System Control register
 | 
					 | 
				
			||||||
  ISB
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Configure ACTLR
 | 
					 | 
				
			||||||
  MRC     p15, 0, r0, c1, c0, 1       // Read CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
  ORR     r0, r0, #(1 <<  1)          // Enable L2 prefetch hint (UNK/WI since r4p1)
 | 
					 | 
				
			||||||
  MCR     p15, 0, r0, c1, c0, 1       // Write CP15 Auxiliary Control Register
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Set Vector Base Address Register (VBAR) to point to this application's vector table
 | 
					 | 
				
			||||||
  LDR    R0, =Vectors
 | 
					 | 
				
			||||||
  MCR    p15, 0, R0, c12, c0, 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Setup Stack for each exceptional mode
 | 
					 | 
				
			||||||
  IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
  LDR    R0, =|Image$$ARM_LIB_STACK$$ZI$$Limit|
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //Enter Undefined Instruction Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #UND_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__UND_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Abort Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #ABT_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__ABT_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter FIQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #FIQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__FIQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter IRQ Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #IRQ_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__IRQ_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter Supervisor Mode and set its Stack Pointer 
 | 
					 | 
				
			||||||
  CPS    #SVC_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
  SUB    R0, R0, #__SVC_STACK_SIZE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enter System Mode to complete initialization and enter kernel 
 | 
					 | 
				
			||||||
  CPS    #SYS_MODE
 | 
					 | 
				
			||||||
  MOV    SP, R0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call SystemInit
 | 
					 | 
				
			||||||
  IMPORT SystemInit
 | 
					 | 
				
			||||||
  BL     SystemInit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Unmask interrupts
 | 
					 | 
				
			||||||
  CPSIE  if
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call __main
 | 
					 | 
				
			||||||
  IMPORT __main
 | 
					 | 
				
			||||||
  BL     __main
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
  Default Handler for Exceptions / Interrupts
 | 
					 | 
				
			||||||
 *----------------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
void Default_Handler(void) {
 | 
					 | 
				
			||||||
	while(1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					;/*
 | 
				
			||||||
 | 
					; * Copyright (c) 2013-2018 Arm Limited. All rights reserved.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * 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.
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * Project:     CMSIS-RTOS RTX
 | 
				
			||||||
 | 
					; * Title:       Cortex-A Exception handlers
 | 
				
			||||||
 | 
					; *
 | 
				
			||||||
 | 
					; * -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODE_SVC        EQU      0x13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                PRESERVE8
 | 
				
			||||||
 | 
					                THUMB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AREA     |.text|, CODE, READONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_Handler     PROC
 | 
				
			||||||
 | 
					                EXPORT  IRQ_Handler [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetActiveIRQ
 | 
				
			||||||
 | 
					                IMPORT  IRQ_GetHandler
 | 
				
			||||||
 | 
					                IMPORT  IRQ_EndOfInterrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                SUB     LR, LR, #4                  ; Pre-adjust LR
 | 
				
			||||||
 | 
					                SRSFD   SP!, #MODE_SVC              ; Save LR_irq and SPSR_irq on to the SVC stack
 | 
				
			||||||
 | 
					                CPS     #MODE_SVC                   ; Change to SVC mode
 | 
				
			||||||
 | 
					                PUSH    {R0-R3, R12, LR}            ; Save APCS corruptible registers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                MOV     R3, SP                      ; Move SP into R3
 | 
				
			||||||
 | 
					                AND     R3, R3, #4                  ; Get stack adjustment to ensure 8-byte alignment
 | 
				
			||||||
 | 
					                SUB     SP, SP, R3                  ; Adjust stack
 | 
				
			||||||
 | 
					                PUSH    {R3, R4}                    ; Store stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetActiveIRQ            ; Retrieve interrupt ID into R0
 | 
				
			||||||
 | 
					                MOV     R4, R0                      ; Move interrupt ID to R4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                BLX     IRQ_GetHandler              ; Retrieve interrupt handler address for current ID
 | 
				
			||||||
 | 
					                CMP     R0, #0                      ; Check if handler address is 0
 | 
				
			||||||
 | 
					                BEQ     IRQ_End                     ; If 0, end interrupt and return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                CPSIE   i                           ; Re-enable interrupts
 | 
				
			||||||
 | 
					                BLX     R0                          ; Call IRQ handler
 | 
				
			||||||
 | 
					                CPSID   i                           ; Disable interrupts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRQ_End
 | 
				
			||||||
 | 
					                MOV     R0, R4                      ; Move interrupt ID to R0
 | 
				
			||||||
 | 
					                BLX     IRQ_EndOfInterrupt          ; Signal end of interrupt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R3, R4}                    ; Restore stack adjustment(R3) and user data(R4)
 | 
				
			||||||
 | 
					                ADD     SP, SP, R3                  ; Unadjust stack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                POP     {R0-R3, R12, LR}            ; Restore stacked APCS registers
 | 
				
			||||||
 | 
					                RFEFD   SP!                         ; Return from IRQ handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Default_Handler PROC
 | 
				
			||||||
 | 
					                EXPORT  Undef_Handler             [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  SVC_Handler               [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  PAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  DAbt_Handler              [WEAK]
 | 
				
			||||||
 | 
					                EXPORT  FIQ_Handler               [WEAK]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Undef_Handler
 | 
				
			||||||
 | 
					SVC_Handler
 | 
				
			||||||
 | 
					PAbt_Handler
 | 
				
			||||||
 | 
					DAbt_Handler
 | 
				
			||||||
 | 
					FIQ_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                B       .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ENDP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                END
 | 
				
			||||||
| 
						 | 
					@ -116,7 +116,7 @@ extern uint32_t Image$$RW_IRAM1$$Base;
 | 
				
			||||||
extern uint32_t Image$$TTB$$ZI$$Base;
 | 
					extern uint32_t Image$$TTB$$ZI$$Base;
 | 
				
			||||||
#endif 
 | 
					#endif 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#elif defined( __ICCARM__ )
 | 
					#elif defined( __ICCARM__ )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Base;
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,7 @@ extern uint32_t Image$$VECTORS$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RO_DATA$$Limit;
 | 
					extern uint32_t Image$$RO_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_DATA$$Limit;
 | 
					extern uint32_t Image$$RW_DATA$$Limit;
 | 
				
			||||||
extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
					extern uint32_t Image$$RW_IRAM1$$Limit;
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$RW_DATA_NC$$Limit;
 | 
				
			||||||
extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
					extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ extern uint32_t Image$$ZI_DATA_NC$$Limit;
 | 
				
			||||||
#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
					#define RW_IRAM1_SIZE   (((uint32_t)&Image$$RW_IRAM1$$Limit >> 20) - ((uint32_t)&Image$$RW_IRAM1$$Base >> 20) + 1)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
					#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
					#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
 | 
				
			||||||
| 
						 | 
					@ -251,7 +251,7 @@ void MMU_CreateTranslationTable(void)
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_IRAM1$$Base, RW_IRAM1_SIZE, Sect_Normal_RW);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined( __CC_ARM )
 | 
					#if defined( __CC_ARM ) || defined( __ARMCC_VERSION )
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
#elif defined ( __ICCARM__ ) 
 | 
					#elif defined ( __ICCARM__ ) 
 | 
				
			||||||
    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
					    MMU_TTSection (&Image$$TTB$$ZI$$Base, RZ_A1_ONCHIP_SRAM_NC_BASE         ,              10, Sect_Normal_NC);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@
 | 
				
			||||||
#define STREG_BUSY_BIT               (0x01u)    /* SR.[0]BUSY Erase/Write In Progress (RO) */
 | 
					#define STREG_BUSY_BIT               (0x01u)    /* SR.[0]BUSY Erase/Write In Progress (RO) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Definition of the base address for the MMU translation table */
 | 
					/* Definition of the base address for the MMU translation table */
 | 
				
			||||||
#if defined(__CC_ARM) || defined(__GNUC__)
 | 
					#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
 | 
				
			||||||
extern uint32_t Image$$TTB$$ZI$$Base;
 | 
					extern uint32_t Image$$TTB$$ZI$$Base;
 | 
				
			||||||
#define TTB         ((uint32_t)&Image$$TTB$$ZI$$Base)   /* using linker symbol */
 | 
					#define TTB         ((uint32_t)&Image$$TTB$$ZI$$Base)   /* using linker symbol */
 | 
				
			||||||
#elif defined(__ICCARM__)
 | 
					#elif defined(__ICCARM__)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(TARGET_RZ_A1H) || defined(TARGET_VK_RZ_A1H) || defined(TARGET_GR_LYCHEE)
 | 
					#if defined(TARGET_RENESAS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__ARMCC_VERSION)
 | 
					#if defined(__ARMCC_VERSION)
 | 
				
			||||||
    extern uint32_t Image$$ARM_LIB_STACK$$Base[];
 | 
					    extern uint32_t Image$$ARM_LIB_STACK$$Base[];
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    #error "no toolchain defined"
 | 
					    #error "no toolchain defined"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  // MBED_MBED_RTX_H
 | 
					#endif  // MBED_MBED_RTX_H
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -1331,7 +1331,7 @@
 | 
				
			||||||
    "KW24D": {
 | 
					    "KW24D": {
 | 
				
			||||||
        "supported_form_factors": ["ARDUINO"],
 | 
					        "supported_form_factors": ["ARDUINO"],
 | 
				
			||||||
        "core": "Cortex-M4",
 | 
					        "core": "Cortex-M4",
 | 
				
			||||||
        "supported_toolchains": ["ARM", "GCC_ARM", "IAR"],
 | 
					        "supported_toolchains": ["ARMC5", "GCC_ARM", "IAR"],
 | 
				
			||||||
        "extra_labels": ["Freescale", "MCUXpresso_MCUS", "KSDK2_MCUS", "FRDM"],
 | 
					        "extra_labels": ["Freescale", "MCUXpresso_MCUS", "KSDK2_MCUS", "FRDM"],
 | 
				
			||||||
        "is_disk_virtual": true,
 | 
					        "is_disk_virtual": true,
 | 
				
			||||||
        "macros": ["CPU_MKW24D512VHA5", "FSL_RTOS_MBED"],
 | 
					        "macros": ["CPU_MKW24D512VHA5", "FSL_RTOS_MBED"],
 | 
				
			||||||
| 
						 | 
					@ -7855,7 +7855,7 @@
 | 
				
			||||||
        "inherits": ["Target"],
 | 
					        "inherits": ["Target"],
 | 
				
			||||||
        "macros": ["MBED_MPU_CUSTOM"],
 | 
					        "macros": ["MBED_MPU_CUSTOM"],
 | 
				
			||||||
        "default_toolchain": "GCC_ARM",
 | 
					        "default_toolchain": "GCC_ARM",
 | 
				
			||||||
        "supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
 | 
					        "supported_toolchains": ["GCC_ARM", "IAR", "ARMC5"],
 | 
				
			||||||
        "core": "Cortex-M4F",
 | 
					        "core": "Cortex-M4F",
 | 
				
			||||||
        "OUTPUT_EXT": "hex",
 | 
					        "OUTPUT_EXT": "hex",
 | 
				
			||||||
        "device_has": [
 | 
					        "device_has": [
 | 
				
			||||||
| 
						 | 
					@ -7901,7 +7901,7 @@
 | 
				
			||||||
        "inherits": ["MCU_PSOC6_M4"],
 | 
					        "inherits": ["MCU_PSOC6_M4"],
 | 
				
			||||||
        "features": ["BLE"],
 | 
					        "features": ["BLE"],
 | 
				
			||||||
        "supported_form_factors": ["ARDUINO"],
 | 
					        "supported_form_factors": ["ARDUINO"],
 | 
				
			||||||
        "supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
 | 
					        "supported_toolchains": ["GCC_ARM", "ARMC5", "IAR"],
 | 
				
			||||||
        "release_versions": ["5"],
 | 
					        "release_versions": ["5"],
 | 
				
			||||||
        "extra_labels_add": ["PSOC6_01", "WICED", "CYW43XXX", "CYW4343X", "CORDIO"],
 | 
					        "extra_labels_add": ["PSOC6_01", "WICED", "CYW43XXX", "CYW4343X", "CORDIO"],
 | 
				
			||||||
        "macros_add": ["CY8C6247BZI_D54", "PSOC6_DYNSRM_DISABLE=1"],
 | 
					        "macros_add": ["CY8C6247BZI_D54", "PSOC6_DYNSRM_DISABLE=1"],
 | 
				
			||||||
| 
						 | 
					@ -7918,7 +7918,7 @@
 | 
				
			||||||
        "inherits": ["MCU_PSOC6_M4"],
 | 
					        "inherits": ["MCU_PSOC6_M4"],
 | 
				
			||||||
        "features": ["BLE"],
 | 
					        "features": ["BLE"],
 | 
				
			||||||
        "device_has_remove": ["ANALOGOUT"],
 | 
					        "device_has_remove": ["ANALOGOUT"],
 | 
				
			||||||
        "supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
 | 
					        "supported_toolchains": ["GCC_ARM", "ARMC5", "IAR"],
 | 
				
			||||||
        "release_versions": ["5"],
 | 
					        "release_versions": ["5"],
 | 
				
			||||||
        "extra_labels_add": ["PSOC6_02", "WICED", "CYW43XXX", "CYW4343X", "CORDIO"],
 | 
					        "extra_labels_add": ["PSOC6_02", "WICED", "CYW43XXX", "CYW4343X", "CORDIO"],
 | 
				
			||||||
        "macros_add": ["CY8C624ABZI_D44", "PSOC6_DYNSRM_DISABLE=1"],
 | 
					        "macros_add": ["CY8C624ABZI_D44", "PSOC6_DYNSRM_DISABLE=1"],
 | 
				
			||||||
| 
						 | 
					@ -7948,7 +7948,7 @@
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "CY8CKIT_062_4343W": {
 | 
					    "CY8CKIT_062_4343W": {
 | 
				
			||||||
        "inherits": ["MCU_PSOC6_M4"],
 | 
					        "inherits": ["MCU_PSOC6_M4"],
 | 
				
			||||||
        "supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
 | 
					        "supported_toolchains": ["GCC_ARM", "ARMC5", "IAR"],
 | 
				
			||||||
        "release_versions": ["5"],
 | 
					        "release_versions": ["5"],
 | 
				
			||||||
        "features": ["BLE"],
 | 
					        "features": ["BLE"],
 | 
				
			||||||
        "supported_form_factors": ["ARDUINO"],
 | 
					        "supported_form_factors": ["ARDUINO"],
 | 
				
			||||||
| 
						 | 
					@ -7967,7 +7967,7 @@
 | 
				
			||||||
    "CYW943012P6EVB_01": {
 | 
					    "CYW943012P6EVB_01": {
 | 
				
			||||||
        "inherits": ["MCU_PSOC6_M4"],
 | 
					        "inherits": ["MCU_PSOC6_M4"],
 | 
				
			||||||
        "features": ["BLE"],
 | 
					        "features": ["BLE"],
 | 
				
			||||||
        "supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
 | 
					        "supported_toolchains": ["GCC_ARM", "ARMC5", "IAR"],
 | 
				
			||||||
        "release_versions": ["5"],
 | 
					        "release_versions": ["5"],
 | 
				
			||||||
        "extra_labels_add": ["PSOC6_01", "WICED", "CYW43XXX", "CYW43012", "CORDIO"],
 | 
					        "extra_labels_add": ["PSOC6_01", "WICED", "CYW43XXX", "CYW43012", "CORDIO"],
 | 
				
			||||||
        "macros_add": ["CY8C6247BZI_D54", "PSOC6_DYNSRM_DISABLE=1"],
 | 
					        "macros_add": ["CY8C6247BZI_D54", "PSOC6_DYNSRM_DISABLE=1"],
 | 
				
			||||||
| 
						 | 
					@ -8266,7 +8266,7 @@
 | 
				
			||||||
        "detect_code": ["1703"],
 | 
					        "detect_code": ["1703"],
 | 
				
			||||||
        "macros_add": ["GD32E10X"],
 | 
					        "macros_add": ["GD32E10X"],
 | 
				
			||||||
        "release_versions": ["5"]
 | 
					        "release_versions": ["5"]
 | 
				
			||||||
		},
 | 
						},
 | 
				
			||||||
    "TT_M4G9": {
 | 
					    "TT_M4G9": {
 | 
				
			||||||
		"inherits": ["Target"],
 | 
							"inherits": ["Target"],
 | 
				
			||||||
		"core": "Cortex-M4",
 | 
							"core": "Cortex-M4",
 | 
				
			||||||
| 
						 | 
					@ -8296,5 +8296,9 @@
 | 
				
			||||||
		"detect_code": ["8013"],
 | 
							"detect_code": ["8013"],
 | 
				
			||||||
		"release_versions": ["5"],
 | 
							"release_versions": ["5"],
 | 
				
			||||||
		"bootloader_supported": true
 | 
							"bootloader_supported": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "__build_tools_metadata__": {
 | 
				
			||||||
 | 
					        "version": "1",
 | 
				
			||||||
 | 
					        "public": false
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,11 +122,26 @@ def add_result_to_report(report, result):
 | 
				
			||||||
    report[target][toolchain][id_name].append(result_wrap)
 | 
					    report[target][toolchain][id_name].append(result_wrap)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_toolchain_name(target, toolchain_name):
 | 
					def get_toolchain_name(target, toolchain_name):
 | 
				
			||||||
    if toolchain_name == "ARM":
 | 
					    if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
        if CORE_ARCH[target.core] == 8:
 | 
					        if toolchain_name == "ARM" or toolchain_name == "ARMC6" :
 | 
				
			||||||
            return "ARMC6"
 | 
					            if("ARM" in target.supported_toolchains or "ARMC6" in target.supported_toolchains):
 | 
				
			||||||
        elif getattr(target, "default_toolchain", None) == "uARM":
 | 
					                return "ARMC6"
 | 
				
			||||||
            return "uARM"
 | 
					            elif ("ARMC5" in target.supported_toolchains):
 | 
				
			||||||
 | 
					                if toolchain_name == "ARM":
 | 
				
			||||||
 | 
					                    return "ARM" #note that returning ARM here means, use ARMC5 toolchain
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    return "ARMC6" #ARMC6 explicitly specified by user, try ARMC6 anyway although the target doesnt explicitly specify ARMC6, as ARMC6 is our default ARM toolchain
 | 
				
			||||||
 | 
					        elif toolchain_name == "uARM":
 | 
				
			||||||
 | 
					            if ("ARMC5" in target.supported_toolchains):
 | 
				
			||||||
 | 
					                return "uARM" #use ARM_MICRO to use AC5+microlib
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                return "ARMC6" #use AC6+microlib
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        if toolchain_name == "ARM":
 | 
				
			||||||
 | 
					            if CORE_ARCH[target.core] == 8:
 | 
				
			||||||
 | 
					                return "ARMC6"
 | 
				
			||||||
 | 
					            elif getattr(target, "default_toolchain", None) == "uARM":
 | 
				
			||||||
 | 
					                return "uARM"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return toolchain_name
 | 
					    return toolchain_name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,8 +191,8 @@ def is_official_target(target_name, version):
 | 
				
			||||||
    if hasattr(target, 'release_versions') \
 | 
					    if hasattr(target, 'release_versions') \
 | 
				
			||||||
       and version in target.release_versions:
 | 
					       and version in target.release_versions:
 | 
				
			||||||
        if version == '2':
 | 
					        if version == '2':
 | 
				
			||||||
            # For version 2, either ARM or uARM toolchain support is required
 | 
					            # For version 2, one of the ARM toolchains(ARM, ARMC6, ARMC5 or uARM) support is required
 | 
				
			||||||
            required_toolchains = set(['ARM', 'uARM'])
 | 
					            required_toolchains = set(['ARM', 'ARMC5', 'ARMC6', 'uARM'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if not len(required_toolchains.intersection(
 | 
					            if not len(required_toolchains.intersection(
 | 
				
			||||||
                    set(target.supported_toolchains))) > 0:
 | 
					                    set(target.supported_toolchains))) > 0:
 | 
				
			||||||
| 
						 | 
					@ -194,6 +209,7 @@ def is_official_target(target_name, version):
 | 
				
			||||||
            # For version 5, ARM, GCC_ARM, and IAR toolchain support is required
 | 
					            # For version 5, ARM, GCC_ARM, and IAR toolchain support is required
 | 
				
			||||||
            required_toolchains = [
 | 
					            required_toolchains = [
 | 
				
			||||||
                set(['ARM', 'GCC_ARM']),
 | 
					                set(['ARM', 'GCC_ARM']),
 | 
				
			||||||
 | 
					                set(['ARMC5', 'GCC_ARM']),
 | 
				
			||||||
                set(['ARMC6'])
 | 
					                set(['ARMC6'])
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
            supported_toolchains = set(target.supported_toolchains)
 | 
					            supported_toolchains = set(target.supported_toolchains)
 | 
				
			||||||
| 
						 | 
					@ -235,8 +251,8 @@ def is_official_target(target_name, version):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return result, reason
 | 
					    return result, reason
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def transform_release_toolchains(toolchains, version):
 | 
					def transform_release_toolchains(target, version):
 | 
				
			||||||
    """ Given a list of toolchains and a release version, return a list of
 | 
					    """ Given a release version and target, return a list of
 | 
				
			||||||
    only the supported toolchains for that release
 | 
					    only the supported toolchains for that release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Positional arguments:
 | 
					    Positional arguments:
 | 
				
			||||||
| 
						 | 
					@ -244,11 +260,19 @@ def transform_release_toolchains(toolchains, version):
 | 
				
			||||||
    version - The release version string. Should be a string contained within
 | 
					    version - The release version string. Should be a string contained within
 | 
				
			||||||
              RELEASE_VERSIONS
 | 
					              RELEASE_VERSIONS
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if version == '5':
 | 
					    if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
        return ['ARM', 'GCC_ARM', 'IAR']
 | 
					        if version == '5':
 | 
				
			||||||
 | 
					            if 'ARMC5' in target.supported_toolchains:
 | 
				
			||||||
 | 
					                return ['ARMC5', 'GCC_ARM', 'IAR']
 | 
				
			||||||
 | 
					            else:    
 | 
				
			||||||
 | 
					                return ['ARM', 'ARMC6', 'GCC_ARM', 'IAR']
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return target.supported_toolchains
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return toolchains
 | 
					        if version == '5':
 | 
				
			||||||
 | 
					            return ['ARM', 'GCC_ARM', 'IAR']
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return target.supported_toolchains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_mbed_official_release(version):
 | 
					def get_mbed_official_release(version):
 | 
				
			||||||
    """ Given a release version string, return a tuple that contains a target
 | 
					    """ Given a release version string, return a tuple that contains a target
 | 
				
			||||||
| 
						 | 
					@ -267,7 +291,7 @@ def get_mbed_official_release(version):
 | 
				
			||||||
                [
 | 
					                [
 | 
				
			||||||
                    TARGET_MAP[target].name,
 | 
					                    TARGET_MAP[target].name,
 | 
				
			||||||
                    tuple(transform_release_toolchains(
 | 
					                    tuple(transform_release_toolchains(
 | 
				
			||||||
                        TARGET_MAP[target].supported_toolchains, version))
 | 
					                        TARGET_MAP[target], version))
 | 
				
			||||||
                ]
 | 
					                ]
 | 
				
			||||||
            ) for target in TARGET_NAMES \
 | 
					            ) for target in TARGET_NAMES \
 | 
				
			||||||
            if (hasattr(TARGET_MAP[target], 'release_versions')
 | 
					            if (hasattr(TARGET_MAP[target], 'release_versions')
 | 
				
			||||||
| 
						 | 
					@ -284,13 +308,25 @@ def get_mbed_official_release(version):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return mbed_official_release
 | 
					    return mbed_official_release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARM_COMPILERS = ("ARM", "ARMC6", "uARM")
 | 
					 | 
				
			||||||
def target_supports_toolchain(target, toolchain_name):
 | 
					def target_supports_toolchain(target, toolchain_name):
 | 
				
			||||||
    if toolchain_name in ARM_COMPILERS:
 | 
					    if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
        return any(tc in target.supported_toolchains for tc in ARM_COMPILERS)
 | 
					        if toolchain_name in target.supported_toolchains:
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if(toolchain_name == "ARM"):
 | 
				
			||||||
 | 
					                #we cant find ARM, see if one ARMC5, ARMC6 or uARM listed
 | 
				
			||||||
 | 
					                return any(tc in target.supported_toolchains for tc in ("ARMC5","ARMC6","uARM"))
 | 
				
			||||||
 | 
					            if(toolchain_name == "ARMC6"):
 | 
				
			||||||
 | 
					                #we did not find ARMC6, but check for ARM is listed
 | 
				
			||||||
 | 
					                return "ARM" in target.supported_toolchains
 | 
				
			||||||
 | 
					        #return False in other cases
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return toolchain_name in target.supported_toolchains
 | 
					        ARM_COMPILERS = ("ARM", "ARMC6", "uARM")
 | 
				
			||||||
 | 
					        if toolchain_name in ARM_COMPILERS:
 | 
				
			||||||
 | 
					            return any(tc in target.supported_toolchains for tc in ARM_COMPILERS)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return toolchain_name in target.supported_toolchains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def prepare_toolchain(src_paths, build_dir, target, toolchain_name,
 | 
					def prepare_toolchain(src_paths, build_dir, target, toolchain_name,
 | 
				
			||||||
                      macros=None, clean=False, jobs=1,
 | 
					                      macros=None, clean=False, jobs=1,
 | 
				
			||||||
| 
						 | 
					@ -321,12 +357,19 @@ def prepare_toolchain(src_paths, build_dir, target, toolchain_name,
 | 
				
			||||||
    # If the configuration object was not yet created, create it now
 | 
					    # If the configuration object was not yet created, create it now
 | 
				
			||||||
    config = config or Config(target, src_paths, app_config=app_config)
 | 
					    config = config or Config(target, src_paths, app_config=app_config)
 | 
				
			||||||
    target = config.target
 | 
					    target = config.target
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    if not target_supports_toolchain(target, toolchain_name):
 | 
					    if not target_supports_toolchain(target, toolchain_name):
 | 
				
			||||||
        raise NotSupportedException(
 | 
					        raise NotSupportedException(
 | 
				
			||||||
            "Target {} is not supported by toolchain {}".format(
 | 
					            "Target {} is not supported by toolchain {}".format(
 | 
				
			||||||
                target.name, toolchain_name))
 | 
					                target.name, toolchain_name))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    toolchain_name = get_toolchain_name(target, toolchain_name)
 | 
					    selected_toolchain_name = get_toolchain_name(target, toolchain_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #If a target supports ARMC6 and we want to build UARM with it, 
 | 
				
			||||||
 | 
					    #then set the default_toolchain to uARM to link AC6 microlib.
 | 
				
			||||||
 | 
					    if(selected_toolchain_name == "ARMC6" and toolchain_name == "uARM"):
 | 
				
			||||||
 | 
					        target.default_toolchain = "uARM"
 | 
				
			||||||
 | 
					    toolchain_name = selected_toolchain_name     
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        cur_tc = TOOLCHAIN_CLASSES[toolchain_name]
 | 
					        cur_tc = TOOLCHAIN_CLASSES[toolchain_name]
 | 
				
			||||||
| 
						 | 
					@ -965,7 +1008,13 @@ def build_mbed_libs(target, toolchain_name, clean=False, macros=None,
 | 
				
			||||||
    Return - True if target + toolchain built correctly, False if not supported
 | 
					    Return - True if target + toolchain built correctly, False if not supported
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    toolchain_name = get_toolchain_name(target, toolchain_name)
 | 
					    selected_toolchain_name = get_toolchain_name(target, toolchain_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #If a target supports ARMC6 and we want to build UARM with it, 
 | 
				
			||||||
 | 
					    #then set the default_toolchain to uARM to link AC6 microlib.
 | 
				
			||||||
 | 
					    if(selected_toolchain_name == "ARMC6" and toolchain_name == "uARM"):
 | 
				
			||||||
 | 
					        target.default_toolchain = "uARM"
 | 
				
			||||||
 | 
					    toolchain_name = selected_toolchain_name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if report is not None:
 | 
					    if report is not None:
 | 
				
			||||||
        start = time()
 | 
					        start = time()
 | 
				
			||||||
| 
						 | 
					@ -1207,6 +1256,11 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unique_supported_toolchains = get_unique_supported_toolchains(
 | 
					    unique_supported_toolchains = get_unique_supported_toolchains(
 | 
				
			||||||
        release_targets)
 | 
					        release_targets)
 | 
				
			||||||
 | 
					    #Add ARMC5 column as well to the matrix to help with showing which targets are in ARMC5
 | 
				
			||||||
 | 
					    #ARMC5 is not a toolchain class but yet we use that as a toolchain id in supported_toolchains in targets.json 
 | 
				
			||||||
 | 
					    #capture that info in a separate column
 | 
				
			||||||
 | 
					    unique_supported_toolchains.append('ARMC5')
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    prepend_columns = ["Target"] + ["mbed OS %s" % x for x in RELEASE_VERSIONS]
 | 
					    prepend_columns = ["Target"] + ["mbed OS %s" % x for x in RELEASE_VERSIONS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # All tests status table print
 | 
					    # All tests status table print
 | 
				
			||||||
| 
						 | 
					@ -1249,8 +1303,7 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None,
 | 
				
			||||||
                (unique_toolchain == "ARMC6" and
 | 
					                (unique_toolchain == "ARMC6" and
 | 
				
			||||||
                 "ARM" in tgt_obj.supported_toolchains) or
 | 
					                 "ARM" in tgt_obj.supported_toolchains) or
 | 
				
			||||||
                (unique_toolchain == "ARM" and
 | 
					                (unique_toolchain == "ARM" and
 | 
				
			||||||
                 "ARMC6" in tgt_obj.supported_toolchains and
 | 
					                 "ARMC6" in tgt_obj.supported_toolchains)):
 | 
				
			||||||
                 CORE_ARCH[tgt_obj.core] == 8)):
 | 
					 | 
				
			||||||
                text = "Supported"
 | 
					                text = "Supported"
 | 
				
			||||||
                perm_counter += 1
 | 
					                perm_counter += 1
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,6 +115,14 @@ class EclipseArmc5(Eclipse, Armc5):
 | 
				
			||||||
    LOAD_EXE = False
 | 
					    LOAD_EXE = False
 | 
				
			||||||
    NAME = "Eclipse-Armc5"
 | 
					    NAME = "Eclipse-Armc5"
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def is_target_supported(cls, target_name):
 | 
				
			||||||
 | 
					        target = TARGET_MAP[target_name]
 | 
				
			||||||
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
 | 
					            return "ARMC5" in target.supported_toolchains;
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class EclipseIAR(Eclipse, IAR):
 | 
					class EclipseIAR(Eclipse, IAR):
 | 
				
			||||||
    LOAD_EXE = True
 | 
					    LOAD_EXE = True
 | 
				
			||||||
    NAME = "Eclipse-IAR"
 | 
					    NAME = "Eclipse-IAR"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -274,11 +274,44 @@ class Armc5(Arm):
 | 
				
			||||||
    TOOLCHAIN = "ARM"
 | 
					    TOOLCHAIN = "ARM"
 | 
				
			||||||
    PREPROCESS_ASM = True
 | 
					    PREPROCESS_ASM = True
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def is_target_supported(cls, target_name):
 | 
				
			||||||
 | 
					        target = TARGET_MAP[target_name]
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
 | 
					            #Although toolchain name is set to ARM above we should check for ARMC5 for 5.12/onwards
 | 
				
			||||||
 | 
					            if "ARMC5" not in target.supported_toolchains:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return apply_supported_whitelist(
 | 
				
			||||||
 | 
					            cls.TOOLCHAIN, cls.POST_BINARY_WHITELIST, target)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Armc6(Arm):
 | 
					class Armc6(Arm):
 | 
				
			||||||
    """ARM Compiler 6 (armclang) specific generic makefile target"""
 | 
					    """ARM Compiler 6 (armclang) specific generic makefile target"""
 | 
				
			||||||
    NAME = 'Make-ARMc6'
 | 
					    NAME = 'Make-ARMc6'
 | 
				
			||||||
    TOOLCHAIN = "ARMC6"
 | 
					    TOOLCHAIN = "ARMC6"
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def is_target_supported(cls, target_name):
 | 
				
			||||||
 | 
					        target = TARGET_MAP[target_name]
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
 | 
					            if not (len(set(target.supported_toolchains).intersection(
 | 
				
			||||||
 | 
					                    set(["ARM", "ARMC6"]))) > 0):
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            if not apply_supported_whitelist(
 | 
				
			||||||
 | 
					                cls.TOOLCHAIN, cls.POST_BINARY_WHITELIST, target):
 | 
				
			||||||
 | 
					                #ARMC6 is not in the list, but also check for ARM as ARM represents ARMC6 for 5.12/onwards
 | 
				
			||||||
 | 
					                #and still keep cls.TOOLCHAIN as ARMC6 as thats the toolchain we want to use
 | 
				
			||||||
 | 
					                return apply_supported_whitelist(
 | 
				
			||||||
 | 
					                    "ARM", cls.POST_BINARY_WHITELIST, target)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return apply_supported_whitelist(
 | 
				
			||||||
 | 
					                    cls.TOOLCHAIN, cls.POST_BINARY_WHITELIST, target)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class IAR(Makefile):
 | 
					class IAR(Makefile):
 | 
				
			||||||
    """IAR specific makefile target"""
 | 
					    """IAR specific makefile target"""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -315,9 +315,15 @@ class UvisionArmc5(Uvision):
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def is_target_supported(cls, target_name):
 | 
					    def is_target_supported(cls, target_name):
 | 
				
			||||||
        target = TARGET_MAP[target_name]
 | 
					        target = TARGET_MAP[target_name]
 | 
				
			||||||
        if not (set(target.supported_toolchains).intersection(
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
                set(["ARM", "uARM"]))):
 | 
					            #Just check for ARMC5 as ARMC5 must be there irrespective of whether uARM is there or not if the target is staying with ARMC5
 | 
				
			||||||
            return False
 | 
					            if "ARMC5" not in target.supported_toolchains:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if not (set(target.supported_toolchains).intersection(
 | 
				
			||||||
 | 
					                    set(["ARM", "uARM"]))):
 | 
				
			||||||
 | 
					                return False        
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
        if not DeviceCMSIS.check_supported(target_name):
 | 
					        if not DeviceCMSIS.check_supported(target_name):
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
        if "Cortex-A" in target.core:
 | 
					        if "Cortex-A" in target.core:
 | 
				
			||||||
| 
						 | 
					@ -338,9 +344,14 @@ class UvisionArmc6(Uvision):
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def is_target_supported(cls, target_name):
 | 
					    def is_target_supported(cls, target_name):
 | 
				
			||||||
        target = TARGET_MAP[target_name]
 | 
					        target = TARGET_MAP[target_name]
 | 
				
			||||||
        if not (set(target.supported_toolchains).intersection(
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
                set(["ARMC6"]))):
 | 
					            if not len(set(target.supported_toolchains).intersection(
 | 
				
			||||||
            return False
 | 
					                    set(["ARM", "ARMC6"]))) > 0:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if "ARMC6" not in target.supported_toolchains:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
        if not DeviceCMSIS.check_supported(target_name):
 | 
					        if not DeviceCMSIS.check_supported(target_name):
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
        if "Cortex-A" in target.core:
 | 
					        if "Cortex-A" in target.core:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ def find_symbol(toolchain, mapfile, symbol):
 | 
				
			||||||
    HEX = '0x0{,8}(?P<addr>[0-9A-Fa-f]{8})'
 | 
					    HEX = '0x0{,8}(?P<addr>[0-9A-Fa-f]{8})'
 | 
				
			||||||
    if toolchain == "GCC_ARM":
 | 
					    if toolchain == "GCC_ARM":
 | 
				
			||||||
        SYM = re.compile(r'^\s+' + HEX + r'\s+' + symbol + '\r?$')
 | 
					        SYM = re.compile(r'^\s+' + HEX + r'\s+' + symbol + '\r?$')
 | 
				
			||||||
    elif toolchain in ["ARM_STD", "ARM", "ARM_MICRO"]:
 | 
					    elif toolchain in ["ARM_STD", "ARM", "ARM_MICRO", "ARMC6"]:
 | 
				
			||||||
        SYM = re.compile(r'^\s+' + HEX + r'\s+0x[0-9A-Fa-f]{8}\s+Code.*\s+i\.' + symbol + r'\s+.*$')
 | 
					        SYM = re.compile(r'^\s+' + HEX + r'\s+0x[0-9A-Fa-f]{8}\s+Code.*\s+i\.' + symbol + r'\s+.*$')
 | 
				
			||||||
    elif toolchain == "IAR":
 | 
					    elif toolchain == "IAR":
 | 
				
			||||||
        SYM = re.compile(r'^' + symbol + r'\s+' + HEX + '\s+.*$')
 | 
					        SYM = re.compile(r'^' + symbol + r'\s+' + HEX + '\s+.*$')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -103,6 +103,7 @@ def cached(func):
 | 
				
			||||||
# need to be computed differently than regular attributes
 | 
					# need to be computed differently than regular attributes
 | 
				
			||||||
CUMULATIVE_ATTRIBUTES = ['extra_labels', 'macros', 'device_has', 'features', 'components']
 | 
					CUMULATIVE_ATTRIBUTES = ['extra_labels', 'macros', 'device_has', 'features', 'components']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					default_build_tools_metadata = {u'version':0, u'public':False}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_resolution_order(json_data, target_name, order, level=0):
 | 
					def get_resolution_order(json_data, target_name, order, level=0):
 | 
				
			||||||
    """ Return the order in which target descriptions are searched for
 | 
					    """ Return the order in which target descriptions are searched for
 | 
				
			||||||
| 
						 | 
					@ -125,6 +126,9 @@ def get_resolution_order(json_data, target_name, order, level=0):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def target(name, json_data):
 | 
					def target(name, json_data):
 | 
				
			||||||
    """Construct a target object"""
 | 
					    """Construct a target object"""
 | 
				
			||||||
 | 
					    if name.startswith("_"):
 | 
				
			||||||
 | 
					        raise Exception("Invalid target name '%s' specified, target name should not start with '_'" % name)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        resolution_order = get_resolution_order(json_data, name, [])
 | 
					        resolution_order = get_resolution_order(json_data, name, [])
 | 
				
			||||||
    except KeyError as exc:
 | 
					    except KeyError as exc:
 | 
				
			||||||
| 
						 | 
					@ -132,11 +136,13 @@ def target(name, json_data):
 | 
				
			||||||
            "target {} has an incomplete target definition".format(name)
 | 
					            "target {} has an incomplete target definition".format(name)
 | 
				
			||||||
        ), exc)
 | 
					        ), exc)
 | 
				
			||||||
    resolution_order_names = [tgt for tgt, _ in resolution_order]
 | 
					    resolution_order_names = [tgt for tgt, _ in resolution_order]
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    return Target(name=name,
 | 
					    return Target(name=name,
 | 
				
			||||||
                  json_data={key: value for key, value in json_data.items()
 | 
					                  json_data={key: value for key, value in json_data.items()
 | 
				
			||||||
                             if key in resolution_order_names},
 | 
					                             if key in resolution_order_names},
 | 
				
			||||||
                  resolution_order=resolution_order,
 | 
					                  resolution_order=resolution_order,
 | 
				
			||||||
                  resolution_order_names=resolution_order_names)
 | 
					                  resolution_order_names=resolution_order_names,
 | 
				
			||||||
 | 
					                  build_tools_metadata=json_data.get("__build_tools_metadata__", default_build_tools_metadata))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def generate_py_target(new_targets, name):
 | 
					def generate_py_target(new_targets, name):
 | 
				
			||||||
    """Add one or more new target(s) represented as a Python dictionary
 | 
					    """Add one or more new target(s) represented as a Python dictionary
 | 
				
			||||||
| 
						 | 
					@ -151,9 +157,10 @@ def generate_py_target(new_targets, name):
 | 
				
			||||||
    total_data = {}
 | 
					    total_data = {}
 | 
				
			||||||
    total_data.update(new_targets)
 | 
					    total_data.update(new_targets)
 | 
				
			||||||
    total_data.update(base_targets)
 | 
					    total_data.update(base_targets)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    return target(name, total_data)
 | 
					    return target(name, total_data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Target(namedtuple("Target", "name json_data resolution_order resolution_order_names")):
 | 
					class Target(namedtuple("Target", "name json_data resolution_order resolution_order_names build_tools_metadata")):
 | 
				
			||||||
    """An object to represent a Target (MCU/Board)"""
 | 
					    """An object to represent a Target (MCU/Board)"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Default location of the 'targets.json' file
 | 
					    # Default location of the 'targets.json' file
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +30,11 @@ from intelhex import IntelHex
 | 
				
			||||||
Tests for build_api.py
 | 
					Tests for build_api.py
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
make_mock_target = namedtuple(
 | 
					make_mock_target = namedtuple(
 | 
				
			||||||
    "Target", "init_hooks name features core supported_toolchains")
 | 
					    "Target", "init_hooks name features core supported_toolchains build_tools_metadata")
 | 
				
			||||||
 | 
					#Add ARMC5 to the supported_toolchains list as ARMC5 actually refers ARM Compiler 5 and is needed by ARM/ARM_STD classes when it checks for supported toolchains
 | 
				
			||||||
 | 
					TOOLCHAINS.add("ARMC5")
 | 
				
			||||||
 | 
					#Make a mock build_tools_metadata
 | 
				
			||||||
 | 
					mock_build_tools_metadata = {u'version':0, u'public':False}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BuildApiTests(unittest.TestCase):
 | 
					class BuildApiTests(unittest.TestCase):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
| 
						 | 
					@ -92,7 +95,7 @@ class BuildApiTests(unittest.TestCase):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        app_config = "app_config"
 | 
					        app_config = "app_config"
 | 
				
			||||||
        mock_target = make_mock_target(lambda _, __ : None,
 | 
					        mock_target = make_mock_target(lambda _, __ : None,
 | 
				
			||||||
                                       "Junk", [], "Cortex-M3", TOOLCHAINS)
 | 
					                                       "Junk", [], "Cortex-M3", TOOLCHAINS, mock_build_tools_metadata)
 | 
				
			||||||
        mock_config_init.return_value = namedtuple(
 | 
					        mock_config_init.return_value = namedtuple(
 | 
				
			||||||
            "Config", "target has_regions name")(mock_target, False, None)
 | 
					            "Config", "target has_regions name")(mock_target, False, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,7 +114,7 @@ class BuildApiTests(unittest.TestCase):
 | 
				
			||||||
        :return:
 | 
					        :return:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        mock_target = make_mock_target(lambda _, __ : None,
 | 
					        mock_target = make_mock_target(lambda _, __ : None,
 | 
				
			||||||
                                       "Junk", [], "Cortex-M3", TOOLCHAINS)
 | 
					                                       "Junk", [], "Cortex-M3", TOOLCHAINS, mock_build_tools_metadata)
 | 
				
			||||||
        mock_config_init.return_value = namedtuple(
 | 
					        mock_config_init.return_value = namedtuple(
 | 
				
			||||||
            "Config", "target has_regions name")(mock_target, False, None)
 | 
					            "Config", "target has_regions name")(mock_target, False, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,9 +41,17 @@ from tools.notifier.mock import MockNotifier
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALPHABET = [char for char in printable if char not in [u'.', u'/', u'\\']]
 | 
					ALPHABET = [char for char in printable if char not in [u'.', u'/', u'\\']]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Create a global test target
 | 
				
			||||||
 | 
					test_target_map = TARGET_MAP["K64F"]
 | 
				
			||||||
 | 
					#We have to add ARMC5,UARM here to supported_toolchains, otherwise the creation of ARM class would fail as it won't find ARMC5 entry in supported_toolchains
 | 
				
			||||||
 | 
					#We also have to add uARM, cause, ARM_MICRO class would check for both uARM and ARMC5 in supported_toolchains(as ARM_MICRO represents ARMC5+Micro).
 | 
				
			||||||
 | 
					#And do this globally here so all tests can use this
 | 
				
			||||||
 | 
					test_target_map.supported_toolchains.append("ARMC5")
 | 
				
			||||||
 | 
					test_target_map.supported_toolchains.append("uARM")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@patch('tools.toolchains.arm.run_cmd')
 | 
					@patch('tools.toolchains.arm.run_cmd')
 | 
				
			||||||
def test_arm_version_check(_run_cmd):
 | 
					def test_armc5_version_check(_run_cmd):
 | 
				
			||||||
    set_targets_json_location()
 | 
					    set_targets_json_location()
 | 
				
			||||||
    _run_cmd.return_value = ("""
 | 
					    _run_cmd.return_value = ("""
 | 
				
			||||||
    Product: ARM Compiler 5.06
 | 
					    Product: ARM Compiler 5.06
 | 
				
			||||||
| 
						 | 
					@ -51,7 +59,10 @@ def test_arm_version_check(_run_cmd):
 | 
				
			||||||
    Tool: armcc [4d3621]
 | 
					    Tool: armcc [4d3621]
 | 
				
			||||||
    """, "", 0)
 | 
					    """, "", 0)
 | 
				
			||||||
    notifier = MockNotifier()
 | 
					    notifier = MockNotifier()
 | 
				
			||||||
    toolchain = TOOLCHAIN_CLASSES["ARM"](TARGET_MAP["K64F"], notify=notifier)
 | 
					    target_map = TARGET_MAP["K64F"]
 | 
				
			||||||
 | 
					    #We have to add ARMC5 here to supported_toolchains, otherwise the creation of ARM class would fail as it wont find ARMC5 entry in supported_toolchains
 | 
				
			||||||
 | 
					    target_map.supported_toolchains.append("ARMC5")
 | 
				
			||||||
 | 
					    toolchain = TOOLCHAIN_CLASSES["ARM"](target_map, notify=notifier)
 | 
				
			||||||
    toolchain.version_check()
 | 
					    toolchain.version_check()
 | 
				
			||||||
    assert notifier.messages == []
 | 
					    assert notifier.messages == []
 | 
				
			||||||
    _run_cmd.return_value = ("""
 | 
					    _run_cmd.return_value = ("""
 | 
				
			||||||
| 
						 | 
					@ -69,6 +80,20 @@ def test_arm_version_check(_run_cmd):
 | 
				
			||||||
    toolchain.version_check()
 | 
					    toolchain.version_check()
 | 
				
			||||||
    assert len(notifier.messages) == 1
 | 
					    assert len(notifier.messages) == 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@patch('tools.toolchains.arm.run_cmd')
 | 
				
			||||||
 | 
					def test_armc6_version_check(_run_cmd):
 | 
				
			||||||
 | 
					    set_targets_json_location()
 | 
				
			||||||
 | 
					    notifier = MockNotifier()
 | 
				
			||||||
 | 
					    print(TARGET_MAP["K64F"])
 | 
				
			||||||
 | 
					    toolchain = TOOLCHAIN_CLASSES["ARMC6"](TARGET_MAP["K64F"], notify=notifier)
 | 
				
			||||||
 | 
					    print(toolchain)
 | 
				
			||||||
 | 
					    _run_cmd.return_value = ("""
 | 
				
			||||||
 | 
					    Product: ARM Compiler 6.11 Professional
 | 
				
			||||||
 | 
					    Component: ARM Compiler 6.11
 | 
				
			||||||
 | 
					    Tool: armclang [5d3b4200]
 | 
				
			||||||
 | 
					    """, "", 0)
 | 
				
			||||||
 | 
					    toolchain.version_check()
 | 
				
			||||||
 | 
					    assert notifier.messages == []   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@patch('tools.toolchains.iar.run_cmd')
 | 
					@patch('tools.toolchains.iar.run_cmd')
 | 
				
			||||||
def test_iar_version_check(_run_cmd):
 | 
					def test_iar_version_check(_run_cmd):
 | 
				
			||||||
| 
						 | 
					@ -141,7 +166,7 @@ def test_toolchain_profile_c(profile, source_file):
 | 
				
			||||||
    set_targets_json_location()
 | 
					    set_targets_json_location()
 | 
				
			||||||
    with patch('os.mkdir') as _mkdir:
 | 
					    with patch('os.mkdir') as _mkdir:
 | 
				
			||||||
        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
					        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
            toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
 | 
					            toolchain = tc_class(test_target_map, build_profile=profile,
 | 
				
			||||||
                                 notify=MockNotifier())
 | 
					                                 notify=MockNotifier())
 | 
				
			||||||
            toolchain.inc_md5 = ""
 | 
					            toolchain.inc_md5 = ""
 | 
				
			||||||
            toolchain.build_dir = ""
 | 
					            toolchain.build_dir = ""
 | 
				
			||||||
| 
						 | 
					@ -173,7 +198,7 @@ def test_toolchain_profile_cpp(profile, source_file):
 | 
				
			||||||
    to_compile = os.path.join(*filename)
 | 
					    to_compile = os.path.join(*filename)
 | 
				
			||||||
    with patch('os.mkdir') as _mkdir:
 | 
					    with patch('os.mkdir') as _mkdir:
 | 
				
			||||||
        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
					        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
            toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
 | 
					            toolchain = tc_class(test_target_map, build_profile=profile,
 | 
				
			||||||
                                 notify=MockNotifier())
 | 
					                                 notify=MockNotifier())
 | 
				
			||||||
            toolchain.inc_md5 = ""
 | 
					            toolchain.inc_md5 = ""
 | 
				
			||||||
            toolchain.build_dir = ""
 | 
					            toolchain.build_dir = ""
 | 
				
			||||||
| 
						 | 
					@ -205,7 +230,7 @@ def test_toolchain_profile_asm(profile, source_file):
 | 
				
			||||||
    to_compile = os.path.join(*filename)
 | 
					    to_compile = os.path.join(*filename)
 | 
				
			||||||
    with patch('os.mkdir') as _mkdir:
 | 
					    with patch('os.mkdir') as _mkdir:
 | 
				
			||||||
        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
					        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
            toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
 | 
					            toolchain = tc_class(test_target_map, build_profile=profile,
 | 
				
			||||||
                                 notify=MockNotifier())
 | 
					                                 notify=MockNotifier())
 | 
				
			||||||
            toolchain.inc_md5 = ""
 | 
					            toolchain.inc_md5 = ""
 | 
				
			||||||
            toolchain.build_dir = ""
 | 
					            toolchain.build_dir = ""
 | 
				
			||||||
| 
						 | 
					@ -225,7 +250,7 @@ def test_toolchain_profile_asm(profile, source_file):
 | 
				
			||||||
                                                               parameter)
 | 
					                                                               parameter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for name, Class in  TOOLCHAIN_CLASSES.items():
 | 
					    for name, Class in  TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
        CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier())
 | 
					        CLS = Class(test_target_map, notify=MockNotifier())
 | 
				
			||||||
        assert name == CLS.name or name ==  LEGACY_TOOLCHAIN_NAMES[CLS.name]
 | 
					        assert name == CLS.name or name ==  LEGACY_TOOLCHAIN_NAMES[CLS.name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@given(fixed_dictionaries({
 | 
					@given(fixed_dictionaries({
 | 
				
			||||||
| 
						 | 
					@ -245,7 +270,7 @@ def test_toolchain_profile_ld(profile, source_file):
 | 
				
			||||||
    with patch('os.mkdir') as _mkdir,\
 | 
					    with patch('os.mkdir') as _mkdir,\
 | 
				
			||||||
         patch('tools.toolchains.mbedToolchain.default_cmd') as _dflt_cmd:
 | 
					         patch('tools.toolchains.mbedToolchain.default_cmd') as _dflt_cmd:
 | 
				
			||||||
        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
					        for _, tc_class in TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
            toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile,
 | 
					            toolchain = tc_class(test_target_map, build_profile=profile,
 | 
				
			||||||
                                 notify=MockNotifier())
 | 
					                                 notify=MockNotifier())
 | 
				
			||||||
            toolchain.RESPONSE_FILES = False
 | 
					            toolchain.RESPONSE_FILES = False
 | 
				
			||||||
            toolchain.inc_md5 = ""
 | 
					            toolchain.inc_md5 = ""
 | 
				
			||||||
| 
						 | 
					@ -264,7 +289,7 @@ def test_toolchain_profile_ld(profile, source_file):
 | 
				
			||||||
                                                               parameter)
 | 
					                                                               parameter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for name, Class in  TOOLCHAIN_CLASSES.items():
 | 
					    for name, Class in  TOOLCHAIN_CLASSES.items():
 | 
				
			||||||
        CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier())
 | 
					        CLS = Class(test_target_map, notify=MockNotifier())
 | 
				
			||||||
        assert name == CLS.name or name ==  LEGACY_TOOLCHAIN_NAMES[CLS.name]
 | 
					        assert name == CLS.name or name ==  LEGACY_TOOLCHAIN_NAMES[CLS.name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -342,9 +342,13 @@ class ARM_STD(ARM):
 | 
				
			||||||
                 build_profile=None, build_dir=None):
 | 
					                 build_profile=None, build_dir=None):
 | 
				
			||||||
        ARM.__init__(self, target, notify, macros, build_dir=build_dir,
 | 
					        ARM.__init__(self, target, notify, macros, build_dir=build_dir,
 | 
				
			||||||
                     build_profile=build_profile)
 | 
					                     build_profile=build_profile)
 | 
				
			||||||
        if not set(("ARM", "uARM")).intersection(set(target.supported_toolchains)):
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
            raise NotSupportedException("ARM/uARM compiler support is required for ARM build")
 | 
					            #check only for ARMC5 because ARM_STD means using ARMC5, and thus supported_toolchains must include ARMC5
 | 
				
			||||||
 | 
					            if "ARMC5" not in target.supported_toolchains:
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM compiler 5 support is required for ARM build")
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if not set(("ARM", "uARM")).intersection(set(target.supported_toolchains)):
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM/uARM compiler support is required for ARM build")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ARM_MICRO(ARM):
 | 
					class ARM_MICRO(ARM):
 | 
				
			||||||
    PATCHED_LIBRARY = False
 | 
					    PATCHED_LIBRARY = False
 | 
				
			||||||
| 
						 | 
					@ -353,13 +357,20 @@ class ARM_MICRO(ARM):
 | 
				
			||||||
                 silent=False, extra_verbose=False, build_profile=None,
 | 
					                 silent=False, extra_verbose=False, build_profile=None,
 | 
				
			||||||
                 build_dir=None):
 | 
					                 build_dir=None):
 | 
				
			||||||
        target.default_toolchain = "uARM"
 | 
					        target.default_toolchain = "uARM"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
 | 
					            #At this point we already know that we want to use ARMC5+Microlib, so check for if they are supported
 | 
				
			||||||
 | 
					            #For, AC6+Microlib we still use ARMC6 class
 | 
				
			||||||
 | 
					            if not set(("ARMC5","uARM")).issubset(set(target.supported_toolchains)):
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM/uARM compiler support is required for ARM build")
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if not set(("ARM", "uARM")).intersection(set(target.supported_toolchains)):
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM/uARM compiler support is required for ARM build")
 | 
				
			||||||
        ARM.__init__(self, target, notify, macros, build_dir=build_dir,
 | 
					        ARM.__init__(self, target, notify, macros, build_dir=build_dir,
 | 
				
			||||||
                     build_profile=build_profile)
 | 
					                    build_profile=build_profile)
 | 
				
			||||||
        if not set(("ARM", "uARM")).intersection(set(target.supported_toolchains)):
 | 
					 | 
				
			||||||
            raise NotSupportedException("ARM/uARM compiler support is required for ARM build")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ARMC6(ARM_STD):
 | 
					class ARMC6(ARM_STD):
 | 
				
			||||||
    OFFICIALLY_SUPPORTED = False
 | 
					    OFFICIALLY_SUPPORTED = True
 | 
				
			||||||
    SHEBANG = "#! armclang -E --target=arm-arm-none-eabi -x c"
 | 
					    SHEBANG = "#! armclang -E --target=arm-arm-none-eabi -x c"
 | 
				
			||||||
    SUPPORTED_CORES = ["Cortex-M0", "Cortex-M0+", "Cortex-M3", "Cortex-M4",
 | 
					    SUPPORTED_CORES = ["Cortex-M0", "Cortex-M0+", "Cortex-M3", "Cortex-M4",
 | 
				
			||||||
                       "Cortex-M4F", "Cortex-M7", "Cortex-M7F", "Cortex-M7FD",
 | 
					                       "Cortex-M4F", "Cortex-M7", "Cortex-M7F", "Cortex-M7FD",
 | 
				
			||||||
| 
						 | 
					@ -378,8 +389,26 @@ class ARMC6(ARM_STD):
 | 
				
			||||||
            raise NotSupportedException(
 | 
					            raise NotSupportedException(
 | 
				
			||||||
                "this compiler does not support the core %s" % target.core)
 | 
					                "this compiler does not support the core %s" % target.core)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not set(("ARM", "ARMC6")).intersection(set(target.supported_toolchains)):
 | 
					        if int(target.build_tools_metadata["version"]) > 0:
 | 
				
			||||||
            raise NotSupportedException("ARM/ARMC6 compiler support is required for ARMC6 build")
 | 
					            if not set(("ARM", "ARMC6", "uARM")).intersection(set(target.supported_toolchains)):
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM/ARMC6 compiler support is required for ARMC6 build")
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            if not set(("ARM", "ARMC6")).intersection(set(target.supported_toolchains)):
 | 
				
			||||||
 | 
					                raise NotSupportedException("ARM/ARMC6 compiler support is required for ARMC6 build")
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        if getattr(target, "default_toolchain", "ARMC6") == "uARM":
 | 
				
			||||||
 | 
					            if "-DMBED_RTOS_SINGLE_THREAD" not in self.flags['common']:
 | 
				
			||||||
 | 
					                self.flags['common'].append("-DMBED_RTOS_SINGLE_THREAD")
 | 
				
			||||||
 | 
					            if "-D__MICROLIB" not in self.flags['common']:
 | 
				
			||||||
 | 
					                self.flags['common'].append("-D__MICROLIB")
 | 
				
			||||||
 | 
					            if "--library_type=microlib" not in self.flags['ld']:
 | 
				
			||||||
 | 
					                self.flags['ld'].append("--library_type=microlib")
 | 
				
			||||||
 | 
					            if "-Wl,--library_type=microlib" not in self.flags['c']:
 | 
				
			||||||
 | 
					                self.flags['c'].append("-Wl,--library_type=microlib")    
 | 
				
			||||||
 | 
					            if "-Wl,--library_type=microlib" not in self.flags['cxx']:
 | 
				
			||||||
 | 
					                self.flags['cxx'].append("-Wl,--library_type=microlib")        
 | 
				
			||||||
 | 
					            if "--library_type=microlib" not in self.flags['asm']:
 | 
				
			||||||
 | 
					                self.flags['asm'].append("--library_type=microlib")            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        core = target.core
 | 
					        core = target.core
 | 
				
			||||||
        if CORE_ARCH[target.core] == 8:
 | 
					        if CORE_ARCH[target.core] == 8:
 | 
				
			||||||
| 
						 | 
					@ -456,7 +485,10 @@ class ARMC6(ARM_STD):
 | 
				
			||||||
        self.elf2bin = join(TOOLCHAIN_PATHS["ARMC6"], "fromelf")
 | 
					        self.elf2bin = join(TOOLCHAIN_PATHS["ARMC6"], "fromelf")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _get_toolchain_labels(self):
 | 
					    def _get_toolchain_labels(self):
 | 
				
			||||||
        return ["ARM", "ARM_STD", "ARMC6"]
 | 
					        if getattr(self.target, "default_toolchain", "ARM") == "uARM":
 | 
				
			||||||
 | 
					            return ["ARM", "ARM_MICRO", "ARMC6"]
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return ["ARM", "ARM_STD", "ARMC6"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def parse_dependencies(self, dep_path):
 | 
					    def parse_dependencies(self, dep_path):
 | 
				
			||||||
        return mbedToolchain.parse_dependencies(self, dep_path)
 | 
					        return mbedToolchain.parse_dependencies(self, dep_path)
 | 
				
			||||||
| 
						 | 
					@ -471,8 +503,13 @@ class ARMC6(ARM_STD):
 | 
				
			||||||
        return ["-include", config_header]
 | 
					        return ["-include", config_header]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_compile_options(self, defines, includes, for_asm=False):
 | 
					    def get_compile_options(self, defines, includes, for_asm=False):
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        opts = ['-D%s' % d for d in defines]
 | 
					        opts = ['-D%s' % d for d in defines]
 | 
				
			||||||
        opts.extend(["-I%s" % i for i in includes if i])
 | 
					        if self.RESPONSE_FILES:
 | 
				
			||||||
 | 
					            opts += ['@{}'.format(self.get_inc_file(includes))]
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            opts += ["-I%s" % i for i in includes if i]
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        config_header = self.get_config_header()
 | 
					        config_header = self.get_config_header()
 | 
				
			||||||
        if config_header:
 | 
					        if config_header:
 | 
				
			||||||
            opts.extend(self.get_config_option(config_header))
 | 
					            opts.extend(self.get_config_option(config_header))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue