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

📄 systemtimer.asm

📁  PSoC(可编程片上系统)是Cypress半导体公司生产的包含有8位微处理器核和数字与模拟混合的信号阵列芯片
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;  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 + -