?? usbecd.h
字號:
/*
;************************************************************************************************************
;* 江西師范大學(xué)物理通訊電子學(xué)院
;*
;* 創(chuàng) 新 中 心
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;* 文件名稱 : USBecd.h
;* 文件功能 : 與USB相關(guān)描述符數(shù)據(jù)結(jié)構(gòu)的定義、以及PDIUSBD12用到的相關(guān)宏定義的取值。
;* 補(bǔ)充說明 : USB設(shè)備控制驅(qū)動(PDIUSBD12 Equipment Control Drive)、與硬件有直接聯(lián)系。
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2006-11-5
;* 版本聲明 : V1.0.0
;*-------------------------------------------- 歷史版本信息 -------------------------------------------------
;* 文件作者 : zhouhong
;* 創(chuàng)建日期 : 2006-11-5
;* 版本聲明 : V1.0.0
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#ifndef _USBECD_H_
#define _USBECD_H_
#include "..\INC\D12Config.h"
//****************************************************************************
//
// The following defines are specific the the Philips PDIUSBD12 USB
// controller.
// 以下定義的是與PDIUSBD12 USB控制芯片有關(guān)
//
//****************************************************************************
//
// The offsets to the individual registers in the PDIUSBD12 USB controller.
//
#define HwUSBData 0x00000000 //數(shù)據(jù)寄存器的偏移地址
#define HwUSBCommand 0x00000001 //命令寄存器的偏移地址
//
// Definitions of Data size.
// 定義各端點(diǎn)的最大數(shù)據(jù)包大小
#define MAX_CONTROLDATA_SIZE 0x10 //控制最大數(shù)據(jù)大小,=10h
#define EP0_PACKET_SIZE 0x10 //端點(diǎn)0最大數(shù)據(jù)包大小,=10h
#define EP1_PACKET_SIZE 0x10 //端點(diǎn)1最大數(shù)據(jù)包大小,=10h
#define EP2_PACKET_SIZE 0x40 //端點(diǎn)2最大數(shù)據(jù)包大小,=40h
//
// Definitions of the supported endpoints.
// 支持端點(diǎn)定義
//
#define USB_ENDPOINT_CONTROL_OUT 0x00 //控制輸出
#define USB_ENDPOINT_CONTROL_IN 0x01 //控制輸入
#define USB_ENDPOINT_COMMAND_OUT 0x02 //命令輸出(端點(diǎn)1輸出)
#define USB_ENDPOINT_ACK_IN 0x03 //確認(rèn)輸入(端點(diǎn)1輸入)
#define USB_ENDPOINT_BULK_OUT 0x04 //批量輸出(端點(diǎn)2輸出)
#define USB_ENDPOINT_BULK_IN 0x05 //批量輸入(端點(diǎn)2輸入)
//
// Definitions of the commands that can be sent to the PDIUSBD12.
// 定義PDIUSBD12中的命令
//
#define USB_COMMAND_SELECT_ENDPOINT 0x00 //選擇端點(diǎn)
#define USB_COMMAND_READ_LAST_XACTION_STATUS 0x40 //讀最后處理狀態(tài)
#define USB_COMMAND_SET_ENDPOINT_STATUS 0x40 //設(shè)置端點(diǎn)狀態(tài)
#define USB_COMMAND_SET_ADDRESS_ENABLE 0xD0 //設(shè)置地址/使能
#define USB_COMMAND_SET_ENDPOINT_ENABLE 0xD8 //設(shè)置端點(diǎn)使能
#define USB_COMMAND_READ_BUFFER 0xF0 //讀緩沖區(qū)
#define USB_COMMAND_WRITE_BUFFER 0xF0 //寫緩沖區(qū)
#define USB_COMMAND_ACKNOWLEDGE_ENDPOINT 0xF1 //應(yīng)答設(shè)置
#define USB_COMMAND_CLEAR_BUFFER 0xF2 //緩沖區(qū)清零
#define USB_COMMAND_SET_MODE 0xF3 //設(shè)置模式
#define USB_COMMAND_READ_INTERRUPT 0xF4 //讀中斷寄存
#define USB_COMMAND_VALIDATE_BUFFER 0xFA //使緩沖區(qū)有效
#define USB_COMMAND_SET_DMA 0xFB //設(shè)置 DMA
#define USB_COMMAND_READ_CHIPID 0xFD //讀取芯片ID號
#define USB_COMMAND_SEND_RESUME 0xF6 //發(fā)送恢復(fù)
#define USB_COMMAND_READ_CURRENT_FRAME_NUMBER 0xF5 //讀當(dāng)前幀數(shù)目
//
// Definitions of the bit fields in the first byte of the configuration
// register.
// 第一個字節(jié)配置寄存器各位定義(配置字節(jié))
//
#define USB_CONFIG1_NO_LAZY_CLOCK 0x02 //1: 1 表示 CLKOUT不會切換到 LazyClock
//0 表示 CLKOUT在Suspend腳變高之后切換到LazyClock
#define USB_CONFIG1_CLOCK_RUNNING 0x04 //2: 1 表示內(nèi)部時鐘和PLL即使在掛起狀態(tài)下仍然運(yùn)行
// 0 表示只要不需要時 內(nèi)部時鐘晶振和PLL就停止運(yùn)行
#define USB_CONFIG1_INTERRUPT_MODE 0x08 //3: 1 表示報告所有的錯誤和NAKing 并產(chǎn)生一個中斷
// 0 表示只有 OK 被報告
#define USB_CONFIG1_SOFT_CONNECT 0x10 //4: 1 表示如果 VBUS 可用上行數(shù)據(jù)上拉電阻就被連接
// 0 表示不連接
#define USB_CONFIG1_NONISO_MODE 0x00 //6..7: 00 非同步模式
#define USB_CONFIG1_ISOOUT_MODE 0x40 //6..7: 00 同步輸出模式
#define USB_CONFIG1_ISOIN_MODE 0x80 //6..7: 00 同步輸入模式
#define USB_CONFIG1_ISOIO_MODE 0xC0 //6..7: 00 同步輸入/輸出模式
//
// Definitions of the bit fields in the second byte of the configuration
// register.
// 第二個字節(jié)配置寄存器(時鐘分頻系數(shù)字節(jié))
//
#define USB_CONFIG2_CLOCK_24M 0x01 //頻率為24M
#define USB_CONFIG2_CLOCK_12M 0x03 //頻率為12M
#define USB_CONFIG2_CLOCK_8M 0x05 //頻率為8M
#define USB_CONFIG2_CLOCK_6M 0x07 //頻率為6M
#define USB_CONFIG2_CLOCK_4M 0x0B //頻率為4M
#define USB_CONFIG2_SET_TO_ONE 0x40 //該位需要在任何 DMA 讀或?qū)懖僮髦爸脼?1
//該位在上電復(fù)位值為 0 復(fù)位后可將其一直設(shè)為 1
#define USB_CONFIG2_SOF_ONLY 0x80 //將該位置1后僅當(dāng)幀時鐘的起始(SOF)時刻引起中斷的
//產(chǎn)生,而不管引腳中斷模式的設(shè)置狀態(tài)設(shè)置 DMA位 5
//
// Definitions of the bit fields in the DMA configuration register.
// DMA配置寄存器各位定義
// //0..1:選擇DMA操作的突發(fā)串長度單周期
#define USB_DMA_SINGLE 0x00 //00 單周期 DMA
#define USB_DMA_BURST_4 0x01 //01 突發(fā)串4周期DMA
#define USB_DMA_BURST_8 0x02 //10 突發(fā)串8周期DMA
#define USB_DMA_BURST_16 0x03 //11 突發(fā)串16周期DMA
#define USB_DMA_ENABLE 0x04 //2:DMA使能 寫入1會通過激活DMREQ啟動DMA操作
#define USB_DMA_DIRECTION 0x08 //3:DMA方向 1表示從外到PDIUSBD12,0則相反
#define USB_DMA_AUTO_RELOAD 0x10 //4:自動重裝 設(shè)為1時DMA操作會自動重新
#define USB_DMA_INTPINMODE 0x20 //5:中斷腳模式 0表示正常的中斷腳模式 1表示中斷會在
//USB總線上行數(shù)據(jù)流出現(xiàn)幀時鐘SOF起始位時產(chǎn)生中斷
#define USB_DMA_ENDP4_INT_ENABLE 0x40 //6:端點(diǎn)索引4中斷使能 |該位為1表示只要端點(diǎn)緩沖區(qū)
#define USB_DMA_ENDP5_INT_ENABLE 0x80 //7:端點(diǎn)索引5中斷使能 |包含一個有效的信息包就會產(chǎn)
// |生中斷通常在DMA操作時關(guān)閉以減少不必要的CPU響應(yīng)
//
// Definitions of the bit fields in the first byte of the interrupt register.
// 中斷寄存器寄存器各位定義
//
#define USB_INT_CONTROL_OUT 0x0001 //0:控制輸出端點(diǎn)
#define USB_INT_CONTROL_IN 0x0002 //1:控制輸入端點(diǎn)
#define USB_INT_ENDPOINT1_OUT 0x0004 //2:端點(diǎn)1輸出
#define USB_INT_ENDPOINT1_IN 0x0008 //3:端點(diǎn)1輸入
#define USB_INT_ENDPOINT2_OUT 0x0010 //4:端點(diǎn)2輸出
#define USB_INT_ENDPOINT2_IN 0x0020 //5:端點(diǎn)2輸入
#define USB_INT_BUS_RESET 0x0040 //6:總線復(fù)位
#define USB_INT_SUSPEND_CHANGE 0x0080 //7:掛起改變
#define USB_INT_EOT 0x0100 //8:表示DMA操作已結(jié)束
//
// Definitions of the bit fields in the last transaction status register.
// 最后處理狀態(tài)寄存器各位定義
//
#define USB_XACTION_STATUS_DATA_RX_TX_SUCCESS 0x01 //0: 數(shù)據(jù)接收/發(fā)送成功
#define USB_XACTION_STATUS_SETUP_PACKET 0x20 //5: SETUP信息包 1表示成功接收信息包
#define USB_XACTION_STATUS_PREPACKET 0X80 //6..7:前一狀態(tài)未讀 1表示未讀
//
// Definitions of the bit fields in the Select endpoint status register.
// D12各選擇端點(diǎn)寄存器各位定義
//
#define USB_ENDPOINT_STATUS_FULL_EMPTY 0x01 //0:緩沖區(qū)滿/空, 1表示已滿 0表示為空
#define USB_ENDPOINT_STALL 0x02 //1:停止,1 表示選擇的端點(diǎn)處于停止?fàn)顟B(tài)
//
// Definitions of the bit fields in the Set endpoint status register.
// D12各設(shè)置端點(diǎn)寄存器各位定義
//
#define USB_SET_ENDPOINT_START 0 //端點(diǎn)工作
#define USB_SET_ENDPOINT_STALL 1 //端點(diǎn)停止
//
// D12測試設(shè)備類型的子類代碼和協(xié)議代碼
//
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0x0a //子類型代碼,=0A0H
#define USB_PROTROCOL_CODE_TEST_CLASS_D12 0x0b //協(xié)議代碼,=0B0H
/*
*************************************************************************************************************
* 函數(shù)聲明
*************************************************************************************************************
*/
void outportc(INT8U Data);
void outportd(INT8U Data);
INT8U inportd(void);
INT16U D12_ReadChipID(void);
void D12_SetAddressEnable(INT8U bAddress,INT8U bEnable);
void D12_SetEndpointEnable(INT8U bEnable);
void D12_SetMode(INT8U bConfig,INT8U bClkDiv);
void D12_SetDMA(INT8U bMode);
INT16U D12_ReadInterruptRegister(void);
INT8U D12_SelectEndpoint(INT8U bEndp);
INT8U D12_ReadEndpointStatus(INT8U bEndp);
INT8U D12_ReadLastTransactionStatus(INT8U bEndp);
INT8U D12_ReadEndpoint(INT8U bendp,INT8U len,INT8U *buf);
INT8U D12_WriteEndpoint(INT8U bendp,INT8U len,INT8U *buf);
void D12_SetEndpointStatus(INT8U bendp,INT8U bStalled);
void D12_AcknowledgeEndpoint(INT8U bendp);
void D12_SendResume(void);
INT16U D12_ReadCurrentFrameNumber(void);
void D12_init_Unconfig(void);
void D12_init_Config(void);
void stall_ep0(void);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -