こんにちは、廣田@本庄です。 Kohya Gotoh wrote: > > お世話になっております。後藤です。 > 日立マイクロコンピュータ H8/300Hシリーズ 内蔵I/O編 > 第2版 2.基礎編 2.14 ブロック転送についての質問です。 > > ■ポートAの0(AKI-H8 MBでは、CN1の8PIN)の出力だけ > 反転してしまいます。なぜでしょうか? > リストを細かく見るのは面倒なので、見ませんが、後藤さんは このサンプルプログラムのメインルーチン部分が割り込み処理も兼ねて いる事を理解していますか? 後藤さんのプログラムの割り込みベクタにはDMACからの割り込み 処理ベクタが書かれていませんね。 これでは割り込み条件が 揃った瞬間から後の動作は保証されません。 サンプルプログラムはリセットからの最初のループで初期設定し、外部要因 からのDREQを待っています。 DREQが発生し、CPUの知らない間にDMAが終了し、転送終了したことを告げる 割り込みが発生します。 割り込みが発生するとリセットからのループに 再び飛び込みまた初期設定して、DMA終了を待つ。 という動作を繰り返しているのです。 あと > BCLR #DTME,@DTCR0B ;転送禁止 > BCLR #RESERVE,@DTCR0B ;リザーブ > BCLR #DAID,@DTCR0B ;MARB固定 > BCLR #DAIDE,@DTCR0B ;〃 > BSET #TMS,@DTCR0B ;ソース側 > BSET #DTS2B,@DTCR0B ;立下りエッジ > BSET #DTS1B,@DTCR0B ;〃 > BCLR #DTS0B,@DTCR0B ;〃 > > BCLR #DTE,@DTCR0A ;転送禁止 > BSET #DTSZ,@DTCR0A ;ワード > BCLR #SAID,@DTCR0A ;転送終了後MARAをインクリメント > BSET #SAIDE,@DTCR0A ;〃 > BCLR #DTIE,@DTCR0A ;割込み禁止 > BSET #DTS2A,@DTCR0A ;フルアドレス > BSET #DTS1A,@DTCR0A ;〃 > BSET #DTS0A,@DTCR0A ;ブロック という記述は感心しません。 本来1ステップで済むレジスタ設定を各ビット 毎に設定しているのでプログラムステップの無駄遣いですし、実行速度 も遅くなるし、プログラムの可視性も悪い。 メリットは無いです。 -- /****************************************************************************** Name: 廣田 正孝 "Masataka Hirota" E-mail address: mhirota@xxxxxxxxxxxxx GCD03040@xxxxxxxxxxx ******************************************************************************/