メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

DRUPP.h

00001 #ifndef UPP_H
00002 #define UPP_H
00003 #include <Base/BaseDebug.h>
00004 #include <vector>
00005 
00006 namespace Spr {
00007 
00008 /** UPP(Universal Pulse Processor)のドライバー.
00009     CRatorUppCard, CPCCardDriverが使う  */
00010 class SPR_DLL DRUpp{
00011 public:
00012     class SPR_DLL UppFunc
00013     {
00014     public:
00015         /// UPPの命令語
00016         enum {  FRS = 0x00, INS = 0x10, UDS = 0x20, GTS = 0x30,
00017             FRC = 0x40, INC = 0x50, PWC = 0x60, OSC = 0x70,
00018             FFC = 0x80, TPC = 0x98, GTC = 0xA0, CTO = 0xB0,
00019             SIT = 0xC0, SOT = 0xD0, SPO = 0xE0, NOP = 0xF0};
00020         /// UPPの命令語のオプション
00021         enum {};
00022         /// 端子のエッジ検出
00023         enum {};
00024         enum {IDLEN = 20};
00025         /// 命令を識別するためのID、特定の命令を命令表から削除するために用いる
00026         char id[IDLEN+1];
00027             
00028         /// UPP命令
00029         int cmd, ar, br, ioa, iob, ioc, iod;
00030     
00031         /** コンストラクタ.
00032         @param aCmd     命令
00033         @param anAr     Aレジスタ
00034         @param anBr     Bレジスタ
00035         @param anIoa    端子A
00036         @param anIob    端子B
00037         @param anIoc    端子C
00038         @param anIod    端子D
00039         @param anId     識別文字列(省略可)  */
00040         UppFunc(int aCmd = NOP, int anAr = 0, int anBr = 0,
00041             int anIoa = 0, int anIob = 0, int anIoc = 0, int anIod = 0, char* anId = "");
00042         bool operator ==(const UppFunc& f) const;
00043         bool operator <(const UppFunc& f) const;
00044         bool operator >(const UppFunc& f) const;
00045         bool operator !=(const UppFunc& f) const;
00046     };
00047 protected:
00048     /// UPP内部レジスタのアドレス
00049     enum {PORT1 = 0x3, PORT2 = 0x2, UDR_BASE=0x40};
00050     /// 初期化済みなら true.
00051     bool bInitalized;
00052     /// FNRの表
00053 
00054     static int FNR[17];
00055     /// UPPの命令表をUPPに設定する
00056     void SetFunc();
00057     /// UPPの命令表
00058 
00059     std::vector<UppFunc> func;
00060 public:
00061     /// 
00062     DRUpp();
00063     /// 
00064     virtual bool Init();
00065     /// UPPのレジスタのアドレス a に値 v を書きこむ
00066     virtual void Out(unsigned a, unsigned v)=0;
00067     /// UPPのレジスタのアドレス a の値を読み出す
00068     virtual int In(unsigned a)=0;
00069     /// UPPの実行状態の取得
00070     bool    Run();
00071     /** UPPの状態を設定する.
00072     @param b 設定したい状態. true:実行状態 false:停止状態   */
00073     void    Run(bool b);
00074     /// 命令表に命令を追加する
00075     void    Add(const UppFunc& f);
00076     /// 命令表から命令を削除する
00077     void    Del(char* id);
00078     /// 命令表から命令を削除する
00079     void    Del(int id);
00080     
00081     /** UPPの端子を使用するユニットの設定.
00082     1bit目がポート0に、16bit目がポート0に対応する。
00083     @verbatim
00084     UPPの端子とビットの割り当て
00085     0xABCD
00086     dir  MSB 0x   A    B    C    D LSB
00087     port       FEDC BA98 7654 3210
00088     @endverbatim
00089     0: PIOが使用    1: UPPが使用    */
00090     void    PortOwner(unsigned owner = 0xFFFF);
00091     /** UPPの端子の入出力の設定.
00092     1bit目がポート0に、16bit目がポート0に対応する。
00093     @verbatim
00094     UPPの端子とビットの割り当て
00095     0xABCD
00096     dir  MSB 0x   A    B    C    D LSB
00097     port       FEDC BA98 7654 3210
00098     @endverbatim
00099     0: 入力 1: 出力 */
00100     void    PortDir(unsigned dir = 0x0000);
00101     /// PIOの値を入力(PortOwnerがPIOになっている端子のみ使用できる)
00102     unsigned short PioRead();
00103     /// PIOへ値を出力(PortOwnerがPIOになっている端子のみ使用できる)
00104     void    PioWrite(unsigned short d);
00105     /** UPP Data Register の値を設定.
00106     @param  no  UDRの番号(0-23)
00107     @param  v   値  */
00108     void    UdrWrite(unsigned no,unsigned short v);
00109     /** UPP Data Register の値の読み出し.
00110     @param  no  UDRの番号(0-23)
00111     @return     値  */
00112     unsigned short  UdrRead(unsigned no);
00113 };
00114 }   //  namespace Spr
00115 #endif

Springheadに対してSun Apr 16 01:57:50 2006に生成されました。  doxygen 1.4.1