📄 spim.lis
字号:
IF ( RAM_USE_CLASS_1 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
0009 7F RET
000A .ENDSECTION
000A .SECTION
000A ;-----------------------------------------------------------------------------
000A ; FUNCTION NAME: SPIM_SetMOSI (_SetMISO)
000A ;
000A ; DESCRIPTION:
000A ; Uses the SPI configuration setting 'SWAP' to set the MOSI/MISO pin
000A ;
000A ;-----------------------------------------------------------------------------
000A ;
000A ; ARGUMENTS: A: 0x00--SPIM_MOSI_P15 (SPIM_MISO_P16)
000A ; 0x01--SPIM_MOSI_P16 (SPIM_MISO_P15)
000A ;
000A ; RETURNS: none
000A ;
000A ; SIDE EFFECTS:
000A ; The A and X registers may be modified by this or future implementations
000A ; of this function. The same is true for all RAM page pointer registers in
000A ; the Large Memory Model. When necessary, it is the calling function's
000A ; responsibility to perserve their values across calls to fastcall16
000A ; functions.
000A ;
000A ; THEORY of OPERATION or PROCEDURE:
000A ;
000A ;-----------------------------------------------------------------------------
000A SPIM_SetMOSI:
000A _SPIM_SetMOSI:
000A SPIM_SetMISO:
000A _SPIM_SetMISO:
IF ( RAM_USE_CLASS_1 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_1 & 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_1 & 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_1 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
000A 2101 AND A, 0x01 ; Set or Clear SWAP?
000C A005 JZ .clear ; Jump to clear SWAP
000E ; Flow here to set SWAP
000E 433D80 OR REG[SPICR], SPIM_SWAP ; Set swap
0011 7F RET ; Quick exit
0012 ; Jump here to clear SWAP
0012 .clear:
0012 413D7F AND REG[SPICR], ~(SPIM_SWAP) ; Clear swap
IF ( RAM_USE_CLASS_1 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_1 & 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_1 & 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_1 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
0015 7F RET
0016 .ENDSECTION
0016
0016 .SECTION
0016 ;-----------------------------------------------------------------------------
0016 ; FUNCTION NAME: SPIM_bIO
0016 ;
0016 ; DESCRIPTION:
0016 ; Initiates an SPI data transfer and returns the received data byte
0016 ;
0016 ;-----------------------------------------------------------------------------
0016 ;
0016 ; ARGUMENTS:
0016 ; BYTE bTxData - data to transmit.
0016 ; Passed in Accumulator.
0016 ;
0016 ; RETURNS: A contains the SPIDATA register value (following SPI RX complete)
0016 ;
0016 ; SIDE EFFECTS:
0016 ; The A and X registers may be modified by this or future implementations
0016 ; of this function. The same is true for all RAM page pointer registers in
0016 ; the Large Memory Model. When necessary, it is the calling function's
0016 ; responsibility to perserve their values across calls to fastcall16
0016 ; functions.
0016 ;
0016 ; THEORY of OPERATION or PROCEDURE:
0016 ; Writes data to the SPIDATA register and returns the received data.
0016 ;-----------------------------------------------------------------------------
0016 SPIM_bIO:
0016 _SPIM_bIO:
IF ( RAM_USE_CLASS_1 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_1 & 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_1 & 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_1 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
0016 70FE and F, ~FLAG_GLOBAL_IE
0018 41DAF3 AND REG[INT_CLR0],~(INT_MSK0_SPI_TX | INT_MSK0_SPI_RX) ; Clear the TX and RX flag?
001B 603C MOV REG[SPIDATA], A ; Write the address
001D ; Wait for the address write to complete
001D .w1:
001D 49DA08 TST REG[INT_CLR0],INT_MSK0_SPI_RX ; Address transfer complete?
0020 AFFC JZ .w1 ; Wait some more
0022 ; Get the sampled data
0022 5D3C MOV A, REG[SPIDATA] ; Return the data
0024 7101 or F, FLAG_GLOBAL_IE
IF ( RAM_USE_CLASS_1 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_1 & 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_1 & 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_1 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
0026 7F RET
0027 .ENDSECTION
0027 ; End of File SPIM.asm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -