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

📄 i2c.asm

📁 cypress的触摸按键模块介绍calibrating_capsense_with_the_csr_user_module___an2355_13.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
   RAM_PROLOGUE RAM_USE_CLASS_1
   ;first clear any pending interrupts
   push A
   mov  A, reg[INT_CLR3]
   and  A, ~I2C_INT_MASK
   mov  reg[INT_CLR3], A
   M8C_EnableIntMask I2C_INT_REG, I2C_INT_MASK
   pop  A
   RAM_EPILOGUE RAM_USE_CLASS_1
   ret

.ENDSECTION

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: I2C_EnableSlave
;
;  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:
;

 I2C_EnableSlave:
_I2C_EnableSlave:

    RAM_PROLOGUE RAM_USE_CLASS_1
    ; Save original CPU clock speed
    M8C_SetBank1          ; Set Bank 1 
    mov  A,reg[OSC_CR0]   ; Get current configuration of OSC_CR0 (Bank 1)
    push A                ; Save OSC_CR0 configuration
    and  A,0xF8           ; Mask off CPU speed
    or   A,0x05           ; Set clock to 750KHz
    mov  reg[OSC_CR0],A   ; Write new value to OSC_CR0 (Bank 1)
    M8C_SetBank0          ; Back to Bank 0

    ; Enable I2C Slave
    or   reg[I2C_CFG_REG],(I2C_CFG_Slave_EN | I2C_CFG_BUS_ERROR_IE)

    ; Restore original CPU clock speed
    pop  A
    M8C_SetBank1          ; Set Bank 1
    mov  reg[OSC_CR0],A   ; Restore
    M8C_SetBank0          ; Back to Bank 0
    RAM_EPILOGUE RAM_USE_CLASS_1
    ret

.ENDSECTION

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: I2C_DisableInt
;  FUNCTION NAME: I2C_Stop
;
;  DESCRIPTION:
;     Disables I2C slave by disabling SDA interrupt
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: none
;
;  RETURNS: none
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;

 I2C_Stop:
_I2C_Stop:
   RAM_PROLOGUE RAM_USE_CLASS_1

   M8C_DisableIntMask I2C_INT_REG, I2C_INT_MASK
   and  reg[I2C_CFG_REG],~I2C_CFG_Slave_EN

   RAM_EPILOGUE RAM_USE_CLASS_1
   ret

.ENDSECTION



.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: I2C_DisableInt
;  FUNCTION NAME: I2C_Stop
;
;  DESCRIPTION:
;     Disables I2C slave by disabling SDA interrupt
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: none
;
;  RETURNS: none
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;

 I2C_DisableInt:
_I2C_DisableInt:
   RAM_PROLOGUE RAM_USE_CLASS_1
   M8C_DisableIntMask I2C_INT_REG, I2C_INT_MASK
   RAM_EPILOGUE RAM_USE_CLASS_1
   ret

.ENDSECTION

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: I2C_DisableSlave
;
;  DESCRIPTION:
;     Disables I2C slave by disabling SDA interrupt
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: none
;
;  RETURNS: none
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;

 I2C_DisableSlave:
_I2C_DisableSlave:
   RAM_PROLOGUE RAM_USE_CLASS_1
   and  reg[I2C_CFG_REG],~I2C_CFG_Slave_EN
   RAM_EPILOGUE RAM_USE_CLASS_1
   ret

.ENDSECTION

.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: 
;          void I2C_SetRamBuffer(BYTE bSize, BYTE bRWboundry, BYTE * pAddr)
;
;  DESCRIPTION:
;     Sets the location and size of the I2C RAM buffer.          
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: 
;     [SP-3] =>  Size of data structure
;     [SP-4] =>  R/W boundary of (Must be less than or equal to size.)
;     [SP-5] =>  LSB of data pointer
;     [SP-6] =>  MSB of data pointer (Only used for large memory model)
;
;  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:
;

; Stack offset constants
RAMBUF_SIZE:   equ  -3   ; Stack position for data structure size.
RW_SIZE:       equ  -4   ; Stack position for R/W area size.       
RAMPTR_LSB:    equ  -5   ; Stack position for RAM pointer LSB.   
RAMPTR_MSB:    equ  -6   ; Stack position for RAM pointer MSB.   

 I2C_SetRamBuffer:
_I2C_SetRamBuffer:

    RAM_PROLOGUE RAM_USE_CLASS_4
    RAM_PROLOGUE RAM_USE_CLASS_2
    RAM_SETPAGE_CUR >I2C_bRAM_Buf_Size       ; Set page to global var page.
                                                        ; All these globals should be
                                                        ; on the same page.          
    mov   X,SP
    mov   A,[X+RAMBUF_SIZE]
    mov   [I2C_bRAM_Buf_Size],A              ; Store the buffer size

    mov   A,[X+RW_SIZE]                            ; Store R/W boundary             
    mov   [I2C_bRAM_Buf_WSize],A             ; 
    
    mov   A,[X+RAMPTR_LSB]                         ; Store only LSB of data pointer
    mov   [I2C_pRAM_Buf_Addr_LSB],A          ; 

IF (SYSTEM_LARGE_MEMORY_MODEL)                             ; Only worry about the address MSB
                                                           ; if in the large memory Model
    mov   A,[X+RAMPTR_MSB]                         ; Store only MSB of data pointer
    mov   [I2C_pRAM_Buf_Addr_MSB],A          ; 
ENDIF

    RAM_EPILOGUE RAM_USE_CLASS_2
    RAM_EPILOGUE RAM_USE_CLASS_4
    ret

.ENDSECTION

IF (I2C_ROM_ENABLE)  ;; Enable only if alternate ROM Address is Enabled
.SECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: 
;          void I2C_SetRomBuffer(BYTE bSize, BYTE * pAddr)
;
;  DESCRIPTION:
;     Sets the location and size of the I2C ROM buffer.          
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS: 
;     [SP-3] =>  Size of data const data structure
;     [SP-4] =>  LSB of data pointer
;     [SP-5] =>  MSB of data pointer (Only used for large memory model)
;
;  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:
;

; Stack offset constants
ROMBUF_SIZE:   equ  -3   ; Stack position for data structure size.
ROMPTR_LSB:    equ  -4   ; Stack position for ROM pointer LSB.   
ROMPTR_MSB:    equ  -5   ; Stack position for ROM pointer MSB.   

 I2C_SetRomBuffer:
_I2C_SetRomBuffer:

    RAM_PROLOGUE RAM_USE_CLASS_4
    RAM_PROLOGUE RAM_USE_CLASS_2
    RAM_SETPAGE_CUR >I2C_bROM_Buf_Size       ; Set page to global var page.
                                                        ; All these globals should be
                                                        ; on the same page.          
    mov   X,SP
    mov   A,[X+ROMBUF_SIZE]
    mov   [I2C_bROM_Buf_Size],A              ; Store the buffer size

    mov   A,[X+ROMPTR_LSB]                         ; Store LSB of data pointer
    mov   [I2C_pROM_Buf_Addr_LSB],A          ; 
    mov   A,[X+ROMPTR_MSB]                         ; Store MSB of data pointer
    mov   [I2C_pROM_Buf_Addr_MSB],A          ; 
    RAM_EPILOGUE RAM_USE_CLASS_2
    RAM_EPILOGUE RAM_USE_CLASS_4
    ret

.ENDSECTION
ENDIF

; End of File I2C.asm

⌨️ 快捷键说明

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