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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               main.c
** Latest modified Date:    2008-05-10
** Latest Version:          1.0
** Descriptions:            SmartARM2400 系列开发板 USB Device Much示例程序
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Chenmingji
** Created date:            2004-09-16
** Version:                 1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:   			LingGuilin          
** Modified date:    		2008-05-10       
** Version:          		1.0       
** Descriptions:      		SmartARM2400 系列开发板 USB Device Much示例程序
**							1.通过物理端点2接收PC发送的10字节数据 
**							2.通过物理端点3将接收到的10字节数据发送回PC
**
*********************************************************************************************************/

#include "main.h"

#define USB_INT         22												/*  USB Device VIC通道号		*/

USB_TxRx  Usb;															/*  USB 数据传输结构体变量		*/
uint8 GucRcvBuf[4096];	

/*********************************************************************************************************
** Function name:		ep02_set_rxlen
** Descriptions:        设置逻辑端点2接收长度及接收缓冲区地址
** input parameters:    ulSetLen	待设置接收数据字节数
**						pucRcvBuf	接收数据缓冲区				
** output parameters:	无						
** Returned value:      无
*********************************************************************************************************/
void ep02_set_rxlen(uint32 ulSetLen, uint8 *pucRcvBuf)
{
	Usb.Len = ulSetLen;													/*  逻辑端点2将接收len个字节 	*/
	Usb.Cnt = 0;														/*  当前收到的字节数为0			*/
	Usb.pbuff = pucRcvBuf;												/*  保存接收缓冲区指针 			*/
	Usb.bRecFinish = 0;													/*  标志接收未完成 				*/
}

/*********************************************************************************************************
** Function name:		ep02_start_tx
** Descriptions:        启动逻辑端点 2 发送
** input parameters:    ulSetLen	待设置发送数据字节数
**						pucRcvBuf	发送数据缓冲区					
** output parameters:	无						
** Returned value:      无
*********************************************************************************************************/
void ep02_start_tx(uint32 ulSetLen, uint8 *pucSendBuf)
{
	uint8 i = 0;
	uint32 ulTmp     = 0;
	uint32 ulLeftLen = 0;
	
	Usb.Len = ulSetLen;													/*  初始化全局变量 				*/
	Usb.Cnt = 0;
	Usb.pbuff = pucSendBuf;
	Usb.bRecFinish = 0;
	
	for (i = 0; i < 2; i++) {
	
		ulLeftLen = Usb.Len - Usb.Cnt;
		if (ulLeftLen > 0) {
		
			if (ulLeftLen >= 64) {									
				ulTmp = usbDevWriteEndpoint(5, 
											Usb.pbuff + Usb.Cnt, 
											64);						/*  发送64字节					*/
			} else {
		   		ulTmp = usbDevWriteEndpoint(5, 
		   									Usb.pbuff + Usb.Cnt, 
		   									(uint8)ulLeftLen);			/*  发送少于64字节				*/
		   	}
															
		 	Usb.Cnt = Usb.Cnt + ulTmp;									/*  累加已发送字节数			*/
		}
	}
}

/*********************************************************************************************************
** Function name:       main
** Descriptions:        主函数
** Input parameters:    None
** output parameters:   None
** Created Date:        
*********************************************************************************************************/
int main (void)
{
	uint8  ucErr = 0;
	uint32 ulTransLen = 0;
	
	TargetInit();
	
	ucErr = usbDevInit();												/*  初始化USB设备控制器 		*/
	if (ucErr != 0) {
		while(1);														/*  初始化失败,程序停止执行 	*/
	}
															
	vicIrqFuncSet(USB_INT,3,(uint32)usbDevException);					/*  设置USB Device中断服务程序	*/

	IRQ_ENABLE();														/*  允许CPU的IRQ中断			*/
	
	while(1) {
	
		usbDevServe();													/*  处理USB事件 				*/
		
		if (bEPPflags.bits.configuration == 1) {
			
			if (bEPPflags.bits.ep1_rxdone == 1) {
				
				IRQ_DISABLE();
				bEPPflags.bits.ep1_rxdone = 0;

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

			if (Usb.bRecFinish == 1) {									/*  接收完成,开始发送数据 		*/
															
				IRQ_DISABLE();
				ep02_start_tx(ulTransLen,GucRcvBuf);					/*  启动发送数据 				*/
				IRQ_ENABLE();	
			}
		}
	}
	   
    return 0;                                   
}
/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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