OSDN Git Service

git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@96 47198e57-cb75-475f-84c4-a814cd6...
[mimic/MiMicSDK.git] / misc / MiMicVM / api.js / LPCXPresso1769.Pin.js
1 /**\r
2  * @fileOverview LPCXpresso1769の物理ピンを制御するクラスを定義する。\r
3  */\r
4 \r
5 (function(){\r
6 var DEV=LPCXpresso1769;\r
7 var BCF=DEV._BCF;\r
8 var EE=DEV._EE;\r
9 var isUndef=MiMicLib.isUndef;\r
10 \r
11 /**\r
12  * LPCXPresso1769.Pin (Pin)クラスのコンストラクタ。\r
13  * ピン識別子を元に、MCUに関連付けらしたPinインスタンスを生成する。\r
14  * Pinクラスは、MCUの物理ピン単位に、操作インタフェイスを定義する。\r
15  * PINSEL,PINMODE,PINMODE_ODレジスタを管理する。\r
16  * @name LPCXpresso1769.Pin\r
17  * @constructor\r
18  * @param {object as LPCXpresso1769.Mcu} i_mcu\r
19  * インスタンスを結びつけるMcuオブジェクト。\r
20  * @param {object as ピン識別子} i_pin\r
21  * 生成するピンのピン識別子。\r
22  * @param {object as associative array} i_opt\r
23  * インスタンス生成と同時にsetOpt関数で設定する値。省略時は無視する。\r
24  * 詳細はsetOpt関数を参照。\r
25  * このクラスは、上位クラスへピンの基本的な操作機能を提供する為のものであり、ユーザが直接使用することは(あまり)ない。\r
26  * この関数は、MiMicの管理しているピン(ENET_?)も操作することが出来るが、操作してしまうとMiMicRemoteMcuとのコネクションが破壊されるので、注意すること。\r
27  * @example\r
28  * //create pin instance at P0[0]\r
29  * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
30  * var pin=new LPCXpresso1769.Pin(mcu,LPCXpresso.P0[0]);\r
31  */\r
32 DEV.Pin=function Pin(i_mcu,i_pin,i_opt)\r
33 {\r
34         try{\r
35                 if(isUndef(i_pin)){\r
36                         throw new MiMicException(EE.INVALID_PIN);\r
37                 }\r
38                 this._mcu=i_mcu;\r
39                 this._pininfo=DEV.getPinRegInfo(i_pin);\r
40                 //オプション設定するならする。\r
41                 if(!isUndef(i_opt)){\r
42                         this.setOpt(i_opt);\r
43                 }\r
44         }catch(e){\r
45                 throw new MiMicException(e);\r
46         }\r
47 }\r
48 DEV.Pin.prototype=\r
49 {       \r
50         _PINSEL:[0x4002C000,0x4002C004,0x4002C008,0x4002C00C,0x4002C010,null,null,0x4002C0C0,null,0x4002C024,0x4002C028],\r
51         _PINMODE:[0x4002C040,0x4002C044,0x4002C048,0x4002C04C,0x4002C050,0x4002C054,0x4002C058,0x4002C05C,null,0x4002C064],\r
52         _PINMODE_OD:[0x4002C068,0x4002C06C,0x4002C070,0x4002C074,0x4002C078],\r
53         _pininfo:null,\r
54         _mcu:null,\r
55 \r
56 \r
57         /**\r
58          * setPinのBCを生成します。\r
59          @private\r
60          @param i_opt\r
61          setOptBcを参照してください。\r
62          @return\r
63          BCフラグメントを返します。\r
64          */\r
65         BCF_setOpt:function BCF_setOpt(i_opt,i_db)\r
66         {\r
67                 try{\r
68                         var bc="";\r
69                         //PINFUNC,PINMODEのbit位置\r
70                         //pinsel\r
71                         if(!isUndef(i_opt.sel)){\r
72                                 \r
73                                 //pinselAddrを得る\r
74                                 bc+=BCF.setBit(this._PINSEL[this._pininfo.s],0x00000003,i_opt.sel,this._pininfo.smb,i_db);\r
75                         }\r
76                         //pinmode\r
77                         if(!isUndef(i_opt.mode)){\r
78                                 if(this._pininfo.m==null){\r
79                                         throw new MiMicException(EE.INVALID_CFG,"The pin does not support PINMODE. pininfo.");\r
80                                 }\r
81                                 bc+=BCF.setBit(this._PINMODE[this._pininfo.m],0x00000003,i_opt.mode,this._pininfo.smb,i_db);\r
82                         }\r
83                         //pinmode_od\r
84                         if(!isUndef(i_opt.od)){\r
85                                 if(this._pininfo.o==null){\r
86                                         throw new MiMicException(EE.INVALID_CFG,"The pin does not support PINMODE_OD. pininfo.");\r
87                                 }\r
88                                 bc+=BCF.setBit(this._PINMODE_OD[this._pininfo.o],0x00000001,i_opt.od,this._pininfo.ob,i_db);\r
89                         }\r
90                         return bc;\r
91                 }catch(e){\r
92                         throw new MiMicException(e);\r
93                 }\r
94         },\r
95         /**\r
96          * ピンにオプションパラメータをセットする。\r
97          * 関数は、物理ピンのレジスタに、i_optで与えられる値を設定する。\r
98          * 関数は、レジスタの位置に合わせてパラメータ値を自動的にシフトする。\r
99          * @name LPCXpresso1769.Pin#setOpt\r
100          * @function\r
101          * @param {object as associative array} i_opt\r
102          * ピンコンフィグレーションのパラメタである。必要な値を格納した連想配列で指定する。\r
103          * 全ての値を省略することは出来ない。連想配列のメンバは以下の通り。\r
104          * <pre>{sel,mode,od}</pre>\r
105          * <ul>\r
106          * <li>sel:int - 2bitのint値。 PINSEL? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
107          * <li>mode:int - 1bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
108          * <li>od:int - 1bitのbit値 PINMODE_OD? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
109          * </ul>\r
110          * @example\r
111          * //set GPIO,mode=1,open drain=0\r
112          * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
113          * var pin=new LPCXpresso1769.Pin(mcu,LPCXpresso.P2[3]);\r
114          * pin.setOpt({sel:0,mode:1,od:0});      \r
115          */\r
116         setOpt:function setOpt(i_opt)\r
117         {\r
118                 try{\r
119                         var db=new Array();\r
120                         var bc=this.BCF_setOpt(i_opt,db);\r
121                         if(bc.length==0){\r
122                                 throw new MiMicException("i_opt is empty or invalid.");\r
123                         }\r
124                         //MiMicBCを生成して実行\r
125                         this._mcu.callMiMicWithCheck(bc+BCF.END,db);\r
126                 }catch(e){\r
127                         throw new MiMicException(e);\r
128                 }\r
129                 return;\r
130         }\r
131 }\r
132 \r
133 }());