main.lst
来自「ATMEGA128的PCF8536驱动程序」· LST 代码 · 共 1,956 行 · 第 1/5 页
LST
1,956 行
(0414) #if USEUART0
(0415) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0416) void uart0_rx_isr(void)
(0417) {
(0418) unsigned char status,data;
(0419) siocirqueue *RTbuf;
(0420) RTbuf=&RTbuf_UART0;
03C8 EC40 LDI R20,0xC0
03C9 E051 LDI R21,1
(0421) // CLI();
(0422) status=UCSR0A;
03CA B0AB IN R10,0x0B
(0423) data=UDR0;
03CB B16C IN R22,0x0C
(0424) //WDR(); //喂狗
(0425) if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
03CC 2D8A MOV R24,R10
03CD 7188 ANDI R24,0x18
03CE F009 BEQ 0x03D0
03CF C022 RJMP 0x03F2
(0426) {
(0427) if(RTbuf->R_count<RBUF_SIZE){
03D0 01FA MOVW R30,R20
03D1 8182 LDD R24,Z+2
03D2 3684 CPI R24,0x64
03D3 F008 BCS 0x03D5
03D4 C01A RJMP 0x03EF
(0428) RTbuf->R_count++;
03D5 01CA MOVW R24,R20
03D6 9602 ADIW R24,2
03D7 01FC MOVW R30,R24
03D8 8180 LDD R24,Z+0
03D9 5F8F SUBI R24,0xFF
03DA 8380 STD Z+0,R24
(0429) RTbuf->R_buf[RTbuf->R_rear]=data;
03DB 01CA MOVW R24,R20
03DC 9604 ADIW R24,4
03DD 01FA MOVW R30,R20
03DE 81E1 LDD R30,Z+1
03DF 27FF CLR R31
03E0 0FE8 ADD R30,R24
03E1 1FF9 ADC R31,R25
03E2 8360 STD Z+0,R22
(0430) RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
03E3 01CA MOVW R24,R20
03E4 9601 ADIW R24,1
03E5 011C MOVW R2,R24
03E6 E614 LDI R17,0x64
03E7 01FC MOVW R30,R24
03E8 8100 LDD R16,Z+0
03E9 5F0F SUBI R16,0xFF
03EA 940E04B8 CALL mod8u
03EC 01F1 MOVW R30,R2
03ED 8300 STD Z+0,R16
(0431) }
03EE C003 RJMP 0x03F2
(0432) else
(0433) {
(0434) RTbuf->R_overflow=1;
03EF E081 LDI R24,1
03F0 01FA MOVW R30,R20
03F1 8383 STD Z+3,R24
(0435) }
(0436) }
03F2 940E04D3 CALL pop_gset3
03F4 9029 LD R2,Y+
03F5 BE2F OUT 0x3F,R2
03F6 91F9 LD R31,Y+
03F7 91E9 LD R30,Y+
03F8 9199 LD R25,Y+
03F9 9189 LD R24,Y+
03FA 9119 LD R17,Y+
03FB 9109 LD R16,Y+
03FC 9039 LD R3,Y+
03FD 9029 LD R2,Y+
03FE 9518 RETI
_uart0_tx_isr:
RTbuf --> R20
03FF 922A ST R2,-Y
0400 923A ST R3,-Y
0401 930A ST R16,-Y
0402 931A ST R17,-Y
0403 938A ST R24,-Y
0404 939A ST R25,-Y
0405 93EA ST R30,-Y
0406 93FA ST R31,-Y
0407 B62F IN R2,0x3F
0408 922A ST R2,-Y
0409 940E04E1 CALL push_gset1
(0437) //SEI();
(0438) }
(0439)
(0440) #pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
(0441) void uart0_tx_isr(void)
(0442) {
(0443) //CLI();
(0444) siocirqueue *RTbuf;
(0445) //WDR(); //喂狗
(0446) RTbuf=&RTbuf_UART0;
040B EC40 LDI R20,0xC0
040C E051 LDI R21,1
(0447) if (RTbuf->T_count>0){
040D 2422 CLR R2
040E 01FA MOVW R30,R20
040F 59E6 SUBI R30,0x96
0410 4FFF SBCI R31,0xFF
0411 8030 LDD R3,Z+0
0412 1423 CP R2,R3
0413 F008 BCS 0x0415
0414 C020 RJMP 0x0435
(0448) UDR0=RTbuf->T_buf[RTbuf->T_front];
0415 01CA MOVW R24,R20
0416 5985 SUBI R24,0x95
0417 4F9F SBCI R25,0xFF
0418 01FA MOVW R30,R20
0419 59E8 SUBI R30,0x98
041A 4FFF SBCI R31,0xFF
041B 81E0 LDD R30,Z+0
041C 27FF CLR R31
041D 0FE8 ADD R30,R24
041E 1FF9 ADC R31,R25
041F 8020 LDD R2,Z+0
0420 B82C OUT 0x0C,R2
(0449) RTbuf->T_count--;
0421 01CA MOVW R24,R20
0422 5986 SUBI R24,0x96
0423 4F9F SBCI R25,0xFF
0424 01FC MOVW R30,R24
0425 8180 LDD R24,Z+0
0426 5081 SUBI R24,1
0427 8380 STD Z+0,R24
(0450) RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
0428 01CA MOVW R24,R20
0429 5988 SUBI R24,0x98
042A 4F9F SBCI R25,0xFF
042B 011C MOVW R2,R24
042C E614 LDI R17,0x64
042D 01FC MOVW R30,R24
042E 8100 LDD R16,Z+0
042F 5F0F SUBI R16,0xFF
0430 940E04B8 CALL mod8u
0432 01F1 MOVW R30,R2
0433 8300 STD Z+0,R16
(0451) }
0434 C005 RJMP 0x043A
(0452) else RTbuf->T_disabled=1;
FILE: <library>
0435 E081 LDI R24,1
0436 01FA MOVW R30,R20
0437 53E1 SUBI R30,0x31
0438 4FFF SBCI R31,0xFF
0439 8380 STD Z+0,R24
043A 940E04E4 CALL pop_gset1
043C 9029 LD R2,Y+
043D BE2F OUT 0x3F,R2
043E 91F9 LD R31,Y+
043F 91E9 LD R30,Y+
0440 9199 LD R25,Y+
0441 9189 LD R24,Y+
0442 9119 LD R17,Y+
0443 9109 LD R16,Y+
0444 9039 LD R3,Y+
0445 9029 LD R2,Y+
0446 9518 RETI
div32u:
0447 94E8 BCLR 6
0448 C001 RJMP 0x044A
mod32u:
0449 9468 BSET 6
044A D02F RCALL long_div_prolog
044B 24CC CLR R12
044C C008 RJMP 0x0455
div32s:
044D 94E8 BCLR 6
044E C001 RJMP 0x0450
mod32s:
044F 9468 BSET 6
0450 D029 RCALL long_div_prolog
0451 FD37 SBRC R19,7
0452 D053 RCALL neg_R16_R19
0453 FDB7 SBRC R27,7
0454 D05A RCALL neg_R24_R27
0455 2477 CLR R7
0456 2488 CLR R8
0457 2499 CLR R9
0458 24AA CLR R10
0459 24BB CLR R11
045A D041 RCALL tst_R16_R19
045B F0C1 BEQ 0x0474
045C D044 RCALL tst_R24_R27
045D F0B1 BEQ 0x0474
045E E2E8 LDI R30,0x28
045F 0F00 LSL R16
0460 1F11 ROL R17
0461 1F22 ROL R18
0462 1F33 ROL R19
0463 1C77 ROL R7
0464 1C88 ROL R8
0465 1C99 ROL R9
0466 1CAA ROL R10
0467 1CBB ROL R11
0468 1688 CP R8,R24
0469 0699 CPC R9,R25
046A 06AA CPC R10,R26
046B 06BB CPC R11,R27
046C F028 BCS 0x0472
046D 1A88 SUB R8,R24
046E 0A99 SBC R9,R25
046F 0AAA SBC R10,R26
0470 0ABB SBC R11,R27
0471 9503 INC R16
0472 95EA DEC R30
0473 F759 BNE 0x045F
0474 F426 BRTC 0x0479
0475 2D08 MOV R16,R8
0476 2D19 MOV R17,R9
0477 2D2A MOV R18,R10
0478 2D3B MOV R19,R11
0479 C013 RJMP long_div_epilog
long_div_prolog:
047A 927A ST R7,-Y
047B 928A ST R8,-Y
047C 929A ST R9,-Y
047D 92AA ST R10,-Y
047E 92BA ST R11,-Y
047F 92CA ST R12,-Y
0480 93EA ST R30,-Y
0481 938A ST R24,-Y
0482 939A ST R25,-Y
0483 93AA ST R26,-Y
0484 93BA ST R27,-Y
0485 858B LDD R24,Y+11
0486 859C LDD R25,Y+12
0487 85AD LDD R26,Y+13
0488 85BE LDD R27,Y+14
0489 2EC3 MOV R12,R19
048A F00E BRTS 0x048C
048B 26CB EOR R12,R27
048C 9508 RET
long_div_epilog:
048D FCC7 SBRC R12,7
048E D017 RCALL neg_R16_R19
048F 91B9 LD R27,Y+
0490 91A9 LD R26,Y+
0491 9199 LD R25,Y+
0492 9189 LD R24,Y+
0493 91E9 LD R30,Y+
0494 90C9 LD R12,Y+
0495 90B9 LD R11,Y+
0496 90A9 LD R10,Y+
0497 9099 LD R9,Y+
0498 9089 LD R8,Y+
0499 9079 LD R7,Y+
049A 9624 ADIW R28,4
049B 9508 RET
tst_R16_R19:
049C 2FE0 MOV R30,R16
049D 2BE1 OR R30,R17
049E 2BE2 OR R30,R18
049F 2BE3 OR R30,R19
04A0 9508 RET
tst_R24_R27:
04A1 2FE8 MOV R30,R24
04A2 2BE9 OR R30,R25
04A3 2BEA OR R30,R26
04A4 2BEB OR R30,R27
04A5 9508 RET
neg_R16_R19:
04A6 9500 COM R16
04A7 9510 COM R17
04A8 9520 COM R18
04A9 9530 COM R19
04AA 5F0F SUBI R16,0xFF
04AB 4F1F SBCI R17,0xFF
04AC 4F2F SBCI R18,0xFF
04AD 4F3F SBCI R19,0xFF
04AE 9508 RET
neg_R24_R27:
04AF 9580 COM R24
04B0 9590 COM R25
04B1 95A0 COM R26
04B2 95B0 COM R27
04B3 5F8F SUBI R24,0xFF
04B4 4F9F SBCI R25,0xFF
04B5 4FAF SBCI R26,0xFF
04B6 4FBF SBCI R27,0xFF
04B7 9508 RET
mod8u:
04B8 9468 BSET 6
04B9 C001 RJMP xdiv8u
div8u:
04BA 94E8 BCLR 6
xdiv8u:
04BB 932A ST R18,-Y
04BC 92FA ST R15,-Y
04BD 92EA ST R14,-Y
04BE 24FF CLR R15
04BF 24EE CLR R14
04C0 E120 LDI R18,0x10
04C1 0F00 LSL R16
04C2 1CFF ROL R15
04C3 1CEE ROL R14
04C4 16E1 CP R14,R17
04C5 F010 BCS 0x04C8
04C6 1AE1 SUB R14,R17
04C7 9503 INC R16
04C8 952A DEC R18
04C9 F7B9 BNE 0x04C1
04CA F40E BRTC 0x04CC
04CB 2D0E MOV R16,R14
04CC 90E9 LD R14,Y+
04CD 90F9 LD R15,Y+
04CE 9129 LD R18,Y+
04CF 9508 RET
pop_gset2:
04D0 E0E2 LDI R30,2
04D1 940C04E5 JMP pop
pop_gset3:
04D3 E0E4 LDI R30,4
04D4 940C04E5 JMP pop
pop_gset4:
04D6 E0E8 LDI R30,0x8
04D7 940C04E5 JMP pop
push_gset5:
04D9 92FA ST R15,-Y
04DA 92EA ST R14,-Y
push_gset4:
04DB 92DA ST R13,-Y
04DC 92CA ST R12,-Y
push_gset3:
04DD 92BA ST R11,-Y
04DE 92AA ST R10,-Y
push_gset2:
04DF 937A ST R23,-Y
04E0 936A ST R22,-Y
push_gset1:
04E1 935A ST R21,-Y
04E2 934A ST R20,-Y
04E3 9508 RET
pop_gset1:
04E4 E0E1 LDI R30,1
pop:
04E5 9149 LD R20,Y+
04E6 9159 LD R21,Y+
04E7 FDE0 SBRC R30,0
04E8 9508 RET
04E9 9169 LD R22,Y+
04EA 9179 LD R23,Y+
04EB FDE1 SBRC R30,1
04EC 9508 RET
04ED 90A9 LD R10,Y+
04EE 90B9 LD R11,Y+
04EF FDE2 SBRC R30,2
04F0 9508 RET
04F1 90C9 LD R12,Y+
04F2 90D9 LD R13,Y+
04F3 FDE3 SBRC R30,3
04F4 9508 RET
04F5 90E9 LD R14,Y+
04F6 90F9 LD R15,Y+
04F7 9508 RET
asgncblk:
04F8 93AA ST R26,-Y
04F9 93BA ST R27,-Y
04FA 93EA ST R30,-Y
04FB 93FA ST R31,-Y
04FC 920A ST R0,-Y
04FD 81AF LDD R26,Y+7
04FE 85B8 LDD R27,Y+8
04FF 81ED LDD R30,Y+5
0500 81FE LDD R31,Y+6
0501 3000 CPI R16,0
0502 0701 CPC R16,R17
0503 F031 BEQ 0x050A
0504 95C8 LPM
0505 920D ST R0,X+
0506 9631 ADIW R30,1
0507 5001 SUBI R16,1
0508 4010 SBCI R17,0
0509 CFF7 RJMP 0x0501
050A 9009 LD R0,Y+
050B 91F9 LD R31,Y+
050C 91E9 LD R30,Y+
050D 91B9 LD R27,Y+
050E 91A9 LD R26,Y+
050F 9624 ADIW R28,4
0510 9508 RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?