www.pudn.com > usbhost_source.rar > SL811HST.H


/** 
*	sl811.h 
*	USBホストチップドライバ	ヘッダ 
*	サイプレスSL811 
* 
*	Copyright (c)2004 Junichi Tomaru 
*/ 
#include	"usrdef.h" 
 
/* アドレス定義 */ 
#define	SL811ADDR	(*((volatile unsigned char *)0xA0000))	/* SL811Hアドレス */ 
#define	SL811DATA	(*((volatile unsigned char *)0xA0001))	/* SL811Hデータ */ 
 
/* レジスタ名定義 */ 
#define	SL_HOSTCTRLA	0x00	/* チャンネルAホストコントロールレジスタ */ 
#define	SL_BASEADDRA	0x01	/* チャンネルAホストベースアドレス */ 
#define	SL_BASELENA	0x02	/* チャンネルAホストベース長 */ 
#define	SL_PIDDEVEPA	0x03	/* チャンネルAホストPIDデバイスエンドポイント(write) */ 
#define	SL_USBSTSA	0x03	/* チャンネルA USBステータス(read) */ 
#define	SL_DEVADDRA	0x04	/* チャンネルAホストデバイスアドレス(write) */ 
#define	SL_TXCNTA	0x04	/* チャンネルA転送カウント(read) */ 
#define	SL_CTRLREG1	0x05	/* コントロールレジスタ1 */ 
#define	SL_IER		0x06	/* 割り込み許可レジスタ */ 
#define	SL_HOSTCTRLB	0x08	/* チャンネルBホストコントロールレジスタ */ 
#define	SL_BASEADDRB	0x09	/* チャンネルBホストベースアドレス */ 
#define	SL_BASELENB	0x0a	/* チャンネルBホストベース長 */ 
#define	SL_PIDDEVEPB	0x0b	/* チャンネルBホストPIDデバイスエンドポイント(write) */ 
#define	SL_USBSTSB	0x0b	/* チャンネルB USBステータス(read) */ 
#define	SL_DEVADDRB	0x0c	/* チャンネルBホストデバイスアドレス(write) */ 
#define	SL_TXCNTB	0x0c	/* チャンネルB転送カウント(read) */ 
#define	SL_INTSTATUS	0x0d	/* 割り込みステータスレジスタ 1を書き込むとクリア */ 
#define	SL_SOFCNTLOW	0x0e	/* SOFカウンタ下位(write) */ 
#define	SL_HWREV	0x0e	/* H/Wレビジョン(read) */ 
#define	SL_SOFCNTHIGH	0x0f	/* SOFカウンタ/マスタ・スレーブ/極性切り替え(write) */ 
#define	SL_CTRLREG2	0x0f	/* コントロールレジスタ2 */ 
 
/* ホストコントロールレジスタビット定義 0H,08H */ 
#define	ARM		0x01	/* 転送許可。送信完了で0クリアされる */ 
#define	ENABLE		0x02	/* 転送許可。ARMと一緒に1にする。 */ 
#define	DIRECTION	0x04	/* 1:ホストへ送る 0:ホストから受信 */ 
#define	ISOEN		0x10	/* アイソクロナス転送許可 */ 
#define	SOF		0x20	/* パケットをSOFの後に同期して送るか */ 
#define	DATATGL		0x40	/* パケットのPIDセット */ 
#define	PREAMBLE	0x80	/* プリアンブル(ハブを通してロースピードに送る場合セット) */ 
 
/* ホストPID,デバイスエンドポイント(書き込み) 03H,0BH */ 
/* USBステータス(読み込み) 03H,0BH */ 
#define	ACK		0x01	/* 転送ACK */ 
#define	ERROR		0x02	/* 転送でエラー検出した */ 
#define	TIMEOUT		0x04	/* タイムアウト発生 */ 
#define	SEQUENSE	0x08	/* シーケンスビット。(PIDの状態) */ 
#define	SETUP		0x10	/* 1のときセットアップパケット */ 
#define	OVERFLOW	0x20	/* 受信の最大を超えて受信した */ 
#define	NAK		0x40	/* スレーブからNAKが返ってきた */ 
#define	STALL		0x80	/* スレーブからSTALLされた */ 
 
/* コントロールレジスタビット1定義 05H */ 
#define	SOFEN		0x01	/* SOFの自動発生制御 */ 
#define	USBRESET	0x08	/* USBリセット(バスリセット) */ 
#define	JKSTATE		0x10	/* J・Kステート制御(ビット3と共に使用) */ 
#define	USBSPEED	0x20	/* USB転送スピードモード */ 
#define	SUSPEND		0x40	/* サスペンド */ 
 
/* 割り込みコントロールレジスタ定義 06H */ 
/* 割り込みステータスレジスタ定義 0DH, 0x80はステータスのみ */ 
#define	INT_USBADONE	0x01	/* チャンネルA送信完了 */ 
#define	INT_USBBDONE	0x02	/* チャンネルB送信完了 */ 
#define	INT_SOFTIM	0x10	/* SOFタイマ */ 
#define	INT_INSREM	0x20	/* デバイス挿入/引き抜き */ 
#define	INT_DEVDET	0x40	/* デバイス発見 */ 
#define	INT_DPLUS	0x80	/* D+ラインの状態 */ 
 
/* PIDタイプ定義 03H,0BH */ 
#define	PID_SETUP	0xd0	/* セットアップパケット */ 
#define	PID_IN		0x90	/* INパケット */ 
#define	PID_OUT		0x10	/* OUTパケット */ 
#define	PID_SOF		0x50	/*  */ 
#define	PID_PREAMBLE	0xc0	/* プリアンブル */ 
#define	PID_NAK		0xa0	/*  */ 
#define	PID_STALL	0xe0	/*  */ 
#define	PID_DATA0	0x30	/*  */ 
#define	PID_DATA1	0xb0	/*  */ 
 
/* J−Kプログラミングステート定義 05H */ 
#define	NORMAL		0x00	/* ノーマルオペレーティングモード */ 
#define	USBRST		0x08	/* USBのリセット */ 
#define	JSTATE		0x10	/* Jステート */ 
#define	KSTATE		0x18	/* Kステート */ 
 
/* スピード定義 */ 
#define	NOSPEED		0	/*  */ 
#define	LOWSPEED	1	/*  */ 
#define	FULLSPEED	2	/*  */ 
 
/* USBデバイス情報 */ 
struct USBDEVINF{ 
	char	addr; 
	char	txep; 
	char	rxep; 
	char	tgl; 
}; 
typedef struct USBDEVINF	devinf_t; 
 
/**/ 
struct USBDEVDESC{ 
	byte	length;		/* bLength ディスクリプタの長さ(通常18バイト) */ 
	byte	type;		/* bDescriptor ディスクリプタの種別 */ 
	word	usbver;		/* bcdUSB USBバージョン */ 
	byte	class;		/* bDeviceClass デバイスクラスコード(0:クラスなし) */ 
	byte	subclass;	/* bDeviceSubClass デバイスサブクラス */ 
	byte	protocol;	/* bDeviceProtocol プロトコルコード */ 
	byte	maxsize;	/* bMaxPacketSize0 */ 
				/* コントロール・エンドポイントの最大パケットサイズ(通常8バイト) */ 
}; 
typedef struct USBDEVDESC	devdesc_t; 
 
 
/* プロトタイプ宣言 */ 
extern	byte	sl_read( char addr ); 
extern	void	sl_write( char addr, byte data ); 
extern	void	sl_burstread( char addr, char *buf, int size ); 
extern	void	sl_burstwrite( char addr, char *buf, int size ); 
extern	void	sl_init( void ); 
extern	int	write_setup( char *data ); 
extern	void	close_sl811( void ); 
extern	int	write_sl811( char *data, int size ); 
extern	int	read_sl811( char *data, int size ); 
extern	void	set_usbdevaddr( char addr ); 
extern	bool	plugnplay( void ); 
extern	bool	checkdevice( void ); 
 
 
/* end of sl811h.h */