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

📄 usbhost.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
* Copyright (c) 2004,成都港顺科技发展有限公司
* All rights reserved.
*
* 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
* 工程名称:POS-Test.UV2
* 文件名称:Windows.C
* 摘  要:窗体显示
*
* 单 片 机:uPSD3254
* 当前版本:0.4
* 作  者:范小飞
* 完成日期:2004-12-7 14:45
*/

#include "Main.h"
#include "CH375HFC.H"
#define LIB_CFG_FILE_IO			1		/* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */
#define LIB_CFG_INT_EN			0		/* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */
#define	DISK_BASE_BUF_ADDR		0x7000	/* 外部RAM的磁盘数据缓冲区的起始地址,从该单元开始的缓冲区长度为SECTOR_SIZE */
#define FILE_DATA_BUF_ADDR		0x5000	/* 外部RAM的文件数据缓冲区的起始地址,缓冲区长度不小于一次读写的数据长度,字节模式不用该缓冲区 */




#define USBA0COM  0xe800
#define USBA0DAT  0xe000



void	mDelay100mS( )							//延时
{
	UINT8	i, j, c;
	for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3;
}
void mDelay1_2uS( )  
{
	return;
}
 void xWriteCH375Cmd( UINT8 mCmd ) //写命令函数
{	

	XBYTE[USBA0COM]=mCmd;

}

void xWriteCH375Data( UINT8 mData ) //写数据函数
{

XBYTE[USBA0DAT]=mData;	

}
UINT8 xReadCH375Data( void )      //读数据函数
{	
	UINT8 i;	
	i=XBYTE[USBA0DAT];
	return i;
}
void CH375_PORT_INIT( )          //端口初始化
{			
	xWriteCH375Cmd(0x05);
}



/* 将程序空间的字符串复制到内部RAM中,返回字符串长度 */
UINT8	mCopyCodeStringToXRAM( UINT8 xdata *iDestination, UINT8 code *iSource )
{
	UINT8	i = 0;
	while ( *iDestination = *iSource ) 
	{
		iDestination ++;
		iSource ++;
		i ++;
	}
	return( i );
}


/* 检查操作状态,如果错误则显示错误代码并停机 */
void  mStopIfError( UINT8 iError )
{
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
	else
	{
	//显示错误代码 iError	
	mDelay100mS( );
	while(1);
	}
}
	
void UsbByteWrite(UINT8 *filesname, uchar len,uchar *str)            //U盘写字节写函数
{
	UINT8 i;
//	uchar j,c;
//	ulong k;
	uint l,m,n;
	CH375_PORT_INIT( ); 
	mDelay100mS( );    
	i=CH375LibInit();																					//初始化文件库
	mStopIfError(i); 	
	
	while(1)
	{

		while(CH375DiskStatus !=DISK_CONNECT)xQueryInterrupt();		//检查U盘是否己连接,如果己连接则断续,如果未连接则等待
			mDelay100mS();                                            //延时
			mDelay100mS();                                            //延时
			for ( i = 0; i < 10; i ++ )                               //检查U盘是否准备好
			{ 
				mDelay100mS( );			
				if ( CH375DiskReady( ) == ERR_SUCCESS ) break;       //如果U盘准备好则继续下一步操作
			}
			mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, filesname );  //对文件名进行操作
			i = CH375FileOpen( );	                                   //打开文件
			if ( i == ERR_SUCCESS || i == ERR_MISS_FILE )            //如果文件打开成功或者文件名不存在则进行下一步操作
			 { 
	 			if(i==ERR_MISS_FILE)                                 //如果是文件名不存在则新建文件
	 			{
	 				i = CH375FileCreate( );                           //按给定的文件名建立文件
					mStopIfError( i );                                //判断返回状态是否有错:这里指新建文件是否成功
				}   			
				mCmdParam.ByteLocate.mByteOffset = 0xffffffff;  /* 移到文件的尾部 */
				i = CH375ByteLocate( );
				mStopIfError( i );
			
			if(len>30)
			{
				l=len/30;
				m=len%30;
				n=0;
				
					while(l)
					{
						for(i=0;i<30;i++)
						{
							mCmdParam.ByteWrite.mByteBuffer[i]=*str;
							str++;					
						}
						mCmdParam.ByteWrite.mByteCount = 30; 
						i = CH375ByteWrite( );  /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */
						mStopIfError( i );
						l--;
					}
					if(m)
					{
						while(m)
						{
						mCmdParam.ByteWrite.mByteBuffer[i]=*str;
						str++;	
						m--;	
						}						
						mCmdParam.ByteWrite.mByteCount = m; 
						i = CH375ByteWrite( );  
						mStopIfError( i );	
									
					}
					else
					{
					mCmdParam.Close.mUpdateLen = 1;                      //文件长度更新
					i = CH375FileClose( );                               //写文件完成,关闭文件
					mStopIfError( i );
					break;						
						
					}
			}
			else
			{
				for(i=0;i<len;i++)
				{

				mCmdParam.ByteWrite.mByteBuffer[i]=*str;	
				str++;
			
				}	
				mCmdParam.ByteWrite.mByteCount = len; 
				i = CH375ByteWrite( );  /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */
				mStopIfError( i );			
			}		
				mCmdParam.Close.mUpdateLen = 1;                      //文件长度更新
				i = CH375FileClose( );                               //写文件完成,关闭文件
				mStopIfError( i );
				break;					
			}
			else mStopIfError( i );	
		} 		 
		                                                      //判断返回状态是否有错:这里指关闭文件是否成功
}

