📄 systemtimer.asm
字号:
; DESCRIPTION:
; Wait X Ticks and return
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; A <= Count down time
;
; RETURNS:
; none.
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_TickWait:
_SystemTimer_TickWait:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_fTick
mov [SystemTimer_fTick],0x00 ; Clear tick flag
.WaitTick:
tst [SystemTimer_fTick],0xFF ; Check for tick
jz .WaitTick
mov [SystemTimer_fTick],0x00 ; Clear tick flag
dec A ; Dec the timer variable
jnz .WaitTick ; Loop until we count down to zero
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_SyncWait(BYTE bCounts, BYTE fMode)
;
; DESCRIPTION:
; This function resets the SyncWait timer. If fMode = 0, the timer
; is set to the new value then exits the function immediatly. If fMode
; is set to 1, the firmware waits for the timer to expire before the
; timer is reset and and exits.
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; A <= tCounts to wait
; X <= fMode fMode = 0 Just reload the value, do not wait
; fMode = 1 Wait for last value to count down to zero
; then reload.
;
; RETURNS:
; none.
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_SyncWait:
_SystemTimer_SyncWait:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_bCountDown
swap A,X
AND A,SystemTimer_FORCE_RELOAD
jnz .ReloadIt
.WaitLoop:
tst [SystemTimer_bCountDown],0xFF
jnz .WaitLoop
.ReloadIt:
swap A,X
mov [SystemTimer_bCountDown],A
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_bGetTickCntr
;
; DESCRIPTION:
; Returns the LSB of the tick Counter
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; none
;
; RETURNS:
; LSB of lTickCount
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_bGetTickCntr:
_SystemTimer_bGetTickCntr:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_TickCount
mov A,[SystemTimer_TickCount + ST_LSB_OFFSET]
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_SetTimer
;
; DESCRIPTION:
; Set timer with parameter in A
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; A => Value used to set Timer value
;
; RETURNS:
; None
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_SetTimer:
_SystemTimer_SetTimer:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_TickCount
mov [SystemTimer_bTimerValue],A
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_bGetTimer
;
; DESCRIPTION:
; Returns timer value in A
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; None
;
; RETURNS:
; Return timer value in A
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_bGetTimer:
_SystemTimer_bGetTimer:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_TickCount
mov A,[SystemTimer_bTimerValue]
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
IF(SystemTimer_TICK_CNTR_SIZE & (4|2))
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_iGetTickCntr
;
; DESCRIPTION:
; Returns the least significant 16 bits.
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; none
;
; RETURNS:
; (int)TickCount in A and X
; X <= MSB
; A <= LSB
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_iGetTickCntr:
_SystemTimer_iGetTickCntr:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_SETPAGE_CUR >SystemTimer_TickCount
; Disable interrupt here
M8C_DisableIntMask SystemTimer_INT_REG, SystemTimer_INT_MASK
mov A,[SystemTimer_TickCount + ST_LSB_OFFSET] ; Place LSB in A
mov X,[SystemTimer_TickCount + ST_LSB_OFFSET - 1] ; Place MSB in X
M8C_EnableIntMask SystemTimer_INT_REG, SystemTimer_INT_MASK
RAM_EPILOGUE RAM_USE_CLASS_4
ret
.ENDSECTION
ENDIF
IF(SystemTimer_TICK_CNTR_SIZE & 4)
.SECTION
;-----------------------------------------------------------------------------
; FUNCTION NAME: SystemTimer_lGetTickCntr
;
; DESCRIPTION:
; Returns a pointer to TickCount
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; [A:X] => Pointer to 32 bit tick counter (X=LSB, A=MSB)
;
; RETURNS:
; Pointer to lTickCount
;
; SIDE EFFECTS;
; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
; IN THE LARGE MEMORY MODEL CURRENTLY ONLY THE PAGE POINTER
; REGISTERS LISTED BELOW ARE MODIFIED. THIS DOES NOT GUARANTEE
; THAT IN FUTURE IMPLEMENTATIONS OF THIS FUNCTION OTHER PAGE POINTER
; REGISTERS WILL NOT BE MODIFIED.
;
; Page Pointer Registers Modified:
; CUR_PP
;
; THEORY of OPERATION OR PROCEDURE:
;
SystemTimer_lGetTickCntr:
_SystemTimer_lGetTickCntr:
RAM_PROLOGUE RAM_USE_CLASS_4
RAM_PROLOGUE RAM_USE_CLASS_3
; Disable interrupt here
M8C_DisableIntMask SystemTimer_INT_REG, SystemTimer_INT_MASK
RAM_SETPAGE_CUR >SystemTimer_TickCount
RAM_SETPAGE_IDX A
push A
mov A,[SystemTimer_TickCount + 0]
mov [X + 0],A
mov A,[SystemTimer_TickCount + 1]
mov [X + 1],A
mov A,[SystemTimer_TickCount + 2]
mov [X + 2],A
mov A,[SystemTimer_TickCount + 3]
mov [X + 3],A
pop A
M8C_EnableIntMask SystemTimer_INT_REG, SystemTimer_INT_MASK
RAM_EPILOGUE RAM_USE_CLASS_4
RAM_EPILOGUE RAM_USE_CLASS_3
ret
.ENDSECTION
ENDIF
; End of File SystemTimer.asm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -