2 * @fileOverview LPCXpresso1769の、GPIOペリフェラル、ピンの制御クラスを定義する。
\r
6 var DEV=LPCXpresso1769;
\r
9 var isUndef=MiMicLib.isUndef;
\r
10 var cloneAssoc=MiMicLib.cloneAssoc;
\r
13 * LPCXPresso1769.Gpio (Gpio)クラスのコンストラクタ。
\r
14 * MCUに関連付けしたGpioペリフェラルを生成する。
\r
15 * GPIOペリフェラルは、物理的には存在しない仮想ペリフェラルである。GPIOを集中管理するために定義している。
\r
16 * @name LPCXpresso1769.Gpio
\r
18 * @param {object as LPCXpresso1769.Mcu} i_mcu
\r
19 * インスタンスを結びつけるMcuオブジェクト。
\r
20 * @param {oject as associative array} i_opt
\r
23 * //create GPIO (logical)pheripheral
\r
24 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
25 * var gpio=new LPCXpresso1769.Gpio(mcu);
27 DEV.Gpio=function Gpio(i_mcu,i_opt)
\r
31 i_mcu.registerPhl(this,"GPIO");
\r
33 throw new MiMicException(e);
\r
36 DEV.Gpio.prototype={
\r
37 _FIO_DIR :[0x2009C000,0x2009C020,0x2009C040,0x2009C060,0x2009C080],
\r
38 _FIO_PIN :[0x2009C014,0x2009C034,0x2009C054,0x2009C074,0x2009C094],
\r
39 _FIO_SET :[0x2009C018,0x2009C038,0x2009C058,0x2009C078,0x2009C098],
\r
40 _FIO_CLR :[0x2009C01C,0x2009C03C,0x2009C05C,0x2009C07C,0x2009C09C],
\r
41 _FIO_MASK:[0x2009C010,0x2009C030,0x2009C050,0x2009C070,0x2009C090],
\r
47 BCF_setDir:function BCF_setDir(i_ch,i_bit,i_dir,i_db)
\r
50 return BCF.setBit(this._FIO_DIR[i_ch],0x00000001,i_dir,i_bit,i_db);
\r
52 throw new MiMicException(e);
\r
55 BCF_setValue:function BCF_setValue(i_ch,i_bit,i_val,i_db)
\r
59 SGET #0;//GPIOの値レジスタアドレス
\r
60 SGET #1;//GPIOのMASKレジスタアドレス
\r
61 SGET #2;//MASKレジスタの値
\r
69 i_db.push(this._FIO_SET[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
71 i_db.push(this._FIO_CLR[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
73 return "EA00EA01EA02DF0201FB02ffffffffDF0200";
\r
75 throw new MiMicException(e);
\r
81 BCF_getValue:function BCF_getValue(i_ch,i_bit,i_db)
\r
84 SGET #0;//GPIOの値レジスタアドレス
\r
85 SGET #1;//GPIOのMASKレジスタアドレス
\r
86 SGET #2;//MASKレジスタの値
\r
92 i_db.push(this._FIO_PIN[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
93 return "EA00EA01EA02DF0201DB0300EE03";
\r
95 throw new MiMicException(e);
\r
100 * ピン識別子で指定されるピンをGPIOペリフェラルと結合して、GpioPinを生成する。
\r
101 * 関数は、LPCXpresso1769.GpioPinクラスのコンストラクタをコールして、GpioPinを生成する。失敗すると、例外をスローする。
\r
102 * 生成ルールについての詳細は、LPCXpresso1769.GpioPinを参照。
\r
103 * @name LPCXpresso1769.Gpio.getPin
\r
105 * @param {object as ピン識別子} i_pin
\r
106 * GPIO機能を割り当てるPINの識別子である。
\r
107 * @param {object as associative array} i_opt
\r
108 * GpioPinのコンストラクタに渡すオプション値を指定する。省略可能。省略時はundefinedとみなす。詳細はGpioPinのコンストラクタを参照。
\r
109 * @return {object as GpioPin}
\r
110 * GpioPinクラスのオブジェクトである。
\r
112 * //create GpioPin direction=out
\r
113 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
114 * var gpio=new LPCXpresso1769.Gpio(mcu);
\r
115 * var pin=gpio.getPin(LPCXpresso1769.P0[0],{dir:1});
\r
117 getPin:function getPin(i_pin,i_opt)
\r
120 return new DEV.GpioPin(this,i_pin,i_opt);
\r
122 throw new MiMicException(e);
\r
129 * LPCXPresso1769.GpioPin (GpioPin)クラスのコンストラクタ。
\r
130 * Gpioペリフェラルオブジェクトにピン識別子で指定されたピンを関連付けて、GPIO機能を持つピンを生成する。
\r
131 * 関数は、ピン識別子を元に、そのピンがGPIO機能に接続できるかを調べる。ピンにGPIO機能を割り当てられない場合、例外が発生する。どのピンにGPIO機能が割り当てられるかは、MCUのスペックシートを参照すること。
\r
132 * ピンがGPIO機能を持たない場合、例外が発生する。
\r
133 * @name LPCXpresso1769.GpioPin
\r
136 * インスタンスを結びつけるGpioオブジェクト。
\r
137 * @param {object as pin識別子} i_pin
\r
138 * ピン識別子。指定できるのは、LPCXpresso1796.P?[?]である。
\r
140 * setOpt関数のi_optに渡すパラメタ。省略可能。
\r
141 * 省略時は、{pin:{sel:auto}}を使用する。autoは関数が自動的に決定PINSEL値である。
\r
144 * //create GPIO Port 0.0 dir=out
\r
145 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
146 * var gpio=new LPCXpresso1769.Gpio(mcu);
\r
147 * var pin=new LPCXpresso1769.GpioPin(gpio,P0[0],{dir:1});
\r
149 DEV.GpioPin=function GpioPin(i_gpio,i_pin,i_opt)
\r
154 this._pin=new DEV.Pin(i_gpio._mcu,i_pin);
\r
155 //pinからGPIOに関するピン情報を計算。
\r
156 this._gpioinfo=function(i_pin)
\r
158 //pinの完全な機能名を得る。(得られれば機能がある。)
\r
159 var func_name=DEV.completePinFunctionName(i_pin,"GPIO");
\r
160 //pin名からポートとビットを得る。
\r
161 var a=func_name.substring(4).split(".");
\r
163 var r={port:parseInt(a[0]),bit:parseInt(a[1]),pin_sel:DEV.getPinSelByFunctionName(i_pin,func_name)};
\r
164 if(!isNaN(r.port) && !isNaN(r.bit)){
\r
167 throw new MiMicException(EE.INVALID_CFG,"The pin has not GPIO fuction.");
\r
170 var opt=isUndef(i_opt)?{pin:{}}:
\r
173 pin:isUndef(i_opt.pin)?{}:cloneAssoc(i_opt.pin)
\r
176 if(isUndef(opt.pin.sel)){opt.pin.sel=this._gpioinfo.pin_sel;}
\r
180 throw new MiMicException(e);
\r
183 DEV.GpioPin.prototype=
\r
186 _pin:null,//LPCXpressoのpin
\r
187 _gpioinfo:null,//GPIOの情報{port,bit,pin_sel}
\r
189 * ADピンにオプション値を設定する。
\r
190 * @name LPCXpresso1769.GpioPin#setOpt
\r
192 * @param {object as associative array} i_opt
\r
193 * GPIOピンのコンフィグレーションパラメタである。必要な値を格納した連想配列で指定する。
\r
194 * 全ての値を省略することは出来ない。連想配列のメンバは以下の通り。
\r
195 * <pre>{dir:int,pin:object as associative array}</pre>
\r
197 * <li>dir - ピンのIN/OUTを指定する1bitの値。1=out,0=in</li>
\r
198 * <li>pin - LPCXpresso1769.Pin#setOpt関数のi_optに渡すパラメタである。</li>
\r
201 * //set P0[0] to output GPIO and mode=repeter and open drain=1
\r
202 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
203 * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");
\r
204 * gpiopin.setOpt({dir:1,pin:{mode:1,od:0}});
\r
205 * gpiopin.setValue(1);
\r
207 setOpt:function setOpt(i_opt)
\r
211 var db=new Array();
\r
213 if(!isUndef(i_opt.dir)){
\r
214 bc+=this._gpio.BCF_setDir(this._gpioinfo.port,this._gpioinfo.bit,i_opt.dir,db);
\r
217 if(!isUndef(i_opt.pin)){
\r
218 bc+=this._pin.BCF_setOpt(i_opt.pin,db);
\r
221 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
223 throw new MiMicException(e);
\r
228 * この関数は、directionを1(output)に設定したピンで使用できる。inputに設定したピンには使用できない。
\r
229 * @name LPCXpresso1769.GpioPin#setValue
\r
231 * @param {int} i_val
\r
234 * //set P0[0] pin to “on”. If LED was connected pin it will turn on.
\r
235 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
236 * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");
\r
237 * gpiopin.setOpt({dir:1,pin:{mode:1,od:0}});
\r
238 * gpiopin.setValue(1);
\r
240 setValue:function setValue(i_val)
\r
244 var db=new Array();
\r
245 bc+=this._gpio.BCF_setValue(this._gpioinfo.port,this._gpioinfo.bit,i_val,db);
\r
246 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
248 throw new MiMicException(e);
\r
253 * この関数は、directionを0(input)に設定したピンで使用できる。outputに設定したピンには使用できない。
\r
257 * @name LPCXpresso1769.GpioPin#getValue
\r
259 * //show P0[0] value
\r
260 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
261 * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");
\r
262 * gpiopin.setOpt({dir:0,pin:{mode:0,od:0}});
\r
263 * alert(gpiopin.getValue());
\r
265 getValue:function getValue()
\r
270 var db=new Array();
\r
271 bc+=this._gpio.BCF_getValue(this._gpioinfo.port,this._gpioinfo.bit,db);
\r
272 var ret=this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
273 return (ret.stream[0]>>this._gpioinfo.bit)&0x01;
\r
275 throw new MiMicException(e);
\r
279 * 直列化されたビットパターンを出力する。
\r
280 * 単純なビットパターンをピンに出力するときに使用する。
\r
281 * 出力速度はMCU依存であり、コントロールできない。
\r
282 * この関数は、directionを1(output)に設定したピンで使用できる。inputに設定したピンには使用できない。
\r
283 * @name LPCXpresso1769.GpioPin#outPatt
\r
285 * @param {array[int]} i_val_array
\r
286 * ビットパターンの配列。1ビットの値(0 or 1)の配列を指定する。最大数は20である。
\r
287 * [0,1,0,1]の場合、0,1,0,1の順に、パターンを出力します。
\r
289 * //output 0101010100001010 to P0[0]
\r
290 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
291 * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");
\r
292 * gpiopin.setOpt({dir:1,pin:{mode:1,od:0}});
\r
293 * gpiopin.outPatt([0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0]);
\r
295 outPatt:function outPatt(i_val_array)
\r
299 var db=new Array();
\r
300 for(var i=0;i<i_val_array.length;i++){
\r
301 bc+=this._gpio.BCF_setValue(this._gpioinfo.port,this._gpioinfo.bit,i_val_array[i],db);
\r
303 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
305 throw new MiMicException(e);
\r