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

📄 main.c

📁 基于lpc2378的u盘驱动
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co., LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Litiantian
** Modified date:		2007-12-30
** Version:
** Descriptions:		在SmartARM2300教学实验工控开发平台上演示对优盘伴侣的操作。
**
**------------------------------------------------------------------------------------------------------
** Modified by:			yangshiping
** Modified date:		2007-09-03
** Version:				
** Descriptions:		对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by:		Litiantian
********************************************************************************************************/

#include "config.h"

/*********************************************************************************************************
** 函数名称:UART3_IniDft
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数:无 
** 出口参数:无
**********************************************************************************************************/
void UART3_IniDft(void)
{
	uint32 	Fdiv = 0;
	
	PCONP  |= 1 << 25;						// 打开UART3

	/* 初始化相关的I/O */
	PINSEL9 = (0x03 << 24) | (0x03 << 26);	// 设置P4.28和P4.29连接到UART3

	/* 初始化串口通讯参数 */
	U3LCR 	= 0x80;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / 115200;		// 设置波特率
	U3DLM 	= Fdiv / 256;
	U3DLL 	= Fdiv % 256;
	U3LCR 	= 0x03;							// 令DLAB位为0
	U3FCR  &= ~0x07;						// 禁用FIFO
    U3IER  &= ~0x07;						// 禁止UART产生中断
}

/*********************************************************************************************************
** 函数名称:UART3_SendChar
** 函数功能:通过串口3发送一个字符
** 入口参数:chr	要发送的字符
** 出口参数:无
*********************************************************************************************************/
void UART3_Sendchar(uint8 chr)
{
	U3THR   = chr;
	while ((U3LSR & 0x20) == 0);	
}

/*********************************************************************************************************
** 函数名称:UART3_SendStr
** 函数功能:通过串口3发送一个字符串
** 入口参数:str	要发送的字符串的指针
** 出口参数:无
*********************************************************************************************************/
void UART3_SendStr(char *str)
{
	while (1)
	{
		if (*str == '\0')
		{	
			break;		// 遇到结束符则退出
		}
		
		UART3_Sendchar(*str);
		str++;
	}
}

/*********************************************************************************************************
** 函数名称:SysOp_Demo
** 函数功能:演示系统操作
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void SysOp_Demo(void)
{
	char   str[128];
	uint32 UDisk_baud = 9600;				// 该变量用于记录当前的从机波特率
	SYSINF sysinf;							// 定义一个系统信息控制块类型变量,用于存储系统信息
	
	/* 1: 读取系统信息并通过串口3输出到上位机 */
	while (TRUE != GetSysInfo(&sysinf));	// 读取系统信息
	
	sprintf(str, "Hello! Baud of EasyUDisk  is %4d bps,Date is 200%d-%02d-%02d,Time is %02d:%02d:%02d."
			, UDisk_baud, sysinf.Year, sysinf.Month, sysinf.Dom, sysinf.Hour, sysinf.Min, sysinf.Sec);
	
	UART3_SendStr(str);
	UART3_SendStr("\r\n");
	sprintf(str,"%d UDisk has been inserted.", sysinf.DiskIn);
	UART3_SendStr(str);
	UART3_SendStr("\r\n");
	
	/* 2: 重新设定系统信息 */		
	sysinf.Baud  = 7;						// 设从机的波特率为115200
	sysinf.Year	 = 7;
	sysinf.Month = 7;
	sysinf.Dom	 = 1;
	sysinf.Hour	 = 10;
	sysinf.Min	 = 40;
	sysinf.Sec	 = 0;
	while (TRUE != SetUDiskSysInfo(&sysinf));
	UART0Init(115200);						// 由于从机的波特率改变,所以主机也需调整UART0的波特率
	UDisk_baud = 115200;					// 当前从机波特率信息更新
	
	/* 3: 再次读取系统信息并通过串口3输出到上位机 */
	while (TRUE != GetSysInfo(&sysinf));
	
	sprintf(str, "Hello! Baud of EasyUDisk  is %4d bps,Date is 200%d-%02d-%02d,Time is %02d:%02d:%02d."
			, UDisk_baud, sysinf.Year, sysinf.Month, sysinf.Dom, sysinf.Hour, sysinf.Min, sysinf.Sec);
	
	UART3_SendStr(str);
	UART3_SendStr("\r\n");
	sprintf(str,"%d UDisk has been inserted.",sysinf.DiskIn);
	UART3_SendStr(str);
	UART3_SendStr("\r\n");
}

