📄 d12setup.c.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 + -