2 * @fileOverview LPCXpresso1769の物理ペリフェラルを制御するクラスを定義する。
\r
5 var DEV=LPCXpresso1769;
\r
8 var isUndef=MiMicLib.isUndef;
\r
10 * LPCXPresso1769.Peripheral (Peripheral)クラスのコンストラクタ。
\r
11 * ペリフェラル識別子を元に、MCUに関連付けしたPeripheral インスタンスを生成する。
\r
12 * Peripheralクラスは、物理Peripheral(主に電源/クロックブロック単位)単位に操作インタフェイスを定義する。
\r
13 * PCLKSEL,PCONPレジスタを管理する。
\r
14 * このクラスは、抽象ペリフェラルクラスへ物理ペリフェラルの基本的な操作機能を提供する為のものであり、ユーザが直接使用することは(あまり)ない。
\r
15 * 関数はMiMicの管理しているペリフェラル(ENET)も操作することが出来るが、操作してしまうとMiMicRemoteMcuとのコネクションが破壊されるので、注意すること。
\r
16 * @name LPCXpresso1769.Peripheral
\r
18 * @param {object as LPCXpresso1769.Mcu} i_mcu
\r
19 * インスタンスを結びつけるMcuオブジェクト。
\r
20 * @param {object as ペリフェラル識別子} i_phl
\r
21 * 生成するペリフェラルのペリフェラル識別子。この値は、LPCXpresso1769.PHLの要素である。
\r
22 * @param {object as associative array} i_opt
\r
23 * インスタンス生成と同時にsetOpt関数で設定する値。省略時は無視する。
\r
26 * //create GPIO peripheral
\r
27 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
28 * var phl=new LPCXpresso1769.Pheripheral(mcu,LPCXpresso.PHL.GPIO);
\r
30 DEV.Peripheral=function(i_mcu,i_phl,i_opt)
\r
34 throw new MiMicException(EE.INVALID_PHL);
\r
39 if(!isUndef(i_opt)){
\r
43 throw new MiMicException(e);
\r
46 DEV.Peripheral.prototype=
\r
48 _PCLKSEL:[0x400FC1A8,0x400FC1AC],
\r
56 * BCフラグメントを生成して、_cacheを更新します。
\r
59 BCF_setOpt:function BCF_setOpt(i_opt,i_db)
\r
64 if(!isUndef(i_opt.power)){
\r
65 if(this._phl[2]==null){
\r
66 throw new MiMicException(EE.INVALID_CFG,"The pin does not support PCONP.");
\r
69 bc+=BCF.setBit(this._PCONP,0x00000001,i_opt.power,this._phl[2],i_db);
\r
72 if(!isUndef(i_opt.clock)){
\r
73 if(this._phl[0]==null){
\r
74 throw new MiMicException(EE.INVALID_CFG,"The pin does not support PCLKSEL.");
\r
77 this._cache.pclk=i_opt.clock;
\r
78 bc+=BCF.setBit(this._PCLKSEL[this._phl[0]],0x00000003,i_opt.clock,this._phl[1],i_db);
\r
82 throw new MiMicException(e);
\r
86 * ペリフェラルにオプションパラメータをセットする。
\r
87 * 関数は、物理ペリフェラルのレジスタに、i_optで与えられる値を設定する。
\r
88 * 関数は、レジスタの位置に合わせてパラメータ値を自動的にシフトする。
\r
89 * @name LPCXpresso1769.Peripheral#setOpt
\r
91 * @param {object} i_opt
\r
92 * ペリフェラルピンコンフィグレーションのパラメタである。必要な値を格納した連想配列で指定する。
\r
93 * 全ての値を省略することは出来ない。連想配列のメンバは以下の通り。
\r
94 * <pre>{power:int,clock:int}</pre>
\r
97 * 1bitのint値。 PCONP? レジスタに指定する値。Chapter 4: LPC17xx Clocking and power controlを参照。
\r
100 * 2bitのint値。PCLKSEL? レジスタに指定する値。Chapter 4: LPC17xx Clocking and power controlを参照。
\r
103 * //set DAC power on
\r
104 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
105 * var phl=new LPCXpresso1769.Peripheral(mcu,LPCXpresso.PHL.ADC);
\r
106 * phl.setOpt({power:1});
\r
108 setOpt:function setOpt(i_opt)
\r
111 var db=new Array();
\r
112 var bc=this.BCF_setOpt(i_opt,db);
\r
114 throw new MiMicException("i_opt is empty or invalid.");
\r
117 this._mcu.callMiMicWithCheck(bc+BCF.END,db);
\r
120 throw new MiMicException(e);
\r
125 * ペリフェラルのクロックを[Hz]単位で返す。
\r
126 * クロックは、Table 42. Peripheral Clock Selection register bit valuesと、MCUのクロック(LPCXpresso1769.Mcuの提供する値)から計算する。
\r
127 * 動作中のPLL0の変更には対応していない。注意すること。
\r
128 * @name LPCXpresso1769.Peripheral#getPCLK
\r
133 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
134 * var phl=new LPCXpresso1769.Peripheral(mcu,LPCXpresso.PHL.PWM);
\r
135 * alert(phl.getPCLK());
\r
137 getPCLK:function getPCLK()
\r
142 var t=m[this._cache.pclk];
\r
145 if(this._phl===DEV.PHL.CAN1 || this._phl===DEV.PHL.CAN2){
\r
146 r=this._mcu.getClockInfo().cclk/6;
\r
148 r=this._mcu.getClockInfo().cclk/8;
\r
151 r=this._mcu.getClockInfo().cclk/t;
\r
153 return Math.round(r);
\r
155 throw new MiMicException(e);
\r