?? d12setup.c
字號:
/*++
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)
{
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();
XmtBuff.wrLength = 0;
USB_submit();
}
/************************************************************
**工程名稱:U盤固件程序開發
**編譯器類型及版本:ICCAVR 6.26C
**日期:2004.4.30
**創建人:陳馳
**所屬單位:湖南大學計算機與通信學院
**芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**時鐘頻率:8MHZ
**函數功能:標準設備請求
**函數輸入參數及說明:無
**函數返回值:無
**在本函數以外定義的變量:傳輸結構體
**調用的函數說明:
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 + -