2 * @fileOverview LPCXpresso1769の物理ピンを制御するクラスを定義する。
\r
6 var DEV=LPCXpresso1769;
\r
9 var isUndef=MiMicLib.isUndef;
\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
18 * @param {object as LPCXpresso1769.Mcu} i_mcu
\r
19 * インスタンスを結びつけるMcuオブジェクト。
\r
20 * @param {object as ピン識別子} i_pin
\r
22 * @param {object as associative array} i_opt
\r
23 * インスタンス生成と同時にsetOpt関数で設定する値。省略時は無視する。
\r
25 * このクラスは、上位クラスへピンの基本的な操作機能を提供する為のものであり、ユーザが直接使用することは(あまり)ない。
\r
26 * この関数は、MiMicの管理しているピン(ENET_?)も操作することが出来るが、操作してしまうとMiMicRemoteMcuとのコネクションが破壊されるので、注意すること。
\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
32 DEV.Pin=function Pin(i_mcu,i_pin,i_opt)
\r
36 throw new MiMicException(EE.INVALID_PIN);
\r
39 this._pininfo=DEV.getPinRegInfo(i_pin);
\r
41 if(!isUndef(i_opt)){
\r
45 throw new MiMicException(e);
\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
65 BCF_setOpt:function BCF_setOpt(i_opt,i_db)
\r
69 //PINFUNC,PINMODEのbit位置
\r
71 if(!isUndef(i_opt.sel)){
\r
74 bc+=BCF.setBit(this._PINSEL[this._pininfo.s],0x00000003,i_opt.sel,this._pininfo.smb,i_db);
\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
81 bc+=BCF.setBit(this._PINMODE[this._pininfo.m],0x00000003,i_opt.mode,this._pininfo.smb,i_db);
\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
88 bc+=BCF.setBit(this._PINMODE_OD[this._pininfo.o],0x00000001,i_opt.od,this._pininfo.ob,i_db);
\r
92 throw new MiMicException(e);
\r
96 * ピンにオプションパラメータをセットする。
\r
97 * 関数は、物理ピンのレジスタに、i_optで与えられる値を設定する。
\r
98 * 関数は、レジスタの位置に合わせてパラメータ値を自動的にシフトする。
\r
99 * @name LPCXpresso1769.Pin#setOpt
\r
101 * @param {object as associative array} i_opt
\r
102 * ピンコンフィグレーションのパラメタである。必要な値を格納した連想配列で指定する。
\r
103 * 全ての値を省略することは出来ない。連想配列のメンバは以下の通り。
\r
104 * <pre>{sel,mode,od}</pre>
\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
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
116 setOpt:function setOpt(i_opt)
\r
119 var db=new Array();
\r
120 var bc=this.BCF_setOpt(i_opt,db);
\r
122 throw new MiMicException("i_opt is empty or invalid.");
\r
125 this._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
127 throw new MiMicException(e);
\r