void UsbFilesWrite(UINT8 *filesname,ulong Sectorlen ,uchar *str)            //U盘写字节写函数
{
	UINT8 i;
	uint c,b;
	CH375_PORT_INIT( ); 
	mDelay100mS( );                                      //端口初始化:这里指初始化串口
	i=CH375LibInit();																					//初始化文件库
	mStopIfError(i); 
	while(1)
	{
		while(CH375DiskStatus !=DISK_CONNECT)xQueryInterrupt();		//检查U盘是否己连接,如果己连接则断续,如果未连接则等待
		
		for ( i = 0; i < 2; i ++ )                               //检查U盘是否准备好
		{ 
			if ( CH375DiskReady( ) == ERR_SUCCESS ) break;       //如果U盘准备好则继续下一步操作
		}
		mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, filesname );  //对文件名进行操作
		i = CH375FileOpen( );	                                   //打开文件
		if ( i == ERR_SUCCESS || i == ERR_MISS_FILE )            //如果文件打开成功或者文件名不存在则进行下一步操作
		 { 
	 		if(i==ERR_MISS_FILE)                                 //如果是文件名不存在则新建文件
	 		{
	 			i = CH375FileCreate( );                           //按给定的文件名建立文件
				mStopIfError( i );                                //判断返回状态是否有错:这里指新建文件是否成功
			}   
			
		mCmdParam.Locate.mSectorOffset = 0xffffffff;  
		i = CH375FileLocate( );
		mStopIfError( i );
		
		for(b=0;b<Sectorlen;b++)
		{
			CH375DirtyBuffer( );			
			for(c=0;c<512;c++)
					{		
						FILE_DATA_BUF[c]=*str;	
						str++;						
				    }
				mCmdParam.Write.mSectorCount =1;
				i=CH375FileWrite();  
				mStopIfError( i );		
		}			 
  	mCmdParam.Close.mUpdateLen = 1;
		i = CH375FileClose( );                               //写文件完成,关闭文件
		mStopIfError( i );
		break;					
		}
		else mStopIfError( i );			                       									
		  		                               
	}		
		 
}	                     
void UsbByteRead(uchar *filesname,ulong startaddress ,uchar readBytelen,uchar *str) //U盘文件读取函数
{
	UINT8 i; 	
	CH375_PORT_INIT( );
  mDelay100mS();                                  //端口初始化:这里指口串口初始化
	i=CH375LibInit();                                        //文件系统初始化  
	mStopIfError(i); 
	while(1)
	{                                        //判断返回状态是否有错:这里指文件系统初始化是否成功
		while(CH375DiskStatus !=DISK_CONNECT)xQueryInterrupt();   //检查U盘是否己插入
		mDelay100mS();                                           //延时
		mDelay100mS();                                           //延时
		for ( i = 0; i < 2; i ++ )                              //检查U盘是否己准备好
		{                    
			mDelay100mS( );			                                 //延时
			if ( CH375DiskReady( ) == ERR_SUCCESS ) break;       //如果U盘己准备好则进行下一步操作
		}	
		mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, filesname ); //文件名操作
		i = CH375FileOpen( );	                                   //打开文件
		if ( i == ERR_SUCCESS ) 
		{ 				
			mCmdParam.ByteLocate.mByteOffset = startaddress;  
			i = CH375ByteLocate( );
			mStopIfError( i );		
			mCmdParam.ByteRead.mByteCount = readBytelen;
			i = CH375ByteRead( );		 											                         
			mStopIfError( i );			
			for(i=0;i<readBytelen;i++)
			{

			str[i]=mCmdParam.ByteWrite.mByteBuffer[i];
			
			}

⌨️ 快捷键说明

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