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

📄 sl811.h

📁 基于ARM7的直流电机的驱动,还有FLASH驱动,LCD驱动等
💻 H
字号:
/*-------------------------------------------------------------------------*/
/*
* 来自Windows CE.
*
*
*/
/* Register numbers
 */
#define SL_HCR_A      0x00                // rw
#define SL_HBA_A      0x01                // rw
#define SL_HBL_A      0x02                // rw
#define SL_HPID_A     0x03                // wo
# define SL_STATUS_A  0x03                // ro
#define SL_HDA_A      0x04                // wo
#define SL_TC_A       0x04                // ro
#define SL_CTRL1      0x05                // rw
#define SL_INTEN      0x06                // rw
#define SL_SAR        0x07                // rw
#define SL_HCR_B      0x08                // rw
#define SL_HBA_B      0x09                // rw
#define SL_HBL_B      0x0a                // rw
#define SL_HPID_B     0x0b                // wo
# define SL_STATUS_B  0x0b                // ro
#define SL_HDA_B      0x0c                // wo
#define SL_TC_B       0x0c                // ro
#define SL_ISTATUS    0x0d                // rw
#define SL_SOF_LOW    0x0e                // wo
# define SL_REV       0x0e                // ro
#define SL_SOF_HI     0x0f                // rw
#define SL_CTRL2	  0x0f				  // w
#define SL_MEM        0x10                // rw

/* Host Control Register (0x0,0x8)
 */
#define SL_HCR_Arm       0x01
#define SL_HCR_Enable    0x02
#define SL_HCR_Out       0x04
#define SL_HCR_NextIsB   0x08
#define SL_HCR_ISO       0x10
#define SL_HCR_SOF       0x20
#define SL_HCR_DToggle   0x40
#define SL_HCR_Preamble  0x80

/* Host Base Address     (0x1,0x9)
 * NB: Pointer to internal RAM
 */

/* Host Base Length Register  (0x2,0xa)
 */
#define SL_HBL_MAX (256-16)

/* Host PID Register(wo) (0x3,0xb)
 */
#define SL_HPID_EPMASK     0x0f
#define SL_HPID_PMASK      0xf0
#define SL_MAKE_HPID(p,e)  ((UCHAR)((((p)&0xf)<<4) | ((e)&0xf)))

#define SL_HPID_SETUP      0xd
#define SL_HPID_IN         0x9
#define SL_HPID_OUT        0x1
#define SL_HPID_SOF        0x5
#define SL_HPID_PREAMBLE   0xc
#define SL_HPID_NAK        0xa
#define SL_HPID_STALL      0xe
#define SL_HPID_DATA0      0x3
#define SL_HPID_DATA1      0xb

/* Status Register A/B (ro)  (0x3,0xb)
 */
#define SL_STATUS_ACK      0x01
#define SL_STATUS_Error    0x02
#define SL_STATUS_Timeout  0x04
#define SL_STATUS_Sequence 0x08
#define SL_STATUS_Setup    0x10
#define SL_STATUS_Overflow 0x20
#define SL_STATUS_NAK      0x40
#define SL_STATUS_STALL    0x80

/* Host Device Address Register  (0x4,0xc)
 */
#define SL_HDA_MASK        0x7f

/* Host Transfer Count Register  (0x4,0xc)
 */

/* Control Register 1     (0x5)
 */
#define SL_CTRL1_SOF_en    0x01
#define SL_CTRL1_reserved  0x82
#define SL_CTRL1_EOF2      0x04
#define SL_CTRL1_Reset     0x08
#define SL_CTRL1_force_J   0x10
#define SL_CTRL1_force_K   0x18
#define SL_CTRL1_LowSpeed  0x20
#define SL_CTRL1_Suspend   0x40

/* Interrupt Enable Register  (0x6)
 */
#define SL_INTEN_DONE_A    0x01
#define SL_INTEN_DONE_B    0x02
#define SL_INTEN_reserved  0x0c
#define SL_INTEN_SOF       0x10
#define SL_INTEN_Insert    0x20
#define SL_INTEN_Detect    0x40
#define SL_INTEN_donno     0x80

/* Slave Address Register (ro)  (0x7)
 */

/* Interrupt Status (rw1c)      (0xd)
 * NB: Same as INTEN above, plus
 */
#define SL_INTEN_D_PLUS    0x80

/* SOF Counter LOW (wo)         (0xe)
 */
#define SL_SOFL_1ms        0xe0  // at 12MHz

/* Hardware Revision Register (ro)   (0xe)
 */
#define SL_REV_MASK        0xf0
# define SL_REV_11H         0x00
# define SL_REV_11HS1p2     0x10
# define SL_REV_11HS1p5     0x20

/* SOF High + Control 2 Register     (0xf)
 */
#define SL_SOFH_SOFmask    0x3f
# define SL_SOFH_set(v)     (((v)>>6)&SL_SOFH_SOFmask)
# define SL_SOFH_get(v)     ((v)<<6)
# define SL_SOFH_1ms        0x2e
#define SL_SOFH_Polarity   0x40
#define SL_SOFH_Master     0x80







/*-------------------------------------------------------------------------*/
/*
* USB上层代码.
*
* 余康华
*/

// nGCS3
#define SL811_ADDR_PORT	0x06000000
#define SL811_DATA_PORT	0x06000001

// EXINT0
#define	ISR_SL811		ISR_EINT0
#define BIT_SL811		BIT_EINT0

// USB请求标志
#define	URB_FLAG_LOW_SPEED		0x80000000
#define URB_FLAG_ISOCHRONOUS	0x40000000
#define	URB_FLAG_INTERRUPT		0x20000000
#define URB_FLAG_IN				0x10000000
#define URB_FLAG_OUT			0x00000000
#define URB_FLAG_PERIODIC		0x08000000
#define URB_FLAG_CONTROL		0x04000000
#define URB_FLAG_STATUS			0x000000FF
#define URB_FLAG_ERROR			0x00000001
#define URB_FLAG_COMPLETE		0x00000002

// 端点结构体
typedef struct {
	UCHAR		Payload;	// 端点容量
	UCHAR		Endpoint;	// 端点号
	UCHAR		Toggle;		// 数据兵浜操作
} EP;

// USB主机控制器结构体
typedef struct _HC {
	UINT		AddrPort;	// 主机控制器地址端口
	UINT		DataPort;	// 主机控制器数据端口
	
	struct _URB	*CurURB;	// 当前USB请求
	struct _URB	*PrevURB;	// 前一个USB请求
	
	EP			ep0;	// 端口0信息

	UINT		SofInts;	// 软中断允许位
	UINT		InsRmvInts;	// USB插入或拔出次数
	UINT		DoneInts;	// USB操作完成次数
	UINT		SusCnt;		// USB操作位完成次数

	UINT		sm;		// Control semaphore

	UCHAR		enumed;		// 已经枚举过
	UCHAR		connected;	// USB已经插入
	UCHAR		devfound;	// U盘已经找到
	UCHAR		lowSpeed;	// 找到慢速设备
	UCHAR		reset;		// 是否需要复位
	
	UCHAR		ok;		// 未用

	UCHAR		reqLen;		// USB请求长度
	void		*request;	// USB请求
	UCHAR		datLen;		// USB请求数据长度
	void		*data;		// USB请求数据
	UCHAR		toggle[16];	// 数据兵浜操作
	
	struct usb_device_descriptor dev; // 设备描述符
	struct usb_config_descriptor conf[1]; // 配置描述符
	struct usb_interface_descriptor	intf[1];// 接口描述符
	struct usb_endpoint_descriptor	ep[6]; // 端点描述符
} HC;

// U盘结构体
typedef struct _MASS_STOR {
	HC		*hc;		// 主控制器
	UINT		BlockNumber;	// U盘块数
	UINT		BlockSize;	// U盘块大小
	UINT		BlockSizeShift;	// U盘块大小对数
//	UINT		DiskSize;
	EP			In;	// 输入端点信息
	EP			Out;	// 输出端点信息
	UCHAR		DeviceAddress;	// 设备地址
	UCHAR		devClass;	// 设备类型
	UCHAR		devSubClass;	// 子设备类型
	UCHAR		devProtocol;	// 设备协议
} MASS_STOR;

// USB请求结构体
typedef struct _URB {
	struct _URB	*Next;	// 指向下一个请求
	EP		*Ep;	// 端点指针
	UINT		Flags;	// 标志
	UCHAR		*Data;	// 数据指针
	UINT		ExpectedDataLength; // 剩下数据总长读
	UINT		ActualDataLength; // 数据总长读
	UINT		SetupLength;	// 令牌数据长度,8 Bytes
	void		*SetupData;	// 令牌数据
	UINT		FinalStatus;	// 最后结果
	UCHAR		NextStep;	// 请求脚本下一步
	UCHAR		DeviceAddress;	// 设备地址
} URB;

// USB输入输出脚本
typedef struct _SCRIPT {
	int			(*Start)(HC *, URB *);
	int			(*End)(HC *, URB *);
} SCRIPT;

⌨️ 快捷键说明

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