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

📄 d12setup.c.bak

📁 USB通信程序开发(附源码 精品)包括详细论文说明
💻 BAK
字号:
/*++

Module Name:

         D12Setup.c

Abstract:

         Header file related to D12 module

Environment:

        ICCAVR 6.29

Revision History:

        04/23/2004      chenchi   created

--*/
/******************************************************************/
#include "io8515v.h"
#include "d12.h"
#include "d12setup.h"

TRANSMIT_STRUCT XmtBuff;//定义传输结构体变量

/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:完成设备枚举
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  (*StandardDeviceRequest[i])();
  标准设备请求函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Setup_control(void)
{
	unsigned char i,j,*p;
	D12_COMMAND = 0x00;//选择端点(指针指向0位置)
	cwait;
	D12_COMMAND = 0xf0;//读标准控制码
	cwait1;
	/****************************
	  缓冲区数据结构:
	  字节1:保留,可为任意值
	  字节2:数据字节的数目/长度
	  字节3:数据字节1
	  字节4:数据字节2
	*****************************/
	i = D12_DATA;//字节1
	cwait1;
	i = D12_DATA;//字节2
	cwait1;
	j = D12_DATA;//数据字节
	csram;
	p = XmtBuff.b;//P指针指向传输缓冲区
	*(p++) = j;
	for(i=0;i<7;i++)
	{
	   j = D12_DATA;//数据字节
	   csram;
	   asm("st Z+,%j");
	}
	D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
	cwait;
	D12_COMMAND = 0xf1;//应答SETUP包
	csram;
	i = XmtBuff.b[1];
	if (i <= 0x0B)//标准请求跳转表
	{
		(*StandardDeviceRequest[i])();
	}
	else{
		D12_COMMAND = 0x01;//选择端点(指针指向0位置)
		cwait;
		D12_COMMAND = 0xf0;// 写缓冲区
		cwait;
		/****************************
	  	  缓冲区数据结构:
	  	  字节1:保留,可为任意值
	  	  字节2:数据字节的数目/长度
	  	  字节3:数据字节1
	  	  字节4:数据字节2
		*****************************/
		D12_DATA = 0x00;//字节1
		cwait;
		D12_DATA = 0x01;//字节2
		csram;
		D12_DATA = 0x00;//数据字节
		csram;
		D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
		csram;
	}
	D12_COMMAND = 0x00;//选择端点(指针指向0位置)
	cwait;
	D12_COMMAND = 0xf1;//应答SETUP包
	cwait;
	D12_COMMAND = 0xf2;//清端点缓冲区
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:停止控制端点.应答枚举请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:无
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void void_function(void)
{
	D12_COMMAND = 0x40;//0端点停止(用于发送Stall包)
	cwait;
	D12_DATA = 0x01;
	cwait;
	D12_COMMAND = 0x41;//1端点停止(用于发送Stall包)
	cwait;
	D12_DATA = 0x01;
	cwait;
	D12_COMMAND = 0xf1;//应答SETUP包
	csram;
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void get_status(void)
{
	XmtBuff.b[1] = 0x00;
	switch (XmtBuff.b[0])
	{
	case 0x80:
		break;
	case 0x81:
		XmtBuff.b[0] = 0x00;
		break;
	case 0x82:
		XmtBuff.b[0] = 0x00;
		break;
	}
	XmtBuff.p_p=0;
	XmtBuff.wrLength = 2;
	XmtBuff.p = XmtBuff.b;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void clear_feature(void)
{
	unsigned char j;
	switch (XmtBuff.b[0])
	{
	case 0x00://清设备唤醒功能
		break;
	case 0x01://清接口状态
		break;
	case 0x02://启用端点
		//XmtBuff.b[5] D7为方向,D3~0为端点号
		j = XmtBuff.b[5];
		if(j<0x80)
		{
			j = 0x40+j*2;
			D12_COMMAND = j;// 启用OUT端点
			D12_DATA = 0x00;
			csram;
		}
		else
		{
			j = (j & 0x0f);
			D12_COMMAND = 0x41+j*2;// 启用IN端点
			D12_DATA = 0x00;
			csram;
		}
		break;
	}
	XmtBuff.wrLength = 0;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void set_feature(void)
{
	unsigned char j;
	switch (XmtBuff.b[0])
	{
	case 0x00://设置设备唤醒功能
		break;
	case 0x01://设置接口状态
		break;
	case 0x02://停止端点
		//XmtBuff.b[5] D7为方向,D3~0为端点号
		j = XmtBuff.b[5];
		if(j<0x80)
		{
			j = 0x40+j * 2;
			D12_COMMAND = j;// 停止OUT端点
			cwait;
			D12_DATA = 0x01;
			csram;
		}
		else
		{
			j = j & 0x0f;
			j = 0x41+j*2;
			D12_COMMAND = j;// 停止IN端点
			cwait;
			D12_DATA = 0x01;
			csram;
		}
		break;
	}
	XmtBuff.wrLength = 0;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void set_address(void)
{
	unsigned char j;
	j = 0x80 | XmtBuff.b[2];
	D12_COMMAND = 0xd0;//设置新地址使能
	cwait;
	D12_DATA = j;
	csram;
	XmtBuff.wrLength = 0;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void get_descriptor(void)
{
	unsigned int i;
	XmtBuff.p_p=1;
	switch (XmtBuff.b[3])
	{
		case 0x01: //USB_DEVICE
			XmtBuff.pp = device_descriptor;
			XmtBuff.wrLength = sizeof(device_descriptor);
			break;
		case 0x02:// USB_CONFIGURATION
			i = XmtBuff.b[7];
			i = ((i<<8) | XmtBuff.b[6]);
			XmtBuff.pp = Configuration_Descriptor;
			XmtBuff.wrLength = *(XmtBuff.pp+2);
			if(i<16)
				  XmtBuff.wrLength = XmtBuff.b[6];
			break;
		case 0x03: //USB_STRING
			switch(XmtBuff.b[2])
			{
			case 0x00 :
				//XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
				//?XmtBuff.p = USBStringLanguageDescription;
				break;
			case 0x01 :
				//?XmtBuff.wrLength = sizeof(USBStringDescription1);
				//?XmtBuff.p = USBStringDescription1;
			   break;
			case 0x02 :
				//?XmtBuff.wrLength = sizeof(USBStringDescription2);
				//?XmtBuff.p = USBStringDescription2;
			   break;
			default   :
				void_function();
				return;
			}
			break;
		default :
			void_function();
			return;
	}
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void get_configuration(void)
{
	XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
	XmtBuff.wrLength = 16;
	XmtBuff.p_p=0;
	XmtBuff.p = XmtBuff.b;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void set_configuration(void)
{
	unsigned char j;
	if (XmtBuff.b[0] == 0x00)
	{
		XmtBuff.wrLength = 0;
		USB_submit();
		j = XmtBuff.b[2];
		D12_COMMAND = 0xd8;
		if(j == 0x00)
		{
			D12_DATA = 0x00;  // 停止普通/同步端点
		}else if(j == 0x01)
		{
			D12_DATA = 0x01;  // 使能普通/同步端点
			cwait;
			D12_COMMAND = 0x03;
			cwait;
			D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
			cwait;
			D12_COMMAND = 0x05;
			cwait;
			D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
		}
		csram;
   }
	else
		void_function();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:D12_COMMAND,D12_DATA
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void get_interface(void)
{
	XmtBuff.b[0] = 0;
	XmtBuff.wrLength = 1;
	XmtBuff.p_p=0;
	XmtBuff.p = XmtBuff.b;
	USB_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.26C
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:标准设备请求
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:传输结构体
**调用的函数说明:
  USB_submit();
  控制端点提交函数
  
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void set_interface(void)
{
	XmtBuff.wrLength = 0;
	USB_submit();
}

⌨️ 快捷键说明

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