halasm.src

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· SRC 代码 · 共 112 行

SRC
112
字号
;
;  Copyright(c) 1998,1999 SIC/Hitachi,Ltd.
;
;	Module Name:
;
;		halasm.src
;
;	Revision History:
;
;		26th April 1999		Released
;		5th  July  1999		Fixed minor bug
;

	.include "kxshx.h"
	.include "shx.inc"
	.include "platform.inc"

	.import _ClockToUSecLow
	.import _ClockToUSecHigh
	.import _USecToClockLow
	.import _USecToClockHigh

	.section .text,code

;
; HalTimerInit:
;
;    Initializes an elapsed timer for use by the Hal. 
;
; Syntax:
;
;    void
;    HalTimerInit(
;        void
;        )
;
; Arguments:
;
;
; Return Value:
;

	LEAF_ENTRY _HalTimerInit

	mov.l	#TMU_REGBASE,r1		
	mov.l	#~TMU_TSTR_STR1, r0
	mov.b	r0, @(TMU_TSTR_OFFSET,r1)	; Stop Timer 1
	mov.l	#TMU_TCR_D4, r0
	mov.w	r0, @(TMU_TCR1_OFFSET, r1) 	; Use peripheral clock / 16
	mov.l	#h'ffffffff, r0
	mov.l	r0, @(TMU_TCNT1_OFFSET, r1)	; Set initial count
	mov.l	r0, @(TMU_TCOR1_OFFSET, r1)	; Set reload value
	mov.l	#TMU_TSTR_STR1, r2
	mov.b	@(TMU_TSTR_OFFSET,r1), r0
	or		r2, r0
	mov.b	r0, @(TMU_TSTR_OFFSET,r1)	; Start Timer 1
	rts
	nop

	ENTRY_END  _HalTimerInit

;
; HalSleep:
;
;    This routine waits for a desired number of microseconds, to the resolution
;    of the CPU's TMU timer and computational overhead.  Wrap-around is not
;    handled.
;
; Syntax:
;
;    void
;    HalSleep(
;        DWORD nUSec
;        )
;
; Arguments:
;
;    nUSec (r4) - Provides the number of microseconds to wait.
;
; Return Value:
;
;    None.
;
;

	LEAF_ENTRY _HalSleep

	mov		#_USecToClockLow, r0			; Convert desired usecs to clocks
	mov.l	@r0, r5							;	..
	dmulu.l	r4, r5							;   ..
	sts		mach, r5						;   ..
	mov		#_USecToClockHigh, r0			;   (Get rest of partial product)
	mov.l	@r0, r3							;	..
	mulu	r3, r4							;   ..
	sts		macl, r3						;   ..
	add		r3, r5							;   (Add partial products)

	mov.l	#TMU_REGBASE, r0				; Get desired end time
	mov.l	@(TMU_TCNT1_OFFSET, r0), r1		;   ..
	sub		r5, r1							;   ..
Loop:
	mov.l	@(TMU_TCNT1_OFFSET, r0), r2		; Passed end time yet?

	cmp/hi	r2, r1							;   ..
	bf		Loop							;   ..
	rts										; Yes; done
	nop

	ENTRY_END _HalSleep

	.end

⌨️ 快捷键说明

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