📄 serialisr.lst
字号:
###############################################################################
# #
# IAR Systems ARM Assembler V4.30A/W32 14/Dec/2005 14:41:48 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Source file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\serial\serialISR.s79#
# List file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\binary\List\serialISR.lst#
# Object file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\binary\Obj\serialISR.r79#
# Command line = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\serial\serialISR.s79 #
# -OD:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\binary\Obj\ #
# -s+ -M<> -w+ #
# -LD:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\binary\List\ #
# -t8 --cpu ARM7TDMI --fpu None #
# -IC:\Program Files\IAR Systems\Embedded Workbench 4.0 Kickstart\arm\INC\ #
# -ID:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IAR\..\..\Source\portable\IAR\STR71x\ #
# #
###############################################################################
1 00000000 RSEG ICODE:CODE
2 00000000 CODE32
3 00000000
4 00000000 EXTERN vSerialISR
5 00000000 PUBLIC vSerialISREntry
6 00000000
7 00000000 ; Wrapper for the serial port interrupt service
routine. This can cause a
8 00000000 ; context switch so requires an assembly
wrapper.
9 00000000
10 00000000 ; Defines the portSAVE_CONTEXT and portRESTORE_C
ONTEXT macros.
11 00000000 #include "ISR_Support.h"
12 00000000
13 00000000 vSerialISREntry:
14 00000000
15 00000000 portSAVE_CONTEXT
; Save the context of the current task.
15.1 00000000
15.2 00000000 ; Push R0 as we are going to use the
register.
15.3 00000000 01002DE9 STMDB SP!, {R0}
15.4 00000004
15.5 00000004 ; Set R0 to point to the task stack
pointer.
15.6 00000004 00204DE9 STMDB SP, {SP}^
15.7 00000008 04D04DE2 SUB SP, SP, #4
15.8 0000000C 0100BDE8 LDMIA SP!, {R0}
15.9 00000010
15.10 00000010 ; Push the return address onto the
stack.
15.11 00000010 004020E9 STMDB R0!, {LR}
15.12 00000014
15.13 00000014 ; Now we have saved LR we can use it
instead of R0.
15.14 00000014 00E0A0E1 MOV LR, R0
15.15 00000018
15.16 00000018 ; Pop R0 so we can save it onto the
system mode stack.
15.17 00000018 0100BDE8 LDMIA SP!, {R0}
15.18 0000001C
15.19 0000001C ; Push all the system mode registers
onto the task stack.
15.20 0000001C FF7F4EE9 STMDB LR, {R0-LR}^
15.21 00000020 3CE04EE2 SUB LR, LR, #60
15.22 00000024
15.23 00000024 ; Push the SPSR onto the task stack.
15.24 00000024 00004FE1 MRS R0, SPSR
15.25 00000028 01002EE9 STMDB LR!, {R0}
15.26 0000002C
15.27 0000002C 44009FE5 LDR R0, =ulCriticalNesting
15.28 00000030 000090E5 LDR R0, [R0]
15.29 00000034 01002EE9 STMDB LR!, {R0}
15.30 00000038
15.31 00000038 ; Store the new top of stack for the
task.
15.32 00000038 3C109FE5 LDR R1, =pxCurrentTCB
15.33 0000003C 000091E5 LDR R0, [R1]
15.34 00000040 00E080E5 STR LR, [R0]
15.35 00000044
15.36 00000044 ENDM
16 00000044
17 00000044 ........ bl vSerialISR
; Call the ISR routine.
18 00000048
19 00000048 portRESTORE_CONTEXT
; Restore the context of the current task
-
19.1 00000048
19.2 00000048 ; Set the LR to the task stack.
19.3 00000048 2C109FE5 LDR R1, =pxCurrentTCB
19.4 0000004C 000091E5 LDR R0, [R1]
19.5 00000050 00E090E5 LDR LR, [R0]
19.6 00000054
19.7 00000054 ; The critical nesting depth is the
first item on the stack.
19.8 00000054 ; Load it into the ulCriticalNesting
variable.
19.9 00000054 1C009FE5 LDR R0, =ulCriticalNesting
19.10 00000058 0200BEE8 LDMFD LR!, {R1}
19.11 0000005C 001080E5 STR R1, [R0]
19.12 00000060
19.13 00000060 ; Get the SPSR from the stack.
19.14 00000060 0100BEE8 LDMFD LR!, {R0}
19.15 00000064 00F06FE1 MSR SPSR_cxsf, R0
19.16 00000068
19.17 00000068 ; Restore all system mode registers for
the task.
19.18 00000068 FF7FDEE8 LDMFD LR, {R0-R14}^
19.19 0000006C 0000A0E1 NOP
19.20 00000070
19.21 00000070 ; Restore the return address.
19.22 00000070 3CE09EE5 LDR LR, [LR, #+60]
19.23 00000074
19.24 00000074 ; And return - correcting the offset in
the LR to obtain the
19.25 00000074 ; correct address.
19.26 00000074 04F05EE2 SUBS PC, LR, #4
19.27 00000078
19.28 00000078 ENDM
20 00000078
; which may be different to the
task that
21 00000078
; was interrupted.
22 00000078
23 00000078 END
23.1 00000078 TABLE
23.2 00000078 ........ Reference on line 15,19
23.3 0000007C ........ Reference on line 15,19
23.4 00000080 END (including table)
##############################
# CRC:BAA8 #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 128 #
##############################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -