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

📄 ezi2cs.asm

📁 cypress cy3721做的外部无线结点。感知温度后将温度值反给中心结点。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;*****************************************************************************
;;*****************************************************************************
;;  FILENAME: EzI2Cs.asm
;;  Version: 1.1, Updated on 2008/10/2 at 14:38:50
;;  Generated by PSoC Designer ???
;;
;;  DESCRIPTION: EzI2Cs User Module software implementation file
;;               for the 22/24/27/29xxx PSoC family of devices
;;
;;  NOTE: User Module APIs conform to the fastcall16 convention for marshalling
;;        arguments and observe the associated "Registers are volatile" policy.
;;        This means it is the caller's responsibility to preserve any values
;;        in the X and A registers that are still needed after the API functions
;;        returns. For Large Memory Model devices it is also the caller's 
;;        responsibility to perserve any value in the CUR_PP, IDX_PP, MVR_PP and 
;;        MVW_PP registers. Even though some of these registers may not be modified
;;        now, there is no guarantee that will remain the case in future releases.
;;-----------------------------------------------------------------------------
;;  Copyright (c) Cypress MicroSystems 2004. All Rights Reserved.
;;*****************************************************************************
;;*****************************************************************************

include "m8c.inc"
include "memory.inc"
include "EzI2Cs.inc"

;-----------------------------------------------
; include instance specific register definitions
;-----------------------------------------------

;-----------------------------------------------
;  Global Symbols
;-----------------------------------------------
;-------------------------------------------------------------------
;  Declare the functions global for both assembler and C compiler.
;
;  Note that there are two names for each API. First name is
;  assembler reference. Name with underscore is name refence for
;  C compiler.  Calling function in C source code does not require
;  the underscore.
;-------------------------------------------------------------------

export    EzI2Cs_EnableInt
export   _EzI2Cs_EnableInt
export    EzI2Cs_Start
export   _EzI2Cs_Start

export    EzI2Cs_DisableInt
export   _EzI2Cs_DisableInt
export    EzI2Cs_Stop
export   _EzI2Cs_Stop
export    EzI2Cs_SetRamBuffer
export   _EzI2Cs_SetRamBuffer
export    EzI2Cs_GetAddr
export   _EzI2Cs_GetAddr
export    EzI2Cs_GetActivity
export   _EzI2Cs_GetActivity


IF (EzI2Cs_DYNAMIC_ADDR) ;; Enable this function only if Address is Dynamic
export    EzI2Cs_SetAddr
export   _EzI2Cs_SetAddr
ENDIF

IF (EzI2Cs_ROM_ENABLE)  ;; Enable only if alternate ROM Address is Enabled
export    EzI2Cs_SetRomBuffer
export   _EzI2Cs_SetRomBuffer
ENDIF


AREA UserModules (ROM, REL, CON)

.SECTION

;-----------------------------------------------------------------------------
;  FUNCTION NAME: EzI2Cs_Start
;
;  DESCRIPTION:
;   Initialize the EzI2Cs I2C bus interface.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  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:
;

 EzI2Cs_Start:
_EzI2Cs_Start:

   RAM_PROLOGUE RAM_USE_CLASS_4
   RAM_SETPAGE_CUR >EzI2Cs_varPage

IF (EzI2Cs_DYNAMIC_ADDR)  ;; DYNAMIC ADDRESS
   mov  [EzI2Cs_bAddr],EzI2Cs_SLAVE_ADDR
ENDIF

   mov  [EzI2Cs_bState],0x00    ;; Make sure state machine is initialized


   call EzI2Cs_EnableInt
   call EzI2Cs_EnableSlave

   RAM_EPILOGUE RAM_USE_CLASS_4
   ret

.ENDSECTION

IF (EzI2Cs_DYNAMIC_ADDR)  ;; DYNAMIC ADDRESS
.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: EzI2Cs_SetAddr(BYTE bAddr)
;
;  DESCRIPTION:
;   Set the I2C slave address for the EzI2Cs I2C bus interface.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;      A =>  Slave address
;
;  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:
;

 EzI2Cs_SetAddr:
_EzI2Cs_SetAddr:
   RAM_PROLOGUE RAM_USE_CLASS_4
   RAM_SETPAGE_CUR >EzI2Cs_bAddr
   asl   A
   mov   [EzI2Cs_bAddr],A
   RAM_EPILOGUE RAM_USE_CLASS_4
   ret

.ENDSECTION
ENDIF

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME:BYTE EzI2Cs_GetActivity(void)
;
;  DESCRIPTION:
;    Return a non-zero value if the I2C hardware has seen activity on the bus.
;    The activity flag will be cleared if set when calling this function.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:  none
;
;  RETURNS: 
;    BYTE  non-zero = Activity
;          zero     = No Activity
;
;  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:
;

 EzI2Cs_GetActivity:
_EzI2Cs_GetActivity:
   RAM_PROLOGUE RAM_USE_CLASS_4
   RAM_SETPAGE_CUR >EzI2Cs_bState
   mov   A,[EzI2Cs_bState]
   and   A,EzI2Cs_ACTIVITY_MASK         ; Mask off activity bits
   and   [EzI2Cs_bState],~EzI2Cs_ACTIVITY_MASK ; Clear system activity bits

EzI2Cs_GetActivity_End:
   RAM_EPILOGUE RAM_USE_CLASS_4
   ret

.ENDSECTION

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: BYTE EzI2Cs_GetAddr(Void)
;
;  DESCRIPTION:
;   Get the I2C slave address for the EzI2Cs I2C bus interface.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: none
;
;  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:
;

 EzI2Cs_GetAddr:
_EzI2Cs_GetAddr:

IF (EzI2Cs_DYNAMIC_ADDR)  ;; DYNAMIC ADDRESS
   RAM_PROLOGUE RAM_USE_CLASS_4
   RAM_SETPAGE_CUR >EzI2Cs_bAddr
   mov   A,[EzI2Cs_bAddr]
   asr   A                          ; Shift Addr to right to drop RW bit.
   and   A,0x7F                     ; Mask off bogus MSb
   RAM_EPILOGUE RAM_USE_CLASS_4
ELSE
   mov   A,0x4            
ENDIF
   ret

.ENDSECTION



.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: EzI2Cs_EnableInt
;
;  DESCRIPTION:
;     Enables SDA interrupt allowing start condition detection. Remember to call the
;     global interrupt enable function by using the macro: M8C_EnableGInt.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: none
;
;  RETURNS: none
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;

 EzI2Cs_EnableInt:
_EzI2Cs_EnableInt:
   RAM_PROLOGUE RAM_USE_CLASS_1
   ;first clear any pending interrupts

⌨️ 快捷键说明

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