📄 os_cpu_a.lis
字号:
01A6 ; OSIntExit(); Notify uC/OS-II about end of ISR
01A6 ; Restore all registers that were save on the current task's stack:
01A6 ; Use the POP_SP macro to restore the task's hardware stack pointer
01A6 ; Use the POP_SREG macro to restore the SREG register
01A6 ; Use the POP_ALL macro to restore the remaining registers
01A6 ; Return (DO NOT use a RETI instruction);
01A6 ;********************************************************************************************************
01A6
01A6 _OSTickISR::
01A6 0A92 ST -Y,R0
01A8 1A92 ST -Y,R1
01AA 2A92 ST -Y,R2
01AC 3A92 ST -Y,R3
01AE 4A92 ST -Y,R4
01B0 5A92 ST -Y,R5
01B2 6A92 ST -Y,R6
01B4 7A92 ST -Y,R7
01B6 8A92 ST -Y,R8
01B8 9A92 ST -Y,R9
01BA AA92 ST -Y,R10
01BC BA92 ST -Y,R11
01BE CA92 ST -Y,R12
01C0 DA92 ST -Y,R13
01C2 EA92 ST -Y,R14
01C4 FA92 ST -Y,R15
01C6 0A93 ST -Y,R16
01C8 1A93 ST -Y,R17
01CA 2A93 ST -Y,R18
01CC 3A93 ST -Y,R19
01CE 4A93 ST -Y,R20
01D0 5A93 ST -Y,R21
01D2 6A93 ST -Y,R22
01D4 7A93 ST -Y,R23
01D6 8A93 ST -Y,R24
01D8 9A93 ST -Y,R25
01DA AA93 ST -Y,R26
01DC BA93 ST -Y,R27
01DE EA93 ST -Y,R30
01E0 FA93 ST -Y,R31
01E2 0BB7 IN R16,RAMPZ
01E4 0A93 ST -Y,R16
01E6 0FB7 IN R16,SREG ; Save the SREG but with interrupts enabled
01E8 0068 SBR R16,BIT07
01EA 0A93 ST -Y,R16
01EC 0EB7 IN R16,SPH
01EE 0A93 ST -Y,R16
01F0 0DB7 IN R16,SPL
01F2 0A93 ST -Y,R16
01F4
01F4 00910000 LDS R16,_OSIntNesting ; Notify uC/OS-II of ISR
01F8 0395 INC R16 ;
01FA 00930000 STS _OSIntNesting,R16 ;
01FE
01FE 0130 CPI R16,1 ; if (OSIntNesting == 1) {
0200 31F4 BRNE OSTickISR_1
0202
0202 E0910000 LDS R30,_OSTCBCur ; OSTCBCur->OSTCBStkPtr = Y
0206 F0910100 LDS R31,_OSTCBCur+1
020A C193 ST Z+,R28
020C D193 ST Z+,R29 ; }
020E
020E OSTickISR_1:
020E 0E940000 CALL _OSTickISR_Handler ; Handle the tick ISR
0212
0212 0E940000 CALL _OSIntExit ; Notify uC/OS-II about end of ISR
0216
0216 0991 LD R16,Y+
0218 0DBF OUT SPL,R16
021A 0991 LD R16,Y+
021C 0EBF OUT SPH,R16
021E 0991 LD R16,Y+
0220 0FBF OUT SREG,R16
0222 0991 LD R16,Y+
0224 0BBF OUT RAMPZ,R16
0226 F991 LD R31,Y+
0228 E991 LD R30,Y+
022A B991 LD R27,Y+
022C A991 LD R26,Y+
022E 9991 LD R25,Y+
0230 8991 LD R24,Y+
0232 7991 LD R23,Y+
0234 6991 LD R22,Y+
0236 5991 LD R21,Y+
0238 4991 LD R20,Y+
023A 3991 LD R19,Y+
023C 2991 LD R18,Y+
023E 1991 LD R17,Y+
0240 0991 LD R16,Y+
0242 F990 LD R15,Y+
0244 E990 LD R14,Y+
0246 D990 LD R13,Y+
0248 C990 LD R12,Y+
024A B990 LD R11,Y+
024C A990 LD R10,Y+
024E 9990 LD R9,Y+
0250 8990 LD R8,Y+
0252 7990 LD R7,Y+
0254 6990 LD R6,Y+
0256 5990 LD R5,Y+
0258 4990 LD R4,Y+
025A 3990 LD R3,Y+
025C 2990 LD R2,Y+
025E 1990 LD R1,Y+
0260 0990 LD R0,Y+
0262
0262 0895 RET ; Note: RET instead of RETI
0264 ;/*$PAGE*/.
0264 ;********************************************************************************************************
0264 ; Uart0 rx ISR
0264 ;
0264 ; Description : This function is the ISR used to notify uC/OS-II that a system tick has occurred.
0264 ;
0264 ; The following C-like pseudo-code describe the operation being performed in the code below.
0264 ;
0264 ; Save all registers on the current task's stack:
0264 ; Use the PUSH_ALL macro
0264 ; Get the SREG, set Bit #7 and save onto the task's stack using -Y addressing
0264 ; Use the PUSH_SP macro to save the task's hardware stack pointer onto the current task's stack
0264 ; OSIntNesting++;
0264 ; if (OSIntNesting == 1) {
0264 ; OSTCBCur->OSTCBStkPtr = SP
0264 ; }
0264 ; Clear the interrupt; Not needed for the timer we used.
0264 ; Notify uC/OS-II that a tick has occured
0264 ; Notify uC/OS-II about end of ISR
0264 ; Restore all registers that were save on the current task's stack:
0264 ; Use the POP_SP macro to restore the task's hardware stack pointer
0264 ; Use the POP_SREG macro to restore the SREG register
0264 ; Use the POP_ALL macro to restore the remaining registers
0264 ; Return (DO NOT use a RETI instruction);
0264 ;********************************************************************************************************
0264
0264 _uart0_rx_isr::
0264 0A92 ST -Y,R0
0266 1A92 ST -Y,R1
0268 2A92 ST -Y,R2
026A 3A92 ST -Y,R3
026C 4A92 ST -Y,R4
026E 5A92 ST -Y,R5
0270 6A92 ST -Y,R6
0272 7A92 ST -Y,R7
0274 8A92 ST -Y,R8
0276 9A92 ST -Y,R9
0278 AA92 ST -Y,R10
027A BA92 ST -Y,R11
027C CA92 ST -Y,R12
027E DA92 ST -Y,R13
0280 EA92 ST -Y,R14
0282 FA92 ST -Y,R15
0284 0A93 ST -Y,R16
0286 1A93 ST -Y,R17
0288 2A93 ST -Y,R18
028A 3A93 ST -Y,R19
028C 4A93 ST -Y,R20
028E 5A93 ST -Y,R21
0290 6A93 ST -Y,R22
0292 7A93 ST -Y,R23
0294 8A93 ST -Y,R24
0296 9A93 ST -Y,R25
0298 AA93 ST -Y,R26
029A BA93 ST -Y,R27
029C EA93 ST -Y,R30
029E FA93 ST -Y,R31
02A0 0BB7 IN R16,RAMPZ
02A2 0A93 ST -Y,R16
02A4 0FB7 IN R16,SREG ; Save the SREG but with interrupts enabled
02A6 0068 SBR R16,BIT07
02A8 0A93 ST -Y,R16
02AA 0EB7 IN R16,SPH
02AC 0A93 ST -Y,R16
02AE 0DB7 IN R16,SPL
02B0 0A93 ST -Y,R16
02B2
02B2 00910000 LDS R16,_OSIntNesting ; Notify uC/OS-II of ISR
02B6 0395 INC R16 ;
02B8 00930000 STS _OSIntNesting,R16 ;
02BC
02BC 0130 CPI R16,1 ; if (OSIntNesting == 1) {
02BE 31F4 BRNE uart0_rx_isr_1
02C0
02C0 E0910000 LDS R30,_OSTCBCur ; OSTCBCur->OSTCBStkPtr = Y
02C4 F0910100 LDS R31,_OSTCBCur+1
02C8 C193 ST Z+,R28
02CA D193 ST Z+,R29 ; }
02CC
02CC uart0_rx_isr_1:
02CC //CALL _Uart0Rx_Handler ; Handle the tick ISR
02CC
02CC 0E940000 CALL _OSIntExit ; Notify uC/OS-II about end of ISR
02D0
02D0 0991 LD R16,Y+
02D2 0DBF OUT SPL,R16
02D4 0991 LD R16,Y+
02D6 0EBF OUT SPH,R16
02D8 0991 LD R16,Y+
02DA 0FBF OUT SREG,R16
02DC 0991 LD R16,Y+
02DE 0BBF OUT RAMPZ,R16
02E0 F991 LD R31,Y+
02E2 E991 LD R30,Y+
02E4 B991 LD R27,Y+
02E6 A991 LD R26,Y+
02E8 9991 LD R25,Y+
02EA 8991 LD R24,Y+
02EC 7991 LD R23,Y+
02EE 6991 LD R22,Y+
02F0 5991 LD R21,Y+
02F2 4991 LD R20,Y+
02F4 3991 LD R19,Y+
02F6 2991 LD R18,Y+
02F8 1991 LD R17,Y+
02FA 0991 LD R16,Y+
02FC F990 LD R15,Y+
02FE E990 LD R14,Y+
0300 D990 LD R13,Y+
0302 C990 LD R12,Y+
0304 B990 LD R11,Y+
0306 A990 LD R10,Y+
0308 9990 LD R9,Y+
030A 8990 LD R8,Y+
030C 7990 LD R7,Y+
030E 6990 LD R6,Y+
0310 5990 LD R5,Y+
0312 4990 LD R4,Y+
0314 3990 LD R3,Y+
0316 2990 LD R2,Y+
0318 1990 LD R1,Y+
031A 0990 LD R0,Y+
031C
031C 0895 RET ; Note: RET instead of RETI
031E
031E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -