📄 ch375h.h
字号:
//=================================================================================================
//*************************************************************************************************
// Module Name : CH375H.H
// Device object:
// Create date : 2005-11-11
// Modify date : 2005-11-11
// Description : USB 1.1 Host for CH375
// 如果设备端不是CH37X,那么分析描述符 CH375中断为查询方式
// Author : Li yuanzheng
// Version : V1.0
//*************************************************************************************************
//=================================================================================================
//
// 未调试过
//
#ifndef __CH375H_H__
#define __CH375H_H__
//*************************************************************************************************
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 以下的参数需要设定:
#define UseCH375LIB 1 // 0: Use no Library file, 1: Use CH375Library
#define MCUMode 0 // 0: MCU = 单片机 ,1: MCU = DSP
#define MCUConnectMode 1 // 0: 与MCU串口方式连接(仅在主机方式下),1: 与MCU并口方式连接
#define MCUBusIOMode 0 // 0: 非总线I/O 的单片机,1: 总线I/O 的单片机
//-------------------------------------------------------------------------------------------------
// 总线I/O 单片机的口定义 ( 只有在 CH375HF3.H, CH375HF4.H 中才用到 )
#define CH375_CMD_PORT_ADDR 0xBDF1 // CH375命令端口的I/O地址
#define CH375_DAT_PORT_ADDR 0xBDF0 // CH375数据端口的I/O地址
//unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; // CH375命令端口的I/O地址
//unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; // CH375数据端口的I/O地址
//-------------------------------------------------------------------------------------------------
// 非总线I/O 单片机的口定义
#if MCUBusIOMode == 0
#define PORT P0 // 数据命令通道的并口
sbit CH375_A0 = P1^0; //
sbit CH375_CS = P1^1; //
sbit CH375_WR = P1^2; //
sbit CH375_RD = P1^3; //
#endif
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// 以下定义的详细说明请看CH375HF4.H文件
#define LIB_CFG_DISK_IO 1 // 磁盘读写的数据的复制方式,1为"单DPTR复制",2为"双DPTR复制",3为"单DPTR和P2+R0复制"
#define LIB_CFG_FILE_IO 1 // 文件读写的数据的复制方式,0为"外部子程序",1为"单DPTR复制",2为"双DPTR复制",3为"单DPTR和P2+R0复制"
#define LIB_CFG_INT_EN 0 // CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式"
//#define LIB_CFG_FILE_IO_DEFAULT 1 // 使用CH375HF4.H提供的默认"外部子程序"
//#define LIB_CFG_UPD_SIZE 1 // 在添加数据后是否自动更新文件长度: 0为"不更新",1为"自动更新"
// 默认情况下,如果扇区数/字节数不为0那么CH375FileWrite/CH375ByteWrite只负责写入数据而不修改文件长度,
// 如果需要每次写完数据后会自动修改/更新文件长度,那么可以使全局变量CH375LibConfig的位4为1,
// 如果长时间不写入数据则应该更新文件长度,防止突然断电后前面写入的数据与文件长度不相符,
// 如果确定不会突然断电或者后面很快有数据不断写入则不必更新文件长度,可以提高速度并减少U盘损耗(U盘内部的内存寿命有限,不宜频繁改写)
//-------------------------------------------------------------------------------------------------
//
// 假定文件数据缓冲区: ExtRAM(62256): 0000H-7FFFH [ 32KB ]
#define DISK_BASE_BUF_ADDR 0x3E00 // ExtRAM: 3E00H-3FFFH [ 512B ], 外部RAM的磁盘数据缓冲区
#define FILE_DATA_BUF_ADDR 0x4000 // ExtRAM: 4000H-7FFFH [ 16KB ], 外部RAM的文件数据缓冲区
#define FILE_DATA_BUF_LEN 512*32 // 16KB
#ifdef CH375HF_DEFINITION
unsigned char xdata FILE_DATA_LAST_BUF[ 512 ] _at_ 0x3C00; // 用来读取原文件尾部不足一个扇区的零碎数据
#endif
//-------------------------------------------------------------------------------------------------
#define NO_DEFAULT_CH375_INT 1 // 定义NO_DEFAULT_CH375_INT禁止默认的中断处理程序,然后用自行编写的程序代替它
// 中断状态查询配置
#define CH375_INT_WIRE INT0 // CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态
#define LIB_CFG_INT_EN 0 // CH375的INT#引脚连接方式为: 0查询方式, 1中断方式
#if LIB_CFG_INT_EN == 1
#define CH375_INT_NO 1 // 中断号码
#define CLEAR_INT_MARK( ) { } // 清除中断标志
#endif
//-------------------------------------------------------------------------------------------------
// 用于演示创建/打开/删除 长文件名文件
#define EN_CH375LIB_MORE 1 // 定义该常量,使头文件产生更多有关文件目录项的定义
//#define EN_DISK_FAT32 1 // 使用CH375HF6.LIB及CH375HF4.H时请启用该常量定义
//-------------------------------------------------------------------------------------------------
// Definition of assign
#ifndef CH375HF_DEFINITION
#define CH375HF_NO_CODE 1
#endif
//-------------------------------------------------------------------------------------------------
// USB规范中未要求在USB设备插入后必须复位该设备,但是计算机的WINDOWS总是这样做,
// 所以有些USB设备也要求在插入后必须先复位才能工作
#define USB_RESET_FIRST 1
//=================================================================================================
// H Head File
//=================================================================================================
//
#include "CH375HF4.H"
//-------------------------------------------------------------------------------------------------
// 当不用CH375程序库时候的定义
#if UseCH375LIB == 0
#if CH375HF_DEFINITION == 1
UINT8V CH375IntStatus; // CH375操作的中断状态
UINT8V CH375DiskStatus; // 磁盘及文件状态
UINT8D CH375LibConfig; // CH375程序库配置,下行说明
UINT8D CH375vDiskFat; // 逻辑盘的FAT标志:1=FAT12,2=FAT16,3=FAT32
UINT8D CH375vSecPerClus; // 逻辑盘的每簇扇区数
UINT32D CH375vStartCluster; // 当前文件或者目录的起始簇号
UINT32D CH375vFileSize; // 当前文件的长度
UINT32D CH375vCurrentOffset; // 当前文件指针,当前读写位置的字节偏移
#endif
#endif
//=================================================================================================
//=================================================================================================
//
extern void CH375_PORT_INIT( void ); // 使用通用I/O模块并口读写时序,进行初始化
extern void xWriteCH375Cmd( UINT8 mCmd ); // 外部定义的被CH375程序库调用的子程序,向CH375写命令,最小周期为4uS,否则之前之后各延时2uS
extern void xWriteCH375Data( UINT8 mData ); // 外部定义的被CH375程序库调用的子程序,向CH375写数据,最小周期为1.5uS,否则之后延时1.5uS
extern UINT8 xReadCH375Data( void ); // 外部定义的被CH375程序库调用的子程序,从CH375读数据,最小周期为1.5uS,否则之前延时1.5uS
#if UseCH375LIB == 1
//-------------------------------------------------------------------------------------------------
// 保存文件数据读写时的缓冲区的当前指针,由应用程序在调用CH375FileReadX和CH375FileWriteX子程序前设置初值
extern unsigned char xdata *current_buffer;
extern void xWriteToExtBuf( UINT8 mLength );
#ifdef EN_DISK_WRITE
extern void xReadFromExtBuf( UINT8 mLength );
#endif
//-------------------------------------------------------------------------------------------------
// 将程序空间的字符串复制到内部RAM中,返回字符串长度
#if MCUMode == 0
extern UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ); // 将程序空间的字符串复制到内部RAM中,返回字符串长度
extern UINT8 mCopyCodeStringToIRAM1( UINT8 idata *iDestination, UINT8 xdata *iSource ); // 将程序空间的字符串复制到内部RAM中,返回字符串长度
extern UINT8 mCopyCodeStringToXRAM( UINT8 xdata *iDestination, UINT8 code *iSource ); // 将程序空间的字符串复制到内部RAM中,返回字符串长度
#endif
#else
//-------------------------------------------------------------------------------------------------
extern UINT8 xQueryInterrupt( void ); // 查询 CH375 中断并更新中断状态
#endif
//-------------------------------------------------------------------------------------------------
//
extern void mStopIfError( UINT8 iErrCode ); // 如果错误则停止运行并显示错误状态
//=================================================================================================
// Main.C
extern void mDelayuS( unsigned int usecond );
extern void mDelaymS( unsigned int msecond );
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -