NEC ELECTRONICS NEC ELECTRONICS
NEC electronics NEC electronics NEC
ホーム
アプリケーション
製品情報
先端技術
サポート
WEBショップ
ニュース&イベント
会社案内
header
GO
詳細検索機能/特性検索
サイトマップ お問い合わせ

DMA

目次

    
FAQ-ID = v85dma-nnnn
0001: DMAの使い方 (リアルタイム出力機能と組み合わせる) [V850/Sxx]
0002: DMAの使い方 (UARTでの最初のデータ送信について) [V850/Sxx]
0003: DMAの転送モード [V850E/Sxx]
0004: DMA起動にソフトウエア・トリガ・ビットを使用する。 [V850E/MA1]
0005: DMAが 1回しか起動しない。繰り返し起動するには? [V850E]
0006: DMA再起動で必要な設定は? [V850E/MA1]
0007: DMAを一時的に停止するには? [V850E/MS1]
0008: DMAでのミス・アラインについて [V850E/MA1, V850E/MA2, V850E/ME2]
0009: DMAでのエンディアン [V850E/MA1, V850E/MA2, V850E/ME2]
0010: フライバイ転送でのバス幅 [V850E/MA, V850E/MS, V850E/ME]
0011: フライバイ転送時のウエイト [V850E/MA, V850E/MS, V850E/ME]
0012: I2CとのDMA転送 [V850/SB]
v85dma
-0001
DMAの使い方 (リアルタイム出力機能と組み合わせる) [V850/Sxx]
Q1
V850でできるだけ CPUに負担をかけずに (リアルタイム出力を使用して) モータ制御を行う方法を教えてください。
A1
(V850/SA1、SB1、SB2、SV1に共通)
 モータ制御のようなタイミングの制限が厳しい出力を制御するには、内蔵のタイマ機能、 DMA機能をリアルタイム出力機能と組み合わせて使用します。
- 4ビットのリアルタイム出力 (RTP0RTP3) を使用することを考えます。 この場合には、出力タイミングはタイマ4 (INTTM4) を使用することになります。 また、同じタイミング (INTTM4をDMA転送のトリガにも使用する) で次の出力データを RTBLに DMA転送するので、DMAチャネルとしてはチャネル0 (またはチャネル1) を使用します。
 前もって、出力パターンを内蔵RAM(その下位4ビット)に作成してあるとして以下の設定を行ってください。

(1) タイマ4 は、インターバル・タイマ機能により定周期で割り込み要求信号を発生します。 割り込み周期は TCL4レジスタによりタイマのカウント・クロックを選択し、 コンペア・レジスタ CR40の値+1 カウント分の時間として設定します。 ただし、未だタイマはスタートはしません。

(2) DMAの設定は、
DIOA0(または1):RTBLのアドレスの下位10ビットである3A0Hを設定
DRA0(または1): データを格納しているRAMアドレスの下位アドレス
(有効ビット数は使用するCPUの内蔵RAM容量による)を設定
DBC0(または1): データ数 - 1を設定
DCH0(または1): 動作モードとして19Hを設定

(内蔵RAMアドレスはインクリメント、内蔵RAM → 周辺I/Oに、8ビット・データを転送)

(3) リアルタイム出力は、まず、RTP0RTP3 と兼用になっているポート (P100〜P103) を設定します。
P100〜103:初期値
PM100〜103:xxxx0000B(下位4ビットを出力に)を設定

 その後に
RTPM:0FH(下位4ビットをリアルタイム出力)を設定
RTPC:80H(4ビット2チャネルモードで動作許可)を設定
RTBL:次のデータを設定

(4) これで設定が完了しましたので、TMC4に 80Hを設定 (TM4CR40の一致でクリア&スタート、 タイマ出力は使用しない)してタイマ4 をスタートします。
 これで、タイマ4 で指定した時間間隔毎に RTP0〜3 に出力パターンが出てきます。
 なお、初期値及び次のデータは既に設定してあるので、DMA転送するのはその次のデータからになります。

