summaryrefslogtreecommitdiff
path: root/ports/arm11/gnu/src/tx_thread_interrupt_control.S
diff options
context:
space:
mode:
Diffstat (limited to 'ports/arm11/gnu/src/tx_thread_interrupt_control.S')
-rw-r--r--ports/arm11/gnu/src/tx_thread_interrupt_control.S115
1 files changed, 115 insertions, 0 deletions
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_control.S b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
new file mode 100644
index 00000000..4cf397c9
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
@@ -0,0 +1,115 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h" */
+@
+
+INT_MASK = 0x03F
+
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_control for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_interrupt_control
+$_tx_thread_interrupt_control:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@UINT _tx_thread_interrupt_control(UINT new_posture)
+@{
+ .global _tx_thread_interrupt_control
+ .type _tx_thread_interrupt_control,function
+_tx_thread_interrupt_control:
+@
+@ /* Pickup current interrupt lockout posture. */
+@
+ MRS r3, CPSR @ Pickup current CPSR
+ MOV r2, #INT_MASK @ Build interrupt mask
+ AND r1, r3, r2 @ Clear interrupt lockout bits
+ ORR r1, r1, r0 @ Or-in new interrupt lockout bits
+@
+@ /* Apply the new interrupt posture. */
+@
+ MSR CPSR, r1 @ Setup new CPSR
+ BIC r0, r3, r2 @ Return previous interrupt mask
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+