summaryrefslogtreecommitdiff
path: root/ports/cortex_m23/gnu/src
diff options
context:
space:
mode:
Diffstat (limited to 'ports/cortex_m23/gnu/src')
-rw-r--r--ports/cortex_m23/gnu/src/tx_initialize_low_level.S17
-rw-r--r--ports/cortex_m23/gnu/src/tx_thread_context_restore.S9
-rw-r--r--ports/cortex_m23/gnu/src/tx_thread_context_save.S9
-rw-r--r--ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S2
-rw-r--r--ports/cortex_m23/gnu/src/tx_thread_system_return.S2
5 files changed, 23 insertions, 16 deletions
diff --git a/ports/cortex_m23/gnu/src/tx_initialize_low_level.S b/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
index ba092253..9efac65f 100644
--- a/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
+++ b/ports/cortex_m23/gnu/src/tx_initialize_low_level.S
@@ -8,6 +8,7 @@
*
* SPDX-License-Identifier: MIT
**************************************************************************/
+// Portions of this file were generated with AI assistance.
/**************************************************************************/
@@ -83,15 +84,10 @@ _tx_initialize_low_level:
/* Set base of available memory to end of non-initialised RAM area. */
LDR r0, =_tx_initialize_unused_memory // Build address of unused memory pointer
- LDR r1, =Image$$ARM_LIB_STACK$$ZI$$Limit // Build first free address
+ LDR r1, =__RAM_segment_used_end__ // Build first free address
ADDS r1, r1, #4 //
STR r1, [r0] // Setup first unused memory pointer
- /* Setup Vector Table Offset Register. */
- LDR r0, =0xE000ED08 // Build address of NVIC registers
- LDR r1, =__Vectors // Pickup address of vector table
- STR r1, [r0] // Set vector table address
-
// /* Enable the cycle count register. */
//
// LDR r0, =0xE0001000 // Build address of DWT register
@@ -99,14 +95,11 @@ _tx_initialize_low_level:
// ORR r1, r1, #1 // Set the CYCCNTENA bit
// STR r1, [r0] // Enable the cycle count register
- /* Set system stack pointer from vector value. */
- LDR r0, =_tx_thread_system_stack_ptr // Build address of system stack pointer
- LDR r1, =__Vectors // Pickup address of vector table
- LDR r1, [r1] // Pickup reset stack pointer
- STR r1, [r0] // Save system stack pointer
-
/* Configure SysTick. */
LDR r0, =0xE000E000 // Build address of NVIC registers
+ MOVS r1, #0 // Build value for SysTick reset
+ STR r1, [r0, #0x10] // Reset SysTick Control
+ STR r1, [r0, #0x18] // Reset SysTick Counter Value
LDR r1, =SYSTICK_CYCLES
STR r1, [r0, #0x14] // Setup SysTick Reload Value
MOVW r1, #0x7 // Build SysTick Control Enable Value
diff --git a/ports/cortex_m23/gnu/src/tx_thread_context_restore.S b/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
index 6f2b453c..e8ddac05 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_context_restore.S
@@ -73,7 +73,14 @@ _tx_thread_context_restore:
/* Call the ISR exit function to indicate an ISR is complete. */
PUSH {r0, lr} // Save return address
BL _tx_execution_isr_exit // Call the ISR exit function
- POP {r0, lr} // Recover return address
+ POP {r0, r1} // Recover r0 and the return address
+ MOV lr, r1 // This core cannot POP into LR: the
+ // 16-bit Thumb POP takes r0-r7 and
+ // pc only. MOV to a high register
+ // is permitted, so restore LR from
+ // a scratch register. r1 is free --
+ // the BL above may clobber r0-r3,
+ // which is why r0 is saved at all.
#endif
BX lr
diff --git a/ports/cortex_m23/gnu/src/tx_thread_context_save.S b/ports/cortex_m23/gnu/src/tx_thread_context_save.S
index 84bf9908..136c6391 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_context_save.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_context_save.S
@@ -73,7 +73,14 @@ _tx_thread_context_save:
/* Call the ISR enter function to indicate an ISR is starting. */
PUSH {r0, lr} // Save return address
BL _tx_execution_isr_enter // Call the ISR enter function
- POP {r0, lr} // Recover return address
+ POP {r0, r1} // Recover r0 and the return address
+ MOV lr, r1 // This core cannot POP into LR: the
+ // 16-bit Thumb POP takes r0-r7 and
+ // pc only. MOV to a high register
+ // is permitted, so restore LR from
+ // a scratch register. r1 is free --
+ // the BL above may clobber r0-r3,
+ // which is why r0 is saved at all.
#endif
BX lr
diff --git a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
index 48aec578..81a1cb2f 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
@@ -70,7 +70,7 @@ _tx_thread_secure_stack_initialize:
SVC 3
CPSID i // Disable interrupts
#else
- MOV r0, #0xFF // Feature not enabled
+ MOVS r0, #0xFF // Feature not enabled
#endif
BX lr
.end
diff --git a/ports/cortex_m23/gnu/src/tx_thread_system_return.S b/ports/cortex_m23/gnu/src/tx_thread_system_return.S
index ca5408d7..a486d8b1 100644
--- a/ports/cortex_m23/gnu/src/tx_thread_system_return.S
+++ b/ports/cortex_m23/gnu/src/tx_thread_system_return.S
@@ -9,7 +9,7 @@
* SPDX-License-Identifier: MIT
**************************************************************************/
-// Some portions generated by Gemini (Gemini 2.0 Flash).
+// Portions of this file were generated with AI assistance.
/**************************************************************************/