uint8 const  WritFileData[] =
	"\r\n******************Copyright (c) 广州致远电子有限公司***********************\r\n\
	\r\n\
    	优盘作为数据的载体目前已广泛应用于嵌入式行业,而某些电子产品在国家标准中已成了\r\n\
	强制性的要求。在嵌入式的电子产品中实现对优盘文件的读写,成了许多厂家的技术攻关的难\r\n\
	题。优盘伴侣EasyUDisk读写优盘模块可以轻易解决以上问题,它是低端单片机操作优盘的最\r\n\
	佳伴侣。\r\n\
    	EasyUDisk模块采用PHILIPS公司工业级USB主控芯片ISP1160和ARM7微处理器LPC2132,整个\r\n\
	模块以工业级标准设计。模块提供了通用RS-232串口与用户系统连接,使普通的单片机也可以\r\n\
	轻易实现对优盘的操作。\r\n\
    	EasyUDisk模块适用于仪器仪表、门禁系统、汽车黑匣子和税控机等对存贮速度要求不高\r\n\
	的设备中使用。\r\n\
		\r\n\
		\r\n*********************************嵌入式系统事业部************************************\r\n"; 
		
/*********************************************************************************************************
** 函数名称:FileOp_Demo
** 函数功能:演示文件操作
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void FileOp_Demo(void)
{
	FileCB *fileCB 	= NULL;
	char RdFileDat[sizeof(WritFileData)];
	SYSINF sysinf;								// 定义一个系统信息控制块类型变量,用于存储系统信息

	/* 查询优盘是否插入,当前是否有文件打开 */
	while (0 == sysinf.DiskIn)					// 等待优盘插入
	{
		GetSysInfo(&sysinf);
		if (sysinf.FH.fh != HANDLE_AVAILABLE)	// 若EasyUDisk功能模块上已有文件打开
		{
			FileClose();						// 先将已打开的文件关闭。
		}
	}
	
	/* 在当前目录下建立一个文件并保存 */			
	fileCB = FileOpen("A:\\演示程序.txt");
	FileClose();
	
	/* 向该文件写入数据 */		
	fileCB = FileOpen("A:\\演示程序.txt");
	if (NULL != fileCB)
	{
	 	FileSeek(fileCB, 0, SEEK_END);									// 将读写指针移到文件末尾
		FileWrite((uint8*)WritFileData, sizeof(WritFileData), fileCB);	// 写数据入文件
	}
	FileClose();														// 保存写入的信息
	
	/* 将文件中的数据,读到上位机 */
	fileCB = FileOpen("A:\\演示程序.txt");
	if (NULL != fileCB)
	{
	 	FileSeek(fileCB, -sizeof(WritFileData), SEEK_END);				// 将读写指针移到文件头
		FileRead((uint8*)RdFileDat, sizeof(WritFileData), fileCB);		// 将文件中的数据读到缓存
	}
	UART3_SendStr(RdFileDat); 
	/* 文件操作结束,关闭文件 */
	FileClose();
	
	RemoveFile("A:\\演示程序.txt");			
}

/*********************************************************************************************************
** 函数名称:main
** 函数功能:在SmartARM2300教学实验工控开发平台上演示对优盘伴侣的操作。
** 入口参数:无
** 出口参数:返回0则表示程序出错。
** 调试说明:1、需用杜邦线分别连接好P0.2、P0.3和MTXD与MRXD;此外还要将UDisk功能模块与SmartARM2300工控开发平台上的串口CON13相连;
**           2、确保优盘插入后,EasyUDisk功能模块上的指示灯一直为绿,此时才可进行调试.否则,必须复位功能模块,再插拔优盘;
**			 3、需用杜邦线分别连接好P4.28、P4.29和TXD0、RXD0;
**           4、需用串口线将开发SmartARM2300工控开发平台的CON6和pc的串口相连;
**		     5、需打开串口调试软件EasyARM.exe。
*********************************************************************************************************/
int main(void)
{
	/* 初始化 */
	UART3_IniDft();	
	UDiskIni(9600);					// 初始化主机UART0波特率为9600bps,若从机波特率和主机波特率不一致,从机需重新上电复位,优盘必须待从机的指示灯为绿色闪亮时方可插入
	
	/* 系统操作演示 */
	SysOp_Demo();
	
	/* 目录操作演示 */
	MakeDir("ZLGARM");				// 创建目录						
	
	MakeDir("Demo");				// 在根目录下建立一个目录Demo	
	ChangeDir("A:\\ZLGARM");		// 当前目录由根目录切换到目录ZLGARM
	MakeDir("Demo");				// 在ZLGARM下建立一个目录Demo	

	RemoveDir("A:\\ZLGARM\\Demo");	// 用户在建立目录Demo后,可将此语句的注释取消再执行程序,观察是哪一个目录Demo是否被删除
	
	/* 文件操作演示 */
	FileOp_Demo();
	
	while (1);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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