bms_asm.lis
来自「mega16 ucos操作系统」· LIS 代码 · 共 621 行 · 第 1/3 页
LIS
621 行
01AA BA93 ST -Y,R27
01AC EA93 ST -Y,R30
01AE FA93 ST -Y,R31
01B0 0FB7 IN R16,SREG ; Save the SREG but with interrupts enabled
01B2 0068 SBR R16,BIT07
01B4 0A93 ST -Y,R16
01B6 0EB7 IN R16,SPH
01B8 0A93 ST -Y,R16
01BA 0DB7 IN R16,SPL
01BC 0A93 ST -Y,R16
01BE
01BE 00910000 LDS R16,_OSIntNesting ; Notify uC/OS-II of ISR
01C2 0395 INC R16 ;
01C4 00930000 STS _OSIntNesting,R16 ;
01C8
01C8 0130 CPI R16,1 ; if (OSIntNesting == 1) {
01CA 31F4 BRNE OSBms_RxISR_1
01CC
01CC E0910000 LDS R30,_OSTCBCur ; OSTCBCur->OSTCBStkPtr = Y
01D0 F0910100 LDS R31,_OSTCBCur+1
01D4 C193 ST Z+,R28
01D6 D193 ST Z+,R29 ; }
01D8
01D8 OSBms_RxISR_1:
01D8
01D8 0E940000 CALL _OSBms_RxISRHandler ; Call uC/OS-Bms's Rx ISR Handler
01DC 0E940000 CALL _OSIntExit ; Notify uC/OS-II about end of ISR
01E0
01E0 0991 LD R16,Y+
01E2 0DBF OUT SPL,R16
01E4 0991 LD R16,Y+
01E6 0EBF OUT SPH,R16
01E8 0991 LD R16,Y+
01EA 0F77 CBR R16,BIT07
01EC 0FBF OUT SREG,R16
01EE F991 LD R31,Y+
01F0 E991 LD R30,Y+
01F2 B991 LD R27,Y+
01F4 A991 LD R26,Y+
01F6 9991 LD R25,Y+
01F8 8991 LD R24,Y+
01FA 7991 LD R23,Y+
01FC 6991 LD R22,Y+
01FE 5991 LD R21,Y+
0200 4991 LD R20,Y+
0202 3991 LD R19,Y+
0204 2991 LD R18,Y+
0206 1991 LD R17,Y+
0208 0991 LD R16,Y+
020A F990 LD R15,Y+
020C E990 LD R14,Y+
020E D990 LD R13,Y+
0210 C990 LD R12,Y+
0212 B990 LD R11,Y+
0214 A990 LD R10,Y+
0216 9990 LD R9,Y+
0218 8990 LD R8,Y+
021A 7990 LD R7,Y+
021C 6990 LD R6,Y+
021E 5990 LD R5,Y+
0220 4990 LD R4,Y+
0222 3990 LD R3,Y+
0224 2990 LD R2,Y+
0226 1990 LD R1,Y+
0228 0990 LD R0,Y+
022A
022A 1895 RETI
022C
022C
022C
022C ;**********************************************************************************************
022C ;* uC/OS-Bms COM Tx ISR
022C ;* void OSBms_UDREISR(void)
022C ;*
022C ;* Description: This function is invoked when a character has been transmitted to the serial port
022C ;*
022C ;* Arguments : none
022C ;*
022C ;* Note(s) : 1) Pseudo code:
022C ;*
022C ;* Save all registers
022C ;* OSIntNesting++
022C ;* if (OSIntNesting == 1) {
022C ;* OSTCBCur->OSTCBStkPtr = SP
022C ;* }
022C ;* OSView_TxHandler();
022C ;* OSIntExit();
022C ;* Restore all registers
022C ;* Return from interrupt;
022C ;**********************************************************************************************
022C
022C _OSBms_UDREISR::
022C
022C 0A92 ST -Y,R0
022E 1A92 ST -Y,R1
0230 2A92 ST -Y,R2
0232 3A92 ST -Y,R3
0234 4A92 ST -Y,R4
0236 5A92 ST -Y,R5
0238 6A92 ST -Y,R6
023A 7A92 ST -Y,R7
023C 8A92 ST -Y,R8
023E 9A92 ST -Y,R9
0240 AA92 ST -Y,R10
0242 BA92 ST -Y,R11
0244 CA92 ST -Y,R12
0246 DA92 ST -Y,R13
0248 EA92 ST -Y,R14
024A FA92 ST -Y,R15
024C 0A93 ST -Y,R16
024E 1A93 ST -Y,R17
0250 2A93 ST -Y,R18
0252 3A93 ST -Y,R19
0254 4A93 ST -Y,R20
0256 5A93 ST -Y,R21
0258 6A93 ST -Y,R22
025A 7A93 ST -Y,R23
025C 8A93 ST -Y,R24
025E 9A93 ST -Y,R25
0260 AA93 ST -Y,R26
0262 BA93 ST -Y,R27
0264 EA93 ST -Y,R30
0266 FA93 ST -Y,R31
0268 0FB7 IN R16,SREG ; Save the SREG but with interrupts enabled
026A 0068 SBR R16,BIT07
026C 0A93 ST -Y,R16
026E 0EB7 IN R16,SPH
0270 0A93 ST -Y,R16
0272 0DB7 IN R16,SPL
0274 0A93 ST -Y,R16
0276
0276 00910000 LDS R16,_OSIntNesting ; Notify uC/OS-II of ISR
027A 0395 INC R16 ;
027C 00930000 STS _OSIntNesting,R16 ;
0280
0280 0130 CPI R16,1 ; if (OSIntNesting == 1) {
0282 31F4 BRNE OSBms_UDREISR_1
0284
0284 E0910000 LDS R30,_OSTCBCur ; OSTCBCur->OSTCBStkPtr = Y
0288 F0910100 LDS R31,_OSTCBCur+1
028C C193 ST Z+,R28
028E D193 ST Z+,R29 ; }
0290
0290 OSBms_UDREISR_1:
0290
0290 0E940000 CALL _OSBms_UDREISRHandler ; Call uC/OS-Bms's UDR empty ISR Handler
0294 0E940000 CALL _OSIntExit ; Notify uC/OS-II about end of ISR
0298
0298 0991 LD R16,Y+
029A 0DBF OUT SPL,R16
029C 0991 LD R16,Y+
029E 0EBF OUT SPH,R16
02A0 0991 LD R16,Y+
02A2 0F77 CBR R16,BIT07
02A4 0FBF OUT SREG,R16
02A6 F991 LD R31,Y+
02A8 E991 LD R30,Y+
02AA B991 LD R27,Y+
02AC A991 LD R26,Y+
02AE 9991 LD R25,Y+
02B0 8991 LD R24,Y+
02B2 7991 LD R23,Y+
02B4 6991 LD R22,Y+
02B6 5991 LD R21,Y+
02B8 4991 LD R20,Y+
02BA 3991 LD R19,Y+
02BC 2991 LD R18,Y+
02BE 1991 LD R17,Y+
02C0 0991 LD R16,Y+
02C2 F990 LD R15,Y+
02C4 E990 LD R14,Y+
02C6 D990 LD R13,Y+
02C8 C990 LD R12,Y+
02CA B990 LD R11,Y+
02CC A990 LD R10,Y+
02CE 9990 LD R9,Y+
02D0 8990 LD R8,Y+
02D2 7990 LD R7,Y+
02D4 6990 LD R6,Y+
02D6 5990 LD R5,Y+
02D8 4990 LD R4,Y+
02DA 3990 LD R3,Y+
02DC 2990 LD R2,Y+
02DE 1990 LD R1,Y+
02E0 0990 LD R0,Y+
02E2
02E2 1895 RETI
02E4
02E4 ;**********************************************************************************************
02E4 ;* INTERRUPT VECTOR TABLE
02E4 ;**********************************************************************************************
02E4
.area OSBms_ISR_Vectors(abs)
.org 9*4 ;Timer0 ISR
0024 0C940000 JMP _OSTickISR
0028
.org 14*4 ;ADC ISR
0038 0C945E00 JMP _OSBms_AdcISR
003C
.org 11*4 ; Rx ISR, Assume UART
002C 0C94BA00 JMP _OSBms_RxISR
0030
.org 13*4
0034 0C941601 JMP _OSBms_UDREISR ;UDR empty ,assume uart
0038
0038
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?