2 var DEV=LPCXpresso1769;
\r
5 var isUndef=MiMicLib.isUndef;
\r
6 var cloneAssoc=MiMicLib.cloneAssoc;
\r
9 * このクラスは、GPIOペリフェラルを管理します。
11 DEV.Gpio=function Gpio(i_mcu)
\r
15 i_mcu.registerPhl(this,"GPIO");
\r
17 throw new MiMicException(e);
\r
20 DEV.Gpio.prototype={
\r
21 _FIO_DIR :[0x2009C000,0x2009C020,0x2009C040,0x2009C060,0x2009C080],
\r
22 _FIO_PIN :[0x2009C014,0x2009C034,0x2009C054,0x2009C074,0x2009C094],
\r
23 _FIO_SET :[0x2009C018,0x2009C038,0x2009C058,0x2009C078,0x2009C098],
\r
24 _FIO_CLR :[0x2009C01C,0x2009C03C,0x2009C05C,0x2009C07C,0x2009C09C],
\r
25 _FIO_MASK:[0x2009C010,0x2009C030,0x2009C050,0x2009C070,0x2009C090],
\r
30 BCF_setDir:function BCF_setDir(i_ch,i_bit,i_dir,i_db)
\r
33 return BCF.setBit(this._FIO_DIR[i_ch],0x00000001,i_dir,i_bit,i_db);
\r
35 throw new MiMicException(e);
\r
38 BCF_setValue:function BCF_setValue(i_ch,i_bit,i_val,i_db)
\r
41 SGET #0;//GPIOの値レジスタアドレス
\r
42 SGET #1;//GPIOのMASKレジスタアドレス
\r
43 SGET #2;//MASKレジスタの値
\r
50 i_db.push(this._FIO_SET[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
52 i_db.push(this._FIO_CLR[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
54 return "EA00EA01EA02DF0201FB02ffffffffDF0200";
\r
56 throw new MiMicException(e);
\r
59 BCF_getValue:function BCF_getValue(i_ch,i_bit,i_db)
\r
62 SGET #0;//GPIOの値レジスタアドレス
\r
63 SGET #1;//GPIOのMASKレジスタアドレス
\r
64 SGET #2;//MASKレジスタの値
\r
70 i_db.push(this._FIO_PIN[i_ch],this._FIO_MASK[i_ch],~(0x00000001<<i_bit));
\r
71 return "EA00EA01EA02DF0201DB0300EE03";
\r
73 throw new MiMicException(e);
\r
79 getPin:function createPin(i_pin,i_opt)
\r
82 return new DEV.GpioPin(this,i_pin,i_opt);
\r
84 throw new MiMicException(e);
\r
93 DEV.GpioPin=function GpioPin(i_gpio,i_pin,i_opt)
\r
98 this._pin=new DEV.Pin(i_gpio._mcu,i_pin);
\r
99 //pinからGPIOに関するピン情報を計算。
\r
100 this._gpioinfo=function(i_pin)
\r
102 //pinの完全な機能名を得る。(得られれば機能がある。)
\r
103 var func_name=DEV.completePinFunctionName(i_pin,"GPIO");
\r
104 //pin名からポートとビットを得る。
\r
105 var a=func_name.substring(4).split(".");
\r
107 var r={port:parseInt(a[0]),bit:parseInt(a[1]),pin_sel:DEV.getPinSelByFunctionName(i_pin,func_name)};
\r
108 if(!isNaN(r.port) && !isNaN(r.bit)){
\r
111 throw new MiMicException(EE.INVALID_CFG,"The pin has not GPIO fuction.");
\r
114 var opt=isUndef(i_opt)?{pin:{}}:
\r
117 pin:isUndef(i_opt.pin)?{}:cloneAssoc(i_opt.pin)
\r
120 if(isUndef(opt.pin.sel)){opt.pin.sel=this._gpioinfo.pin_sel;}
\r
124 throw new MiMicException(e);
\r
127 DEV.GpioPin.prototype=
\r
130 _pin:null,//LPCXpressoのpin
\r
131 _gpioinfo:null,//GPIOの情報{port,bit,pin_sel}
\r
135 setOpt:function setOpt(i_opt)
\r
139 var db=new Array();
\r
141 if(!isUndef(i_opt.dir)){
\r
142 bc+=this._gpio.BCF_setDir(this._gpioinfo.port,this._gpioinfo.bit,i_opt.dir,db);
\r
145 if(!isUndef(i_opt.pin)){
\r
146 bc+=this._pin.BCF_setOpt(i_opt.pin,db);
\r
149 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
151 throw new MiMicException(e);
\r
157 setValue:function setValue(i_val)
\r
161 var db=new Array();
\r
162 bc+=this._gpio.BCF_setValue(this._gpioinfo.port,this._gpioinfo.bit,i_val,db);
\r
163 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
165 throw new MiMicException(e);
\r
171 getValue:function getValue()
\r
176 var db=new Array();
\r
177 bc+=this._gpio.BCF_getValue(this._gpioinfo.port,this._gpioinfo.bit,db);
\r
178 var ret=this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
179 return (ret.stream[0]>>this._gpioinfo.bit)&0x01;
\r
181 throw new MiMicException(e);
\r
187 Array[int]:ビットパターンです。[0,1,0,1]の場合、0,1,0,1の順に、パターンを出力します。
\r
192 outPatt:function outPatt(i_val_array)
\r
196 var db=new Array();
\r
197 for(var i=0;i<i_val_array.length;i++){
\r
198 bc+=this._gpio.BCF_setValue(this._gpioinfo.port,this._gpioinfo.bit,i_val_array[i],db);
\r
200 this._gpio._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
202 throw new MiMicException(e);
\r