34
© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-1 データメモリ 3 セクション 3. データメモリ ハイライト 本セクションには下記の主要項目を記載しています。 3.1 はじめに ........................................................................................................................ 3-2 3.2 データ空間 .................................................................................................................... 3-2 3.3 データ空間アドレス生成ユニット (AGU) ................................................................... 3-11 3.4 モジュロ アドレッシング (dsPIC33E のみ ) ............................................................... 3-13 3.5 ビット反転アドレッシング (dsPIC33E のみ ) ............................................................ 3-19 3.6 DMA RAM ................................................................................................................... 3-23 3.7 制御レジスタの説明 .................................................................................................... 3-24 3.8 レジスタマップ ........................................................................................................... 3-30 3.9 関連アプリケーション ノート .................................................................................... 3-31 3.10 改訂履歴 ...................................................................................................................... 3-32 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

  • Upload
    phamanh

  • View
    229

  • Download
    0

Embed Size (px)

Citation preview

Page 1: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

セクション 3. データメモリ

データメモリ

3

ハイライト

本セクションには下記の主要項目を記載しています。

3.1 はじめに ........................................................................................................................ 3-23.2 データ空間 .................................................................................................................... 3-23.3 データ空間アドレス生成ユニット (AGU) ................................................................... 3-113.4 モジュロ アドレッシング (dsPIC33E のみ ) ............................................................... 3-133.5 ビット反転アドレッシング (dsPIC33E のみ ) ............................................................ 3-193.6 DMA RAM ................................................................................................................... 3-233.7 制御レジスタの説明 .................................................................................................... 3-243.8 レジスタマップ ........................................................................................................... 3-303.9 関連アプリケーション ノート .................................................................................... 3-313.10 改訂履歴 ...................................................................................................................... 3-32

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-1

Page 2: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.1 はじめに

dsPIC33E/PIC24E のデータ幅は 16 ビットです。全ての内部レジスタとデータ空間メモリは、16 ビット幅で構成されています。データ空間には、64K バイトの連続した単一アドレス領域としてアクセスするか、またはページングによる 4M バイトの擬似的な連続アドレス領域としてアクセスできます。データメモリには、複数のアドレス生成ユニット (AGU) とそれぞれのデータパスを使ってアクセスします。

3.2 データ空間

0x0000 ~ 0x0FFF のデータメモリ アドレスは、デバイスの特殊機能レジスタ (SFR) 用に予約済みです。これらの SFR は、CPU およびデバイス上の周辺モジュール用の制御ビットとステータスビットを格納します。

データ空間メモリマップの例を図 3-1 に示します。

RAM はアドレス 0x1000 から始まり、2 つのブロック (X および Y データ空間 ) に分割されます。データ書き込みの場合、X および Y データメモリ空間には常に単一の連続データ空間としてアクセスします。データ読み出しの場合、X および Y データメモリ空間には、個別にアクセスする事も、単一の連続空間としてアクセスする事もできます。MCU クラス命令のデータ読み出しでは、常に X および Y データ空間を結合した単一のデータ空間にアクセスします。2 つのソースオペランドを持つ DSP 命令 (MAC命令等 ) は、X および Y データ空間に個別にアクセスする事により、2 つのソースオペランドの同時読み出しをサポートします。

MCU 命令では、データ読み書き用のアドレスポインタとして任意のワーキング レジスタを使えます。

DSP クラス命令では、データ読み出し時に、Y アドレス空間を全体のデータ空間から分離します。Y データ空間からの読み出し用アドレスポインタには、W10 と W11 を使います。この場合、残りのデータ空間を X 空間と呼びますが、より正確には「X マイナス Y」空間と呼ぶ事ができます。DSP クラス命令は、X データ空間からのデータ読み出し用アドレスポインタとしてW8 と W9 を使います。

図 3-2 に、MCU クラス命令と DSP クラス命令におけるデータメモリの割り当て方法を示します。データ読み出し時のアドレス空間へのアクセス方法は、使用するワーキング レジスタの番号と命令のタイプによって異なる事に注意してください。特に MCU クラス命令は、X およびY データメモリを、1 つに結合した連続データ空間として扱う事に注意が必要です。MCU 命令では、読み / 書き用のアドレスポインタとして、任意のワーキング レジスタにデータ空間読み/ 書き用ページレジスタを組み合わせて使う事ができます。2 つのデータオペランドを同時にプリフェッチ可能な DSP 命令は、データメモリを 2 つの空間に分割します。この場合、読み出しアドレスポインタには決められた特定のワーキング レジスタを使う必要があります。

一部の DSP 命令では、命令の対象ではないアキュムレータをデータメモリに格納できるものがあります。この機能は「アキュムレータ書き戻し」と呼びます。アキュムレータ書き戻しにおいては、X/Y を結合したデータメモリ空間へのアドレスポインタとして、常に W13 を使う必要があります。

DSP クラス命令の場合、メモリ読み出し時の X メモリ空間へのアドレスポインタには、常にW8 と W9 を使う必要があります。W8 または W9 を Y メモリ空間へのポインタとして使うと、ゼロが返されます。W8 または W9 が未実装のメモリアドレスを指した場合、アドレス エラートラップが発生します。

Note: ファミリ リファレンス マニュアルの本セクションは、デバイス データシートの補足を目的としています。本セクションの内容は、dsPIC33E/PIC24E ファミリの一部のデバイスには対応していません。

本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、最新デバイス データシート内の「データメモリ」の冒頭に記載している注意書きでご確認ください。

デバイス データシートとファミリ リファレンス マニュアルの各セクションは、マイクロチップ社のウェブサイト (http://www.microchip.com)からダウンロードできます。

DS70595C_JP - p. 3-2 © 2012 Microchip Technology Inc.

Page 3: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

DSP クラス命令の場合、メモリ読み出し時の Y メモリ空間へのアドレスポインタには、常にW10 と W11 を使う必要があります。W10 または W11 を X メモリ空間へのポインタとして使うと、ゼロが返されます。W10 または W11 が未実装のメモリアドレスを指した場合、アドレス エラートラップが発生します。アドレスエラー トラップの詳細は、セクション 6.「割り込み」(DS70602) を参照してください。

一部の dsPIC33E/PIC24E は、DMA とデュアルポート SRAM メモリ (DPSRAM) を内蔵しています。CPU および DMA コントローラは、CPU ストール等の影響を受けずに DSPRAM 内のアドレスに対して読み書きできます。これにより最大限のリアルタイム性能が得られます。DMAは、拡張データ空間 (EDS) を含む全てのデータメモリ空間 ( ただし SFR 空間を除く ) をアドレッシングできます。詳細はセクション 22.「ダイレクト メモリアクセス (DMA)」(DS70348)を参照してください。

追加の RAM と、オプションの外部バス インターフェイスをサポートするために、データメモリ空間は拡張されます。拡張されたデータメモリ空間は DS、EDS、PSV (Program SpaceVisibility) 空間にまたがる擬似的な連続アドレス空間です。

図 3-1: データメモリ マップの例

Note: データメモリ マップと、X および Y データ空間の境界位置は、デバイスによって異なります。詳細は、各 dsPIC33E/PIC24E デバイスのデータシートを参照してください。

Note: DPSRAM の実装の有無とサイズはデバイスによって異なります。詳細は、各dsPIC33E/PIC24E デバイスのデータシートを参照してください。

Note 1: X および Y データ空間のサイズはデバイスによって異なります。詳細は各デバイスのデータシートを参照し

てください。上図のデータ空間の境界位置は参考例です。

2: ニアデータメモリには、オペコードで 13 ビットアドレスを指定するファイルレジスタ命令を使って直接ア

クセスできます。 3: 全てのデータメモリには、ワーキング レジスタを介して間接的にアクセスするか、あるいは MOV命令を使っ

て直接アクセスできます。

4: データメモリ マップのアドレスが大きい後半は、PSV 向けに、プログラムメモリ空間の 1 つのセグメントに

割り当てる事ができます。

0x0000

0x0FFE

0x1FFE

LSBAddress

16 bits

LSBMSB

MSBAddress

0x0001

0x0FFF

0xFFFF

X Data RAM Unimplemented

0xDFFF 0xDFFE0xE0000xE001

0x1001 0x1000

0x2001 0x2000

Near DataMemory

0xCFFF0xD001 0xD000

0xCFFE

Y Data RAM

X Data RAM

SFR Space

DPSRAM

0x1FFF(8 Kbytes)

0x80010x7FFF 0x7FFE

0x8000

X Data RAM

0x90010x8FFF 0x8FFE

0x9000

AddressableDirectly

0xFFFE

Always visiblewhenever

EA<15> = 0

AddressableIndirectly orDirectly with

the MOVVisible if DSxPAG = 0x01;otherwise, EDS or PSV

page window

instruction

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-3

Page 4: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

図 3-2: MCU 命令と DSP 命令のデータ空間

3.2.1 ニアデータメモリ

データメモリ空間の 0x0000 ~ 0x1FFF には、ニアデータメモリと呼ぶ 8K バイトのアドレス空間が予約されています。全てのファイルレジスタ命令は、13 ビット絶対アドレス フィールドを介して、ニアデータメモリを直接アドレッシングできます。

dsPIC33E/PIC24E のニアデータ領域が格納するメモリ領域は、各デバイスのデータメモリ実装サイズによって異なります。ニアデータ領域は、少なくとも全ての SFR と X データメモリの一部を格納します。データメモリ サイズが小さいデバイスでは、ニアデータ領域に全ての X メモリ空間と、Yメモリ空間の一部または全部を格納できます。詳細は図3-1を参照してください。

3.2.2 メモリのページング

dsPIC33E/PIC24E アーキテクチャは、ページング方式を使って、アクセス可能なデータ空間を拡張します。このデータ空間には、MOV 命令を使い、前置または後置修飾した実効アドレス(EA) を指定して、連続的にアクセスできます。基本のデータ空間のアドレスポインタをデータ空間ページレジスタ (10 ビットの読み出しページレジスタ (DSRPAG) または 9 ビットの書き込みページレジスタ (DSWPAG)) と組み合わせる事により、EDS アドレスまたは PSV アドレスを構成します。データ空間ページレジスタは、SFR 空間に配置されます。

EDA アドレスの構成を図 3-3 と図 3-4 に示します。DSRPAG<9> = 0かつ基本のアドレスビット EA<15> が「1」の時、DSRPAG<8:0> と EA<14:0> を連結する事により、24 ビットの EDS読み出しアドレスを構成します。同様に、基本の空間のアドレスビット EA<15> が「1」の時、DSWPAG<8:0> と EA<14:0> を連結して 24 ビットの EDS 書き込みアドレスを構成します。

Note: MOV 命令を使うと、64K データ空間の全体を直接アドレッシングできます。詳細は「16 ビット MCU および DSC プログラマ リファレンス マニュアル」(DS70157)を参照してください。

(Y Space)

X S

pace

Unused

X S

pace

X S

pace

Unused

Unused

MCU Class Instructions (Read/Write) Dual Source Operand DSP Instructions (Read)

Indirect EA from W10, W11 Indirect EA from W8, W9

Note: DSP 命令によるデータ書き込みでは、データメモリ全体を 1 つに結合した空間とみなします。アキュムレータ書き戻しを実行する DSP 命令は、結合したデータ空間への書き込み用アドレスポインタとして W13 を使います。

DSP Instructions (Write)

Y Space

DS70595C_JP - p. 3-4 © 2012 Microchip Technology Inc.

Page 5: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

図 3-3: 拡張データ空間 (EDS) の読み出しアドレスの生成

図 3-4: 拡張データ空間 (EDS) の書き込みアドレスの生成

メモリのページングにより、EDS および PSV メモリ内の複数の 32K バイト ウィンドウにアクセスできます。データ空間ページレジスタ DSxPAG とデータ空間のアドレスが大きい後半を組み合わせる事により、EDS 内で最大 16M バイトの追加アドレス空間と、8M バイトの PSV アドレス空間 (DSRPAG を使った読み出しのみ ) へのアクセスが可能となります。EDS メモリマップを図 3-5 に示します。

1

DSRPAG<8:0>

9 bits

EA

15 bits

Select

Byte24-bit EDS EASelect

EA(DSRPAG = don’t care)

No EDS access

Select16-bit DS EAByte

EA<15> = 0

DSRPAG

0

EA<15>

Note: DSRPAG = 0x000 の時に DS 読み出しアクセスを行うと、アドレスエラーが発生します。

= 1?DSRPAG<9>Y

N

GeneratePSV address

0

DSRPAG<9>

1

DSWPAG<8:0>

9 bits

EA

15 bits

Byte24-bit EDS EASelect

EA

(DSWPAG = don’t care)

No EDS access

Select16-bit DS EAByte

EA<15> = 0

EA<15>

Note: DSWPAG = 0x000 の時に DS 書き込みアクセスを行うと、アドレスエラーが発生します。

0

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-5

Page 6: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

図 3-5: EDS メモリマップ

読み出し用と書き込み用のページレジスタ (DSRPAG と DSWPAG) の両方を使うと、データメモリ内の異なるページ間でデータを移動できます。これを行うには、DSRPAG レジスタで読み出し元のページを指定し、DSWPAG レジスタで書き込み先のページを指定します。PSV ページから EDS ページにデータを移動する事もできます。この場合も DSRPAG および DSWPAGレジスタで、PSV および EDS 空間内のページを指定します。ページ間のデータの移動は、1 命令で実行できます。

例 3-1、例 3-2、例 3-3 に、EDS アクセスを管理するためのサンプルコードを示します。

例 3-1: コンパイラが管理する EDS アクセス

0x008000

0x010000

0x018000PAGE 3

PAGE 2

PAGE 1FD0xFE8000

0xFF0000

0xFF8000PAGE 1FF

PAGE 1FE

SFR/DS0x0000

0xFFFF

EDS EA Address (24 bits)

DS

Conventional

EA<15:0>

0x8000

(PAGE 0)

(DSRPAG<8:0>, EA<14:0>)(DSWPAG<8:0>, EA<14:0>)

PAGE 1

DSRPAG<9> = 0

DS Address

Note: プログラム空間 (PS) は、0x200 以上の DSRPAG 値を使って読み出せます。PS への書き込みはサポートしないため、DSWPAG は EDS への書き込みにのみ使えます。PSV アクセスの詳細はセクション 4.「プログラムメモリ」(DS70613) を参照してください。

#include <p33Exxxx.h>

_FOSCSEL(FNOSC_FRC);_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE);_FWDT(FWDTEN_OFF);

__eds__ int __attribute__((space(xmemory),eds)) m[5] = {1, 2, 3, 4, 5};__eds__ int __attribute__((space(ymemory),eds)) x[5] = {10, 20, 30, 40, 50};int sum;

int vectorDotProduct (int *, int *);

int main(void){// Compiler-managed EDS accessessum = vectorDotProduct (__eds__ int *,__eds__ int *);

while(1);}

int vectorDotProduct (__eds__ int * m,__eds__ int * x){int i, sum = 0;

for (i = 0; i < 5; i ++)sum += (*m++) * (*x++);

return (sum);}

DS70595C_JP - p. 3-6 © 2012 Microchip Technology Inc.

Page 7: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

例 3-2: ユーザが管理する EDS アクセス#include <p33Exxxx.h>

_FOSCSEL(FNOSC_FRC);_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE);_FWDT(FWDTEN_OFF);

int m[5] = {1, 2, 3, 4, 5};int __attribute__((space(xmemory),eds)) m1[5] = {2, 4, 6, 8, 10};int __attribute__((space(ymemory),eds)) m2[5] = {3, 6, 9, 12, 15};int x[5] = {10, 20, 30, 40, 50};int sum[5];int __attribute__((space(xmemory),eds)) sum1[5];int __attribute__((space(ymemory),eds)) sum2[5];

void vectorMultiply (int *, int *, int *);

int main(void){int temp1, temp2;

// Save original EDS page valuestemp1 = DSRPAG;temp2 = DSWPAG;

DSRPAG = __builtin_edspage (m1);DSWPAG = __builtin_edspage (sum1);vectorMultiply ((int *) m1, x, (int *) sum1);

DSRPAG = __builtin_edspage (m2);DSWPAG = __builtin_edspage (sum2);vectorMultiply ((int *) m2, x, (int *) sum2);

// Restore original EDS page valuesDSRPAG = temp1;DSWPAG = temp2;

vectorMultiply ((int *) m, x, (int *) sum);

while(1);}

void vectorMultiply (int *m, int *x, int *sum){int i;

for (i = 0; i < 5; i ++)(*sum++) = (*m++) * (*x++);

}

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-7

Page 8: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

例 3-3: EDS のアセンブリ サンプルコード

EDS または PSV ページのオーバーフローまたはアンダーフローが発生した場合、レジスタ間接 EA 計算の結果として EA<15> がクリアされます。下記の場合、EDS または PSV のページ境界で EA のオーバーフローまたはアンダーフローが発生する可能性があります。

• 修飾前の初期アドレスが EDS または PSV ページを指す場合

• EA の計算に前置修飾または後置修飾レジスタ間接アドレッシングを使う場合 ( ただし、レジスタ オフセット アドレッシングを含まず )

一般的に、オーバーフローが検出されると、DSxPAG レジスタはインクリメントされ、その結果 EA<15> ビットはセットされて、基本のアドレスは EDS または PSV ウィンドウ内に維持されます。アンダーフローが検出されると、DSxPAG レジスタはデクリメントされ、EA<15> ビットはセットされて、基本のアドレスは EDS または PSV ウィンドウ内に維持されます。これは、レジスタ間接アドレッシング モードを使う場合にのみ、連続した EDS および PSV アドレス空間を作成します。

例外として、EDS および PSV 空間のページ 0 の境界を越えて出入りする場合の動作は、上記の説明とは異なります。表 3-1 に、各種境界におけるオーバーフローおよびアンダーフロー処理の影響を示します。

下記の場合にオーバーフローまたはアンダーフローが発生すると、EA<15> ビットはセットされますが、DSxPAG は変更されません。従って EA は現在のページの先頭へロールオーバーします。

• レジスタ オフセット付きのレジスタ間接アドレッシング

• モジュロ アドレッシング

• ビット反転アドレッシング

• TBLRDxまたはTBLWTxの操作で使うテーブル アドレッシング (TBLRDxはソースアドレス、TBLWTx はデスティネーション アドレスを格納 )

.section .data, eds

.global fib_data

.global fib_sumfib_data:.word 0, 1, 2, 3, 5, 8, 13

fib_sum:.space 2

; Start of code section.text

.global _main_main:

; Set DSRPAG to the page that contains the “fib_data” arrayMOVPAG #edspage(fib_data), DSRPAG

; Set DSWPAG to the page that contains the “fib_sum” arrayMOVPAG #edspage(fib_sum), DSWPAG

; Set up W0 as a pointer to “fib_data” MOV #edsoffset(fib_data), W0

; Set up W1 as a pointer to “fib_sum” MOV #edsoffset(fib_sum), W1

; Clear register W2 as it will contain a running sumCLR W2

; Add all the data values in register W2REPEAT #6ADD W2, [W0++], W2

; Store the final result in variable “fib_sum”MOV W2, [W1]

done: BRA done

RETURN

DS70595C_JP - p. 3-8 © 2012 Microchip Technology Inc.

Page 9: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

表 3-1: ページ 0、EDS、PSV 空間の境界におけるオーバーフロー / アンダーフロー処理

3.2.3 拡張 X データ空間 基本のアドレス空間のアドレスが小さい前半 (0x0000 ~ 0x7FFF) には、データ空間ページレジスタの内容に関係なく、いつでもアクセスできます。このアドレス領域は、レジスタ間接命令を使って間接的にアドレス指定できます。この領域は、既定値の EDS ページ 0 ( 基本のアドレスビット EA<15> = 0 の時の EDS アドレス領域 (0x000000 ~ 0x007FFF)) に配置されているとみなす事ができます。しかし、基本のデータ空間の上位 32K バイト (0x8000 ~ 0xFFFF)と DSRPAG = 0x00 または DSWPAG = 0x00 を組み合わせても、ページ 0 にはアクセスできません。このため、DSRPAG と DSWPAG は、リセット時に 0x001 に初期化されます。

ページ 0 以外の EDS および PSV ページにアクセスするには、DSRPAG または DSWPAG レジスタを基本のアドレスの上位 32K バイト (0x8000 ~ 0xFFFF) と組み合わせて使う必要があります ( この場合、基本のアドレスビット EA<15> = 1)。

例えば、DSRPAG = 0x01 または DSWPAG = 0x01 の場合、データ空間の上位 32K バイト(0x8000 ~ 0xFFFF) へのアクセスは、EDS アドレス領域 (0x008000 ~ 0x00FFFF) に割り当てられます。DSRPAG = 0x02 または DSWPAG = 0x02 の場合、データ空間の上位 32K バイトへのアクセスは、EDS アドレス領域 (0x010000 ~ 0x017FFF) に割り当てられます。以下同様に、図 3-5 に示す EDS メモリマップのように割り当てられます。

3.2.4 EDS の調停とバスマスタの優先度

システム内の各種バスマスタからの EDS へのアクセスは調停されます。

O/U、R/W 動作

処理前 処理後

DSxPAG DSEA<15> ページの説明 DSxPAG DS

EA<15> ページの説明

OR

[++Wn]または[Wn++]

DSRPAG = 0x1FF 1 EDS: 末尾ページ

DSRPAG = 0x1FF 0 Note 1 参照

OR

DSRPAG = 0x2FF 1 PSV: 末尾 lswページ

DSRPAG = 0x300 1 PSV: 先頭 MSBページ

OR

DSRPAG = 0x3FF 1 PSV: 末尾 MSBページ

DSRPAG = 0x3FF 0 Note 1 参照

OW

DSWPAG = 0x1FF 1 EDS: 末尾ページ

DSWPAG = 0x1FF 0 Note 1 参照

UR

[--Wn]または[Wn--]

DSRPAG = 0x001 1 EDS ページ DSRPAG = 0x001 0 Note 1 参照

UR

DSRPAG = 0x200 1 PSV: 先頭 lswページ

DSRPAG = 0x200 0 Note 1 参照

UR

DSRPAG = 0x300 1 PSV: 先頭 MSBページ

DSRPAG = 0x2FF 1 PSV: 末尾 lswページ

凡例 : O = オーバーフロー、U = アンダーフロー、R = 読み出し、W = 書き込み

Note 1: レジスタ間接は基本のデータ空間 (0x0000 ~ 0x8000) をアドレッシングします。

2: DSxPAG = 0x000 の時に EDS にアクセスすると、アドレスエラー トラップが発生します。

3: PS に対しては、DSRPAG を使った読み出しだけが可能です。PS に対して DSWPAG を使った書き込みを試みると、アドレスエラー トラップが発生します。

4: オフセットが大きい場合、擬似的な連続アドレッシングはサポートされません。

Note 1: ページ 0 へのアクセスには DSxPAG を使いません。DSxPAG を 0x000 に設定した状態で EDS にアクセスすると、アドレスエラー トラップが発生します。

2: ソフトウェアで DSxPAG をクリアしても効果はありません。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-9

Page 10: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

データメモリ (EDS を含む ) 用のアービターは、CPU と DMA およびその他のバスマスタ ( 最大 3 つ、ICD モジュール等 ) の間を調停します。同一バスに複数バスマスタからのアクセスが同時に発生した場合、アービターは、優先度が最も高いバスマスタからのアクセスを判別します。その他のバスマスタは保留され、最優先バスマスタによるバスへのアクセスの後で処理されます。

既定値では、CPU は最優先のバスマスタ 0 (M0) に割り当てられ、ICD は最低優先度のバスマスタ 4 (M4) に割り当てられます。その他のバスマスタ (USB および DMA コントローラ ) は、それぞれ M2 と M3 に割り当てられます ( この既定値設定では、M1 は予約されているため使えません )。ユーザ アプリケーションで EDS バスマスタ優先度制御 (MSTRPR) レジスタのビットを適切に設定する事により、マスタの優先順位を変更して、CPU よりも高い優先度を割り当てる事ができます。優先度を上げた全てのバスマスタ間の優先度の上下関係は変わりません ( つまり M1 は最高優先度、M3 は最低優先度、M2 はその中間の優先度を持ちます )。CPUよりも優先度の低い全てのバスマスタ間の優先度の上下関係も変わりません。MSTRPR レジスタの値とバスマスタの優先順位の関係を表 3-2 に示します。

このバスマスタ優先度制御レジスタを使うと、ユーザ アプリケーションでシステムのリアルタイム応答性を操作できます。これは、初期化時に静的に設定する事も、リアルタイム イベントへの応答時に動的に操作する事もできます。

図 3-6: アービターのアーキテクチャ

表 3-2: EDS バス アービターの優先度の設定

Note: DPSRAM への DMA アクセスは調停の対象とはならず、ストールを一切伴わずに発生します。

DPSRAM ICDUSB

EDS Arbiter

M0 M1 M2 M3 M4

Reserved

MSTRPR<15:0>

DMA CPU

SRAM

優先度MSTRPR<15:0> ビットの設定

0x0000 0x0008 0x0020 0x0028

M0 ( 最優先 ) CPU USB DMA USBM1 予約済み CPU CPU DMAM2 USB 予約済み 予約済み CPUM3 DMA DMA USB 予約済み

M4 ( 最低優先度 ) ICD ICD ICD ICD

Note: この他の MSTRPR<15:0> 値は全て予約済みです。

DS70595C_JP - p. 3-10 © 2012 Microchip Technology Inc.

Page 11: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.3 データ空間アドレス生成ユニット (AGU)dsPIC33E/PIC24E は、データメモリのアドレス生成用に X AGU と Y AGU を備えています。Xおよび Y AGU は、利用可能なデータメモリ レンジ内で任意の実効アドレス (EA) を生成できます。ただし、物理メモリの実装範囲外の EA では、データを読み出してもゼロが返され、データを書き込んでも効果はありません。この場合、アドレスエラー トラップが発生します。アドレスエラー トラップの詳細は、セクション 6.「割り込み」(DS70602) を参照してください。

3.3.1 X アドレス生成ユニット

X AGU は、全ての命令で使われ、全てのアドレッシング モードをサポートします。X AGU は読み出し AGU (X RAGU) と書き込み AGU (X WAGU) により構成されます。これらは、命令サイクルの各種フェイズにおいて、それぞれ読み出しバスと書き込みバス上で別々に動作します。データ空間をXおよびYアドレス空間を結合した単一のデータ空間として扱う全ての命令において、X 読み出しデータバスはデータのリターンパスとして機能します。DSP クラスの 2 オペランド読み出し命令の場合、このデータパスは X アドレス空間のデータパスとしても機能します。全ての命令において、X 書き込みデータバスは X/Y 結合データ空間への書き込みパスとしてのみ機能します。

X AGU は、基本のデータ空間アドレス領域を介する全ての EDS および PSV アドレス空間への擬似的な連続アドレッシングをサポートします。従って X AGU は、0x000000 ~ 0xFFFFFF のEA を生成できます。

X RAGU は、1 つ前の命令サイクル中に、プリフェッチした命令の情報に基づいて実効アドレスの計算を始めます。計算した実効アドレスは、命令サイクルの開始時に、アドレスバスに提示されます。

X WAGU は、命令サイクルの開始時に、実効アドレスの計算を始めます。この EA は、命令の書き込みフェイズ時に、アドレスバスへ提示されます。

X RAGU と X WAGU は、どちらもモジュロ アドレッシングをサポートします。

X WAGU だけがビット反転アドレッシングをサポートします。

3.3.2 Y アドレス生成ユニット (dsPIC33E のみ )Y データメモリ空間は、データ読み出しをサポートする 1 つの AGU だけを備えます。データ書き込みには Y メモリバスを使いません。Y AGU と Y メモリバスは、DSP クラス命令の同時データ読み出しをサポートします。

Y AGU は、基本のデータ空間のアドレス領域 (0x0000 ~ 0xFFFF) 内の EA しか生成できません (EDS への拡張はできません )。

Y AGU のタイミングは X RAGU のタイミングと同じです。従って命令サイクルを開始する前に、プリフェッチした命令の情報に基づいて実効アドレスの計算を始めます。この実効アドレスは、命令サイクルの開始時にアドレスバスへ提示されます。

Y AGU は、Y AGU を使う DSP クラス命令によるモジュロ アドレッシングおよび後置修飾アドレッシング モードをサポートします。

Note: Y AGU はデータ書き込みをサポートしません。全てのデータ書き込みは、X WAGU経由で X/Y 結合データ空間に対して行います。Y AGU は、2 ソースオペランドDSP 命令によるデータ読み出し時にのみ使います。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-11

Page 12: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.3.3 アドレス生成ユニットと DSP クラス命令 (dsPIC33E のみ )DSP クラス命令は、Y AGU と Y メモリ データパスを X RAGU と連携して使う事により、2 つの同時データ読み出しパスを提供します。例えば MAC命令は、次の乗算に使う 2 つのオペランドを同時にプリフェッチできます。

DSP クラス命令によるデータ読み出しでは、X RAGU を介して X データ空間だけをアドレッシングするために、常にワーキング レジスタポインタ W8 と W9 を使い、Y AGU を介して Yデータ空間だけをアドレッシングするために、常にワーキング レジスタポインタ W10 と W11を使います。DSP クラス命令によるデータ書き込みは、X バスを介して X/Y 結合データ空間で実行されます。このため、EA が何処を指していても関係なく任意のアドレスに書き込めます。

Y AGU は、DSP クラス命令に関連する後置修飾アドレッシング モードのみをサポートします。アドレッシング モードの詳細は、「16 ビット MCU および DSC プログラマ リファレンス マニュアル」(DS70157) を参照してください。Y AGU は、自動リングバッファ向けのモジュロアドレッシングもサポートします。その他の (MCU) クラス命令は、全て X AGU を介して Yデータアドレス空間にアクセスできます。この場合、Y データ空間は結合された連続空間の一部とみなされます。

3.3.4 データ配置

ISA は、X メモリ AGU を介してデータにアクセスする全ての MCU 命令に対して、ワードおよびバイト動作の両方をサポートします。ワード操作では、16 ビット データアドレスの最下位ビット (LSb) を無視します。ワードデータはリトルエンディアン形式で配置されます。この場合、最下位バイト (LSB) を偶数アドレス (LSb = 0)、最上位バイト (MSB) を奇数アドレス (LSb= 1) に配置します。

バイト操作では、データアドレスの LSb を使ってアクセス先のバイトを選択します。アドレスされたバイトは、内部データバスの下位 8 ビットに配置されます。

全ての実効アドレス計算は、バイトアクセスかワードアクセスかに応じて自動的に調整されます。例えば、ワード操作の場合、毎回アドレスを 2 つインクリメントしてアドレスポインタをポストインクリメントします。

図 3-7: データ配置

Note: 全てのワードアクセスは、偶数アドレス (LSb = 0) に配置する必要があります。これに従わないワードデータのフェッチはサポートされません。従って、バイト操作とワード操作を混用する場合や、8 ビット PIC® マイクロコントローラの既存コードから移行する場合には注意が必要です。不正な配置のワード読み書きを試みると、アドレス エラートラップが発生します。この場合、読み出したデータは破棄され、書き込みは実行されません。この時発生するトラップにより、システムはアドレスフォルト実行前のマシンステートを分析できます。

15 8 7 00001

0003

0005

0000

0002

0004

Byte 1

Byte 3

Byte 5

LSBMSB

Word 0

Word 1

0006

0008

Long Word<15:0> 000A

Long Word<31:16> 000C

Byte 0

Byte 2

Byte 4

DS70595C_JP - p. 3-12 © 2012 Microchip Technology Inc.

Page 13: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.4 モジュロ アドレッシング (dsPIC33E のみ )モジュロまたは巡回アドレッシングは、ハードウェアを使ってリングデータ バッファをサポートするための自動的な手段を提供します。一般的に多くの DSP アルゴリズムはループ内のコードを高速に実行しますが、この自動的手段は、そのようなコード実行時のソフトウェアによるデータアドレス境界チェックを不要にする事を目的とします。

モジュロバッファへのポインタには、W15 以外の全てのワーキング レジスタを選択できます。モジュロ ハードウェアは、選択したワーキング レジスタが保持するアドレス上で境界チェックを実行し、バッファ境界位置で必要に応じてポインタ値を自動的に調整します。

dsPIC33E/PIC24E のモジュロ アドレッシングは、データ空間またはプログラム空間のどちらでも動作します ( 両者のデータポインタ機構は本質的に同じであるため )。X および Y データ空間では、それぞれ 1 つのリングバッファを使えます。X 空間のリングバッファは、プログラム空間へのポインタも提供します。

モジュロデータのバッファ長は、32K ワード以下で選択できます。モジュロバッファのロジックは、ワードサイズまたはバイトサイズ データの使用をサポートします。ただし、モジュロロジックは必ずワードアドレス境界位置でアドレス境界チェックを行うため、バイトサイズのモジュロバッファの長さは偶数である事が必要です。また、バイトサイズのモジュロバッファには Y AGU を使えません (Y メモリ データバス経由のバイトアクセスはサポートしないため )。

3.4.1 モジュロバッファの開始 / 終了アドレスの選択

モジュロバッファの開始および終了アドレスの指定には、下記の 4 個のアドレスレジスタを使います。

• XMODSRT: X AGU モジュロ アドレッシング開始レジスタ

• XMODEND: X AGU モジュロ アドレッシング終了レジスタ

• YMODSRT: Y AGU モジュロ アドレッシング開始レジスタ

• YMODEND: Y AGU モジュロ アドレッシング終了レジスタ

モジュロバッファの開始アドレスは、偶数バイトのアドレス境界に配置する必要があります。従って、XMODSRT および YMODSRT レジスタの LSb は「0」である事が必要です。モジュロバッファの終了アドレスは、奇数バイトのアドレス境界に配置する必要があります。従って、XMODEND および YMODEND レジスタの LSb は「1」である事が必要です。

各モジュロバッファ向けに選択した開始および終了アドレスの処理方法は、インクリメントバッファまたはデクリメント バッファのどちらを使うかによって異なります。インクリメントバッファの場合、ワーキング レジスタポインタをバッファアドレス レンジ内でインクリメントし、インクリメント バッファの終了アドレスに達すると、ワーキング レジスタポインタがリセットされてバッファ開始アドレスを指します。デクリメント バッファの場合、ワーキングレジスタポインタをバッファアドレス レンジ内でデクリメントし、デクリメント バッファの開始アドレスに達すると、ワーキング レジスタポインタがリセットされてバッファ終了アドレスを指します。

3.4.1.1 モジュロバッファの開始アドレス インクリメント モジュロバッファの場合、データバッファの開始アドレスは、任意のバイナリ「0」境界に配置する必要があります。デクリメント モジュロバッファの場合、モジュロ開始アドレスは選択した終了ドレスとバッファ長から計算によって決まります。

例えば、インクリメント バッファのバッファ長として 50 ワード (100 バイト ) を選択した場合、バッファ開始バイトアドレスの下位 7 ビットは全て「0」である事が必要です。従って開始アドレスの有効レンジは 0xNN00 ~ 0xNN80 となります (N は任意の 16 進数 )。

Note: ユーザは、アプリケーション要件に応じて、インクリメントまたはデクリメントモジュロバッファのどちらかを選択する必要があります。この選択に応じて、上記のようにアドレスの処理方法が異なります。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-13

Page 14: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.4.1.2 モジュロバッファの終了アドレス デクリメント モジュロバッファの場合、データバッファの終了アドレスは、任意のバイナリ「1」境界に配置する必要があります。インクリメント モジュロバッファの場合、モジュロ終了アドレスは選択したバッファ開始アドレスとバッファ長から計算によって決まります。

例えば、バッファサイズ ( モジュラス値 ) として 50 ワード (100 バイト ) を選択した場合、デクリメント モジュロバッファのバッファ終了アドレスの下位 7 ビットは全て「1」である事が必要です。従って、終了アドレスの有効レンジは 0xNNFF ~ 0xNN7F となります (N は任意の16 進数 )。

3.4.1.3 モジュロアドレスの計算

インクリメント モジュロバッファの終了アドレスは、選択した開始アドレスとバッファ長 ( バイト数 ) から計算する必要があります。式 3-1 に、終了アドレスの計算式を示します。

式 3-1: インクリメント バッファのモジュロ終了アドレス

デクリメント モジュロバッファの開始アドレスは、選択した終了アドレスとバッファ長から計算する要があります。式 3-2 に、開始アドレスの計算式を示します。

式 3-2: デクリメント バッファのモジュロ開始アドレス

3.4.1.4 モジュロ アドレッシング SFR に関連するデータ依存性

モジュロおよびビット反転アドレッシング制御レジスタ (MODCON)に書き込んだ直後に、ワーキング レジスタを使った間接読み出しを実行しない事が必要です。例として、例 3-4 に示すコードセグメントは、予期せぬ結果を生じます。

例 3-4: 不適正な MODCON の初期化

MODCON レジスタを初期化した直後の命令では、間接読み出し以外のアドレッシング モードを使う必要があります。あるいは、例 3-5 のように、MODCON レジスタの初期化後に NOP命令を挿入する事もできます。

例 3-5: 適正な MODCON の初期化

Note: 必要なモジュロバッファ長が「2 の偶数乗」である場合、モジュロバッファの開始および終了アドレスは、インクリメントおよびデクリメント バッファの要求を満たすように選択する必要があります。

終了アドレス = 開始アドレス + バッファ長 – 1

開始アドレス = 終了アドレス – バッファ長 + 1

Note 1: POP 命令を使って top-of-stack (TOS) の内容を MODCON レジスタへポップした場合、MODCON レジスタに対する書き込みが発生します。MODCON レジスタへの書き込み直後に間接読み出しを行う命令は実行できません。

2: 右記の命令は、暗黙的に間接読み出しを実行します :POP、RETURN、 RETFIE、RETLW、 ULNK

MOV#0x8FF4, w0 ;Initialize MODCONMOVw0, MODCONMOV[w1], w2 ;Incorrect EA generated here

MOV#0x8FF4, w0 ;Initialize MODCONMOVw0, MODCONNOP ;See Note belowMOV[w1], w2 ;Correct EA generated here

Note: NOP 命令のかわりに、モジュロバッファ アクセス用に指定したワーキング レジスタを使う

間接読み出しを行わない別の命令を実行する事もできます。

DS70595C_JP - p. 3-14 © 2012 Microchip Technology Inc.

Page 15: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

下記のモジュロアドレス SFR に書き込んだ直後に実行する間接読み出しに対しては、下の条件が追加で適用されます。

• XMODSRT: X AGU モジュロ アドレッシング開始レジスタ

• XMODEND: X AGU モジュロ アドレッシング終了レジスタ

• YMODSRT: Y AGU モジュロ アドレッシング開始レジスタ

• YMODEND: Y AGU モジュロ アドレッシング終了レジスタ

モジュロ アドレッシングが MODCON レジスタで既に有効になっている場合、X または Y モジュロ アドレス SFR に書き込んだ直後に、モジュロバッファ アクセス用に指定したワーキング レジスタを使って、X または Y データ空間からの間接読み出しを実行しない事が必要です。例 3-6 に、X データ空間に関連するモジュロ SFR の初期化において、予期せぬ結果が生じる可能性のあるサンプルコードを示します。Y データ空間での初期化についても同様です。

例 3-6: 不適正なモジュロ アドレッシングのセットアップ

この問題を回避するには、モジュロアドレス SFR を初期化した直後に NOP を実行するか、あるいはモジュロバッファ アクセス用に指定したワーキング レジスタを使う間接読み出し以外の動作を実行する必要があります。そのような例を例 3-7 に示します。別の方法として、モジュロ開始および終了アドレス SFR を先に初期化してから、MODCON レジスタでモジュロ アドレッシングを有効にする事もできます。

例 3-7: 適正なモジュロ アドレッシングのセットアップ

3.4.2 ワーキング アドレスレジスタの選択

モジュロ アドレッシング適用先の X アドレス空間ポインタ ワーキング レジスタは、モジュロおよびビット反転アドレッシング制御レジスタの XWMビット (MODCON<3:0>)に保存されます。XMODSRT、XMODEND、XWM レジスタの選択は、X RAGU と X WAGU で共通です。Xデータ空間のモジュロ アドレッシングは、XWM<3:0> ビットが 15 以外の値に設定され、かつXMODEN ビット (MODCON<15>) がセットされている時に有効になります。W15 をモジュロアドレッシング用のポインタとして使う事はできません (W15 はソフトウェア スタックポインタ専用です )。

モジュロ アドレッシング適用先の Y アドレス空間ポインタ ワーキング レジスタは、モジュロおよびビット反転アドレッシング制御レジスタの YWMビット (MODCON<7:4>)に保存されます。Y データ空間のモジュロ アドレッシングは、YWM<3:0> ビットが 15 以外の値に設定され、かつ YMODEN ビット (MODCON<14>) がセットされている時に有効になります。

MOV#0x8FF4,w0 ;Modulo addressing enabledMOVw0, MODCON ;in X-data space using w4

;for buffer accessMOV#0x1200,w4 ;XMODSRT is initializedMOVw4, XMODSRTMOV#0x12FF,w0 ;XMODEND is initializedMOVw0, XMODENDMOV[w4++],w5 ;Incorrect EA generated

MOV#0x8FF4,w0 ;Modulo addressing enabledMOVw0, MODCON ;in X-data space using w4

;for buffer accessMOV#0x1200,w4 ;XMODSRT is initializedMOVw4, XMODSRTMOV#0x12FF,w0 ;XMODEND is initializedMOVw0, XMODENDNOP ;See Note belowMOV[w4++],w5 ;Correct EA generated here

Note: NOP 命令のかわりに、モジュロバッファ アクセス用に指定したワーキング レジスタを使う

間接読み出しを行わない別の命令を実行する事もできます。

Note: MODCON レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。そのような場合、予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、 RETURN、RETFIE、RETLW、ULNK

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-15

Page 16: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.4.3 モジュロ アドレッシングの適用

モジュロ アドレッシングは、選択したワーキング レジスタに関連する実効アドレスの計算に適用できます。アドレス境界チェックは、インクリメント バッファの上位側アドレス境界以上のアドレス、またはデクリメント バッファの下位側アドレス境界以下のアドレスを探すという事に注意してください。これによりアドレス変更は、境界を飛び越えても正しく調整されます。モジュロ ハードウェアによるワーキング レジスタ ポインタの自動調整は一方向にだけ行われます。このため、インクリメント バッファのワーキング レジスタ ポインタがデクリメントされた場合や、その逆の場合、モジュロ ハードウェアはワーキング レジスタ ポインタを正しく調整できません。例外として、バッファ長が 2 の偶数乗であり、かつインクリメントとデクリメント両方のモジュロバッファの境界要件を満たすように開始および終了アドレスを選択できる場合、モジュロ ハードウェアはポインタを正しく調整できます。

新しい EA が最大でバッファ長までモジュロバッファの境界を越えても、正しく調整できます。これは、インデックス レジスタによる間接アドレッシング ([Wb + Wn]) およびリテラル オフセット ([Wn + lit10]) アドレッシング モードを使う場合に重要です。加えて、インデックスレジスタおよびリテラル オフセット アドレッシング モードは、ワーキング レジスタ内のホールド値を変更しません。前置修飾および後置修飾アドレッシング モード ([Wn++]、[Wn--]、[++Wn]、[--Wn]) による間接アクセスだけがワーキング アドレスの値を変更します。

モジュロ アドレッシングは、任意の EDS または PSV メモリ空間で動作します。しかし、ページ境界を越えて動作する事はできません。唯一の例外として、ページ 0 の境界を越えての出入りだけは可能です。

3.4.4 インクリメント モジュロバッファを使うモジュロ アドレッシングの初期化

インクリメント リングバッファのセットアップ手順は下記の通りです。この手順は、X AGUと Y AGU で同じです。

1. 16 ビット データワード数でバッファ長を決めます。この数を 2 倍にしてバッファのバイト長を求めます。

2. 上記のバッファ長に基づいて、バイナリ「0」境界に位置するバッファ開始アドレスを選択します。バイト アドレスレンジを求めるには、バッファのワード長を 2 倍する必要がある点に注意してください。例えば、長さ 100 ワード (200 バイト ) のバッファは、0xXX00 を開始アドレスとして使えます。

3. ステップ1で選択したバッファ長と、ステップ2で選択したバッファ開始アドレスからバッファ終了アドレスを計算します。バッファ終了アドレスの計算には式 3-1 を使います。

4. DSxPAG に適切なページ値を書き込みます。

5. ステップ 2 で選択したバッファ開始アドレスを XMODSRT または YMODSRT レジスタに書き込みます。

6. ステップ 3 で計算したバッファ終了アドレスを XMODEND または YMODEND レジスタに書き込みます。

7. XWM ビット (MODCON<3:0>) または YWM ビット (MODCON<7:4>) で、リングバッファへのアクセスに使うワーキング レジスタを選択します。

8. XMODENビット (MODCON<15>)またはYMODENビット (MODCON<14>)をセットして、リングバッファを有効にします。

9. バッファを指すポインタ値を上記で選択したワーキング レジスタに書き込みます。

プリ / ポスト インクリメントによる間接アクセスを実行すると、ワーキング レジスタアドレスはバッファの終了位置で自動的に調整されます ( 図 3-8 参照 )。

Note: インクリメント バッファの開始アドレスは、下記のように、MPLAB® C30 コンパイラが提供する aligned ( アライメント ) 属性を使ってバイナリ「0」境界へ適切に調整できます。

int x __attribute__((aligned(256)));

DS70595C_JP - p. 3-16 © 2012 Microchip Technology Inc.

Page 17: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

図 3-8: インクリメント バッファ モジュロ アドレッシングの動作例

3.4.5 デクリメント モジュロバッファを使うモジュロ アドレッシングの初期化

デクリメント リングバッファのセットアップ手順は下記の通りです。この手順は、X AGU とY AGU で同じです。

1. 16 ビット データワード数でバッファ長を決めます。この数を 2 倍にしてバッファのバイト長を求めます。

2. 上記のバッファ長に基づいて、バイナリ「1」境界に位置するバッファ終了アドレスを選択します。バイト アドレスレンジを求めるには、バッファのワード長を 2 倍する必要がある点に注意してください。例えば、長さ 128 ワード (256 バイト ) のバッファは、0xXXFF を終了アドレスとして使えます。

3. ステップ1で選択したバッファ長と、ステップ2で選択したバッファ終了アドレスからバッファ開始アドレスを計算します。バッファ開始アドレスの計算式には式 3-2 を使います。

4. DSxPAG に適切なページ値を書き込みます。

5. ステップ 3 で計算したバッファ開始アドレスを XMODSRT または YMODSRT レジスタに書き込みます。

6. ステップ 2 で選択したバッファ終了アドレスを XMODEND または YMODEND レジスタに書き込みます。

7. XWM ビット (MODCON<3:0>) または YWM ビット (MODCON<7:4>) で、リングバッファへのアクセスに使うワーキング レジスタを選択します。

8. XMODENビット (MODCON<15>)またはYMODENビット (MODCON<14>)をセットして、リングバッファを有効にします。

9. バッファを指すポインタ値を上記で選択したワーキング レジスタに書き込みます。

プリ / ポスト デクリメントによる間接アクセスを実行すると、ワーキング レジスタ アドレスはバッファの終了位置で自動的に調整されます ( 図 3-9 参照 )。

0x1100

0x1163

Start Addr = 0x9100End Addr = 0x9163Length = 50 Words

ByteAddress

MOVPAG#0x001,DSWPAGMOVPAG#0x001,DSRPAGMOV #0x1100,W0MOV W0,XMODSRT ;set modulo start addressMOV #0x1163,W0MOV W0,XMODEND ;set modulo end addressMOV #0x8001,W0MOV W0,MODCON ;enable W1, X AGU for moduloMOV #0x0000,W0 ;W0 holds buffer fill valueMOV #0x1100,W1 ;point W1 to bufferREPEAT#49 ;fill the 50 buffer locationsMOV W0,[W1++] ;fill the next location

;W1 = 0x1100 when DO loop completes

Note: DSRPAG と DSWPAG. の値は異なってもかまいません。詳細は 3.2.2「メモリのページング」を参照してください。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-17

Page 18: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

図 3-9: デクリメント バッファ モジュロ アドレッシングの動作例

0x11E0

0x11FF

Start Addr = 0x91E0End Addr = 0x91FFLength = 16 Words

ByteAddress

MOVPAG#0x001,DSWPAGMOVPAG#0x001,DSRPAGMOV #0x11E0,W0MOV W0,XMODSRT ;set modulo start addressMOV #0x11FF,W0MOV W0,XMODEND ;set modulo end addressMOV #0x8001,W0MOV W0,MODCON ;enable W1, X AGU for moduloMOV #0x000F,W0 ;W0 holds buffer fill valueMOV #0x11FE,W1 ;point W1 to bufferDO #15,FILL ;fill the 16 buffer locationsMOV W0,[W1--] ;fill the next location

FILL:DEC W0,W0 ;decrement the fill value

; W1 = 0x11FE when DO loop completes

Note: DSRPAG と DSWPAG. の値は異なってもかまいません。詳細は 3.2.2「メモリのページング」を参照してください。

DS70595C_JP - p. 3-18 © 2012 Microchip Technology Inc.

Page 19: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.5 ビット反転アドレッシング (dsPIC33E のみ )

3.5.1 ビット反転アドレッシングについて

ビット反転アドレッシングは、基数 2 の FFT アルゴリズム用に高速なデータ並び換えをサポートする特殊なアドレッシング モードです。X WAGU だけがビット反転アドレッシングをサポートします。ビット反転アドレッシングでは、バイナリ値の中央を中心にビットの並びをスワップする事により、アドレスポインタの鏡像を効果的に生成します ( 図 3-10 参照 )。4 ビット アドレス フィールドのビット反転の例を表 3-3 に示します。

図 3-10: ビット反転アドレッシングの例

表 3-3: ビット反転アドレッシングの例 (4 ビット フィールド )

b3 b2 b1 b0

b0 b1 b2 b3

Bit locations swapped left-to-rightaround center of binary value

Bit-Reversed Result

反転前アドレス

反転後 アドレス

A3 A2 A1 A0 10 進数 A3 A2 A1 A0 10 進数

0 0 0 0 0 0 0 0 0 0

0 0 0 1 1 1 0 0 0 8

0 0 1 0 2 0 1 0 0 4

0 0 1 1 3 1 1 0 0 12

0 1 0 0 4 0 0 1 0 2

0 1 0 1 5 1 0 1 0 10

0 1 1 0 6 0 1 1 0 6

0 1 1 1 7 1 1 1 0 14

1 0 0 0 8 0 0 0 1 1

1 0 0 1 9 1 0 0 1 9

1 0 1 0 10 0 1 0 1 5

1 0 1 1 11 1 1 0 1 13

1 1 0 0 12 0 0 1 1 3

1 1 0 1 13 1 0 1 1 11

1 1 1 0 14 0 1 1 1 7

1 1 1 1 15 1 1 1 1 15

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-19

Page 20: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.5.2 ビット反転アドレッシングの動作

X WAGU だけがビット反転アドレッシングをサポートします。また、ビット反転アドレッシングは、MODCON および X 書き込み AGU ビット反転アドレッシング制御 (XBREV) SFR で制御します。ビット反転アドレッシングは下記のように呼び出します。

1. BWM 制御ビット (MODCON1<1:8>) を使って、ビット反転アドレッシングをいずれか 1 つのワーキング レジスタに割り当てます。

2. BREN制御ビット(XBREV<15>)をセットして、ビット反転アドレッシングを有効にします。

3. XB 制御ビット (XBREV<14:0>) で、X AGU のビット反転修飾子を設定します。

ビット反転アドレッシングを有効にした場合、ビット反転アドレッシング ハードウェアは、プリまたはポスト インクリメント アドレッシング モードによるレジスタ間接([Wn++]、[++Wn])を使う場合にのみ、ビット反転アドレスを生成します。また、ワードモード命令の場合にのみビット反転アドレスを生成します。その他のアドレッシング モードやバイトモードの命令では、ビット反転アドレッシングは機能しません ( 反転しない通常のアドレスを生成 )。

ビット反転アドレッシングは、任意の EDS または PSV メモリ空間で動作します。しかし、ページ境界を越えて動作する事はできません。唯一の例外として、ページ 0 の境界を越えての出入りだけは可能です。

3.5.2.1 モジュロ アドレッシングとビット反転アドレッシング

モジュロ アドレッシングとビット反転アドレッシングは、同一のワーキング レジスタを使って同時に有効にできます。ただしこの場合、データ書き込みではビット反転アドレッシングを常に優先します。例として、下記のセットアップでは、同一ワーキング レジスタをモジュロ アドレッシングとビット反転アドレッシングの両方に割り当てています。

• X モジュロ アドレッシングを有効にする (XMODEN = 1)• ビット反転アドレッシングを有効にする (BREN = 1)• W1 をモジュロ アドレッシングに割り当てる (XWM<3:0> = 0001)• W1 をビット反転アドレッシングに割り当てる (BWM<3:0> = 0001)

W1 をポインタとして使うデータ読み出しでは、モジュロアドレスの境界チェックが発生します。W1 をデスティネーション ポインタとして使うデータ書き込みの場合、ビット反転ハードウェアはデータを並び換えるために W1 を修正します。

Note 1: MODCON レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。そのような場合、予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、 RETFIE、RETLW、ULNK

2: BREN ビット (XBREV<15>) がセットされてビット反転アドレッシングが既に有効になっている場合、XBREV レジスタに書き込んだ直後に、ビット反転アドレス ポインタとして指定したワーキング レジスタを使う間接読み出しを実行しない事が必要です。

DS70595C_JP - p. 3-20 © 2012 Microchip Technology Inc.

Page 21: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.5.3 ビット反転修飾子の値

XBREV レジスタに書き込んだ値は、ビット反転データバッファのサイズを定数として定義します。一般的なビット反転バッファで使う XB 修飾子の値を表 3-4 に示します。

表 3-4: ビット反転アドレス修飾子の値

ビット反転アドレッシング ハードウェアは、ワーキング レジスタの内容と XB 修飾子定数の間で「反転キャリー」加算を実行する事により、ワーキング レジスタ アドレスを変更します。反転キャリー加算は、通常とは逆に左から右へ向かってビットを加算します。いずれかのビット位値でキャリーアウトが発生した場合、右隣のビットにキャリーアウト ビットを加算します。例 3-8 に、反転キャリー加算 (XB 修飾子値として 0x0008 を使用 ) によるワーキング レジスタ値の変化を示します。XB 修飾子を左へ 1 ビット シフトしてワードアドレス値を生成している事に注意してください。

例 3-8: XB アドレス計算

バッファサイズ ( ワード ) XB ビット反転アドレス修飾子の値

32768 0x400016384 0x20008192 0x10004096 0x08002048 0x04001024 0x0200512 0x0100256 0x0080128 0x004064 0x002032 0x001016 0x00088 0x00044 0x00022 0x0001

Note: 上表に記載したビット反転修飾子の値だけが、有効なビット反転アドレス シーケンスを生成します。

0000 0000 0000 0000 Wn points to word 0

+1 0000 Wn = Wn + XB

0000 0000 0001 0000 Wn points to word 8

+1 0000 Wn = Wn + XB

0000 0000 0000 1000 Wn points to word 4

+1 0000 Wn = Wn + XB

0000 0000 0001 1000 Wn points to word 12

+1 0000 Wn = Wn + XB

0000 0000 0000 0100 Wn points to word 2

+1 0000 Wn = Wn + XB

0000 0000 0001 0100 Wn points to word 10

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-21

Page 22: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

XB<14:0> = 0x0008 の場合、ビット反転バッファのサイズは 16 ワードです。ビット反転ハードウェアはワーキング レジスタの bit 1 ~ 4 を変更しますが、bit 5 ~ 15 ( ピボットポイントの外側 ) を変更しません。ビット反転ハードウェアは、ワードアドレス上でのみ動作するため、bit 0 も変更しません。

XB 修飾子は、ビット反転アドレス変更のピボットポイントを制御します。ピボットポイントの外側のビットは、ビット反転アドレッシングの影響を受けません。

図 3-11: 16 ワードバッファのビット反転アドレス変更

3.5.4 ビット反転アドレッシングのサンプルコード

例 3-9 のコードは、連続する 16 個のデータワードを読み出して、そのデータをビット反転順に新たな位置に書き込みます。W0 は読み出しアドレスポインタ、W1 はビット反転変更の対象となる書き込みアドレスポインタです。

例 3-9: ビット反転アドレッシングのサンプルコード

Bit-Reversed Result

XB<14:0> = 0x0008Bits 1-4 of address

Pivot Point

are modified

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

.section .data

.global Input_BufInput_Buf:.word 0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777,

0x8888, 0x9999, 0xAAAA, 0xBBBB, 0xCCCC, 0xDDDD, 0xEEEE, 0xFFFF

.section .bss

.global Bit_Rev_Buf

.align 32Bit_Rev_Buf: .space 32

; Start of code section.text

.global _main_main:

; Set XBREV for 16-word buffer with bit-reversed addressingMOV#0x8008, W0MOVW0, XBREV

; Set up W1 as a pointer for bit-reversed addressingMOV#0x01FF, W0MOVW0, MODCON

; W0 points to sequential input data bufferMOV#Input_Buf, W0

; W1 points to bit-reversed output data bufferMOV#Bit_Rev_Buf, W1

; Re-order the data from Input_buf into Bit_Rev_BufREPEAT #15MOV[W0++], [W1++]

done: BRA done

RETURN

DS70595C_JP - p. 3-22 © 2012 Microchip Technology Inc.

Page 23: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.6 DMA RAM一部の dsPIC33E/PIC24E デバイスは、DMA とデュアルポート SRAM メモリ (DPSRAM) を内蔵しています。DMAコントローラだけは、調停およびCPUストールの影響を受けずにDSPRAM内のアドレスに対して読み書きできます。これによりリアルタイム性能が最大限に高められます。加えて、DMA は全てのデータメモリと EDS (SFR 空間を除く ) をアドレッシングできます。データメモリと EDS へのアクセスは、EDS アービターにより調停されるため、ストールの影響を受けます。

図 3-6 のブロック図は、dsPIC33E/PIC24E の内部アーキテクチャに DMA がどのように組み込まれているのかを示しています。

DMA チャンネルは、DPSRAM の PORT 2 および各 DMA 対応周辺モジュールの DMA ポートと通信するために、専用の DMA バスを使います。詳細はセクション 22.「ダイレクト メモリアクセス (DMA)」(DS70348) を参照してください。

Note: DPSRAM の実装の有無とサイズはデバイスによって異なります。詳細は、各dsPIC33E/PIC24E デバイスのデータシートを参照してください。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-23

Page 24: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.7 制御レジスタの説明

EDS バスマスタ優先度制御レジスタ (MSTRPR) は、データメモリに対するバスマスタのアクセス優先度を設定します。

レジスタ 3-1: MSTRPR: EDS バスマスタ優先度制御レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

MSTRPR<15: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-0

MSTRPR<7:0>bit 7 bit 0

凡例 : r = 予約済み

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-0 MSTRPR<15:0>: EDS バスマスタ優先度ビット

詳細は 3.2.4「EDS の調停とバスマスタの優先度」を参照してください。

Note 1: リセット時の既定値優先度は、高い方から CPU (M0、最優先 )、M1、M2、M3、ICD (M4、常に最低優先度 ) です。

2: 優先度を上げた全てのバスマスタ間の優先度の上下関係は変化しません (M1 ( 最優先 )、M2、M3 ( 最低優先度 ))。

3: CPU よりも優先度の低い全てのバスマスタ間の優先度の上下関係も変化しません (M1 ( 最優先 )、M2、M3 ( 最低優先度 ))。

4: 利用可能なバスマスタはデバイスによって異なります。詳細は各デバイスのデータシートを参照してください。

DS70595C_JP - p. 3-24 © 2012 Microchip Technology Inc.

Page 25: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

データ空間のページング、モジュロ アドレッシング、ビット反転アドレッシングの制御には、以下の 8 個のレジスタを使います。

レジスタ 3-2: DSRPAG: データ空間読み出しページレジスタ

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0

— — — — — — DSRPAG<9:8>(1)

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>(1)

bit 7 bit 0

凡例 :R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-10 未実装 :「0」として読み出し

bit 9-0 DSRPAG<9:0>: データ空間読み出しページ ポインタビット (1)

Note 1: DSRPAG = 0x000 の時に、ページングされた DS ウィンドウから読み出しを試みると、アドレスエラートラップが発生します。

レジスタ 3-3: DSWPAG: データ空間書き込みページレジスタ

U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0

— — — — — — — DSWPAG<8>(1)

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

DSWPAG<7:0>(1)

bit 7 bit 0

凡例 :R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-9 未実装 :「0」として読み出し

bit 8-0 DSWPAG<8:0>: データ空間書き込みページ ポインタビット (1)

Note 1: DSWPAG = 0x000 の時に、ページングされた DS ウィンドウに書き込みを試みると、アドレスエラーが発生します。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-25

Page 26: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

レジスタ 3-4: MODCON: モジュロおよびビット反転アドレッシング制御レジスタ

R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

XMODEN YMODEN — — BWM<3: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

YWM<3:0> XWM<3:0>

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15 XMODEN: X RAGU および X WAGU モジュロ アドレッシング イネーブルビット1 = X AGU モジュロ アドレッシングを有効にする0 = X AGU モジュロ アドレッシングを無効にする

bit 14 YMODEN: Y AGU モジュロ アドレッシング イネーブルビット1 = Y AGU モジュロ アドレッシングを有効にする0 = Y AGU モジュロ アドレッシングを無効にする

bit 13-12 未実装 :「0」として読み出し

bit 11-8 BWM<3:0>: ビット反転アドレッシング X WAGU レジスタ選択ビット1111 = ビット反転アドレッシングを無効にする1110 = ビット反転アドレッシング用に W14 を選択する1101 = ビット反転アドレッシング用に W13 を選択する

•••0000 = ビット反転アドレッシング用に W0 を選択する

bit 7-4 YWM<3:0>: モジュロ アドレッシング Y AGU ワーキング レジスタ選択ビット1111 = モジュロ アドレッシングを無効にする1010 = モジュロ アドレッシング用に W10 を選択する1011 = モジュロ アドレッシング用に W11 を選択する

YWM<3:0> 制御ビットのその他の設定は全て予約済みです。

bit 3-0 XWM<3:0>: モジュロ アドレッシング X RAGU および X WAGU ワーキング レジスタ選択ビット1111 = モジュロ アドレッシングを無効にする1110 = モジュロ アドレッシング用に W14 を選択する

•••0000 = モジュロ アドレッシング用に W0 を選択する

Note: MODCON レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。そのような場合、予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

DS70595C_JP - p. 3-26 © 2012 Microchip Technology Inc.

Page 27: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

レジスタ 3-5: XMODSRT: X AGU モジュロ アドレッシング開始レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

XS<15: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 U-0

XS<7:1> 0

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-1 XS<15:1>: X RAGU および X WAGU モジュロ アドレッシング開始アドレスビット

bit 0 未実装 :「0」として読み出し

Note: XMODSRT レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

レジスタ 3-6: XMODEND: X AGU モジュロ アドレッシング終了レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

XE<15: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 U-1

XE<7:1> 1

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-1 XE<15:1>: X RAGU および X WAGU モジュロ アドレッシング終了アドレスビット

bit 0 未実装 :「1」として読み出し

Note: XMODEND レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-27

Page 28: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

レジスタ 3-7: YMODSRT: Y AGU モジュロ アドレッシング開始レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

YS<15: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 U-0

YS<7:1> 0

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-1 YS<15:1>: Y AGU モジュロ アドレッシング開始アドレスビット

bit 0 未実装 :「0」として読み出し

Note: YMODSRT レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

レジスタ 3-8: YMODEND: Y AGU モジュロ アドレッシング終了レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

YE<15: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 U-1

YE<7:1> 1

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15-1 YE<15:1>: Y AGU モジュロ アドレッシング終了アドレスビット

bit 0 未実装 :「1」として読み出し

Note: YMODEND レジスタに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

DS70595C_JP - p. 3-28 © 2012 Microchip Technology Inc.

Page 29: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

レジスタ 3-9: XBREV: X 書き込み AGU ビット反転アドレッシング制御レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BREN XB<14: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-0

XB<7:0>

bit 7 bit 0

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 15 BREN: ビット反転アドレッシングイネーブルビット (X AGU のみ )1 = ビット反転アドレッシングを有効にする0 = ビット反転アドレッシングを無効にする

bit 14-0 XB<14:0>: X AGU ビット反転修飾子ビット0x4000 = 32768 ワードバッファ0x2000 = 16384 ワードバッファ0x1000 = 8192 ワードバッファ0x0800 = 4096 ワードバッファ0x0400 = 2048 ワードバッファ0x0200 = 1024 ワードバッファ0x0100 = 512 ワードバッファ0x0080 = 256 ワードバッファ0x0040 = 128 ワードバッファ0x0020 = 64 ワードバッファ0x0010 = 32 ワードバッファ0x0008 = 16 ワードバッファ0x0004 = 8 ワードバッファ0x0002 = 4 ワードバッファ0x0001 = 2 ワードバッファ

Note: BREN ビットをセットした場合、 XB<14:0> ビットに書き込んだ直後に、ワーキング レジスタを使った間接読み出しを行う命令を実行しない事が必要です。予期せぬ結果が生じる可能性があります。下記の命令は、暗黙的に間接読み出しを実行します : POP、RETURN、RETFIE、RETLW、ULNK

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-29

Page 30: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC

24Eフ

ァミ

リ リ

ファ

レン

ス マ

ニュ

アル

DS

70595C_JP

- p. 3-30©

2012 Microchip Technology Inc.

ます。

Bit 3 Bit 2 Bit 1 Bit 0 全リセット

0001

8:0> 0001

XWM3 XWM2 XWM1 XWM0 0000

XS3 XS2 XS1 — xxxx

XE3 XE2 XE1 — xxxx

YS3 YS2 YS1 — xxxx

YE3 YE2 YE1 — xxxx

XB3 XB2 XB1 XB0 0000

0000

3.8 レジスタマップ

dsPIC33E/PIC24E のデータメモリモジュールに関連するレジスタの要約を表 3-5 に示し

表 3-5: データメモリ制御関連のレジスタマップ

レジスタ名 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4

DSRPAG — — — — — — DSRPAG<9:0>

DSWPAG — — — — — — — DSWPAG<

MODCON XMODEN YMODEN — — BMW3 BWM2 BWM1 BWM0 YWM3 YWM2 YWM1 YWM0

XMODSRT XS15 XS14 XS13 XS12 XS11 XS10 XS9 XS8 XS7 XS6 XS5 XS4

XMODEND XE15 XE14 XE13 XE12 XE11 XE10 XE9 XE8 XE7 XE6 XE5 XE4

YMODSRT YS15 YS14 YS13 YS12 YS11 YS10 YS9 YS8 YS7 YS6 YS5 YS4

YMODEND YE15 YE14 YE13 YE12 YE11 YE10 YE9 YE8 YE7 YE6 YE5 YE4

XBREV BREN XB14 XB13 XB12 XB11 XB10 XB9 XB8 XB7 XB6 XB5 XB4

MSTRPR MSTRPR<15:0>

凡例 : x = リセット時に未知の値、 — = 未実装、「0」として読み出し、リセット値は 16 進数で表記

Page 31: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

セクション 3. データメモリデータメモリ

3

3.9 関連アプリケーション ノート

本セクションに関連するアプリケーション ノートの一覧を以下に記載します。一部のアプリケーション ノートは dsPIC33E/PIC24E 製品ファミリ向けではありません。ただし概念は共通しており、変更が必要であったり制限事項が存在するものの利用が可能です。データメモリ モジュールに関連する最新のアプリケーション ノートは以下の通りです。

タイトル アプリケーション ノート番号

現在、関連するアプリケーション ノートはありません。 N/A

Note: dsPIC33E/PIC24E デバイス ファミリ関連のアプリケーション ノートとサンプルコードはマイクロチップ社のウェブサイト (www.microchip.com) でご覧になれます。

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-31

Page 32: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

dsPIC33E/PIC24E ファミリ リファレンス マニュアル

3.10 改訂履歴

リビジョン A (2009 年 6 月 )本書の初版

リビジョン B (2010 年 8 月 )このリビジョンでの変更内容は以下の通りです。

• 文章および体裁の変更等、本書全体の細部を修正

• 暫定版のステータスを解除

• dsPIC33E デバイスのみに関連する下記のセクション :- 3.4「モジュロ アドレッシング (dsPIC33E のみ )」- 3.5「ビット反転アドレッシング (dsPIC33E のみ )」

• 本書内の「DMA RAM」を全て「DPSRAM」に変更 ( ただし、章タイトルの「DMA RAM」のみ変更せず )

• データメモリ マップの例 ( 図 3-1 参照 ) から Note 2 を削除

• EDS アクセスの管理に関するサンプルコードを追加 ( 例 3-1、例 3-2、例 3-3 参照 )• 3.2.2「メモリのページング」の第 4 段落の内容を更新して網掛け注釈として記載

• 旧版の「ページングされたデータメモリ空間」の図を「EDS メモリマップ」( 図 3-5、旧版の図 3-6) に置換

• 旧版の「擬似的な連続アドレッシング真理値表」を全く別の内容のテーブル「ページ 0、EDS、PSV 空間の境界におけるオーバーフロー / アンダーフロー処理」( 表 3-1) に置換

• 3.2.4「EDS の調停とバスマスタの優先度」を全体的に更新

• 3.4.4「インクリメント モジュロバッファを使うモジュロ アドレッシングの初期化」に、aligned ( アライメント ) 属性に関する網掛け注釈を追加

• 図 3-8 と図 3-9 内の、最初と 2 番目の命令および開始 / 終了アドレス値を変更

• 3.5.2.2「XBREV に関連するデータ依存性」の内容を、3.5.2「ビット反転アドレッシングの動作」の網掛け注釈内の Note 2 に移動

• ビット反転アドレッシングのサンプルコード ( 例 3-9) を全体的に更新

• EDS バスマスタ優先度制御レジスタ ( レジスタ 3-1 参照 ) を更新

• データ空間読み出しページ (DSRPAG) およびデータ空間書き込みページ (DSWPAG) レジスタ ( レジスタ 3-2 およびレジスタ 3-3 参照 ) を変更

• レジスタへの書き込みに関する Note を下記のレジスタの説明に追加 : - XMODSRT: X AGU モジュロ アドレッシング開始レジスタ ( レジスタ 3-5 参照 )- XMODEND: X AGU モジュロ アドレッシング終了レジスタ ( レジスタ 3-6 参照 )- YMODSRT: Y AGU モジュロ アドレッシング開始レジスタ ( レジスタ 3-7 参照 )- YMODEND: Y AGU モジュロ アドレッシング終了レジスタ ( レジスタ 3-8 参照 )- XBREV: X書き込みAGUビット反転アドレッシング制御レジスタ (レジスタ3-9参照 )

• データメモリ制御関連のレジスタマップ ( 表 3-5 参照 ) 内の MSTRPR レジスタを更新

リビジョン C (2012 年 3 月 )このリビジョンでの変更内容は以下の通りです。

• EDS アクセスのサンプルコード ( 例 3-1 と例 3-2) を更新

• 表現および体裁の変更等、本書全体の細部を修正

DS70595C_JP - p. 3-32 © 2012 Microchip Technology Inc.

Page 33: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

© 2012 Microchip Technology Inc. DS70595C_JP - p. 3-33

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。マイクロチップ社は、明示的、暗黙的、書面、口

頭、法定のいずれであるかを問わず、本書に記載されている

情報に関して、状態、品質、性能、品性、特定目的への適合

性をはじめとする、いかなる類の表明も保証も行いません。マ

イクロチップ社は、本書の情報およびその使用に起因する一

切の責任を否認します。マイクロチップ社の明示的な書面に

よる承認なしに、生命維持装置あるいは生命安全用途にマイ

クロチップ社の製品を使用する事は全て購入者のリスクと

し、また購入者はこれによって発生したあらゆる損害、クレー

ム、訴訟、費用に関して、マイクロチップ社は擁護され、免

責され、損害うけない事に同意するものとします。暗黙的あ

るいは明示的を問わず、マイクロチップ社が知的財産権を保

有しているライセンスは一切譲渡されません。

商標

マイクロチップ社の名称と 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-61341-953-3

マイクロチップ社製デバイスのコード保護機能に関して次の点にご注意ください。

• マイクロチップ社製品は、該当するマイクロチップ社データシートに記載の仕様を満たしています。

• マイクロチップ社では、通常の条件ならびに仕様に従って使用した場合、マイクロチップ社製品のセキュリティ レベルは、現

在市場に流通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

マイクロチップ社データシートにある動作仕様書以外の方法でマイクロチップ社製品を使用する事になります。このような行

為は知的所有権の侵害に該当する可能性が非常に高いと言えます。

• マイクロチップ社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• マイクロチップ社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コー

ド保護機能とは、マイクロチップ社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。マイクロチップ社では、常に製品のコード保護機能の改善に取り組んでいます。マイクロ

チップ社のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはそ

の他の著作物に不正なアクセスを受けた場合は、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利が

あります。

マイクロチップ社では、ChandlerおよびTempe (アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とイドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。マイクロチップ社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関するマイクロチップ社の品質システムは ISO 9001:2000 認証を取得しています。

Page 34: セクション 3. データメモリww1.microchip.com/downloads/jp/DeviceDoc/70595C_JP.pdfみページレジスタ(DSWPAG)) と組み合わせる事により、EDS アドレスまたはPSV

DS70595C_JP - p. 3-34 © 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