?? a4_isd17xx.asm
字號:
;***************************************************************************
;***************************************************************************
;==========================ISD17XXX=========================================
;>>包含函數(shù):
; 1.MISD17XX_Initial ;初始化ISD17XX
; 2.MISD17XX_SET_Erase_Short ;設(shè)置地址區(qū)間,用于擦除低的地址空間
; 3.MISD17XX_SET_Erase_Long ;設(shè)置地址區(qū)間,用于擦除高的地址空間
; 4.MISD17XX_SET_REC_Short ;設(shè)置地址區(qū)間,錄音低的地址空間
; 5.MISD17XX_SET_REC_Longs ;設(shè)置地址區(qū)間,錄音高的地址空間
; 6.MISD17XX_SET_PLAY_Short ;設(shè)置地址區(qū)間,播放低地址的空間錄音
; 7.MISD17XX_SET_PLAY_Longs ;設(shè)置地址區(qū)間,播放高地址的空間錄音
; 8.MISD17XX_STOP ;停止ISD的所有操作
; 9.MISD_COMM_SEND ;發(fā)送數(shù)據(jù),并接收狀態(tài)數(shù)據(jù)
; 10.MSPI_WR_DATA ;從SPI口讀寫一個字節(jié)的數(shù)據(jù)
; 11.MSPI_Initial_State ;SPI口初始狀態(tài)
; 12. MSPI_SS_H ;直接操作端口
; MSPI_SS_L ;
; MSPI_SCLK_H ;
; MSPI_SCLK_L ;
; MSPI_MOSI_H ;
; MSPI_MOSI_L ;
; 13.MSPI_DELAY_5US ;延時5US
; 14.MSPI_DELAY_100US ;延時100US
;==========================================================================
;修改日期:
;程序員:
;==========================================================================
;1.初始化ISD17XX
MISD17XX_Initial:
SISD17XX_Initial:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_DEVID
;---------------------------------------------------
LDA gISD_Receive_DATA+2
CMP #Mac_USE_ISD_ID ;讀取ID是否正確
BNE SISD17XX_Initial_ID60
BRA SISD17XX_Initial_ID50
SISD17XX_Initial_ID60:
CMP #Mac_ISD1760_ID
BNE SISD17XX_Initial
SISD17XX_Initial_ID50:
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2
;---------------------------------------------------
SISD17XX_Initial_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_Initial_RDY
;---------------------------------------------------
RTS
;==========================================================================
;2.設(shè)置地址區(qū)間,用于擦除低的地址空間
MISD17XX_SET_Erase_Short:
MACRO_ISD17XX_COMM_PU
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
SISD17XX_SET_Erase_Short_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_Erase_Short_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_Erase_Short
SISD17XX_SET_Erase_Short_INT:
MACRO_ISD17XX_COMM_RD_STATUS
LDA gISD_Receive_DATA
BIT #10H
BEQ SISD17XX_SET_Erase_Short_INT
MACRO_ISD17XX_COMM_CLR_INT
SISD17XX_SET_Erase_Short_RDY2:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_Erase_Short_RDY2
RTS
;==========================================================================
;3.設(shè)置地址區(qū)間,用于擦除高的地址空間
MISD17XX_SET_Erase_Long:
MACRO_ISD17XX_COMM_PU
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
SISD17XX_SET_Erase_Long_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_Erase_Long_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_Erase_Longs
SISD17XX_SET_Erase_Long_INT:
MACRO_ISD17XX_COMM_RD_STATUS
LDA gISD_Receive_DATA
BIT #10H
BEQ SISD17XX_SET_Erase_Long_INT
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
SISD17XX_SET_Erase_Long_RDY2:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_Erase_Long_RDY2
RTS
;==========================================================================
;4.設(shè)置地址區(qū)間,錄音低的地址空間
MISD17XX_SET_REC_Short:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2_MIC
SISD17XX_SET_REC_Short_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_REC_Short_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_REC_Short
;---------------------------------------------------
RTS
;==========================================================================
;5.設(shè)置地址區(qū)間,錄音高的地址空間
MISD17XX_SET_REC_Longs:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2_MIC
SISD17XX_SET_REC_Longs_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_REC_Longs_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_REC_Longs
;---------------------------------------------------
RTS
;==========================================================================
;6.設(shè)置地址區(qū)間,播放低地址的空間錄音
MISD17XX_SET_PLAY_Short:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2
SISD17XX_SET_PLAY_Short_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_PLAY_Short_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_PLAY_Short
;---------------------------------------------------
RTS
;==========================================================================
;7.設(shè)置地址區(qū)間,播放高地址的空間錄音
MISD17XX_SET_PLAY_Longs:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2
SISD17XX_SET_PLAY_Longs_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_PLAY_Longs_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_SET_PLAY_Longs
;---------------------------------------------------
RTS
;==========================================================================
;8.停止ISD的所有操作
MISD17XX_STOP:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_STOPALL
;---------------------------------------------------
SISD17XX_STOP_RDY:
MACRO_ISD17XX_COMM_RD_STATUS
;---------------------------------------------------
LDA gISD_Receive_DATA
BIT #10H
BEQ SISD17XX_STOP_RDY
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
RTS
;==========================================================================
;9. 依據(jù)gISD_COMM_BYTE(命令的字節(jié)數(shù))和gISD_Send_DATA(將發(fā)送的數(shù)據(jù))發(fā)送數(shù)據(jù),
; 并接收狀態(tài)數(shù)據(jù),存于gISD_Receive_DATA
MISD_COMM_SEND:
JSR MSPI_Initial_State
JSR MSPI_DELAY_5US
JSR MSPI_SS_L
JSR MSPI_DELAY_100US
LDX #0
SISD_COMM_SEND_LP:
LDA gISD_Send_DATA,X
STA gISD_Send_BUFF
JSR MSPI_WR_DATA
LDA gISD_Receive_BUFF
STA gISD_Receive_DATA,X
;---------------------------------------------------
INX
TXA
CMP gISD_COMM_BYTE
BCC SISD_COMM_SEND_LP
JSR MSPI_SS_H
RTS
;====================================================================
;10.從SPI口讀寫一個字節(jié)的數(shù)據(jù)
; SPI口初始狀態(tài)
; SS已拉低
; 發(fā)送的數(shù)據(jù)存于gISD_Send_BUFF中
; 接收到的數(shù)據(jù)存于gISD_Receive_DATA中
;--------------------------------------------------------
MSPI_WR_DATA:
LDA #01
STA gISD_TRAN_NUM
STZ gISD_Receive_BUFF
SSPI_WR_DATA_LOOP:
JSR MSPI_SCLK_L
JSR MSPI_DELAY_100US
;-------------------------------------------一個周期
LDA gISD_Send_BUFF
BIT gISD_TRAN_NUM
BNE SSPI_WR_DATA_LOOP_SEND
JSR MSPI_MOSI_L ;寫入MOSI
BRA SSPI_WR_DATA_LOOP_RECE
SSPI_WR_DATA_LOOP_SEND:
JSR MSPI_MOSI_H
;---------------------------------------------------
SSPI_WR_DATA_LOOP_RECE:
LSR gISD_Receive_BUFF
LDA !Mac_ISD17XX_PORT2
BIT #Mac_ISD17XX_MISO ;讀取MISO
BEQ SSPI_WR_DATA_LOOP_CMP
LDA #80H
TSB gISD_Receive_BUFF
;---------------------------------------------------
SSPI_WR_DATA_LOOP_CMP:
;---------------------------------------------------
JSR MSPI_DELAY_100US
JSR MSPI_SCLK_H
JSR MSPI_DELAY_100US
ASL gISD_TRAN_NUM
BCC SSPI_WR_DATA_LOOP
RTS
;====================================================================
;11.SPI口初始狀態(tài)
;SS=H , SCLK=H , MOSI=L
MSPI_Initial_State:
LDA #Mac_ISD17XX_SS
TSB Mac_ISD17XX_PORT1
;------------------------
LDA #Mac_ISD17XX_SCLK
TSB Mac_ISD17XX_PORT1
;------------------------
LDA #Mac_ISD17XX_MOSI
TRB Mac_ISD17XX_PORT1
RTS
;====================================================================
;12.直接操作端口
MSPI_SS_H:
LDA #Mac_ISD17XX_SS
TSB Mac_ISD17XX_PORT1
RTS
;---------------------------------------------------
MSPI_SS_L:
LDA #Mac_ISD17XX_SS
TRB Mac_ISD17XX_PORT1
RTS
;---------------------------------------------------
MSPI_SCLK_H:
LDA #Mac_ISD17XX_SCLK
TSB Mac_ISD17XX_PORT1
RTS
;---------------------------------------------------
MSPI_SCLK_L:
LDA #Mac_ISD17XX_SCLK
TRB Mac_ISD17XX_PORT1
RTS
;---------------------------------------------------
MSPI_MOSI_H:
LDA #Mac_ISD17XX_MOSI
TSB Mac_ISD17XX_PORT1
RTS
;---------------------------------------------------
MSPI_MOSI_L:
LDA #Mac_ISD17XX_MOSI
TRB Mac_ISD17XX_PORT1
RTS
;====================================================================
;13.延時5US
MSPI_DELAY_5US:
LDA #01H
STA !WDTC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTS
;====================================================================
;14.延時100US
MSPI_DELAY_100US:
LDA #01H
STA !WDTC
LDA #50
SSPI_DELAY_100US_LP:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DEC A
BNE SSPI_DELAY_100US_LP
RTS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -