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

📄 ch375hf4.inc

📁 USB芯片CH372的驱动代码。较为详细
💻 INC
📖 第 1 页 / 共 4 页
字号:
					INC     DPTR
					MOV  	DPTR,#CH375_DAT_PORT
					MOVX 	A,@DPTR					; 获取中断状态 */
					MOV  	CH375IntStatus,A
					CJNE 	A,#ERR_USB_DISCON,QUERY_INT_DISCON
					MOV  	CH375DiskStatus,#DISK_DISCONNECT	; 检测到USB设备断开事件 */
					RET
QUERY_INT_DISCON:	CJNE 	A,#ERR_USB_CONNECT,QUERY_INT_CONNECT
					MOV  	CH375DiskStatus,#DISK_CONNECT	; 检测到USB设备连接事件 */
					RET
QUERY_INT_CONNECT:	RET
#endif

#ifndef NO_DEFAULT_DELAY_100US
; 在应用程序中定义NO_DEFAULT_DELAY_100US可以禁止默认的延时100uS子程序,然后用自行编写的程序代替它 */
	PUBLIC	xDelay100uS					; 外部定义的被CH375程序库调用的子程序,延时100uS */
; 延时100uS
xDelay100uS:		MOV		R7,#150
xDelay100uS_1:		DJNZ	R7,xDelay100uS_1	; 延时100uS,2x333nS@36MHz&12T */
					RET
#endif
;
#ifdef EN_DISK_WRITE
#ifndef NO_DEFAULT_DELAY_WRITE
; 在应用程序中定义NO_DEFAULT_DELAY_WRITE可以禁止默认的写操作后延时程序,然后用自行编写的程序代替它 */
	PUBLIC	xDelayAfterWrite			; 外部定义的被CH375程序库调用的子程序,写操作后延时 */
; 写操作后延时
xDelayAfterWrite:	MOV		R7,#250
xDelayAfterWrite_1:	DJNZ	R7,xDelayAfterWrite_1	; 延时200uS左右 */
					RET
#endif
#endif
;
#ifndef NO_DEFAULT_FILE_ENUMER
; 在应用程序中定义NO_DEFAULT_FILE_ENUMER可以禁止默认的文件名枚举回调程序,然后用自行编写的程序代替它 */
	PUBLIC	xFileNameEnumer				; 外部定义的被CH375程序库调用的子程序,文件名枚举回调子程序 */
; 文件名枚举回调子程序
; 如果指定枚举序号CH375vFileSize为0xFFFFFFFF后调用FileOpen,那么每搜索到一个文件FileOpen都会调用本回调程序,
; 回调程序xFileNameEnumer返回后,FileOpen递减CH375vFileSize并继续枚举直到搜索不到文件或者目录。建议做法是,
; 在调用FileOpen之前定义一个全局变量为0,当FileOpen回调本程序后,本程序由CH375vFdtOffset得到结构FAT_DIR_INFO,
; 分析结构中的DIR_Attr以及DIR_Name判断是否为所需文件名或者目录名,记录相关信息,并将全局变量计数增量,
; 当FileOpen返回后,判断返回值如果是ERR_MISS_FILE或ERR_FOUND_NAME都视为操作成功,全局变量为搜索到的有效文件数。
; 如果在本回调程序xFileNameEnumer中将CH375vFileSize置为1,那么可以通知FileOpen提前结束搜索。以下是回调程序例子
xFileNameEnumer:	MOV		A,pDISK_BASE_BUF+1	; 参考CH375HF6.H中的程序
#if 0
					ADD		A,CH375vFdtOffset+1
					MOV		DPL,A
					MOV		R7,A
					MOV		A,pDISK_BASE_BUF
					ADDC	A,CH375vFdtOffset		; 当前FDT的起始地址
					MOV		DPH,A					; DPTR指向文件名,pFileDir -> DIR_Name[0]
					MOV		R6,A
					MOVX	A,@DPTR
					MOV		R4,A					; 文件名首字符
					INC		DPTR
					MOVX	A,@DPTR
					MOV		R5,A					; 文件名次字符
;					......
					MOV		A,R7
					ADD		A,#11
					MOV		DPL,A
					MOV		A,R6
					ADDC	A,#0
					MOV		DPH,A					; DPTR指向文件属性,pFileDir -> DIR_Attr
					MOVX	A,@DPTR
;					JB		ACC.4,是目录
;					JNB		ACC.4,是文件
#endif
					RET
#endif
;
#ifdef EXT_BLK_INTERFACE
#ifdef FILE_DATA_BUF_LEN
	PUBLIC	_xWriteToExtBuf				; 外部定义的被CH375程序库调用的子程序,从CH375读取文件数据到外部缓冲区 */
; 该子程序由CH375的子程序库调用,用于从CH375读取文件数据到外部缓冲区,被CH375FileRead调用 */
_xWriteToExtBuf:	RET								;如果文件读写的数据的复制方式不是"外部子程序",则不会调用该子程序
;
#ifdef EN_DISK_WRITE
	PUBLIC	_xReadFromExtBuf			; 外部定义的被CH375程序库调用的子程序,从外部缓冲区读取文件数据到CH375 */
; 该子程序由CH375的子程序库调用,用于从外部缓冲区读取文件数据到CH375,被CH375FileWrite调用 */
_xReadFromExtBuf:	RET								;如果文件读写的数据的复制方式不是"外部子程序",则不会调用该子程序
#endif
#endif
#endif
;
; ********************************************************************************************************************* */
; 供主程序调用的子程序
	PUBLIC	CH375LibInit
; 初始化CH375程序库和CH375芯片, 操作完成后返回状态码在R7中, 操作成功返回0
CH375LibInit:		MOV  	A,SP
					SETB  	C
					SUBB 	A,#0F0H					; CH375子程序库最多可能有7级子程序,查询方式最多需要14字节的堆栈空间,建议提供余量
					JC  	CH375LibInit_SP			; 单片机的堆栈空间不够
					MOV  	R7,#0FCH				; 当前子程序库的版本号太低则返回错误
					RET
CH375LibInit_SP:	MOV  	CH375LibConfig,#LIB_CFG_VALUE	; CH375程序库配置值
					LCALL	CH375GetVer				; 获取当前子程序库的版本号
					MOV  	A,R7
					CLR  	C
					SUBB 	A,#CH375_LIB_VER
					JNC  	CH375LibInit_GOON
					MOV  	R7,#0FFH				; 当前子程序库的版本号太低则返回错误
					RET
CH375LibInit_GOON:
#ifdef DISK_BASE_BUF_LEN
					MOV  	pDISK_BASE_BUF,#HIGH DISK_BASE_BUF	; 指向外部RAM的磁盘数据缓冲区
					MOV  	pDISK_BASE_BUF+1,#LOW DISK_BASE_BUF
#endif
					LCALL	CH375Init				; 初始化CH375
					RET
;
; ********************************************************************************************************************* */
; 以下被CH375程序库用到的子程序,来自C51的程序库C51S.LIB
; 如果没有下面这些子程序(将其注释掉), 那么链接方法是: LX51  CH375HFT.OBJ , CH375HF6.LIB, C51S.LIB
; 如果有下面这些子程序, 那么链接方法是: LX51  CH375HFT.OBJ , CH375HF6.LIB
; 建议, 如果应用程序也用到C51S.LIB中的子程序, 那么将下面这些内容注释掉, 防止链接时出现同名冲突
	PUBLIC	?C?ULCMP
?C?ULCMP:			MOV   A,R3
					SUBB  A,R7
					MOV   B,A
					MOV   A,R2
					SUBB  A,R6
					ORL   B,A
					MOV   A,R1
					SUBB  A,R5
					ORL   B,A
					MOV   A,R0
					SUBB  A,R4
					ORL   A,B
					RET
	PUBLIC	?C?ULSHR
?C?ULSHR:			MOV   A,R0
					JZ    ?C?ULSHR_RET
?C?ULSHR_LOOP:		MOV   A,R4
					CLR   C
					RRC   A
					MOV   R4,A
					MOV   A,R5
					RRC   A
					MOV   R5,A
					MOV   A,R6
					RRC   A
					MOV   R6,A
					MOV   A,R7
					RRC   A
					MOV   R7,A
					DJNZ  R0,?C?ULSHR_LOOP
?C?ULSHR_RET:		RET
	PUBLIC	?C?LSHL
?C?LSHL:			MOV   A,R0
					JZ    ?C?LSHL_RET
?C?LSHL_LOOP:		MOV   A,R7
					CLR   C
					RLC   A
					MOV   R7,A
					MOV   A,R6
					RLC   A
					MOV   R6,A
					MOV   A,R5
					RLC   A
					MOV   R5,A
					MOV   A,R4
					RLC   A
					MOV   R4,A
					DJNZ  R0,?C?LSHL_LOOP
?C?LSHL_RET:		RET
	PUBLIC	?C?LLDIDATA
?C?LLDIDATA:		MOV   A,@R0
					MOV   R4,A
					INC   R0
					MOV   A,@R0
					MOV   R5,A
					INC   R0
					MOV   A,@R0
					MOV   R6,A
					INC   R0
					MOV   A,@R0
					MOV   R7,A
					RET
	PUBLIC	?C?LLDIDATA0
?C?LLDIDATA0:		MOV   A,@R0
					MOV   R3,A
					INC   R0
					MOV   A,@R0
					MOV   R1,A
					INC   R0
					MOV   A,@R0
					MOV   R2,A
					INC   R0
					MOV   A,@R0
					XCH   A,R3
					MOV   R0,A
					RET
	PUBLIC	?C?LSTIDATA
?C?LSTIDATA:		MOV   A,R4
					MOV   @R0,A
					INC   R0
					MOV   A,R5
					MOV   @R0,A
					INC   R0
					MOV   A,R6
					MOV   @R0,A
					INC   R0
					MOV   A,R7
					MOV   @R0,A
					RET
	PUBLIC	?C?LSTXDATA
?C?LSTXDATA:		MOV   A,R4
					MOVX  @DPTR,A
					INC   DPTR
					MOV   A,R5
					MOVX  @DPTR,A
					INC   DPTR
					MOV   A,R6
					MOVX  @DPTR,A
					INC   DPTR
					MOV   A,R7
					MOVX  @DPTR,A
					RET
	PUBLIC	?C?LSTKIDATA
?C?LSTKIDATA:		POP   DPH
					POP   DPL
					CLR   A
					MOVC  A,@A+DPTR
					MOV   @R0,A
					INC   R0
					MOV   A,#01H
					MOVC  A,@A+DPTR
					MOV   @R0,A
					INC   R0
					MOV   A,#02H
					MOVC  A,@A+DPTR
					MOV   @R0,A
					INC   R0
					MOV   A,#03H
					MOVC  A,@A+DPTR
					MOV   @R0,A
					MOV   A,#04H
					JMP   @A+DPTR
; 以上是被CH375程序库用到的子程序,来自C51的程序库C51S.LIB,如果去掉这些子程序,那么链接时要加上C51S.LIB
;
#endif
;

⌨️ 快捷键说明

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