2 * @fileOverview LPCXpresso1769のメモリアクセスクラスを定義する。
\r
6 var DEV=LPCXpresso1769;
\r
9 var isUndef=MiMicLib.isUndef;
\r
11 * LPCXPresso1769.Memory (Memory)クラスのコンストラクタ。
\r
12 * Memoryクラスは、MCUのメモリ空間へアクセスする手段を提供する。
\r
13 * このクラスは、メモリアクセス対してなんら保護機能を持たない。MCUのメモリマップに十分に注意する必要がある。
\r
14 * @name LPCXpresso1769.Memory
\r
16 * @param {object as LPCXpresso1769.Mcu} i_mcu
\r
17 * インスタンスを結びつけるMcuオブジェクト。
\r
18 * @param {int} i_base
\r
19 * メモリにアクセスするときのベースアドレス。省略可能である。省略時は0x0とみなす。4バイト境界でなければならない。クラスの提供する関数でアドレスを指定した時には、全てこの値が加算される。
\r
21 * //create a controlable MCU via network.
\r
22 * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);
\r
23 * var memory=new LPCXpresso1769.Memory(mcu);
\r
25 DEV.Memory=function Memory(i_mcu,i_base)
\r
27 if(!isUndef(i_base)){
\r
32 DEV.Memory.prototype=
\r
37 * 指定したアドレスの32ビット値を取得する。
\r
38 * @name LPCXpresso1769.Memory#read32^2
\r
40 * @param {int} i_offset
\r
41 * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。
\r
45 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
46 * var mem=new LPCXpresso1769.Memory(mcu); //create instance
\r
47 * alert(mem.read32(0x00000000)); //show 1 value
\r
50 * 指定したオフセットから、i_sizeバイトのメモリに格納した値を、それぞれ32ビット単位で値を取得する。i_offsetの位置から、32bit単位でi_size/4個の値を取得することになる。シーケンシャルアクセスに使用する。
\r
51 * @name LPCXpresso1769.Memory#read32^3
\r
53 * @param {int} i_offset
\r
54 * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。
\r
55 * @param {int} i_size
\r
56 * 取得するバイト数を指定する。4バイト単位でなければならない。
\r
57 * @return {int or Array[int]}
\r
58 * 取得する値の個数は、i_size/4個である。個数により、戻り値の型が異なるので注意すること。
\r
60 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
61 * var mem=new LPCXpresso1769.Memory(mcu); //create instance
\r
62 * mem.read32(0x0,8); //return 2 values.
\r
65 * オフセットの配列要素に対応した値を、それぞれ32ビット単位で取得する。
\r
67 * @name LPCXpresso1769.Memory#read32^4
\r
69 * @param {array[int]} i_offsets
\r
70 * オフセットアドレスの配列。それぞれ4バイト境界でなければならない。
\r
71 * @return {int or Array[int]}
\r
72 * 返却される値の個数は、i_offsetの長さと同じになる。個数により、戻り値の型が異なるので注意すること。
\r
74 * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");
\r
75 * var mem=new LPCXpresso1769.Memory(mcu); //create instance
\r
76 * mem.read32([0x0,0x14,0x08]); //return 3 values by specified order.
\r
79 * メモリから値を読み出して、値セットの配列、又は値を返す。
\r
80 * 関数はバイト単位のアライメントでメモリにアクセスする。メモリアドレス、取得サイズは4バイト境界に一致させなければならない。
\r
81 * 引数の違いにより、数種類の呼び出し方がある。
\r
82 * @name LPCXpresso1769.Memory#read32^1
\r
86 * @return {int or Array[int]}
\r
87 * 返却値の数により、型が異なる。1個の場合はint値、複数の場合はint型の配列である。
89 read32:function read32(/*arguments*/)
\r
92 function checkAlign(v){
\r
94 throw new MiMicException(EE.INVALID_ARG,"An alignment is not 32bit unit.");
\r
99 var offset=arguments[0];
\r
100 switch(arguments.length){
\r
102 if(!isNaN(offset)){
\r
103 //read32(i_offset:int)
\r
104 checkAlign(offset);
\r
106 ar.push(this._base+offset);
\r
108 //read32(i_offsets:array)
\r
109 for(var i=0;i<offset.length;i++){
\r
110 checkAlign(offset[i]);
\r
111 bc+=BCF.getMem(this._base+offset[i],ar);
\r
116 //read32(i_offset:int,i_size:int)
\r
117 checkAlign(offset);
\r
118 checkAlign(arguments[1]);
\r
119 var l=arguments[1]/4;
\r
120 for(var i=0;i<l;i++){
\r
122 ar.push(this._base+offset+i*4);
\r
128 var ret=this._mcu.callMiMicWithCheck(bc+BCF.END,ar).stream;
\r
129 return ret.length==1?ret[0]:ret;
\r
131 throw new MiMicException(e);
\r