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

📄 main.c

📁 周立功 214x pack 配套光盘
💻 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:		LPC214x 收发大量数据 main.c 文件
**
**------------------------------------------------------------------------------------------------------
** Created by:			郑明远
** Created date:		2005-08-6
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/


#include "config.h"
#include "USBConfig.h"										/* 加入USB相关头文件 */
#include "USBCI.h"
#include "USBDriver.h"

/***************************************************************************************
** 函数名称  : Init_USBInterrupt()
** 功能描述  : 配置USB设备控制器的中断向量号和中断优先级
***************************************************************************************/
void Init_USBInterrupt(void)
{
	VICVectCntl0 = (0x20 | 22);								/* USB中断分配到中断向量0 */
   	VICVectAddr0 = (INT32U)Usb_Exception;					/* USB中断服务程序地址 */
   	VICIntEnable = 1 << 22;									/* 使能USB中断 */
}


/* global variable */
USB_TxRx  Usb;
INT8U USB_Buf[4096];	


/***************************************************************************************
** 函数名称  : ep02_set_rxlen()
** 功能描述  : 设置逻辑端点2接收长度及接收缓冲区地址
****************************************************************************************/
void ep02_set_rxlen(INT32U len, INT8U *pbuf)
{
	Usb.Len = len;											/* 逻辑端点2将接收len个字节 */
	Usb.Cnt = 0;											/* 当前收到的字节数为0	*/
	Usb.pbuff = pbuf;										/* 保存接收缓冲区指针 */
	Usb.bRecFinish = 0;										/* 标志接收未完成 */
}

/**************************************************************************************
** 函数名称  : ep02_start_tx()
** 功能描述  : 启动逻辑端点 2 发送
***************************************************************************************/
void ep02_start_tx(INT32U txlen, INT8U *pbuf)
{
	INT32U len,i;
	
	Usb.Len = txlen;										/* 初始化全局变量 */
	Usb.Cnt = 0;
	Usb.pbuff = pbuf;
	Usb.bRecFinish = 0;
	
	for (i = 0; i < 2; i++)
	{
		len = Usb.Len - Usb.Cnt;
		if (len > 0)
		{
			if (len >= 64)									/* 写 64 个字节 */
				len = USB_WriteEndpoint(5, 64, Usb.pbuff + Usb.Cnt);
			else									
		   		len = USB_WriteEndpoint(5, len, Usb.pbuff + Usb.Cnt);
															/* 写少于 64 个字节 */
		 	Usb.Cnt = Usb.Cnt + len;						/* 计数器计数 */
		}
	}
}


/***************************************************************************************
	主   函   数   main()
****************************************************************************************/
int main (void)
{	
	INT8U err;
	INT32U len;

	err = USB_Initialize();									/* 初始化 USB 控制器 	*/
	if (err != 0)
		while(1);
		
	Init_USBInterrupt();									/* 初始化 USB 中断向量 */
	IRQEnable();

	/******************  下面开始为一个无限循环 *******************/
	while(1)
	{
		usbserve();											/* USB 事件处理函数 */
		
		if (bEPPflags.bits.configuration == 1)
		{
			if (bEPPflags.bits.ep1_rxdone == 1)
			{	
				DISABLE();
				bEPPflags.bits.ep1_rxdone = 0;

				len = (GenEpBuf[0] << 8) + GenEpBuf[1]; 	/* 取得需要接收的数据的字节长度 */
				ep02_set_rxlen(len, USB_Buf);           	/* 设置逻辑端点2接收字节长度 */
				GenEpBuf[0] = 0x01;
				USB_WriteEndpoint(3, 1, GenEpBuf);	   		/* 发送应答给PC */
				ENABLE();
			}

			if (Usb.bRecFinish == 1)
			{												/* 接收完成,开始发送数据 */
				DISABLE();
				ep02_start_tx(len, USB_Buf);				/* 启动发送数据 */
				ENABLE();	
			}
		}
	}
	
    return 0;
}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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