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

📄 i2chwcommon.lis

📁 cpress器件实现触摸按键程序.开发环境PsOC Designer
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0000           
 0000           IF I2CHW_POLLED_PROCESS
 0000                   ret                                       ; NOT and ISR so use only a ret to return from poll
 0000           ELSE    
 0000                   reti                                      ; use reti to return from ISR
 0000           ENDIF
 0000               macro I2CHW_POLL_SERVICE
 0000           
 0000           IF I2CHW_POLLED_PROCESS
 0000                   lcall  I2CHW_Poll              ; Call this function repeatedly if we are in a loop
 0000                                                                     ; waiting for bStatus BUS_BUSY to clear.  Otherwise
 0000                                                                                                             ; this is a deadlock condtion
 0000           ENDIF
                export    I2CHW_InitWrite
                export   _I2CHW_InitWrite
                export    I2CHW_InitRamRead
                export   _I2CHW_InitRamRead
                export    I2CHW_InitFlashRead
                export   _I2CHW_InitFlashRead
                export    I2CHW_bReadI2CStatus
                export   _I2CHW_bReadI2CStatus
                export    I2CHW_ClrRdStatus
                export   _I2CHW_ClrRdStatus
                export    I2CHW_ClrWrStatus
                export   _I2CHW_ClrWrStatus
                
                
                AREA UserModules (ROM, REL)
                
                
 0000           .SECTION
 0000           ;-----------------------------------------------------------------------------
 0000           ;  FUNCTION NAME: I2CHW_InitWrite
 0000           ;
 0000           ;  DESCRIPTION:
 0000           ;     Initializes a data buffer pointer for the slave to use to deposit data, and
 0000           ;     zeroes the value of a count byte for the same buffer.
 0000           ;
 0000           ;-----------------------------------------------------------------------------
 0000           ;
 0000           ;  ARGUMENTS:  [SP-5]   -- count of bytes to write
 0000           ;              [SP-4]   -- Hi order part of address Wrbuf
 0000           ;              [SP-3]   -- Low order part of the address Wrbuf 
 0000           ;
 0000           ;  RETURNS:  none
 0000           ;
 0000           ;    Write Status bits are cleared
 0000           ;
 0000           ;  SIDE EFFECTS:
 0000           ;    The A and X registers may be modified by this or future implementations
 0000           ;    of this function.  The same is true for all RAM page pointer registers in
 0000           ;    the Large Memory Model.  When necessary, it is the calling function's
 0000           ;    responsibility to perserve their values across calls to fastcall16 
 0000           ;    functions.
 0000           ;          
 0000           ;    Currently only the page pointer registers listed below are modified: 
 0000           ;          CUR_PP
 0000           ;
 0000           ;    Write Status bits are cleared
 0000           ;
 0000           ;  THEORY of OPERATION or PROCEDURE:
 0000           ;     The C compiler will always place a 0 (the upper order byte of the address pointer) in
 0000           ;     the accumulator.  X register is the low order pointer.
 0000           ;     IF a one byte buffer is established, set a flag to NAK the first written data byte.
 0000           ;
 0000           
 0000            I2CHW_InitWrite:
 0000           _I2CHW_InitWrite:
 0000           
 FFFFFFFB           WrCnt:   equ -5
 FFFFFFFC           WrBufHi: equ -4
 FFFFFFFD           WrBufLo: equ -3
 0000           
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_1 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_1
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_2 )
                      IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      or   F, FLAG_PGMODE_01b
                   ENDIF ;  SYSTEM_LARGE_MEMORY_MODEL
                      ENDIF
                   ENDIF ; RAM_USE_CLASS_2
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_3 )
                      IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and  F, ~FLAG_PGMODE_01b
                   ENDIF ;  SYSTEM_LARGE_MEMORY_MODEL
                      ENDIF
                   ENDIF ; RAM_USE_CLASS_3
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_4 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_4
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_1 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_1
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_2 )
                      IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      or   F, FLAG_PGMODE_01b
                   ENDIF ;  SYSTEM_LARGE_MEMORY_MODEL
                      ENDIF
                   ENDIF ; RAM_USE_CLASS_2
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_3 )
                      IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and  F, ~FLAG_PGMODE_01b
                   ENDIF ;  SYSTEM_LARGE_MEMORY_MODEL
                      ENDIF
                   ENDIF ; RAM_USE_CLASS_3
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_4 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_4
                
 0000 10                push  X
 0001 4F                mov   X, SP
 0002 79            dec   X                                                          ;set up the pointer for correct param access
 0003 08            push  A
 0004 5DDE          mov   A, reg[INT_MSK3]
 0006 08            push  A                                                           ;preserve flags prior to disabling int
 0007 41DEFE        and   reg[INT_MSK3], ~INT_MSK3_I2C              ; disable specified interrupt enable bit
 000A           
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
 000A 62D000          mov reg[CUR_PP], >I2CHW_bStatus
                   ENDIF
 000D 2600FB        and    [I2CHW_bStatus], ~fI2C_NAKnextWr                          ;reset the nak-next-written-byte flag.
                IF SYSTEM_LARGE_MEMORY_MODEL
 0010 52FC          mov   A, [X + WrBufHi]                                           ;move wrbuf addr to A
 0012 5300          mov   [pI2CHW_Write_BufHI], A
                ENDIF
 0014 52FD          mov   A, [X + WrBufLo]                                           ;move wrbuf addr to A
 0016 5300          mov   [pI2CHW_Write_BufLO], A
 0018 52FB          mov   A, [X + WrCnt]                                               ;move Write_count to A
 001A 5300          mov   [I2CHW_Write_Count], A
 001C 3901          cmp   A, 01                                                        ;if data buffer is one byte long or less
 001E A008          jz    I2CHW_SetNak
 0020 C006          jc    I2CHW_SetNak
 0022 26008F        and   [I2CHW_RsrcStatus], ~0x70                                  ;clear the 0x10, 0x20 (Write status bits)
 0025 8009          jmp   I2Cs_1_ResetFlgs
 0027           
 0027           I2CHW_SetNak:
 0027 2E0004        or    [I2CHW_bStatus], fI2C_NAKnextWr                            ;set the nak-next-written-byte flag.
 002A 26008F        and   [I2CHW_RsrcStatus], ~0x70                                  ; clear the 0x10, 0x20 (Write status bits)
 002D 8001          jmp   I2Cs_1_ResetFlgs
 002F           
 002F           I2Cs_1_ResetFlgs:
 002F 18            pop A
 0030 2101          and A, INT_MSK3_I2C                                                ; Only enable if it was previously enabled
 0032 A004          jz  . + 5
 0034 43DE01        or    reg[INT_MSK3], INT_MSK3_I2C               ; enable specified interrupt enable bit
 0037 18            pop A
 0038 20            pop X
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_1 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_1
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_2 )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                   IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and   F, ~FLAG_PGMODE_MASK        ; NOTE: transition thru 00b state
                      or    F,  FLAG_PGMODE_MASK & FLAG_PGMODE_11b
                   ENDIF
                   ENDIF ;  PGMODE LOCKED
                   IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and   F, ~FLAG_PGMODE_MASK        ; NOTE: transition thru 00b state
                      or    F,  FLAG_PGMODE_MASK & FLAG_PGMODE_10b
                   ENDIF
                   ENDIF ; PGMODE FREE
                   ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
                   ENDIF ; RAM_USE_CLASS_2
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_3 )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                   IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and   F, ~FLAG_PGMODE_MASK        ; NOTE: transition thru 00b state
                      or    F,  FLAG_PGMODE_MASK & FLAG_PGMODE_11b
                   ENDIF
                   ENDIF ;  PGMODE LOCKED
                   IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                      and   F, ~FLAG_PGMODE_MASK        ; NOTE: transition thru 00b state
                      or    F,  FLAG_PGMODE_MASK & FLAG_PGMODE_10b
                   ENDIF
                   ENDIF ; PGMODE FREE
                   ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
                   ENDIF ; RAM_USE_CLASS_3
                
                   IF ( RAM_USE_CLASS_4 & RAM_USE_CLASS_4 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_4
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_1 )
                   ; Nothing to do
                   ENDIF ; RAM_USE_CLASS_1
                
                   IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_2 )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
                   IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
                   IF ( SYSTEM_LARGE_MEMORY_MODEL )
 0039 703F            and   F, ~FLAG_PGMODE_MASK        ; NOTE: transition thru 00b state
 003B 71C0            or    F,  FLAG_PGMODE_MASK & FLAG_PGMODE_11b
                   ENDIF
                   ENDIF ;  PGMODE LOCKED
                   IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
                   IF ( SYSTEM_LARGE_MEMOR

⌨️ 快捷键说明

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