タイミングを以下に示します。

 後は、INTDMA0 (または1) の割り込み毎に DMAの再設定と再起動を行うことで、 連続した出力パターンを発生させることができます。
この情報はお役にたちましたか?
back to top  
(2002/03)

v85dma
-0002
DMAの使い方 (UARTでの最初のデータ送信について) [V850/Sxx]
Q1
V850/SA1で UART送信に DMAを使おうとしていますが、 最初のデータ送信完了の割り込みが発生しているのに DMAが起動しません。
UARTの送信が完了した後で DMAの設定を行っています。
A1
(以下、すべて V850/SA1、SB1、SB2、SV1に共通)
DMAの起動要因と割り込み要求フラグの状態は全く別です。DMAの設定が完了してから、 起動要因 (送信完了) が入るようにしてください。
この情報はお役にたちましたか?
Q2
UART送信では、必ず最初のデータはプログラムで書き込まないといけないのでしょうか? 最初のデータ送信からDMAを使うことはできないのでしょうか?
A2
できません。この場合の DMAの起動要因はあくまで、UARTの送信完了信号です。 その他の方法では起動できません。
この情報はお役にたちましたか?
Q3
一連のデータ群の送信が終わった後、 次のデータ群を送信する場合にも最初のデータはプログラムで書き込まないのでしょうか?
A3
 それは、前回のデータが送り終わっているかどうかで異なります。 これを判断して DMAの設定を行う場合の処理は以下のようになります。 ここでは、UARTの転送速度が割り込み応答に対して速くないとしての処理を示します。

 最後のデータをUARTに転送したら、DMA完了の割り込みが発生しますので、 そこで UARTの送信完了割り込み要求フラグをクリアしておいてください。
 この段階で次のデータがあれば、DMAを再設定します。(ここまでの処理は当然ながら、 最後のデータが UARTから送信完了する前に行えるものとします)
 その段階で次のデータがない場合そのまま処理を完了します。

次のデータ群を送信するときに、次のデータの最初から DMAを開始するように DMAを設定をしてください。

 DMAの設定が終わったら、UARTの送信完了割り込みフラグが立っているか (前回の最後のデータの送信が完了したか) を確認します。 フラグが立っていなければ、前回の最後のデータの送信完了でそのまま DMAは起動できますので、 設定は完了です。DMA完了を待ってください。

 フラグが立っていれば、既に送信は完了していますので、DMAバイト・カウント・レジスタを読み出し、 設定した値と同じかをチェックします。値が変化していれば、既に DMAは動作していますので、 そのまま DMAの完了を待ってください。
 変化していなければ、DMAの設定が間に合わなかった事になるので、DMA設定を変更 (2つ目のデータから送信するようにアドレスとカウント値を変更)して、 その後に UARTに最初のデータを書き込んでください。 これで、最初のデータの送信完了後にDMAは起動されます。

 以下に概略フローを示します。
この情報はお役にたちましたか?
back to top  
(2002/03)

v85dma
-0003
DMAの転送モード [V850E/Sxx]
Q1
DMAの転送モードは、どういう動作でしょうか。
A1
V850/SxのDMAモードは、V850Eの「シングル転送」に相当します。
1サイクルごとにバスを解放して、DMA要求があるたびに、TCに至るまでデータ転送をします。

この情報はお役にたちましたか?
back to top  
(2002/04)

v85dma
-0004
DMA起動にソフトウエア・トリガ・ビットを使用する。 [V850E/MA1]
Q1
V850E/MA1の DMAを使用した UARTの送信処理で、 チャネル・コントロール・レジスタ中のソフトウエア・トリガ・ビットをセットすることで、 最初のデータ送信のトリガとできますか?
また、このビットをクリアしておく必要がありますか?
A1
はい、DMAチャネル・コントロール・レジスタの中のソフトウエア・トリガ・ビットをセットすることで UARTの送信を起動させることができます。
なお、このビットは単なるトリガのためのビットですので、わざわざクリアする必要はございません。
この情報はお役にたちましたか?
back to top  

