📄 usbecd.h
字号:
/*
;************************************************************************************************************
;* 江西师范大学物理通讯电子学院
;*
;* 创 新 中 心
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;* 文件名称 : USBecd.h
;* 文件功能 : 与USB相关描述符数据结构的定义、以及PDIUSBD12用到的相关宏定义的取值。
;* 补充说明 : USB设备控制驱动(PDIUSBD12 Equipment Control Drive)、与硬件有直接联系。
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2006-11-5
;* 版本声明 : V1.0.0
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : zhouhong
;* 创建日期 : 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控制芯片有关
//
//****************************************************************************
//
// The offsets to the individual registers in the PDIUSBD12 USB controller.
//
#define HwUSBData 0x00000000 //数据寄存器的偏移地址
#define HwUSBCommand 0x00000001 //命令寄存器的偏移地址
//
// Definitions of Data size.
// 定义各端点的最大数据包大小
#define MAX_CONTROLDATA_SIZE 0x10 //控制最大数据大小,=10h
#define EP0_PACKET_SIZE 0x10 //端点0最大数据包大小,=10h
#define EP1_PACKET_SIZE 0x10 //端点1最大数据包大小,=10h
#define EP2_PACKET_SIZE 0x40 //端点2最大数据包大小,=40h
//
// Definitions of the supported endpoints.
// 支持端点定义
//
#define USB_ENDPOINT_CONTROL_OUT 0x00 //控制输出
#define USB_ENDPOINT_CONTROL_IN 0x01 //控制输入
#define USB_ENDPOINT_COMMAND_OUT 0x02 //命令输出(端点1输出)
#define USB_ENDPOINT_ACK_IN 0x03 //确认输入(端点1输入)
#define USB_ENDPOINT_BULK_OUT 0x04 //批量输出(端点2输出)
#define USB_ENDPOINT_BULK_IN 0x05 //批量输入(端点2输入)
//
// Definitions of the commands that can be sent to the PDIUSBD12.
// 定义PDIUSBD12中的命令
//
#define USB_COMMAND_SELECT_ENDPOINT 0x00 //选择端点
#define USB_COMMAND_READ_LAST_XACTION_STATUS 0x40 //读最后处理状态
#define USB_COMMAND_SET_ENDPOINT_STATUS 0x40 //设置端点状态
#define USB_COMMAND_SET_ADDRESS_ENABLE 0xD0 //设置地址/使能
#define USB_COMMAND_SET_ENDPOINT_ENABLE 0xD8 //设置端点使能
#define USB_COMMAND_READ_BUFFER 0xF0 //读缓冲区
#define USB_COMMAND_WRITE_BUFFER 0xF0 //写缓冲区
#define USB_COMMAND_ACKNOWLEDGE_ENDPOINT 0xF1 //应答设置
#define USB_COMMAND_CLEAR_BUFFER 0xF2 //缓冲区清零
#define USB_COMMAND_SET_MODE 0xF3 //设置模式
#define USB_COMMAND_READ_INTERRUPT 0xF4 //读中断寄存
#define USB_COMMAND_VALIDATE_BUFFER 0xFA //使缓冲区有效
#define USB_COMMAND_SET_DMA 0xFB //设置 DMA
#define USB_COMMAND_READ_CHIPID 0xFD //读取芯片ID号
#define USB_COMMAND_SEND_RESUME 0xF6 //发送恢复
#define USB_COMMAND_READ_CURRENT_FRAME_NUMBER 0xF5 //读当前帧数目
//
// Definitions of the bit fields in the first byte of the configuration
// register.
// 第一个字节配置寄存器各位定义(配置字节)
//
#define USB_CONFIG1_NO_LAZY_CLOCK 0x02 //1: 1 表示 CLKOUT不会切换到 LazyClock
//0 表示 CLKOUT在Suspend脚变高之后切换到LazyClock
#define USB_CONFIG1_CLOCK_RUNNING 0x04 //2: 1 表示内部时钟和PLL即使在挂起状态下仍然运行
// 0 表示只要不需要时 内部时钟晶振和PLL就停止运行
#define USB_CONFIG1_INTERRUPT_MODE 0x08 //3: 1 表示报告所有的错误和NAKing 并产生一个中断
// 0 表示只有 OK 被报告
#define USB_CONFIG1_SOFT_CONNECT 0x10 //4: 1 表示如果 VBUS 可用上行数据上拉电阻就被连接
// 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.
// 第二个字节配置寄存器(时钟分频系数字节)
//
#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 读或写操作之前置为 1
//该位在上电复位值为 0 复位后可将其一直设为 1
#define USB_CONFIG2_SOF_ONLY 0x80 //将该位置1后仅当帧时钟的起始(SOF)时刻引起中断的
//产生,而不管引脚中断模式的设置状态设置 DMA位 5
//
// Definitions of the bit fields in the DMA configuration register.
// DMA配置寄存器各位定义
// //0..1:选择DMA操作的突发串长度单周期
#define USB_DMA_SINGLE 0x00 //00 单周期 DMA
#define USB_DMA_BURST_4 0x01 //01 突发串4周期DMA
#define USB_DMA_BURST_8 0x02 //10 突发串8周期DMA
#define USB_DMA_BURST_16 0x03 //11 突发串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:自动重装 设为1时DMA操作会自动重新
#define USB_DMA_INTPINMODE 0x20 //5:中断脚模式 0表示正常的中断脚模式 1表示中断会在
//USB总线上行数据流出现帧时钟SOF起始位时产生中断
#define USB_DMA_ENDP4_INT_ENABLE 0x40 //6:端点索引4中断使能 |该位为1表示只要端点缓冲区
#define USB_DMA_ENDP5_INT_ENABLE 0x80 //7:端点索引5中断使能 |包含一个有效的信息包就会产
// |生中断通常在DMA操作时关闭以减少不必要的CPU响应
//
// Definitions of the bit fields in the first byte of the interrupt register.
// 中断寄存器寄存器各位定义
//
#define USB_INT_CONTROL_OUT 0x0001 //0:控制输出端点
#define USB_INT_CONTROL_IN 0x0002 //1:控制输入端点
#define USB_INT_ENDPOINT1_OUT 0x0004 //2:端点1输出
#define USB_INT_ENDPOINT1_IN 0x0008 //3:端点1输入
#define USB_INT_ENDPOINT2_OUT 0x0010 //4:端点2输出
#define USB_INT_ENDPOINT2_IN 0x0020 //5:端点2输入
#define USB_INT_BUS_RESET 0x0040 //6:总线复位
#define USB_INT_SUSPEND_CHANGE 0x0080 //7:挂起改变
#define USB_INT_EOT 0x0100 //8:表示DMA操作已结束
//
// Definitions of the bit fields in the last transaction status register.
// 最后处理状态寄存器各位定义
//
#define USB_XACTION_STATUS_DATA_RX_TX_SUCCESS 0x01 //0: 数据接收/发送成功
#define USB_XACTION_STATUS_SETUP_PACKET 0x20 //5: SETUP信息包 1表示成功接收信息包
#define USB_XACTION_STATUS_PREPACKET 0X80 //6..7:前一状态未读 1表示未读
//
// Definitions of the bit fields in the Select endpoint status register.
// D12各选择端点寄存器各位定义
//
#define USB_ENDPOINT_STATUS_FULL_EMPTY 0x01 //0:缓冲区满/空, 1表示已满 0表示为空
#define USB_ENDPOINT_STALL 0x02 //1:停止,1 表示选择的端点处于停止状态
//
// Definitions of the bit fields in the Set endpoint status register.
// D12各设置端点寄存器各位定义
//
#define USB_SET_ENDPOINT_START 0 //端点工作
#define USB_SET_ENDPOINT_STALL 1 //端点停止
//
// D12测试设备类型的子类代码和协议代码
//
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0x0a //子类型代码,=0A0H
#define USB_PROTROCOL_CODE_TEST_CLASS_D12 0x0b //协议代码,=0B0H
/*
*************************************************************************************************************
* 函数声明
*************************************************************************************************************
*/
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -