セクション 4....
TRANSCRIPT
注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。
セクション 4. プログラムメモリ
プログラムメモリ
4
ハイライト
本セクションには下記の主要項目を記載しています。
4.1 プログラムメモリのアドレスマップ ............................................................................ 4-24.2 制御レジスタ ................................................................................................................ 4-64.3 プログラム カウンタ ..................................................................................................... 4-74.4 テーブル命令を使ったプログラムメモリの読み出し ................................................... 4-84.5 データ空間からの PSV ............................................................................................... 4-144.6 プログラムメモリの書き込み ..................................................................................... 4-214.7 プログラムメモリの低消費電力モード ....................................................................... 4-214.8 レジスタマップ ........................................................................................................... 4-224.9 関連アプリケーション ノート .................................................................................... 4-234.10 改訂履歴 ...................................................................................................................... 4-24
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-1
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.1 プログラムメモリのアドレスマップ
dsPIC33E/PIC24E は 4M x 24 ビットのプログラムメモリ アドレス空間を備えます。補助メモ リ空間を備えたデバイスのプログラムメモリ マップの例を、図 4-1 に示します。補助メモリ空 間を備えないデバイスのプログラムメモリ マップの例を、図 4-2 に示します。
プログラムメモリ空間には下記を使ってアクセスできます。
• 23 ビットのプログラム カウンタ (PC)• テーブル読み出し (TBLRD) 命令
• PSV (プログラムメモリの任意の32Kバイトセグメントをデータメモリ アドレス空間に割り 当てる )
Note: ファミリ リファレンス マニュアルの本セクションは、デバイス データシートの補 足を目的としています。本セクションの内容は dsPIC33E/PIC24E ファミリの一部のデバイスには対応していません。
本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、最新デバイス データシート内の「メモリ構成」と「フラッシュ プログラムメモリ」の冒 頭に記載している注意書きでご確認ください。
デバイス データシートとファミリ リファレンス マニュアルの各セクションは、マ イクロチップ社のウェブサイト (http://www.microchip.com)からダウンロードできます。
DS70613C_JP - p. 4-2 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
図 4-1: 補助メモリを備えた dsPIC33E/PIC24E のプログラムメモリ マップの例
0x0000000x000002
0x7FFFFE
0xF800000xF800120xF80014
0xFEFFFE0xFF00000xFF0002
0xF7FFFE
0x000004
0x7FFFFC
0x0002000x0001FE
Con
figur
atio
n M
emor
y Sp
ace
Use
r Mem
ory
Spac
e
Note 1: 上図のメモリ空間の縮尺比は不定です。
2: リセットアドレスは、リセット ターゲットベクタ選択ビット (RSTPRI) で制御 します。詳細は各デバイス データシート内の「その他の特殊な機能」を参照 してください。
3: 上図のメモリマップはあくまでも参考データです。正確なメモリアドレスについては、各デバイス データシート内の「メモリ構成」を参照してください。
Reset Address(2)
Device Configuration
User ProgramFlash Memory
Registers
DEVID (2 Words)
Unimplemented(Read ‘0’s)
GOTO Instruction(2)
Reserved
Reserved
Interrupt Vector Table
0x0XXXXX0x0XXXXX
Reserved0xFFFFFE
0x7FFFFA
0x7FC000Flash Memory
Auxiliary Program
0x800000
GOTO Instruction(2)
Reset Address(2)
Reserved
Write Latch
0xF9FFFE0xFA0000
0xFA00FE0xFA0100
VectorAuxiliary Interrupt
0x7FFFF8
0x7FBFFE
0x800FF8
0x801000USERID 0x800FFE
Reserved0x800FF6
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-3
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
図 4-2: 補助メモリを備えない dsPIC33E/PIC24E のプログラムメモリ マップの例
Reset Address
0x000000
0x000002
Write Latches
User ProgramFlash Memory
0x0XXXXX0x0XXXXX
0x800000
0xFA00000xFA00020xFA0004
DEVID
0xFEFFFE0xFF0000
0xFFFFFE
0xF9FFFE
Unimplemented
(Read ‘0’s)
GOTO Instruction
0x000004
Reserved
0x7FFFFE
Reserved
0x0002000x0001FEInterrupt Vector Table
Con
figur
atio
n M
emor
y Sp
ace
Use
r Mem
ory
Spac
e
Flash ConfigurationBytes
0x0XXXXX0x0XXXXX
Reserved
0xFF0002
Reserved
0x800FF80x800FF6
0xFF0004
Note 1: 上図のメモリ空間の縮尺比は不定です。
2: 上図のメモリマップはあくまでも参考データです。正確なメモリアドレスについては、各デバイス データシート内の「メモリ構成」を参照してください。
0x801000USERID 0x800FFE
DS70613C_JP - p. 4-4 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
図 4-1 と図 4-2 のプログラムメモリ マップの左側の矢印が示すように、dsPIC33E/PIC24E の プログラムメモリ空間は 2 つの領域 ( ユーザメモリ空間とコンフィグレーション メモリ空間 ) に分割されます。
ユーザメモリ空間は下記の領域を含みます。
• ユーザプログラム フラッシュメモリ
• フラッシュ コンフィグレーション バイト ; 一部のデバイスだけがこのバイトを実装してい ます。詳細は各デバイス データシートの「その他の特殊な機能」を参照してください。
• 補助プログラム フラッシュメモリ ; 一部のデバイスだけがこのメモリを実装しています。詳 細は各デバイス データシートの「メモリ構成」を参照してください。
デバイスが補助プログラム フラッシュメモリ命令をサポートしている場合、ユーザ プログラ ムメモリの消去および / またはプログラミング中に、CPU はストールなしで補助プログラム フ ラッシュメモリ内の命令を実行できます。同様に、補助プログラムメモリの消去および / またはプログラミング中に、CPU はストールなしでユーザ プログラムメモリ内の命令を実行でき ます。
コンフィグレーション メモリ空間は下記の領域を含みます。
• デバイス コンフィグレーション レジスタ ; 一部のデバイスだけがこのレジスタを実装して います。詳細は各デバイス データシートの「その他の特殊な機能」を参照してください。
• USERID アドレス
• 書き込みラッチ ; これはユーザおよび補助フラッシュメモリのプログラミングに使います。 ラッチの数はデバイスごとに異なります。詳細は各デバイス データシートの「メモリ構成」 を参照してください。
• DEVID アドレス ; このアドレスはデバイス ID とリビジョン ID を格納します。詳細は、ご使 用になるデバイスの「プログラミング仕様」を参照してください ( この文書はマイクロチップ社ウェブサイト (www.microchip.com) からダウンロードできます )。
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-5
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.2 制御レジスタ
プログラム フラッシュメモリの管理には、下記の 2 つのレジスタを使います。
• TBLPAG: テーブル ページレジスタ
• DSRPAG: データ空間読み出しページレジスタ
レジスタ 4-1: TBLPAG: テーブルページ レジスタ
U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0
— — — — — — — —bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
TBLPAG<7:0>bit 7 bit 0
凡例 :R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知
bit 15-8 未実装 :「0」として読み出し
bit 7-0 TBLPAG<7:0>: テーブルアドレス ページビット
8 ビットのテーブルアドレス ページビットとワーキング レジスタを連結する事により、[ プログラムメモリ実効アドレス (23 ビット ) + バイト選択ビット (1 ビット )] を形成します。
レジスタ 4-2: DSRPAG: データ空間読み出しページレジスタ (1,2,3)
U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0
— — — — — — DSRPAG<9:8>bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1
DSRPAG<7:0>bit 7 bit 0
凡例 :R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知
bit 15-10 未実装 :「0」として読み出し
bit 9-0 DSRPAG<9:0>: データ空間読み出しページ ポインタビット
Note 1: DSRPAG = 0x000 の場合、ページングされた DS ウィンドウから読み出すと、アドレスエラーが発生し ます。
2: DSRPAG は 0x001 にリセットされます。
3: プログラム空間 (PS) は、0x200 以上の DSRPAG 値を使って読み出せます。
DS70613C_JP - p. 4-6 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
4.3 プログラム カウンタ
データ空間のアドレッシングと互換性を保つために、PC ( プログラム カウンタ ) は 2 ずつイン クリメントし、最下位ビット (LSb) は常に「0」に設定されます。PC<22:1> を使う事により、4MB のプログラムメモリ空間内で、連続した命令ワードアドレスを指定できます。1 命令ワードは 24 ビット幅です。
プログラムメモリ アドレスの LSb (PC<0>) は、PSV (Program Space Visibility) またはテーブ ル命令を使ってデータ空間からプログラムメモリへアクセスする際のバイト選択ビットとして予約されています。PC を介する命令フェッチの場合、バイト選択ビットは不要であるため、PC<0> は常に「0」に設定されます。PSV モード動作の詳細は 4.5 「データ空間からの PSV」 を参照してください。
図 4-3 に、命令フェッチの例を示します。図では PC<22:1> を 1 つインクリメント (+1) していますが、これは PC<22:0> を 2 つインクリメント (+2) するのと同じ事です。
図 4-3: 命令フェッチの例
22 0
Program Counter 0
0x000000
0x7FFFFE
24 bits
Inst
ruct
ion
Instruction23
+1(1) 2423 User
Space
Latc
h
Note 1: PC<22:1> を 1 つインクリメント (+1) するのは PC<22:0> を 2 つインクリメント (+2) するのと同じです。
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-7
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.4 テーブル命令を使ったプログラムメモリの読み出し
テーブル読み出し命令を使うと、データ空間を経由せずにプログラム空間内の任意の命令ワードの下位ワード (lsw) と上位バイト (MSB) を直接読み書きできます。アプリケーションによっては、このようなアクセス方法が適しています。フラッシュメモリのプログラミングに関する詳細は、dsPIC33E/PIC24E ファミリ リファレンス マニュアルのセクション 5.「フラッシュ プ ログラミング」(DS70609) を参照してください ( この文書はマイクロチップ社ウェブサイト(www.microchip.com) からダウンロードできます )。
4.4.1 テーブル命令の概要
各種のテーブル命令を使うと、バイトサイズまたはワードサイズのデータをプログラム空間とデータ空間の間で移動できます。プログラムメモリ空間からデータメモリ空間への読み出しには、TBLPAG レジスタに基づくテーブル読み出し命令を使います。
テーブル読み出し命令には下記の 2 つがあります。
• TBLRDL: テーブル読み出し LOW• TBLRDH: テーブル読み出し HIGH
テーブル命令では、24 ビット幅のプログラムメモリ空間を、同じアドレスレンジを持つ横並びの 2 つの 16 ビット ( ワード ) 幅アドレス領域として扱います ( 図 4-4 参照 )。これにより、プログラム空間を 16 ビット幅の 64K バイトページとして扱って、バイト単位または配列されたワード単位でアドレスを指定してアクセスできます ( つまり、データ空間と同様にアクセスできます )。
TBLRDL命令は、プログラムメモリの下位ワードにアクセスし、TBLRDHは上位ワードにアクセスします。プログラムメモリは 24 ビット幅しか持たないため、上位ワードの上位バイトは存在しませんが、アドレスを指定する事はできます。このため、このバイトは「ファントムバイト」と呼びます。
図 4-4: テーブル操作における上位および下位アドレス領域
0816PC Address
0x0001000x0001020x0001040x000106
230000000000000000
0000000000000000
Program Memory‘Phantom’ Byte(Read as ‘0’)
‘HIGH’ Table Address Range ‘LOW’ Table Address Range
DS70613C_JP - p. 4-8 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
4.4.2 テーブルアドレスの生成
全てのテーブル命令では、ワーキング レジスタのアドレス値と 8 ビットのテーブルページ レ ジスタ (TBLPAG) を連結して、24 ビットのプログラム空間実効アドレス (1 ビットのバイト選択ビットを含む ) を形成します ( 図 4-5 参照 )。ワーキング レジスタからの値を使ってプログラ ム空間アドレスの 16 ビットを指定するため、プログラムメモリ内のデータテーブルのページサイズは 32K ワードです。
図 4-5: テーブル操作におけるアドレスの生成
4.4.3 プログラムメモリの下位ワードへのアクセス
TBLRDL命令は、プログラムメモリ データの下位 16 ビットにアクセスします。ワード幅のテー ブルアクセスでは、ポインタとして使うワーキング レジスタの LSb を無視します。バイト幅 のテーブルアクセスでは、ワーキング レジスタの LSb を使って、どちらのバイトを読み出す のかを指定します。図 4-6 に、TBLRDL 命令がアクセスするプログラムメモリのデータ領域を示します。
図 4-6: プログラムデータ ( 下位 16 ビット ) へのテーブルアクセス
Note: オーバーフローまたはアンダーフローが生じた場合、実効アドレス (EA) は、現在のページの先頭または末尾にロールオーバーします。
TBLPAG
8 bits from TBLPAG
EA
EA<0> Selects Byte
24-bit EA
TBLPAG<7> SelectsUser/ConfigurationSpace
01507
16 bits from Wn
0816PC Address
0x0001000x0001020x0001040x000106
230000000000000000
0000000000000000
Program Memory‘Phantom’ Byte(Read as ‘0’)
TBLRDL.W
TBLRDL.B (Wn<0> = 1)
TBLRDL.B (Wn<0> = 0)
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-9
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.4.4 プログラムメモリの上位ワードへのアクセス
TBLRDH命令は、プログラムメモリ データの上位 8 ビットにアクセスします。これらの命令も、 直交性のためにワードアクセスおよびバイトアクセス モードをサポートしますが、プログラム メモリ データの上位バイトへのアクセスは常に「0」を返します ( 図 4-7 参照 )。
図 4-7: プログラムデータ ( 上位 8 ビット ) へのテーブルアクセス
0816PC Address
0x0001000x0001020x0001040x000106
230000000000000000
0000000000000000
Program Memory‘Phantom’ Byte(Read as ‘0’)
TBLRDH.W
TBLRDH.B (Wn<0> = 1)
TBLRDH.B (Wn<0> = 0)
DS70613C_JP - p. 4-10 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
図 4-8: テーブル メモリマップ
TABLE PAGE 0x00
TABLE PAGE 0x01
0x000000
0x020000
0x010000
TBLRDHMSB
TABLE PAGE 0x02
TABLE PAGE 0xFD
TABLE PAGE 0xFE
TABLE PAGE 0xFF
0xFD0000
0xFF0000
0xFE0000
TABLE PAGE 0x00
TABLE PAGE 0x01
TABLE PAGE 0x02
TABLE PAGE 0xFD
TABLE PAGE 0xFE
TABLE PAGE 0xFF
TBLRDLlsw
Enabled
24-bit Program Space Address
[TBLPAG<7:0>:Wn<15:0>]
Instruction Executed = TBLRDL, TBLRDH(Table Access Enabled)
0xFFFFFE
AccessEnabled
Access
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-11
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.4.5 テーブル命令を使ったプログラムメモリへのアクセス
例 4-1 に、アセンブリ言語のサブルーチンでテーブル命令を使ってプログラムメモリにアクセスするサンプルコードを示します。例 4-2 に、MPLAB® C30 コンパイラが提供するビルトイン 関数 (__builtin_tblpage と __builtin_tbloffset) を使ってプログラムメモリにアク セスするサンプルコードを示します。
例 4-1: テーブル命令を使ったプログラムメモリへのアクセスextern long MemRead (unsigned int TablePage, unsigned int TableOffset);
unsigned long Data1, Data2, Data3;
int main(void){/* Read Configuration Register addresses 0xF80000 and 0xF80002 */Data1 = MemRead (0xF8, 0x0006);Data2 = MemRead (0xF8, 0x0008);Data3 = MemRead (0xF8, 0x000A);
while(1);}
.section .text
.global _MemRead
;************************; Function _MemRead:;; W0 = TBLPAG value; W1 = Table Offset; Return:Data in W1:W0;************************_MemRead:MOV W0, TBLPAGNOPTBLRDL [W1], W0TBLRDH [W1], W1RETURN
DS70613C_JP - p. 4-12 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
例 4-2 では、バッファをプログラムメモリ内に割り当てるために、space(prog) 属性を使います。MPLAB® C30 コンパイラは、バッファへのアクセス用にビルトイン関数 (__builtin_tblpage 、__builtin_tbloffset 等 ) を提供します。
例 4-2: MPLAB® C コンパイラを使ったプログラムメモリへのアクセス
int prog_data[10] __attribute__((space(prog))) = {0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888, 0x9999};
unsigned int lowWord[10], highWord[10];unsigned int tableOffset, loopCount;
int main(void){TBLPAG = __builtin_tblpage (prog_data);tableOffset = __builtin_tbloffset (prog_data);
/* Read all 10 constants into the lowWord and highWord arrays */for (loopCount = 0; loopCount < 10; loopCount ++){
lowWord[loopCount] = __builtin_tblrdl (tableOffset);highWord[loopCount] = __builtin_tblrdh (tableOffset);tableOffset +=2;
}
while(1);}
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-13
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.5 データ空間からの PSVdsPIC33E/PIC24E のデータメモリ アドレス空間の上位 32K バイトは、必要に応じてプログラ ムメモリの任意の 16K ワードページにマッピングできます。PSV 動作モードでは、特別な命令 (TBLRD、TBLWT) を使わなくても、プログラムメモリに保存されている定数データへ、X データ空間から透過的にアクセスできます。
4.5.1 PSV の設定
dsPIC33E/PIC24E コアは、ページング処理により、利用可能なデータ空間を拡張します。拡張した空間は、前置修飾および後置修飾した実効アドレスを使って連続的にアドレス指定できます。
基本のデータ空間の上位アドレス (0x8000~ 0xFFFF)を、10ビットのデータ空間読み出しページレジスタ (DSRPAG) と組み合わせて PSV アドレスを形成する事により、8M バイトの PSVアドレス空間をアドレス指定できます。
メモリのページングにより、PSV メモリ内の複数の 32K バイト ウィンドウにアクセスできま す。ページングしたデータメモリ空間における PSV メモリマップを図 4-9 に示します。
プログラム空間 (PS) は、0x200 以上の DSRPAG レジスタ値を使って読み出せます。
DSRPAG レジスタを使って PS を読み出す事はできますが、DSWPAG レジスタを使って PSに書き込む事はできません。データ空間書き込みページレジスタ (DSWPAG) は、データ空間(DS) ( 拡張データ空間 (EDS) を含む ) への書き込みにだけ使えます。
メモリのページングに関する詳細はセクション 3.「データメモリ」(DS70595) を参照してください。
DS70613C_JP - p. 4-14 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
図 4-9: PSV メモリマップ
SFR and Non-Mappable
Data Space
Mappable Data Space
0x0000
0xFFFF
0x8000
16-bit Data Space
Address
[EA<15:0>]
(PAGE 0)
PSV PAGE 0x300
PSV PAGE 0x301
0x000000
0x010000
0x008000
DSRPAG<8> = 1
MSB AccessEnabled
PSV PAGE 0x302
PSV PAGE 0x3FD
PSV PAGE 0x3FE
PSV PAGE 0x3FF
0x7E8000
0x7F8000
0x7F0000
PSV PAGE 0x200
PSV PAGE 0x201
PSV PAGE 0x202
PSV PAGE 0x2FD
PSV PAGE 0x2FE
PSV PAGE 0x2FF
DSRPAG<8> = 0
lsw AccessEnabled
24-bit Program Space Address
[0:DSRPAG<7:0>:EA<14:0>]
DSRPAG<9> = 1
(PSV Access Enabled)
0x7FFFFE
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-15
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
本デバイスのアーキテクチャは、読み出しと書き込みに別々のページレジスタを使う事により、各 PSV ページから EDS ページへのデータの移動をサポートします。この場合、DSRPAG および DSWPAG レジスタを使って、それぞれ PSV および EDS 空間内のページを指定します。PSV空間から EDS 空間へのデータの移動は、1 命令で実行できます。
図 4-10 に、PSV アドレスの生成方法を示します。PSV アドレスの下位 15 ビットには、実効アドレスを格納したワーキング レジスタからの値を使います。ワーキング レジスタの最上位 ビット (MSb) は、アドレスの生成に使いません。この MSb は、プログラムメモリ空間から PSVアクセスを実行するのか、それともデータメモリ空間から通常のアクセスを実行するのかを指定するために使います。ワーキング レジスタの実効アドレスが 0x8000 以上である場合、 DSRPAG レジスタによるページの選択に従って、プログラムメモリ空間からデータアクセスを実行します。ワーキング レジスタの実効アドレスが 0x8000 よりも小さい場合、データメモリ 空間から全てのデータアクセスを実行します。
図 4-10: PSV アドレスの生成
残りのアドレスビットには、データ空間読み出しページレジスタの下位8ビット (DSRPAG<7:0>)からの値を使います。この DSRPAG<7:0> ビットと、実効アドレスを格納したワーキング レジ スタの下位 15 ビットを連結し、MSb を「0」に設定する事により、24 ビットのプログラムメモリ アドレスを形成します。
ワーキング レジスタ値の LSb はバイト選択ビットとして使います。このビットの設定により、 PSV を使う命令の動作モード ( バイトモードまたはワードモード ) を指定します。
PSV アドレスは下位ワード (lsw: 16 ビット ) と上位バイト (MSB: 8 ビット ) により構成されま す。DSRPAG<9:8> = 0b10の場合、PSV を使って 24 ビット PS ワードの下位 16 ビット (lsw) にアクセスできます。DSRPAG<9:8> = 0b11の場合、PSV を使って 24 ビット PS ワードの上 位 8 ビット (MSB) にアクセスできます。これらのアクセスを示す図を、図 4-11 と図 4-12 に示します。DSRPAG 値の有効レンジの開始値は、lsw を読み出す場合 DSRPAG = 0x200、MSB を読み出す場合 DSRPAG = 0x300 です。
1
8 bits
EA
15 bits
Byte
23-bit PS Effective Address
SelectEA<15>
Gen
erat
eE
DS
DSRPAG<7:0>(2)X(1)1
User Program Space Read
Addr
ess
DS
RPA
G<9
>D
SR
PAG
<8>
Sel
ect D
SR
PAG
= 1?DSRPAG<9>
Y
N
Note 1: DSRPAG<9:8> = 11の場合、上位バイト (MSB) にアクセスします。DSRPAG<9:8> = 10の場 合、下位ワード (lsw) にアクセスします。
2: 0x200 ≤ DSRPAG<9:0> ≤ 0x3FF の場合にのみ、PSV アクセスを実行します。
for P
SV
Add
ress
Note: PSV は、プログラムメモリ空間内の値へのアクセスにのみ使えます。ユーザ コン フィグレーション空間内の値にアクセスするには、テーブル命令を使う必要があります。
DS70613C_JP - p. 4-16 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
図 4-11: lsw にアクセスする場合の PSV 動作
23 15 0
DSRPAG
15
15
EA<15> = 0
EA[15] = 1
16X DataSpace
EA
Data Space
8
15
23
0x0000
0x8000
0xFFFF
0x2A2
0x510000
0x517FFF
Data Read
DSRPAG<9:8> = 2'b10
DSRPAG<9> = 1Select PSV Access
DS
RPA
G<7
:0>
0x00
01
DS
RPA
G<8
> = 0
Hig
h/Lo
w S
elec
t
Program Space
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-17
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
図 4-12: MSB にアクセスする場合の PSV 動作
23 15 0
DSRPAG
15
15
EA<15> = 0
EA<15> = 1
16X DataSpace
EA
Data Space
Program Space
8
15
23
0x0000
0x8000
0xFFFF
0x3A2
0x510000
0x517FFF
Data Read
DSRPAG<9:8> = 2'b11
DSRPAG<9> = 1Select PSV Access
DS
RPA
G<7
:0>
0x00
01
DS
RPA
G<8
> = 1
Hig
h/Lo
w S
elec
t
DS70613C_JP - p. 4-18 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
4.5.2 PSV の実行タイミング
PSV を使う全ての命令の実行には 5 命令サイクルを要します。
4.5.2.1 REPEATループ内で PSV を使う場合
REPEATループ内で+2または-2の後置修飾オフセットによる間接アドレス指定モードでPSVを使う命令は、後述の例外を除き、プログラムメモリからの命令アクセスにオーバーヘッド サイ クルを必要としません。そのような場合の命令実行の実効スループットは、1 回の繰り返しあたり 1 命令サイクルとなります。しかし、REPEATループの下記の繰り返しの実行には、 5 命令 サイクルを要します。
• 最初のループ実行• 割り込みによるループ中断直前の命令実行• 割り込みサービス終了後のループ再開時の命令実行
REPEATループの最後の繰り返しの実行には 6 命令サイクルを要します。
REPEATループ内で、PSVアドレッシング モードが+2または -2以外のオフセットレンジを使う 場合、ループの各繰り返しの実行には 5 命令サイクルを要します。
4.5.2.2 PSV と命令ストール
PSVを使う場合の命令ストールの詳細は、セクション2.「CPU」(DS70359)を参照してください。
4.5.3 PSV のサンプルコード
バッファを作成してコンパイラが管理するPSVセクション内でそのバッファにアクセスする方法を例 4-3 に示します。「auto_psv」空間がコンパイラによって管理される PSV セクションです。セクションは 32K よりも大きくでき、それらは自動的に管理されます。既定値では、コンパイラは全ての const宣言された変数を auto_psv空間内に配置します。
auto_psvを使う場合、コンパイラは必要に応じて動的に DSRPAG レジスタを保存 / 復元します。一連のツールは、コンパイラ起動コード内で DSRPAG が適正に初期化されるように、セットアップします。
例 4-3: コンパイラが管理する PSV アクセス
Note: PSV アクセスとは異なり、TBLRDx 命令は、各繰り返しの実行に 5 命令サイクルを要します。
Note: 28KB を超える RAM を備えたデバイスでユーザ アプリケーションが PSV および EDS アクセスの両方を使う場合、auto_psvオプションを使う必要があります。
const int m[5] __attribute__((space(auto_psv))) = {1, 2, 3, 4, 5};int x[5] = {10, 20, 30, 40, 50};int sum;
int vectordot (int *, int *);
int main(void){// Compiler-managed PSVsum = vectordot ((int *) m, x);
while(1);}
int vectordot (int *m, int *x){int i, sum = 0;
for (i = 0; i < 5; i ++)sum += (*m++) * (*x++);
return (sum);}
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-19
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
例 4-4 に、ユーザが管理する PSV セクションにおけるバッファの配置とアクセスを示します。「psv」空間がユーザによって管理される PSV セクションです。
例 4-4: ユーザが管理する PSV アクセス
const int m[5] = {1, 2, 3, 4, 5};const int m1[5] __attribute__ ((space(psv))) = {2, 4, 6, 8, 10};const int m2[5] __attribute__ ((space(psv))) = {3, 6, 9, 12, 15};int x[5] = {10, 20, 30, 40, 50};int sum, sum1, sum2;
int vectordot (int *, int *);
int main(void){int temp;
// Save original PSV page valuetemp = DSRPAG;
DSRPAG = __builtin_psvpage (m1);sum1 = vectordot ((int *) m1, x);
DSRPAG = __builtin_psvpage (m2);sum2 = vectordot ((int *) m2, x);
// Restore original PSV page valueDSRPAG = temp;
sum = vectordot ((int *) m, x);
while(1);}
int vectordot (int *m, int *x){int i, sum = 0;
for (i = 0; i < 5; i ++)sum += (*m++) * (*x++);
return (sum);}
DS70613C_JP - p. 4-20 © 2012 Microchip Technology Inc.
セクション 4. プログラムメモリ プログラムメモリ
4
例 4-5 に、 プログラムメモリに定数データを配置し、PSV データウィンドウ経由でこのデータ にアクセスするためのアセンブリ プログラムを示します。
例 4-5: PSV のアセンブリ サンプルコード
4.6 プログラムメモリの書き込み
dsPIC33E/PIC24Eファミリのデバイスは、ユーザコードの実行用にプログラマブル フラッシュ メモリを内蔵しています。このメモリにユーザ アプリケーションをプログラミングするには、 下記の 2 通りの方法を使えます。
• 実行時自己プログラミング (RTSP)• インサーキット シリアル プログラミング (ICSP™)
RTSP の詳細はセクション 5.「フラッシュ プログラミング」(DS70609) を参照してください。 ICSP の詳細は、ご使用になるデバイスの「フラッシュ プログラミング仕様」を参照してくだ さい ( この文書はマイクロチップ社ウェブサイト (www.microchip.com) から入手できます )。
4.7 プログラムメモリの低消費電力モード
デバイスがスリープモードに移行した時に、プログラム フラッシュメモリ用の電圧レギュレー タをスタンバイモードにする事により、デバイスのパワーダウン電流 (IPD) を低減できます。
VREGSF ビット (RCON<11>) が「0」の場合、フラッシュメモリ用電圧レギュレータはスリープ時にスタンバイモードに移行します。このモードでは、デバイスの復帰遅延時間が増加します。VREGSF が「1」の場合、フラッシュメモリ用電圧レギュレータはスリープモード中でも動作します。
.section .const, psvfib_data:.word 0, 1, 2, 3, 5, 8, 13
; Start of code section.text
.global __main__main:
; Set DSRPAG to the page that contains the “fib_data” arrayMOVPAG #psvpage(fib_data), DSRPAG
; Set up W0 as a pointer to “fib_data” through the PSV data windowMOV #psvoffset(fib_data), W0
; Load the data values into registers W1 - W7MOV [W0++], W1MOV [W0++], W2MOV [W0++], W3MOV [W0++], W4MOV [W0++], W5MOV [W0++], W6MOV [W0++], W7
done: BRA done
RETURN
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-21
dsPIC33E/PIC
24Eフ
ァミ
リ リ
ファ
レン
ス マ
ニュ
アル
DS
70613C_JP
- p. 4-22©
2012 Microchip Technology Inc.
Bit 3 Bit 2 Bit 1 Bit 0 全リセット
— 0000
PCH 0000
0001
G 0001
PAG<7:0> 0000
4.8 レジスタマップ
プログラムメモリに関連するレジスタの要約を表 4-1 に示します。
表 4-1: CPU コア関連のレジスタマップ
レジスタ
名Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4
PCL PCL
PCH — — — — — — — — —
DSRPAG — — — — — — DSRPAG
DSWPAG — — — — — — — DSWPA
TBLPAG — — — — — — — — TBL凡例 : — = 未実装、「0」として読み出し、リセット値は 16 進表記です。
セクション 4. プログラムメモリ プログラムメモリ
4
4.9 関連アプリケーション ノート
本セクションに関連するアプリケーション ノートの一覧を以下に記載します。一部のアプリ ケーション ノートは dsPIC33E/PIC24E 製品ファミリ向けではありません。ただし概念は共通 しており、変更が必要であったり制限事項が存在するものの利用が可能です。プログラムメモリ モジュールに関連する最新のアプリケーション ノートは下記の通りです。
タイトル アプリケーション ノート番号
現在、関連するアプリケーション ノートはありません。 N/A
Note: dsPIC33E/PIC24E ファミリファミリ関連のアプリケーション ノートとサンプル コードはマイクロチップ社のウェブサイト (www.microchip.com)でご覧になれます。
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-23
dsPIC33E/PIC24E ファミリ リファレンス マニュアル
4.10 改訂履歴
リビジョン A (2009 年 9 月 )本書の初版
リビジョン B (2010 年 7 月 )このリビジョンでの変更内容は以下の通りです。
• サンプルコード ( 例 4-1 ~例 4-5) を全て更新
• プログラムメモリ マップ ( 図 4-1) を更新
• 4.4.1 「テーブル命令の概要」内の第 1 段落と網掛け注釈を更新
• 図 4-4 の後に、TBLPAG レジスタへの書き込みに関する網掛け注釈を追加
• 4.4.2 「テーブルアドレスの生成」を更新
• 4.4.3 「プログラムメモリの下位ワードへのアクセス」内の第 2 文を更新
• 4.4.4 「プログラムメモリの上位ワードへのアクセス」に新しい図「テーブル メモリマップ」 ( 図 4-8) を追加
• 4.5.1 「PSV の設定」に網掛け注釈を追加し、最終段落を更新
• ページングしたデータメモリ空間 ( 図 4-9) を更新
• PSV アドレスの生成 ( 図 4-10) を更新
• 4.5.2 「PSV の実行タイミング」全体で、必要命令サイクル数を 2 から 5 に変更
• 例 4-3 の後に、auto_psvオプションの使用に関する網掛け注釈を追加
• 4.6 「プログラムメモリの書き込み」に、「dsPIC33E/PIC24E フラッシュ プログラミング仕 様」(DS70619) への参照を追加
リビジョン C (2011 年 12 月 )このリビジョンでの変更内容は以下の通りです。
• 4.1 「プログラムメモリのアドレスマップ」を更新
• 補助メモリを備えたデバイスのプログラムメモリ マップ ( 図 4-1) を更新
• 補助メモリを備えないデバイスのプログラムメモリ マップ ( 図 4-2) を新たに追加
• テーブル命令を使ったプログラムメモリへのアクセス ( 例 4-1) を更新
• MPLAB® C コンパイラを使ったプログラムメモリへのアクセス ( 例 4-2) を更新
• 4.4.5「プログラムメモリへのデータの保存」を削除
• 4.5.2「X および Y データ空間による PSV マッピング」を削除
• コンパイラが管理する PSV アクセス ( 例 4-3) を更新
• ユーザが管理する PSV アクセス ( 例 4-4) を更新
• 4.6 「プログラムメモリの書き込み」を更新
• 4.7 「プログラムメモリの低消費電力モード」を更新
• レジスタマップ テーブル ( 表 4-1) を更新
• 文章および体裁の変更等、本書全体の細部を修正
DS70613C_JP - p. 4-24 © 2012 Microchip Technology Inc.
© 2012 Microchip Technology Inc. DS70613C_JP - p. 4-25
本書に記載されているデバイス アプリケーション等に関する
情報は、ユーザの便宜のためにのみ提供されているものであ
り、更新によって無効とされる事があります。お客様のアプ
リケーションが仕様を満たす事を保証する責任は、お客様に
あります。マイクロチップ社は、明示的、暗黙的、書面、口
頭、法定のいずれであるかを問わず、本書に記載されている
情報に関して、状態、品質、性能、品性、特定目的への適合
性をはじめとする、いかなる類の表明も保証も行いません。マ
イクロチップ社は、本書の情報およびその使用に起因する一
切の責任を否認します。マイクロチップ社の明示的な書面に
よる承認なしに、生命維持装置あるいは生命安全用途にマイ
クロチップ社の製品を使用する事は全て購入者のリスクと
し、また購入者はこれによって発生したあらゆる損害、クレー
ム、訴訟、費用に関して、マイクロチップ社は擁護され、免
責され、損害うけない事に同意するものとします。暗黙的あ
るいは明示的を問わず、マイクロチップ社が知的財産権を保
有しているライセンスは一切譲渡されません。
商標
マイクロチップ社の名称と Microchip ロゴ、dsPIC、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、rfPIC、
UNI/O は、米国およびその他の国におけるマイクロチップ・
テクノロジー社の登録商標です。
FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MXDEV、MXLAB、SEEVAL、Embedded Control SolutionsCompany は、米国におけるマイクロチップ・テクノロジー
社の登録商標です。
Analog-for-the-Digital Age,Application Maestro、chipKIT、chipKIT logo、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、
FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPLAB Certifiedr ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、
PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、Total Endurance、TSHARC、
UniWinDriver、WiperLock、ZENA は、米国およびその他の
国におけるマイクロチップ・テクノロジー社の登録商標です。
SQTP は、米国におけるマイクロチップ・テクノロジー社の
サービスマークです。
その他、本書に記載されている商標は各社に帰属します。
© 2011, Microchip Technology Incorporated, All RightsReserved.
ISBN: 978-1-62076-132-8
マイクロチップ社製デバイスのコード保護機能に関して次の点にご注意ください。
• マイクロチップ社製品は、該当するマイクロチップ社データシートに記載の仕様を満たしています。
• マイクロチップ社では、通常の条件ならびに仕様に従って使用した場合、マイクロチップ社製品のセキュリティ レベルは、現
在市場に流通している同種製品の中でも最も高度であると考えています。
• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、
マイクロチップ社データシートにある動作仕様書以外の方法でマイクロチップ社製品を使用する事になります。このような行
為は知的所有権の侵害に該当する可能性が非常に高いと言えます。
• マイクロチップ社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。
• マイクロチップ社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コー
ド保護機能とは、マイクロチップ社が製品を「解読不能」として保証するものではありません。
コード保護機能は常に進歩しています。マイクロチップ社では、常に製品のコード保護機能の改善に取り組んでいます。マイクロ
チップ社のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはそ
の他の著作物に不正なアクセスを受けた場合は、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利が
あります。
マイクロチップ社では、ChandlerおよびTempe (アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とイドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。マイクロチップ社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関するマイクロチップ社の品質システムは ISO 9001:2000 認証を取得しています。
DS70613C_JP - p. 4-26 © 2012 Microchip Technology Inc.
北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com
アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455
ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088
シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075
クリーブランドIndependence, OH Tel:216-447-0464 Fax:216-447-0643ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924
デトロイトFarmington Hills, MI Tel:248-538-2250Fax:248-538-2260
インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453
ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608
サンタクララSanta Clara, CA Tel:408-961-6444Fax:408-961-6445
トロントMississauga, Ontario, CanadaTel:905-673-0699 Fax:905-673-6509
アジア / 太平洋アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2401-1200Fax:852-2401-3431オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755
中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104
中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889
中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500
中国 - 杭州Tel:86-571-2819-3187 Fax:86-571-2819-3189
中国 - 香港 SARTel:852-2401-1200 Fax:852-2401-3431
中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470
中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205
中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066
中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393
中国 - 深圳Tel:86-755-8203-2660 Fax:86-755-8203-1760
中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118
中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256
中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130
中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049
アジア / 太平洋
インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123
インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632
インド - プネTel:91-20-2566-1512Fax:91-20-2566-1513
日本 - 大阪Tel:81-66-152-7160 Fax:81-66-152-9310
日本 - 横浜Tel:81-45-471- 6166 Fax:81-45-471-6122
韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302
韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934
マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859
マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068
フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069
シンガポールTel:65-6334-8870Fax:65-6334-8850
台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955
台湾 - 高雄Tel:886-7-536-4818Fax:886-7-330-9305
台湾 - 台北Tel:886-2-2500-6610 Fax:886-2-2508-0102
タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350
ヨーロッパ
オーストリア - ヴェルスTel:43-7242-2244-39Fax:43-7242-2244-393デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829
フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79
ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44
イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781
オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340
スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91
イギリス - ウォーキンガムTel:44-118-921-5869Fax:44-118-921-5820
各国の営業所とサービス
11/29/11