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

📄 main.c.bak

📁 arm(s3c440b)读写u盘源程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#include "44B0X.H"
#include "datatype.h"
#include "console.h"
#include "host_811.h"
#include "FileSys.h"
#include "FAT.h"
#include "string.h"
extern U32 MCLK;
extern Control  USB_Control;
volatile char which_int=0;
TIME_STRUC SysTime;
char *WeekDay[7] = {"SUN","MON", "TUES", "WED", "THURS","FRI", "SAT"}; 
U32	SERIAL_BAUD = 115200;
char table_begin[ 70 ] = "/***************************************************************/\n0";
//---------------------------------------------------------------------------------//
//4,5,6,7中断函数初始化
//测试中断所使用定义
//#define BIT_GLOBAL	(0x1<<26)
//#define BIT_EXINT4567 (0X1<<20)
char flag;
void __irq Eint4567Isr(void)
{
 which_int = rEXTINTPND;
    rEXTINTPND = 0xf;		//clear EXTINTPND reg.		
    rI_ISPC = BIT_EINT4567;	//clear pending_bit

//	 Beep(500);		//延时若干个100us,消除抖动
	rPCONG = 0x0000;//剥夺按键中断,其只作为输入
	if( (rPDATG&0xf0) != 0xf0)
	{
	    switch(which_int)
	    {
			case 1:
			{
			Led_Display(0,1);						
			}
			    break;
			case 2:
			{
		  Led_Display(1,1);
			}
			    break;
			case 4:
			{
		Led_Display(2,1);
			}
			    break;
			case 8:
			{
			//rPDATE=rPDATE&0x17f;
			}
			    break;
			default :
				break;
	    }

	}
	while((rPDATG&0xf0) != 0xf0);		//按键没有松开就一直等待
    rPCONG = rPCONG | 0xff00;		//GPG4、5、6、7设为中断引脚
}
void Isr_Init(void)
{
    rINTCON = 0x1;		//中断控制寄存器设置

    rINTMOD=0x0;	  // All=IRQ mode

    pISR_EINT4567 = (int)Eint4567Isr;
    rINTMSK&=~(BIT_EINT4567);		//按键中断有效

    rPCONG = rPCONG | 0xff00;		//GPG4、5、6、7设为中断引脚
    rPUPG = rPUPG & 0x0f;		//GPG4、5、6、7上拉电阻有效
	rEXTINT=0x02220000;	//上升沿触发
 
    rINTMSK&=~(BIT_GLOBAL);		//全局中断有效
}
void ShowSysClock(int argc, char *argv[])
{
	printf("----------ARM System is running @%dHz\n", MCLK);	
}
//---------------------------------------------------------------------------------//
int GetParameter(char *str, int cnt)
{
	int i, key;
	
	
	i = 0;
	while(1)
	{
		if(kbhit())
		{
			key = getkey();
			if(key==BACK_KEY)
				i -= i?1:0;
			else
			if(key==ENTER_KEY)
			{
				str[i] = 0;
				return i;
			}
			else
			if(i<cnt)
			{	
				putch(key);
				str[i++] = key;
			}									
				
		}
	}
	
}
//---------------------------------------------------------------------------------//

int GetDate(int argc, char *argv[])
{
	int i, error = 0;
	char tmp[8];
	char *str;
	U32 year, month, day;
	
	RtcGetTime(&SysTime);
	printf("Current date is %d-%x-%x %s\n", SysTime.year, SysTime.month, SysTime.day, WeekDay[SysTime.weekday]);
	
	if(argc<2)
		return 0;	
		
	str = argv[1];	
	
	for(i=0; i<5; i++)	
		tmp[i] = str[i];
	if(tmp[4]!='-')
		error = 1;
	year = strtodec(str, 4);
	if(year<2000||error)
	{			
		puts("year error!\n");
		return 0;
	}		
				
	str += 5;
	i = 0;		
	if(str[++i]!='-')
		if(str[++i]!='-')
			error = 1;
	str[i] = 0;					
	month = strtobcd(str);
	if((month-1)>0x11||error)
	{				
		puts("month error!\n");
		return 0;
	}		
		
	str += i+1;		
	i = 0;
	if(str[++i]!=0)
		if(str[++i]!=0)
			error = 1;
	str[i] = 0;		
	day = strtobcd(str);
	if((day-1)>0x30||error)
	{		
		puts("day error!\n");
		return 0;
	}	
	
	SysTime.year  = year-2000;
	SysTime.month = month;
	SysTime.day   = day;		
	RtcSetDay(&SysTime);	
	
	printf("Set date %d-%x-%x %s\n", year, month, day, WeekDay[SysTime.weekday]);
	
	return 1;
}

//---------------------------------------------------------------------------------//

int GetTime(int argc, char *argv[])
{
	int i, error = 0;
	char *str;
	U32 hour, min, sec;
	
	RtcGetTime(&SysTime);
	printf("Current time is %x:%x:%x\n", SysTime.hour, SysTime.min, SysTime.sec);
	
	if(argc>1)
	{
		str = argv[1];
		i = 0;
		if(str[++i]!=':')
			if(str[++i]!=':')
				error = 1;
		str[i] = 0;		
		hour = strtobcd(str);
		if(hour>0x23||error)
		{
			puts("hour error!\n");
			return error;
		}
		
		str	+= i+1;
		i = 0;		
		if(str[++i]!=':')
			if(str[++i]!=':')
				error = 1;
		str[i] = 0;		
		min = strtobcd(str);		
		if(min>0x59||error)
		{
			puts("minute error!\n");
			return error;
		}
		
		str	+= i+1;
		i = 0;		
		if(str[++i]!=0)
			if(str[++i]!=0)
				error = 1;
		str[i] = 0;		
		sec = strtobcd(str);		
		if(sec>0x59||error)
		{
			puts("second error!\n");
			return error;
		}
		
		SysTime.hour = hour;
		SysTime.min  = min;
		SysTime.sec = sec;		
		RtcSetTime(&SysTime);
		
		printf("Set time %x:%x:%x\n", hour, min, sec);								
	}	
	
	return error;
}

//---------------------------------------------------------------------------------//
U16 CalTimePara4FAT(U8 hour,U8 minute,U8 second)
{
	U16 result;
	result=hour*2048+minute*32+second+2;
	return result;
}
U16 CalDatePara4FAT(U16 year,U8 month,U8 day)
{
	U16 result;
	result=(year-1980)*512+month*32+day;
	return result;
}
//////////////////////////////////////////////////////////////////////////////////
int Fun_createfile(int argc,char *argv[])
{
	char p[256],i;//,Status=0
	U8 length;
	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
	if(argc!=2) 
		{
		printf("Bad Command.\n");
		return 0;
		}
	////////////////////////////////////////////////////////
	length=strlen(argv[1]);
	if(length<13)
	{
		if(!GetShorFileForm(argv[1],p))
		{
			printf("文件字符格式错误\n");
			return FALSE;
		}
	}else
	{
		memcpy(p,argv[1],length);
		for(i=0;i<length;i++)
		{
			if((p[i]>=97)&&(p[i]<=122))
			{
				p[i]=p[i]-32;
			}
		}
		p[length]='\0';
	}
	///////////////////////////////////////
	if(OpenFile(p))
	{
		printf("文件已经存在,并打开了\n");
		return FALSE;
	}
	////////////////////////////////////////
	if(length<13)
	{ 
		if(!CreateFile(p))
		{
			printf("创建短文件失败\n");
			return FALSE;
		}
	}
	
	
	printf("文件创建成功\n");
	return TRUE;
}
///////////////////////////////////////////////////////////////////
int Fun_createdir(int argc,char *argv[])
{
	char blength,p[256],i;
	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
	if(argc!=2)
	{
		return FALSE;
	}
	blength=strlen(argv[1]);
	memcpy(p,argv[1],blength);	
	if(blength>=9)
	{
		for(i=0;i<blength;i++)
		{
			if((p[i]>=97)&&(p[i]<=122))

			{
				p[i]-=32;
			}
		}
	}
	p[blength]='\0';
	if(OpenDir(p))
	{
		printf("该目录已经存在\n");
		ExitDir();
		return FALSE;
	}
	if(!CreateDir(argv[1]))
	{
		return FALSE;
	}
	printf("目录创建成功\n");
	return TRUE;
}
int Fun_opendir(int argc,char *argv[])
{
	U8 i,blength;
	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
	if(argc!=2) 
		{
		printf("Bad Command.\n");
		return 0;
		}
	blength=strlen(argv[1]);
	if(blength>9)
	{
		for(i=0;i<blength;i++)
		{
			if((*(argv[1]+i)>=97)&&(*(argv[1]+i)<=122))
			{
				*(*(argv+1)+i)-=32;
			}
		}
	}
	if(!OpenDir(argv[1]))
	{
		printf("目录打开失败\n");
		return FALSE;
	}
	printf("目录打开成功\n");
	return TRUE;
}
int Fun_listdir(int argc,char *argv[])
{
  U8 status,BUF[4096],j;
  U16 count,i,length;
   ////////////////////////////////////////
  	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
  status=List(&count,BUF);
  if(!status)
  {
	  printf("列举文件失败\n");
	  return FALSE;
  }
  printf("列举文件成功,有%d个文件或则目录在当前目录下:\n",count);
  for(i=0;i<count;i++)
  {
	  for(j=0;j<11;j++)
	  {
		printf("%c",BUF[i*32+j]);
	  } 
	  if(BUF[i*32+11]==0x10)
	  {
		printf("\t文件夹\n");
	  }else{
		 length=MakeU32(BUF[i*32+31],BUF[i*32+30],BUF[i*32+29],BUF[i*32+28]);
		printf("\t文件\t大小:%d字节\n",length);
	  }
  }
  return TRUE;
  ///////////////////////////////////////////////////////
}
int Fun_updir(int argc,char *argv[])
{
	U8 status;	
	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
    status=ExitDir();
	if(status==1)
	{
	printf("返回上级目录成功!\n");
	}else {
		printf("已经在根目录下了!\n");
    }	
	return status;
}
int Fun_rootdir(int argc,char *argv[])
{
	U8 status;
	if (!USB_Control.UDiskOK)
	{
	  printf("请先插入移动盘\n");
	  return 0;
	}
	status=Rootdir();
	if(status==1)
	{
	 printf("返回到根目录成功!\n");
	}
	else{
		printf("返回到根目录失败!\n");
	}
	return status;
}
int Fun_getcap(int argc,char *argv[])
{
	U32 Total,Free;

⌨️ 快捷键说明

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