📄 a30_isd17xx.asm
字号:
;****************************************************************************************
;****************************************************************************************
;=========================ISD17XXX底层驱动程序===========================================
;1. 实现的功能:
; ISD17120的段擦除,段录音,段播放功能
;2. 包含函数:
; 1.MISD17XX_Initial ;初始化ISD17XX
; 2.MISD17XX_SET_Erase_SEG ;擦除设置地址区间,依据gISD_SGEBuff
; 3.MISD17XX_SET_REC_SEG ;设置地址区间,并在该区间录音,依据gISD_SGEBuff
; 4.MISD17XX_SET_PLAY ;播放指定地址区间的录音,依据gISD_SGEBuff
; 5.MISD17XX_STOP ;停止ISD的所有操作
; 6.MISD_COMM_SEND ;发送数据,并接收状态数据
; 7.MSPI_WR_DATA ;从SPI口读写一个字节的数据
; 8.MSPI_Initial_State ;SPI口初始状态
; 9. MSPI_SS_H ;直接操作端口
; MSPI_SS_L ;
; MSPI_SCLK_H ;
; MSPI_SCLK_L ;
; MSPI_MOSI_H ;
; MSPI_MOSI_L ;
; 10.MSPI_DELAY_5US ;延时5US
; 11.MSPI_DELAY_100US ;延时100US
;3. 修改日期: 2008/07/26
;========================================================================================
;1.初始化ISD17XX
MISD17XX_Initial:
SISD17XX_Initial:
LDA #01H
STA !WDTC
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_DEVID
;---------------------------------------------------
LDA gISD_Receive_DATA+2
CMP #Mac_USE_ISD_ID ;读取ID是否正确
BNE SISD17XX_Initial_ID120
BRA SISD17XX_Initial_ID240
SISD17XX_Initial_ID120:
CMP #Mac_ISD17120_ID
BNE SISD17XX_Initial
SISD17XX_Initial_ID240:
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2
;---------------------------------------------------
SISD17XX_Initial_RDY:
LDA #01H
STA !WDTC
MACRO_ISD17XX_COMM_RD_STATUS
;------------------------
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_Initial_RDY
;---------------------------------------------------
RTS
;========================================================================================
;2.擦除设置地址区间,依据gISD_SGEBuff
MISD17XX_SET_Erase_SEG:
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
;---------------------------------------------------
JSR MISD17XXX_Erase_ADDR ;依据gISD_SGEBuff,设置擦除地址
;---------------------------------------------------
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
;========================================================================================
;3.设置地址区间,并在该区间录音,依据gISD_SGEBuff
MISD17XX_SET_REC_SEG:
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
JSR MISD17XXX_Record_ADDR ;依据gISD_SGEBuff,设置录音地址
RTS
;========================================================================================
;4.播放指定地址区间的录音,依据gISD_SGEBuff
MISD17XX_SET_PLAY:
MACRO_ISD17XX_COMM_PU
;---------------------------------------------------
MACRO_ISD17XX_COMM_CLR_INT
;---------------------------------------------------
MACRO_ISD17XX_COMM_WR_APC2
SISD17XX_SET_PLAY__RDY:
MACRO_ISD17XX_COMM_RD_STATUS
LDA gISD_Receive_DATA+2
BIT #01H
BEQ SISD17XX_SET_PLAY__RDY
;---------------------------------------------------
JSR MISD17XXX_Play_ADDR ;依据gISD_SGEBuff,设置播放声音的地址
RTS
;========================================================================================
;5.停止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
;========================================================================================
;6. 依据gISD_COMM_BYTE(命令的字节数)和gISD_Send_DATA(将发送的数据)发送数据,
; 并接收状态数据,存于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
;========================================================================================
;7.从SPI口读写一个字节的数据
; SPI口初始状态
; SS已拉低
; 发送的数据存于gISD_Send_BUFF中
; 接收到的数据存于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
;========================================================================================
;8.SPI口初始状态
; 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
;=================================================================================
;9.直接操作端口
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
;========================================================================================
;10.延时5US
MSPI_DELAY_5US:
LDA #01H
STA !WDTC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTS
;========================================================================================
;11.延时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
;========================================================================================
;12.2.音量增加
MISD17XX_APC_VOL_INC:
MACRO_ISD17XX_COMM_RD_APC
LDA gISD_Receive_DATA+1
AND #07H
BEQ SISD17XX_APC_VOL_INC_NO
DEC A
SISD17XX_APC_VOL_INC_NO:
ORA #80H
STA gISD_Send_DATA+1
LDA #Mac_ISD_COMM_WR_APC2 ;0X65
STA gISD_Send_DATA
; LDA #80H
; STA gISD_Send_DATA+1
LDA #0CH
STA gISD_Send_DATA+2
LDA #Mac_ISD_COMM_BYTE3
STA gISD_COMM_BYTE
JSR MISD_COMM_SEND
RTS
;========================================================================================
;12.3.音量减小
MISD17XX_APC_VOL_DEC:
MACRO_ISD17XX_COMM_RD_APC
LDA gISD_Receive_DATA+1
AND #07H
CMP #07H
BCS SISD17XX_APC_VOL_DEC_NO
INC A
SISD17XX_APC_VOL_DEC_NO:
ORA #80H
STA gISD_Send_DATA+1
LDA #Mac_ISD_COMM_WR_APC2 ;0X65
STA gISD_Send_DATA
; LDA #80H
; STA gISD_Send_DATA+1
LDA #0CH
STA gISD_Send_DATA+2
LDA #Mac_ISD_COMM_BYTE3
STA gISD_COMM_BYTE
JSR MISD_COMM_SEND
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -