-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
85 changed files
with
11,447 additions
and
36 deletions.
There are no files selected for viewing
67 changes: 67 additions & 0 deletions
67
CMSIS/CoreValidation/Layer/Target/CA5/RTE/Device/ARMCA5/ARMCA5.icf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
|
||
/*-Memory Regions-*/ | ||
define symbol __ICFEDIT_region_IROM1_start__ = 0x80000000; | ||
define symbol __ICFEDIT_region_IROM1_end__ = 0x801FFFFF; | ||
define symbol __ICFEDIT_region_IROM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_IROM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM1_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM1_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM3_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM3_end__ = 0x0; | ||
define symbol __ICFEDIT_region_IRAM1_start__ = 0x80200000; | ||
define symbol __ICFEDIT_region_IRAM1_end__ = 0x803FFFFF; | ||
define symbol __ICFEDIT_region_IRAM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_IRAM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM1_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM1_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM3_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM3_end__ = 0x0; | ||
define symbol __ICFEDIT_region_TTB_start__ = 0x80500000; | ||
define symbol __ICFEDIT_region_TTB_end__ = 0x805FFFFF; | ||
|
||
/*-Sizes-*/ | ||
define symbol __ICFEDIT_size_cstack__ = 0x1000; | ||
define symbol __ICFEDIT_size_irqstack__ = 0x100; | ||
define symbol __ICFEDIT_size_fiqstack__ = 0x100; | ||
define symbol __ICFEDIT_size_svcstack__ = 0x100; | ||
define symbol __ICFEDIT_size_abtstack__ = 0x100; | ||
define symbol __ICFEDIT_size_undstack__ = 0x100; | ||
define symbol __ICFEDIT_size_heap__ = 0x8000; | ||
define symbol __ICFEDIT_size_ttb__ = 0x4000; | ||
|
||
define memory mem with size = 4G; | ||
define region IROM_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__] | ||
| mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__]; | ||
define region IRAM_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM1_end__] | ||
| mem:[from __ICFEDIT_region_IRAM2_start__ to __ICFEDIT_region_IRAM2_end__]; | ||
define region ERAM_region = mem:[from __ICFEDIT_region_ERAM1_start__ to __ICFEDIT_region_ERAM1_end__] | ||
| mem:[from __ICFEDIT_region_ERAM2_start__ to __ICFEDIT_region_ERAM2_end__] | ||
| mem:[from __ICFEDIT_region_ERAM3_start__ to __ICFEDIT_region_ERAM3_end__]; | ||
define region TTB_region = mem:[from __ICFEDIT_region_TTB_start__ to __ICFEDIT_region_TTB_end__ ]; | ||
|
||
define block USR_STACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; | ||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { }; | ||
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { }; | ||
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { }; | ||
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { }; | ||
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { }; | ||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; | ||
define block TTB with alignment = 8, size = __ICFEDIT_size_ttb__ { section TTB }; | ||
|
||
do not initialize { section .noinit }; | ||
|
||
initialize by copy { readwrite }; | ||
if (isdefinedsymbol(__USE_DLIB_PERTHREAD)) | ||
{ | ||
// Required in a multi-threaded application | ||
initialize by copy with packing = none { section __DLIB_PERTHREAD }; | ||
} | ||
|
||
place at address mem:__ICFEDIT_region_IROM1_start__ { readonly section RESET }; | ||
place in IROM_region { readonly }; | ||
place in IRAM_region { readwrite, block HEAP, block USR_STACK, block IRQ_STACK, block FIQ_STACK, block SVC_STACK, block ABT_STACK, block UND_STACK }; | ||
place in TTB_region { block TTB }; |
67 changes: 67 additions & 0 deletions
67
CMSIS/CoreValidation/Layer/Target/CA5/RTE/Device/ARMCA5/[email protected]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
|
||
/*-Memory Regions-*/ | ||
define symbol __ICFEDIT_region_IROM1_start__ = 0x80000000; | ||
define symbol __ICFEDIT_region_IROM1_end__ = 0x801FFFFF; | ||
define symbol __ICFEDIT_region_IROM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_IROM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM1_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM1_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM3_start__ = 0x0; | ||
define symbol __ICFEDIT_region_EROM3_end__ = 0x0; | ||
define symbol __ICFEDIT_region_IRAM1_start__ = 0x80200000; | ||
define symbol __ICFEDIT_region_IRAM1_end__ = 0x803FFFFF; | ||
define symbol __ICFEDIT_region_IRAM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_IRAM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM1_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM1_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM2_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM2_end__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM3_start__ = 0x0; | ||
define symbol __ICFEDIT_region_ERAM3_end__ = 0x0; | ||
define symbol __ICFEDIT_region_TTB_start__ = 0x80500000; | ||
define symbol __ICFEDIT_region_TTB_end__ = 0x805FFFFF; | ||
|
||
/*-Sizes-*/ | ||
define symbol __ICFEDIT_size_cstack__ = 0x1000; | ||
define symbol __ICFEDIT_size_irqstack__ = 0x100; | ||
define symbol __ICFEDIT_size_fiqstack__ = 0x100; | ||
define symbol __ICFEDIT_size_svcstack__ = 0x100; | ||
define symbol __ICFEDIT_size_abtstack__ = 0x100; | ||
define symbol __ICFEDIT_size_undstack__ = 0x100; | ||
define symbol __ICFEDIT_size_heap__ = 0x8000; | ||
define symbol __ICFEDIT_size_ttb__ = 0x4000; | ||
|
||
define memory mem with size = 4G; | ||
define region IROM_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__] | ||
| mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__]; | ||
define region IRAM_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM1_end__] | ||
| mem:[from __ICFEDIT_region_IRAM2_start__ to __ICFEDIT_region_IRAM2_end__]; | ||
define region ERAM_region = mem:[from __ICFEDIT_region_ERAM1_start__ to __ICFEDIT_region_ERAM1_end__] | ||
| mem:[from __ICFEDIT_region_ERAM2_start__ to __ICFEDIT_region_ERAM2_end__] | ||
| mem:[from __ICFEDIT_region_ERAM3_start__ to __ICFEDIT_region_ERAM3_end__]; | ||
define region TTB_region = mem:[from __ICFEDIT_region_TTB_start__ to __ICFEDIT_region_TTB_end__ ]; | ||
|
||
define block USR_STACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; | ||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { }; | ||
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { }; | ||
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { }; | ||
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { }; | ||
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { }; | ||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; | ||
define block TTB with alignment = 8, size = __ICFEDIT_size_ttb__ { section TTB }; | ||
|
||
do not initialize { section .noinit }; | ||
|
||
initialize by copy { readwrite }; | ||
if (isdefinedsymbol(__USE_DLIB_PERTHREAD)) | ||
{ | ||
// Required in a multi-threaded application | ||
initialize by copy with packing = none { section __DLIB_PERTHREAD }; | ||
} | ||
|
||
place at address mem:__ICFEDIT_region_IROM1_start__ { readonly section RESET }; | ||
place in IROM_region { readonly }; | ||
place in IRAM_region { readwrite, block HEAP, block USR_STACK, block IRQ_STACK, block FIQ_STACK, block SVC_STACK, block ABT_STACK, block UND_STACK }; | ||
place in TTB_region { block TTB }; |
136 changes: 136 additions & 0 deletions
136
CMSIS/CoreValidation/Layer/Target/CA5/RTE/Device/ARMCA5/[email protected]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
/****************************************************************************** | ||
* @file startup_ARMCA5.c | ||
* @brief CMSIS Device System Source File for Arm Cortex-A5 Device Series | ||
* @version V1.0.1 | ||
* @date 10. January 2021 | ||
******************************************************************************/ | ||
/* | ||
* Copyright (c) 2009-2021 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 <ARMCA5.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__ ((naked, section("RESET"))); | ||
void Reset_Handler (void) __attribute__ ((naked)); | ||
void Default_Handler(void) __attribute__ ((noreturn)); | ||
|
||
/*---------------------------------------------------------------------------- | ||
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 | ||
*----------------------------------------------------------------------------*/ | ||
void Vectors(void) { | ||
__ASM volatile( | ||
"LDR PC, =Reset_Handler \n" | ||
"LDR PC, =Undef_Handler \n" | ||
"LDR PC, =SVC_Handler \n" | ||
"LDR PC, =PAbt_Handler \n" | ||
"LDR PC, =DAbt_Handler \n" | ||
"NOP \n" | ||
"LDR PC, =IRQ_Handler \n" | ||
"LDR PC, =FIQ_Handler \n" | ||
); | ||
} | ||
|
||
/*---------------------------------------------------------------------------- | ||
Reset Handler called on controller reset | ||
*----------------------------------------------------------------------------*/ | ||
void Reset_Handler(void) { | ||
__ASM volatile( | ||
|
||
// Mask interrupts | ||
"CPSID if \n" | ||
|
||
// Put any cores other than 0 to sleep | ||
"MRC p15, 0, R0, c0, c0, 5 \n" // Read MPIDR | ||
"ANDS R0, R0, #3 \n" | ||
"goToSleep: \n" | ||
"WFINE \n" | ||
"BNE goToSleep \n" | ||
|
||
// Reset SCTLR Settings | ||
"MRC p15, 0, R0, c1, c0, 0 \n" // Read CP15 System Control register | ||
"BIC R0, R0, #(0x1 << 12) \n" // Clear I bit 12 to disable I Cache | ||
"BIC R0, R0, #(0x1 << 2) \n" // Clear C bit 2 to disable D Cache | ||
"BIC R0, R0, #0x1 \n" // Clear M bit 0 to disable MMU | ||
"BIC R0, R0, #(0x1 << 11) \n" // Clear Z bit 11 to disable branch prediction | ||
"BIC R0, R0, #(0x1 << 13) \n" // Clear V bit 13 to disable hivecs | ||
"MCR p15, 0, R0, c1, c0, 0 \n" // Write value back to CP15 System Control register | ||
"ISB \n" | ||
|
||
// Configure ACTLR | ||
"MRC p15, 0, r0, c1, c0, 1 \n" // Read CP15 Auxiliary Control Register | ||
"ORR r0, r0, #(1 << 1) \n" // Enable L2 prefetch hint (UNK/WI since r4p1) | ||
"MCR p15, 0, r0, c1, c0, 1 \n" // Write CP15 Auxiliary Control Register | ||
|
||
// Set Vector Base Address Register (VBAR) to point to this application's vector table | ||
"LDR R0, =Vectors \n" | ||
"MCR p15, 0, R0, c12, c0, 0 \n" | ||
|
||
// Setup Stack for each exceptional mode | ||
"CPS #0x11 \n" | ||
"LDR SP, =Image$$FIQ_STACK$$ZI$$Limit \n" | ||
"CPS #0x12 \n" | ||
"LDR SP, =Image$$IRQ_STACK$$ZI$$Limit \n" | ||
"CPS #0x13 \n" | ||
"LDR SP, =Image$$SVC_STACK$$ZI$$Limit \n" | ||
"CPS #0x17 \n" | ||
"LDR SP, =Image$$ABT_STACK$$ZI$$Limit \n" | ||
"CPS #0x1B \n" | ||
"LDR SP, =Image$$UND_STACK$$ZI$$Limit \n" | ||
"CPS #0x1F \n" | ||
"LDR SP, =Image$$ARM_LIB_STACK$$ZI$$Limit \n" | ||
|
||
// Call SystemInit | ||
"BL SystemInit \n" | ||
|
||
// Unmask interrupts | ||
"CPSIE if \n" | ||
|
||
// Call __main | ||
"BL __main \n" | ||
); | ||
} | ||
|
||
/*---------------------------------------------------------------------------- | ||
Default Handler for Exceptions / Interrupts | ||
*----------------------------------------------------------------------------*/ | ||
void Default_Handler(void) { | ||
while(1); | ||
} |
Oops, something went wrong.