v85dma
-0005
DMAが 1回しか起動しない。繰り返し起動するには? [V850E]
Q1
DMA を同じ条件で繰り返そうとしていますが、1回しか起動しません。
A1
DMAが開始する条件としては以下の条件が必要です。
   ENnビット=1
   TCnビット=0
1度、DMAを実行して終了した場合には、TCnビットが 1 になりますので、この状態で DMA を 起動しようとしても起動できません。DMA が終了したら必ず、DMAチャネル・コントロール・レジスタを 読み出して、TCnビットをクリアしてください。
この情報はお役にたちましたか?
back to top  

v85dma
-0006
DMA再起動で必要な設定は? [V850E/MA1]
Q1
同じ条件で DMA を繰り返す場合、なるべくレジスタの再設定を行わないでできる方法がありますか?
A1
V850Eシリーズでは DMAソース・アドレス・レジスタ、DMAデスティネーション・アドレス・レジスタ、 DMA転送カウント・レジスタはマスタ・レジスタとスレーブ・レジスタの 2段構成になっております。

通常の DMA動作ではスレーブ・レジスタの値を更新しながら、DMA動作していますが、 ターミナル・カウントが発生するとマスタ・レジスタの内容がスレーブ・レジスタに転送されて、 次の DMA転送はそれ以前にマスタ・レジスタに設定されていた条件で行う事になります。
DMAチャネル・コントロール・レジスタの MLEnビットをセットすることで、この機能を 利用して同じ条件でのDMAを自動的に繰り返し実行させることができます。

これらのレジスタを前回と同じ条件で使用する場合には、再度設定する必要はなく、 DMAチャネル・コントロール・レジスタの再設定を行う(読み出して、TCnビットをクリアした後で)だけです。
この情報はお役にたちましたか?
Q2
DMA転送完了後、前回同様の設定で再度転送開始するためには、 どのレジスタを再設定すればよいでしょうか?
A2
ソフトウエア・トリガで DMAを使うのであれば、DCHC以外は再設定する必要はありません。 (ユーザーズ・マニュアルの「6.9 ネクスト・アドレス設定機能」に記載されておりますように、 DSADDADBCはマスタ・スレーブの構成になっております。 DMAがターミナル・カウントになると、その前に設定していた値に自動的に戻ります)
DMAの条件を変更したい設定だけを変更してください。その上で DCHCを設定してください。
この情報はお役にたちましたか?
Q3
DCHC中の TCnビット・ターミナル・カウントは、 再転送開始時に DCHCを設定する直前に 1回必ず読み出す必要があるのでしょうか?
A3
はい、必要です。
実際には DMAが完了した後になりますが、必ず DCHCレジスタを読み出してください (DMAの開始条件に TC=0 がございますので次の DMA開始までに DCHCを読み出す必要があります)。
この情報はお役にたちましたか?
back to top  

v85dma
-0007
DMAを一時的に停止するには? [V850E/MS1]
Q1
DMA要求を行った後、転送を一時停止させたい場合は、 DCHCレジスタの ENnビットをリセットすればよいでしょうか?
A1
はい、シングル転送モードであれば、DCHCレジスタの ENnをリセットすれば それ以降は DMAを停止させることができます。
この情報はお役にたちましたか?
back to top  

v85dma
-0008
DMAでのミス・アラインについて [V850E/MA1, V850E/MA2, V850E/ME2]
Q1
V850E/MA1で 16bitバスでの DMA転送において、 ソース・アドレス、ディスティネーションアドレスは偶数アドレスのみ有効と認識していますが、 正しいでしょうか?
A1
はい、そうです。
ユーザーズ・マニュアルの 「6.17注意事項」 (V850E/MA1の場合) の「 (2) ミス・アライン・データの転送」 に記載されているように、 奇数アドレスを指定した場合には A0 が強制的に 0 に設定されて転送が行われます。
この情報はお役にたちましたか?
back to top  
(2003/08)

