⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timers.lss

📁 这是我在网上找到一个关于AVRX嵌入式操作系统在ATMAGE103上移植的例程,现在拿出来跟大学分享,希望大学喜欢呀!
💻 LSS
📖 第 1 页 / 共 5 页
字号:
pc00:
        out     _SFR_IO_ADDR(UDR), p1l
 630:	8c b9       	out	0x0c, r24	; 12
        ret
 632:	08 95       	ret

00000634 <_GetHex>:
        _ENDFUNC

;-----------------------------------------
; _GetHex
;
; PASSED:       p1l = Maximum number of digits
; RETURNS:      r1 = val, Tbit, p2l = Number of digits entered
; USES:         R24, R25
; STACK:        4
;
        _FUNCTION(_GetHex)
_GetHex:
        push    R10
 634:	af 92       	push	r10
        push    R11
 636:	bf 92       	push	r11
        push    R12
 638:	cf 92       	push	r12
        push    R13
 63a:	df 92       	push	r13

        mov     R13, p1l
 63c:	d8 2e       	mov	r13, r24
        clr     R10
 63e:	aa 24       	eor	r10, r10
        clr     R11
 640:	bb 24       	eor	r11, r11
        clr     R12
 642:	cc 24       	eor	r12, r12

00000644 <gh_00>:
gh_00:
        rcall   _GetChar
 644:	c3 df       	rcall	.-122    	; 0x5cc
        rcall   IsHex
 646:	21 d0       	rcall	.+66     	; 0x68a
        brtc    gh_xx
 648:	96 f4       	brtc	.+36     	; 0x66e
        cpi     r1l, '9'+1
 64a:	8a 33       	cpi	r24, 0x3A	; 58
        brge    gh_01
 64c:	14 f4       	brge	.+4      	; 0x652
        subi    r1l, '0'
 64e:	80 53       	subi	r24, 0x30	; 48
        rjmp    gh_02
 650:	02 c0       	rjmp	.+4      	; 0x656

00000652 <gh_01>:
gh_01:
        cbr     r1l, 0x20
 652:	8f 7d       	andi	r24, 0xDF	; 223
        subi    r1l, 'A'-10
 654:	87 53       	subi	r24, 0x37	; 55

00000656 <gh_02>:
gh_02:
        lsl     R10
 656:	aa 0c       	add	r10, r10
        rol     R11
 658:	bb 1c       	adc	r11, r11
        lsl     R10
 65a:	aa 0c       	add	r10, r10
        rol     R11
 65c:	bb 1c       	adc	r11, r11
        lsl     R10
 65e:	aa 0c       	add	r10, r10
        rol     R11
 660:	bb 1c       	adc	r11, r11
        lsl     R10
 662:	aa 0c       	add	r10, r10
        rol     R11
 664:	bb 1c       	adc	r11, r11
        add     R10, r1l
 666:	a8 0e       	add	r10, r24
        inc     R12
 668:	c3 94       	inc	r12
        dec     R13
 66a:	da 94       	dec	r13
        brne    gh_00
 66c:	59 f7       	brne	.-42     	; 0x644

0000066e <gh_xx>:
gh_xx:
        mov     p2l, R12
 66e:	6c 2d       	mov	r22, r12
        mov     r1l, R10
 670:	8a 2d       	mov	r24, r10
        mov     r1h, R11
 672:	9b 2d       	mov	r25, r11

        pop     R13
 674:	df 90       	pop	r13
        pop     R12
 676:	cf 90       	pop	r12
        pop     R11
 678:	bf 90       	pop	r11
        pop     R10
 67a:	af 90       	pop	r10
        ret
 67c:	08 95       	ret

0000067e <GetHexWord>:
        _ENDFUNC


;-----------------------------------------
; GetHexWord
;
        _FUNCTION(GetHexWord)

GetHexWord:
        ldi     p1l, 4
 67e:	84 e0       	ldi	r24, 0x04	; 4
        rjmp    _GetHex
 680:	d9 cf       	rjmp	.-78     	; 0x634

00000682 <GetHexByte>:
        _ENDFUNC
;-----------------------------------------
; GetHexByte
;
        _FUNCTION(GetHexByte)

GetHexByte:
        ldi     p1l, 2
 682:	82 e0       	ldi	r24, 0x02	; 2
        rjmp    _GetHex
 684:	d7 cf       	rjmp	.-82     	; 0x634

00000686 <GetHexChar>:
        _ENDFUNC
;-----------------------------------------
; GetHexByte
;
        _FUNCTION(GetHexChar)

GetHexChar:
        ldi     p1l, 1
 686:	81 e0       	ldi	r24, 0x01	; 1
        rjmp    _GetHex
 688:	d5 cf       	rjmp	.-86     	; 0x634

0000068a <IsHex>:
        _ENDFUNC
;-----------------------------------------
; IsHex
;
; Tests RxByte for ascii hex char
; Returns: T bit
;
        _FUNCTION(IsHex)

IsHex:
        push    p1l
 68a:	8f 93       	push	r24
        lds     p1l, _RxByte
 68c:	80 91 22 01 	lds	r24, 0x0122
        clt
 690:	e8 94       	clt
        cpi     p1l, '0'
 692:	80 33       	cpi	r24, 0x30	; 48
        brlt    ihno
 694:	5c f0       	brlt	.+22     	; 0x6ac
        cpi     p1l, '9'+1
 696:	8a 33       	cpi	r24, 0x3A	; 58
        brlt    ihyes
 698:	44 f0       	brlt	.+16     	; 0x6aa
        cpi     p1l, 'A'
 69a:	81 34       	cpi	r24, 0x41	; 65
        brlt    ihno
 69c:	3c f0       	brlt	.+14     	; 0x6ac
        cpi     p1l, 'F'+1
 69e:	87 34       	cpi	r24, 0x47	; 71
        brlt    ihyes
 6a0:	24 f0       	brlt	.+8      	; 0x6aa
        cpi     p1l, 'a'
 6a2:	81 36       	cpi	r24, 0x61	; 97
        brlt    ihno
 6a4:	1c f0       	brlt	.+6      	; 0x6ac
        cpi     p1l, 'f'+1
 6a6:	87 36       	cpi	r24, 0x67	; 103
        brge    ihno
 6a8:	0c f4       	brge	.+2      	; 0x6ac

000006aa <ihyes>:
ihyes:
        set
 6aa:	68 94       	set

000006ac <ihno>:
ihno:
        pop     p1l
 6ac:	8f 91       	pop	r24
        ret
 6ae:	08 95       	ret

000006b0 <IsWhite>:
        _ENDFUNC
;-----------------------------------------
; IsWhite
;
; Tests RxByte for space or CR
; Returns: T bit
;
        _FUNCTION(IsWhite)

IsWhite:
        push    p1l
 6b0:	8f 93       	push	r24
        lds     p1l, _RxByte
 6b2:	80 91 22 01 	lds	r24, 0x0122
        clt
 6b6:	e8 94       	clt
        cpi     p1l, ' '
 6b8:	80 32       	cpi	r24, 0x20	; 32
        breq    ihyes
 6ba:	b9 f3       	breq	.-18     	; 0x6aa
        cpi     p1l, 0x0D
 6bc:	8d 30       	cpi	r24, 0x0D	; 13
        breq    ihyes
 6be:	a9 f3       	breq	.-22     	; 0x6aa
        rjmp    ihno
 6c0:	f5 cf       	rjmp	.-22     	; 0x6ac

000006c2 <_PutHex>:
        _ENDFUNC
;-----------------------------------------
; void _PutHex(unsigned val, char digits)
;
; Passed:       p2 = Value, p1l = # digits
; RETURN:       Nothing
; USES:         R25, TxByte
; STACK:        2
;
        _FUNCTION(_PutHex)

_PutHex:
        ldi     tmp2, 4          ; Maximum number of digits.
 6c2:	44 e0       	ldi	r20, 0x04	; 4
        mov     tmp3, p2l
 6c4:	56 2f       	mov	r21, r22
        mov     p2l, p1l
 6c6:	68 2f       	mov	r22, r24
        mov     p2h, p1h
 6c8:	79 2f       	mov	r23, r25

000006ca <ph00>:
ph00:
        lsl     p2l
 6ca:	66 0f       	add	r22, r22
        rol     p2h
 6cc:	77 1f       	adc	r23, r23
        rol     p1l
 6ce:	88 1f       	adc	r24, r24
        lsl     p2l
 6d0:	66 0f       	add	r22, r22
        rol     p2h
 6d2:	77 1f       	adc	r23, r23
        rol     p1l
 6d4:	88 1f       	adc	r24, r24
        lsl     p2l
 6d6:	66 0f       	add	r22, r22
        rol     p2h
 6d8:	77 1f       	adc	r23, r23
        rol     p1l
 6da:	88 1f       	adc	r24, r24
        lsl     p2l
 6dc:	66 0f       	add	r22, r22
        rol     p2h
 6de:	77 1f       	adc	r23, r23
        rol     p1l
 6e0:	88 1f       	adc	r24, r24

        cp      tmp3, tmp2
 6e2:	54 17       	cp	r21, r20
        brlt    ph02
 6e4:	34 f0       	brlt	.+12     	; 0x6f2

        cbr     p1l, 0xF0
 6e6:	8f 70       	andi	r24, 0x0F	; 15
        subi    p1l, lo8(-'0')          ; Addi 0
 6e8:	80 5d       	subi	r24, 0xD0	; 208
        cpi     p1l, lo8('9' + 1)       ; if > 9
 6ea:	8a 33       	cpi	r24, 0x3A	; 58
        brlt    ph01                    ; subi 9 and add A
 6ec:	0c f0       	brlt	.+2      	; 0x6f0
        subi    p1l, lo8('9' + 1 - 'A')
 6ee:	89 5f       	subi	r24, 0xF9	; 249

000006f0 <ph01>:
ph01:
        rcall   PutChar
 6f0:	97 df       	rcall	.-210    	; 0x620

000006f2 <ph02>:
ph02:
        dec     tmp2
 6f2:	4a 95       	dec	r20
        brne    ph00
 6f4:	51 f7       	brne	.-44     	; 0x6ca

        ret
 6f6:	08 95       	ret

000006f8 <PutHexWord>:
        _ENDFUNC
;-----------------------------------------
; Put out a hex word
;
; Passed: Y = word
;
        _FUNCTION(PutHexWord)

PutHexWord:
        ldi     p2l, 4
 6f8:	64 e0       	ldi	r22, 0x04	; 4
        rjmp    _PutHex
 6fa:	e3 cf       	rjmp	.-58     	; 0x6c2

000006fc <PutHexByte>:
        _ENDFUNC
;-----------------------------------------
; Put out a two ascii hex byte
; Yl = byte
;
        _FUNCTION(PutHexByte)

PutHexByte:
        ldi     p2l, 2
 6fc:	62 e0       	ldi	r22, 0x02	; 2
        rjmp    _PutHex
 6fe:	e1 cf       	rjmp	.-62     	; 0x6c2

00000700 <IntProlog>:
;-
	_FUNCTION(IntProlog)

IntProlog:                      ; 3 cycles
	push	R29
 700:	df 93       	push	r29
	push	R28
 702:	cf 93       	push	r28
	push	R27
 704:	bf 93       	push	r27
	push	R26
 706:	af 93       	push	r26
	push	R25
 708:	9f 93       	push	r25

	ldi	Yh, hi8(AvrXKernelData)
 70a:	d1 e0       	ldi	r29, 0x01	; 1
	ldi	Yl, lo8(AvrXKernelData)
 70c:	c4 e2       	ldi	r28, 0x24	; 36

	in	R25, _SFR_IO_ADDR(SREG)		; Save flags
 70e:	9f b7       	in	r25, 0x3f	; 63

	ldd	Xl, Y+SysLevel
 710:	ae 81       	ldd	r26, Y+6	; 0x06
	subi	Xl, lo8(-1)		; Carry set if results 0
 712:	af 5f       	subi	r26, 0xFF	; 255
	std	Y+SysLevel, Xl		; if already in kernel, then save context
 714:	ae 83       	std	Y+6, r26	; 0x06
	brcs	SaveContext
 716:	60 f0       	brcs	.+24     	; 0x730

	ldd	Xl, Y+Running+NextL	; Check if current task = IDLE
 718:	aa 81       	ldd	r26, Y+2	; 0x02
	ldd	Xh, Y+Running+NextH
 71a:	bb 81       	ldd	r27, Y+3	; 0x03
	or	Xh, Xl
 71c:	ba 2b       	or	r27, r26
	brne	SaveContext		; Carry cleared if results 0
 71e:	41 f4       	brne	.+16     	; 0x730
        ;
        ; When interrupting IDLE, just reset the stack pointer to PRIOR the interrupt.
        ; in Epilog, if still IDLE, control will return to the start of the IDLE loop.
        ; I.E. we don't need the return address to IDLE, just the return address to the
        ; caller of Prolog() (the interrupt handler).
        ;
        ; The code, below, is obscure, but cycle efficient.  The net effect is to reset
        ; the stack to AvrXStack before returning to the interrupt handler.
        ;
        in	Yl, _SFR_IO_ADDR(SPL)	;Idle task: don't bother saving registers, etc.
 720:	cd b7       	in	r28, 0x3d	; 61
	in	Yh, _SFR_IO_ADDR(SPH)
 722:	de b7       	in	r29, 0x3e	; 62
	ldd	Zh, Y+6         	; Get return address
 724:	fe 81       	ldd	r31, Y+6	; 0x06
	ldd	Zl, Y+7
 726:	ef 81       	ldd	r30, Y+7	; 0x07
	adiw	Yl, 9			; Adjust pointer
 728:	29 96       	adiw	r28, 0x09	; 9
	out	_SFR_IO_ADDR(SPL), Yl  	; This is cycle efficient, but obscure.
 72a:	cd bf       	out	0x3d, r28	; 61
	out	_SFR_IO_ADDR(SPH), Yh
 72c:	de bf       	out	0x3e, r29	; 62
	ijmp				; ~37 cycles for IDLE task.
 72e:	09 94       	ijmp

00000730 <SaveContext>:

SaveContext:
	push	R24
 730:	8f 93       	push	r24
        push    R23
 732:	7f 93       	push	r23
        push    R22
 734:	6f 93       	push	r22
        push    R21
 736:	5f 93       	push	r21
        push    R20
 738:	4f 93       	push	r20
        push    R19
 73a:	3f 93       	push	r19
        push    R18
 73c:	2f 93       	push	r18
        push    R17
 73e:	1f 93       	push	r17
        push    R16
 740:	0f 93       	push	r16
        push    R15
 742:	ff 92       	push	r15
        push    R14
 744:	ef 92       	push	r14
        push    R13
 746:	df 92       	push	r13
        push    R12
 748:	cf 92       	push	r12
        push    R11
 74a:	bf 92       	push	r11
        push    R10
 74c:	af 92       	push	r10
        push    R9
 74e:	9f 92       	push	r9
        push    R8
 750:	8f 92       	push	r8
        push    R7
 752:	7f 92       	push	r7
        push    R6
 754:	6f 92       	push	r6
        push    R5
 756:	5f 92       	push	r5
        push    R4
 758:	4f 92       	push	r4
        push    R3
 75a:	3f 92       	push	r3
        push    R2
 75c:	2f 92       	push	r2
        push    R1
 75e:	1f 92       	push	r1
        push    R0
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -