File tree Expand file tree Collapse file tree 8 files changed +21
-8
lines changed
libraries/mbed/targets/cmsis
TARGET_STM/TARGET_STM32F4XX Expand file tree Collapse file tree 8 files changed +21
-8
lines changed Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x1FFFFC00) // Vectors positioned at start of RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 uint32_t i ;
1415
1516 // Copy and switch to dynamic vectors if the first time called
16- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
17+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1718 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1819 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1920 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x1FFFF000) // Vectors positioned at start of RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415
1516 // Copy and switch to dynamic vectors if first time called
16- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
17+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1718 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1819 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1920 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Location of vectors in RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415 // Copy and switch to dynamic vectors if first time called
15- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
16+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1617 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1718 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1819 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 33) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Location of vectors in RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415 // Copy and switch to dynamic vectors if first time called
15- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
16+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1617 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1718 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1819 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 41) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Location of vectors in RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415 // Copy and switch to dynamic vectors if first time called
15- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
16+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1617 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1718 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1819 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 88#define NVIC_NUM_VECTORS (16 + 53) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Location of vectors in RAM
1010
11+ // The LPC43xx can boot from multiple memories (internal Flash, external NOR,
12+ // external SPIFI) so we don't know the initial value of VTOR. Thus we use
13+ // a variable to keep track if the vector table was relocated or not
14+ static unsigned char vtor_relocated ;
15+
1116void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1217 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1318 int i ;
1419 // Copy and switch to dynamic vectors if first time called
15- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
20+ if (! vtor_relocated ) {
1621 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1722 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1823 vectors [i ] = old_vectors [i ];
1924 }
2025 SCB -> VTOR = (uint32_t )vectors ;
26+ vtor_relocated = 1 ;
2127 }
2228
2329 vectors [IRQn + 16 ] = vector ;
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Vectors positioned at start of RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415
1516 // Copy and switch to dynamic vectors if first time called
16- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
17+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1718 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1819 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1920 vectors [i ] = old_vectors [i ];
Original file line number Diff line number Diff line change 77
88#define NVIC_NUM_VECTORS (16 + 81) // CORE + MCU Peripherals
99#define NVIC_RAM_VECTOR_ADDRESS (0x20000000) // Location of vectors in RAM
10+ #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash
1011
1112void NVIC_SetVector (IRQn_Type IRQn , uint32_t vector ) {
1213 static volatile uint32_t * vectors = (uint32_t * )NVIC_RAM_VECTOR_ADDRESS ;
1314 int i ;
1415 // Copy and switch to dynamic vectors if first time called
15- if (SCB -> VTOR != NVIC_RAM_VECTOR_ADDRESS ) {
16+ if (SCB -> VTOR == NVIC_FLASH_VECTOR_ADDRESS ) {
1617 uint32_t * old_vectors = (uint32_t * )SCB -> VTOR ;
1718 for (i = 0 ; i < NVIC_NUM_VECTORS ; i ++ ) {
1819 vectors [i ] = old_vectors [i ];
You can’t perform that action at this time.
0 commit comments