v85dma
-0009
DMAでのエンディアン [V850E/MA1, V850E/MA2, V850E/ME2]
Q1
V850E/MA1のユーザーズ・マニュアルに、 リトル・エンディアンからビッグ・エンディアンの DMA転送が可能であるという記載があります。
しかし、DMAの制御レジスタの中では、エンディアンの設定はありません。
これは DMAの転送対象になっているメモリの CS空間のエンディアン設定で自動的に判断すると考えてよいですか?
A1
はい、そうです。
各 CS空間ごとに BECレジスタで設定されているエンディアンに従って処理されます。
この情報はお役にたちましたか?
back to top  
(2003/08)

v85dma
-0010
フライバイ転送でのバス幅 [V850E/MA, V850E/MS, V850E/ME]
Q1
V850E/MS1のユーザーズ・マニュアル (6.7.1の注意2) に
 「転送先と転送元のデータ・バス幅を同じにしてください」
との記述があります。
これはどのようなことを指摘しているのでしょうか?
A1
これは、フライバイ転送では 8ビットから 16ビットへのデータ変換やその逆の変換は行わないことを意味しています。
CPUでプログラムで転送を行う場合を考えてください。
このときに 16ビット幅での転送を行う場合には、 16ビット幅の空間に対しては 16ビットで1回のバス・サイクルでアクセス (データは偶数アドレスにあるとします) します。
そのデータを 8ビット幅の空間に対してアクセスする場合には2回のバス・サイクルでアクセスすることになります。
フライバイDMA転送ではこのようなことができないと言うことです。

なお、V850E/MS1では2サイクル転送でもバス幅の異なる空間同士の DMAは保証されておりませんが、 V850E/MA や V850E/ME ではバス幅の異なる空間同士の DMAがサポートされております。
この情報はお役にたちましたか?
back to top  
(2003/08)

v85dma
-0011
フライバイ転送時のウエイト [V850E/MA, V850E/MS, V850E/ME]
Q1
外部I/Oと外部メモリ (SRAM)の DMAフライバイ転送時のウエイト挿入は、 メモリ・ブロックが異なる場合、どちらの設定が有効になるのでしょうか?
A1
フライバイ転送の場合、メモリ側のブロックの設定が有効となります。
この情報はお役にたちましたか?
Q2
外部I/O → SRAM、SRAM → 外部I/Oにおいてどうなりますか?
A2
A1 の回答のように、転送方向によらず、メモリ (SRAM) 側の設定に従います。
この情報はお役にたちましたか?
back to top  
(2003/08)

v85dma
-0012
I2CとのDMA転送 [V850/SB]
Q1
V850の DMA機能を用いて外部バスから (内蔵RAM経由で) I2Cへデータを転送すること可能ですか?
A1
内蔵RAM と I2Cの間での DMA転送自体は可能です。
しかしながら、外部バスから内蔵RAMへの DMA転送はできません。

また、I2Cの場合には、転送方向他の制御 (送信の場合には受信側からの ACK確認で転送を継続するか、中止するかを判定する必要がある) の問題があり、DMA転送はあまりお奨めできません。
この情報はお役にたちましたか?
Q2
I2CバスへのDMA転送速度は、最大どの程度でしょうか?
A2
このような考察をする必要はありません。
DMAの転送速度は、I2Cで要求される速度より遙かに早い転送速度です (4クロックで 1バイト転送可能で、転送毎に CPUが動作するのでこの半分の転送速度と考えられる)。
転送速度は I2Cでの転送速度が支配的です。
この情報はお役にたちましたか?
back to top  
(2003/08)









































 ご利用にあたって  個人情報保護について  RSS       © 1995-2008  NEC Electronics Corporation