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

📄 a40_isd17xx.asm

📁 用W588D写的驱动6210-2.4G无线模块,收发程序在一块,(65C02汇编指令实现)
💻 ASM
字号:
;***************************************************************************
;***************************************************************************
;==========================ISD17XXX=========================================
;>>所在项目:M07853
;>>包含函数:
;		1.MISD17XX_Initial				;初始化ISD17XX
;
;		8.MISD17XX_STOP					;停止ISD的所有操作
;		9.MISD_COMM_SEND				;发送数据,并接收状态数据
;		10.MSPI_WR_DATA					;从SPI口读写一个字节的数据
;		11.MSPI_Initial_State			;SPI口初始状态
;		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
;==========================================================================
;>>修改日期:2008/02/26
;>>程序员:Wangbo
;==========================================================================
;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.擦除设置地址区间,依据gDIP_NUM
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
	;---------------------------------------------------
	LDA gDIP_NUM
	ASL A
	TAX
	JMP (TAB_ISD17XX_ERASE_SEG,X)
SISD17XX_ERASE_SEG1:
	MACRO_ISD17XX_COMM_SET_Erase_SEG1
	JMP SISD17XX_SET_Erase_Long_INT
SISD17XX_ERASE_SEG2:
	MACRO_ISD17XX_COMM_SET_Erase_SEG2
	JMP SISD17XX_SET_Erase_Long_INT
SISD17XX_ERASE_SEG3:
	MACRO_ISD17XX_COMM_SET_Erase_SEG3
	JMP SISD17XX_SET_Erase_Long_INT
SISD17XX_ERASE_SEG4:
	MACRO_ISD17XX_COMM_SET_Erase_SEG4
	BRA SISD17XX_SET_Erase_Long_INT
SISD17XX_ERASE_SEG5:
	MACRO_ISD17XX_COMM_SET_Erase_SEG5
	BRA SISD17XX_SET_Erase_Long_INT
SISD17XX_ERASE_SEG6:
	MACRO_ISD17XX_COMM_SET_Erase_SEG6
;------------------------------------------
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
TAB_ISD17XX_ERASE_SEG:
	DW SISD17XX_ERASE_SEG1
	DW SISD17XX_ERASE_SEG1
	DW SISD17XX_ERASE_SEG2
	DW SISD17XX_ERASE_SEG3
	DW SISD17XX_ERASE_SEG4
	DW SISD17XX_ERASE_SEG5
	DW SISD17XX_ERASE_SEG6
;==========================================================================
;3.设置地址区间,并在该区间录音,依据gDIP_NUM
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
	LDA gDIP_NUM
	ASL A
	TAX
	JMP (TAB_ISD17XX_REC_SEG,X)
	;---------------------------------------------------
SISD17XX_REC_SEG1:
	MACRO_ISD17XX_COMM_SET_REC_SEG1
	RTS
SISD17XX_REC_SEG2:
	MACRO_ISD17XX_COMM_SET_REC_SEG2
	RTS
SISD17XX_REC_SEG3:
	MACRO_ISD17XX_COMM_SET_REC_SEG3
	RTS
SISD17XX_REC_SEG4:
	MACRO_ISD17XX_COMM_SET_REC_SEG4
	RTS
SISD17XX_REC_SEG5:
	MACRO_ISD17XX_COMM_SET_REC_SEG5
	RTS
SISD17XX_REC_SEG6:
	MACRO_ISD17XX_COMM_SET_REC_SEG6
	RTS
TAB_ISD17XX_REC_SEG:
	DW SISD17XX_REC_SEG1
	DW SISD17XX_REC_SEG1
	DW SISD17XX_REC_SEG2
	DW SISD17XX_REC_SEG3
	DW SISD17XX_REC_SEG4
	DW SISD17XX_REC_SEG5
	DW SISD17XX_REC_SEG6
;==========================================================================
;4.播放指定地址区间的录音,依据gDIP_NUM
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
	;---------------------------------------------------
	LDA gDIP_NUM
	ASL A
	TAX
	JMP (TAB_ISD17XX_PLAY_SEG,X)

SISD17XX_PLAY_SEG1:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG1	
	RTS
SISD17XX_PLAY_SEG2:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG2
	RTS
SISD17XX_PLAY_SEG3:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG3
	RTS
SISD17XX_PLAY_SEG4:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG4
	RTS
SISD17XX_PLAY_SEG5:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG5
	RTS
SISD17XX_PLAY_SEG6:
	MACRO_ISD17XX_COMM_SET_PLAY_SEG6
	RTS

TAB_ISD17XX_PLAY_SEG:
	DW SISD17XX_PLAY_SEG1
	DW SISD17XX_PLAY_SEG1
	DW SISD17XX_PLAY_SEG2
	DW SISD17XX_PLAY_SEG3
	DW SISD17XX_PLAY_SEG4
	DW SISD17XX_PLAY_SEG5
	DW SISD17XX_PLAY_SEG6

;==========================================================================
;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
;==========================================================================
;9.	依据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
;====================================================================
;10.从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
;====================================================================
;11.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
;====================================================================
;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		;0.5uS
    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 + -