📄 timers.lss
字号:
Print16RegPre:
rcall PutCR
530: 4f d0 rcall .+158 ; 0x5d0
mov p1l, Yl
532: 8c 2f mov r24, r28
mov p1h, Yh
534: 9d 2f mov r25, r29
rcall PutHexWord
536: e0 d0 rcall .+448 ; 0x6f8
rjmp PutSpace
538: 4d c0 rjmp .+154 ; 0x5d4
0000053a <Print16Reg>:
Print16Reg:
rcall _PrintString
53a: 4e d0 rcall .+156 ; 0x5d8
ldi Zl, 16
53c: e0 e1 ldi r30, 0x10 ; 16
mov R1, Zl
53e: 1e 2e mov r1, r30
00000540 <p16r0>:
p16r0:
ld p1l, Y+
540: 89 91 ld r24, Y+
rcall PutHexByte
542: dc d0 rcall .+440 ; 0x6fc
rcall PutSpace
544: 47 d0 rcall .+142 ; 0x5d4
dec R1
546: 1a 94 dec r1
brne p16r0
548: d9 f7 brne .-10 ; 0x540
ret
54a: 08 95 ret
0000054c <GetByteWord>:
_ENDFUNC
;-----------------------------------------------
; unsigned GetByteWord(void *)
;
; PASSED: p1 = address
; RETURNS: r1 = data
; USES: MonFlags
;
_FUNCTION(GetByteWord)
GetByteWord:
sbrc MonFlags, EEFLAG
54c: b1 fc sbrc r11, 1
rjmp gbwEEPROM
54e: 08 c0 rjmp .+16 ; 0x560
mov Zl, TempWl
550: ec 2d mov r30, r12
mov Zh, TempWh
552: fd 2d mov r31, r13
ldd r1l, Z+0
554: 80 81 ld r24, Z
sbrs MonFlags, WORDFLAG
556: b0 fe sbrs r11, 0
ret
558: 08 95 ret
ldd r1h, Z+NextH
55a: 91 81 ldd r25, Z+1 ; 0x01
ldd r1l, Z+NextL
55c: 80 81 ld r24, Z
ret
55e: 08 95 ret
00000560 <gbwEEPROM>:
gbwEEPROM: // With new calls must preserve Z
mov p1h, TempWh
560: 9d 2d mov r25, r13
mov p1l, TempWl
562: 8c 2d mov r24, r12
sbrs MonFlags, WORDFLAG
564: b0 fe sbrs r11, 0
rcall AvrXReadEEProm
566: 24 d3 rcall .+1608 ; 0xbb0
sbrc MonFlags, WORDFLAG
568: b0 fc sbrc r11, 0
rcall AvrXReadEEPromWord
56a: 31 d3 rcall .+1634 ; 0xbce
0000056c <gwbEXIT>:
gwbEXIT:
ret
56c: 08 95 ret
0000056e <PutByteWord>:
_ENDFUNC
;
; void PutByteWord(unsigned, void *)
;
; Passed: p1 - value
; p2 - pointer
; Returned void
; Uses MonFlags (eeprom vs RAM)
;
_FUNCTION(PutByteWord)
PutByteWord:
sbrc MonFlags, EEFLAG
56e: b1 fc sbrc r11, 1
rjmp pbwEEPROM
570: 08 c0 rjmp .+16 ; 0x582
mov Zl, TempWl
572: ec 2d mov r30, r12
mov Zh, TempWh
574: fd 2d mov r31, r13
std Z+0, p1l
576: 80 83 st Z, r24
sbrs MonFlags, WORDFLAG
578: b0 fe sbrs r11, 0
ret
57a: 08 95 ret
std Z+NextH, p1h
57c: 91 83 std Z+1, r25 ; 0x01
std Z+NextL, p1l
57e: 80 83 st Z, r24
ret
580: 08 95 ret
00000582 <pbwEEPROM>:
pbwEEPROM:
mov TempB, p1h
582: e9 2e mov r14, r25
mov p2l, p1l
584: 68 2f mov r22, r24
mov p1h, TempWh
586: 9d 2d mov r25, r13
mov p1l, TempWl
588: 8c 2d mov r24, r12
rcall AvrXWriteEEProm
58a: 38 d3 rcall .+1648 ; 0xbfc
sbrs MonFlags, WORDFLAG
58c: b0 fe sbrs r11, 0
rjmp pbwEXIT
58e: 06 c0 rjmp .+12 ; 0x59c
mov p1l, TempWl
590: 8c 2d mov r24, r12
mov p1h, TempWh
592: 9d 2d mov r25, r13
subi p1l, lo8(-1)
594: 8f 5f subi r24, 0xFF ; 255
sbci p1h, hi8(-1)
596: 9f 4f sbci r25, 0xFF ; 255
mov p2l, TempB
598: 6e 2d mov r22, r14
rcall AvrXWriteEEProm
59a: 30 d3 rcall .+1632 ; 0xbfc
0000059c <pbwEXIT>:
pbwEXIT:
ret
59c: 08 95 ret
0000059e <PushChar>:
; by the next routine
;-
_FUNCTION(PushChar)
PushChar:
push Xl
59e: af 93 push r26
lds Xl, SioFlags
5a0: a0 91 1e 01 lds r26, 0x011E
sbr Xl, 1<<CharPushed
5a4: a0 68 ori r26, 0x80 ; 128
sts SioFlags, Xl
5a6: a0 93 1e 01 sts 0x011E, r26
pop Xl
5aa: af 91 pop r26
ret
5ac: 08 95 ret
000005ae <GetChar>:
_ENDFUNC
;+
;------------------------------------------
; GetChar
;
; Need to make this draw from a buffer so that multiple
; chars can be pushed... and so different input streams
; can be attached to the buffer.
;-
_FUNCTION(GetChar)
#ifdef __IAR_SYSTEMS_ASM__
PUBLIC ?C_GETCHAR
?C_GETCHAR: ; Need this label for simulator I/O
#endif
GetChar:
lds tmp0, SioFlags
5ae: 20 91 1e 01 lds r18, 0x011E
sbrs tmp0, CharPushed
5b2: 27 ff sbrs r18, 7
rjmp gc00
5b4: 05 c0 rjmp .+10 ; 0x5c0
cbr tmp0, 1<<CharPushed
5b6: 2f 77 andi r18, 0x7F ; 127
rjmp gc01
5b8: 06 c0 rjmp .+12 ; 0x5c6
sts SioFlags, tmp0
5ba: 20 93 1e 01 sts 0x011E, r18
rjmp gc01
5be: 03 c0 rjmp .+6 ; 0x5c6
000005c0 <gc00>:
gc00:
ldi p1h, hi8(RxC_Flag)
5c0: 91 e0 ldi r25, 0x01 ; 1
ldi p1l, lo8(RxC_Flag)
5c2: 80 e2 ldi r24, 0x20 ; 32
rcall AvrXWaitSemaphore ; Wait for a charactor, or flag from System
5c4: 96 d1 rcall .+812 ; 0x8f2
000005c6 <gc01>:
gc01:
lds r1l, _RxByte
5c6: 80 91 22 01 lds r24, 0x0122
ret
5ca: 08 95 ret
000005cc <_GetChar>:
_ENDFUNC
;+
;------------------------------------------
; _GetChar
;
; Special version that echos
;
; RETURNS: RxByte (Register)
;-
_FUNCTION(_GetChar)
_GetChar:
rcall GetChar
5cc: f0 df rcall .-32 ; 0x5ae
rjmp PutChar
5ce: 28 c0 rjmp .+80 ; 0x620
000005d0 <PutCR>:
_ENDFUNC
;+
;------------------------------------------
;
; PutCR
;
; Put a CR to the output stream
;-
_FUNCTION(PutCR)
PutCR:
ldi p1l, 0x0D
5d0: 8d e0 ldi r24, 0x0D ; 13
rjmp PutChar
5d2: 26 c0 rjmp .+76 ; 0x620
000005d4 <PutSpace>:
_ENDFUNC
;+
;------------------------------------------
;
; PutSpace
;
; Put a space to the output stream
;-
_FUNCTION(PutSpace)
PutSpace:
ldi p1l, ' '
5d4: 80 e2 ldi r24, 0x20 ; 32
rjmp PutChar
5d6: 24 c0 rjmp .+72 ; 0x620
000005d8 <_PrintString>:
_ENDFUNC
;+
;------------------------------------------
;
; const char * PutString(const char *)
;
; passed:
; near pointer to string in FLASH memory
; Returns:
; pointer to next char after NULL
;-
_FUNCTION(_PrintString)
_PrintString:
mov Zl, p1l
5d8: e8 2f mov r30, r24
mov Zh, p1h
5da: f9 2f mov r31, r25
000005dc <_foo>:
_foo:
lpm
5dc: c8 95 lpm
tst R0
5de: 00 20 and r0, r0
breq _ps00
5e0: 41 f0 breq .+16 ; 0x5f2
mov p1l, R0
5e2: 80 2d mov r24, r0
push Zl
5e4: ef 93 push r30
push Zh
5e6: ff 93 push r31
rcall PutChar
5e8: 1b d0 rcall .+54 ; 0x620
pop Zh
5ea: ff 91 pop r31
pop Zl
5ec: ef 91 pop r30
adiw Zl, 1
5ee: 31 96 adiw r30, 0x01 ; 1
rjmp _foo
5f0: f5 cf rjmp .-22 ; 0x5dc
000005f2 <_ps00>:
_ps00:
mov r1l, Zl
5f2: 8e 2f mov r24, r30
mov r1h, Zh
5f4: 9f 2f mov r25, r31
ret
5f6: 08 95 ret
000005f8 <InitSerialIO>:
_ENDFUNC
;+
;-------------------------------------------
; void InitSerialIO(unsigned)
;
; PASSED: R25:24 = UBBR
; p1h:p1l = UBBR
;
; History: parameter used to be passed in R25 l.b. 1/31/01
; Changed to unsigned for mega chips. l.b. 5/30/02
;
_FUNCTION(InitSerialIO)
InitSerialIO:
out _SFR_IO_ADDR(UBRR), p1l
5f8: 89 b9 out 0x09, r24 ; 9
#if defined(UBRR0H)
sts UBRR0H, p1h // THIS appears to be a no-op
#endif
#if defined(UCSR0C)
ldi tmp0, UCRC_INIT // SET word length.
sts UCSR0C, tmp0 // Extended register in mega128
#endif
ldi tmp0, UCR_INIT
5fa: 28 e9 ldi r18, 0x98 ; 152
out _SFR_IO_ADDR(UCR), tmp0
5fc: 2a b9 out 0x0a, r18 ; 10
ret
5fe: 08 95 ret
00000600 <__vector_19>:
_ENDFUNC
;
;-----------------------------------------------
; UDRE_Interrupt
;
; Disables the interrupt (UDR is empty) signal waiting
; process to stuff the UDR
;
_FUNCTION(SIG_UART_DATA)
SIG_UART_DATA:
cbi _SFR_IO_ADDR(UCR), UDRIE ; Disable the interrupt
600: 55 98 cbi 0x0a, 5 ; 10
rcall IntProlog
602: 7e d0 rcall .+252 ; 0x700
ldi p1l, lo8(TxIntFlag)
604: 8c e1 ldi r24, 0x1C ; 28
ldi p1h, hi8(TxIntFlag)
606: 91 e0 ldi r25, 0x01 ; 1
rcall AvrXIntSetSemaphore ; Signal we are ready for more.
608: 95 d1 rcall .+810 ; 0x934
rjmp _Epilog
60a: d4 c0 rjmp .+424 ; 0x7b4
0000060c <__vector_18>:
_ENDFUNC
;
;-----------------------------------------------
; RxC_Interrupt
;
; Reads the USART and flags UserTask, Char In semaphore
;
_FUNCTION(SIG_UART_RECV)
SIG_UART_RECV:
cbi _SFR_IO_ADDR(UCR), RXCIE ; disable interrupt
60c: 57 98 cbi 0x0a, 7 ; 10
rcall IntProlog ; Switch to kernel stack
60e: 78 d0 rcall .+240 ; 0x700
in Xl, _SFR_IO_ADDR(UDR)
610: ac b1 in r26, 0x0c ; 12
sts _RxByte, Xl
612: a0 93 22 01 sts 0x0122, r26
ldi p1h, hi8(RxC_Flag)
616: 91 e0 ldi r25, 0x01 ; 1
ldi p1l, lo8(RxC_Flag)
618: 80 e2 ldi r24, 0x20 ; 32
rcall AvrXIntSetSemaphore
61a: 8c d1 rcall .+792 ; 0x934
sbi _SFR_IO_ADDR(UCR), RXCIE ; Re-enable interrupts
61c: 57 9a sbi 0x0a, 7 ; 10
rjmp _Epilog
61e: ca c0 rjmp .+404 ; 0x7b4
00000620 <PutChar>:
_ENDFUNC
;+
;------------------------------------------
; PutChar
;
; Passed: p1l "TxByte"
;
; Stuffs "TxByte" into usart. The usart is double buffered.
; when the data register is full we wait on the semaphore
; until the Usart interrupts indicating the register is ready.
;-
_FUNCTION(PutChar)
#ifdef __IAR_SYSTEMS_ASM__
_PUBLIC(?C_PUTCHAR) ; Enable terminal I/O
?C_PUTCHAR:
#endif
PutChar:
sbic _SFR_IO_ADDR(USR), UDRE
620: 5d 99 sbic 0x0b, 5 ; 11
rjmp pc00
622: 06 c0 rjmp .+12 ; 0x630
push p1l
624: 8f 93 push r24
sbi _SFR_IO_ADDR(UCR), UDRIE ; Enable interrupts and
626: 55 9a sbi 0x0a, 5 ; 10
ldi p1l, lo8(TxIntFlag)
628: 8c e1 ldi r24, 0x1C ; 28
ldi p1h, hi8(TxIntFlag)
62a: 91 e0 ldi r25, 0x01 ; 1
rcall AvrXWaitSemaphore; Wait until data register is ready
62c: 62 d1 rcall .+708 ; 0x8f2
pop p1l
62e: 8f 91 pop r24
00000630 <pc00>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -