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 */