📄 ezi2cs.asm
字号:
;;*****************************************************************************
;;*****************************************************************************
;; 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 + -