こんにちは、廣田@本庄です。
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
******************************************************************************/