廣田さん、ありがとうございます。後藤です。 > > おお、DREQ割り込みで動作してますね。 > > ただ、そのままだと > > ■1回しかDMA出力しない。 > > (これは、CRCのIフラグが1のままだからですよね) > DMAはCCRの割り込みマスクビットに関係なく動作するはずです。 ハードウエアマニュアルの5.割込みコントローラー 頁5-10のビット5の説明を見ると "IPRB5|DMACの割込み要求はプライオリティレベル0(非優先) (初期値)" と記載されてます。ところが"(非優先)"についてのコメントが マニュアルに見当たりません。 "(非優先)"ってのが"関係なく動作する"って事ですか? > DMA終了の割り込みがCPUに届かないだけです。 > DREQpinにスイッチなどでDMA要求を入力すると、スイッチのチャタリングで > 要求が複数回掛かってしまい、DMACが複数回転送動作をやってしまいます。 > この転送時間はスイッチのチャタリングより遙かに短い時間です。 参考になります。 > > ■PA-0だけ、電源投入直後(割込み前)既に"Hi"状態です。 > 初期化して出力設定、0データ出力までの間は入力ですからオシロ等で > さわると不安定になります。が、完全にHIGHならどこかとショートも > 疑いましょう。 電源投入してからおもむろにさわってもやっぱり"Hi"なんです。 > > PA-0のポートだけ、0の出力設定のはずなのに"Hi"で出力されてる > DMA前に、デバッグモニタ等でポートAを読み書きしてみて正常に > 動くか確認がさきですね。 P5に付いてるLEDで確認できればと、下記のプログラムで確認しました。 AKI-H8のプッシュSW1でPAを制御しPAをLEDでモニターしてます。 これだと正常にSWのON/OFFでLEDがON/OFFしますから 正常なように思えます。 ところで↓ここに"モニタプログラム"なるものがありますけど、 こんなの使えるんですか? http://www.hitachi.co.jp/Sicd/Japanese/Seminar/downh83h.htm なんかハードル高そうですね(@_@) -----<<以下確認プログラム>>----- ;************************************************ ;* * ;* VECTOR ADDRESS * ;* * ;************************************************ .CPU 300HA .SECTION VECT,CODE,LOCATE=H'000000 RES .DATA.L CHKPA ;************************************************ ;* * ;* SYMBOLDEFINITIONS * ;* * ;************************************************ ;**************** PORT4 ************************* P4DDR: .EQU H'FFFFC5 P4DR: .EQU H'FFFFC7 P4PCR: .EQU H'FFFFDA S4: .EQU 7 ;Push SW S3: .EQU 6 S2: .EQU 5 S1: .EQU 4 ;**************** PORT5 ************************* P5DDR: .EQU H'FFFFC8 P5DR: .EQU H'FFFFCA P5PCR: .EQU H'FFFFDB LED2: .EQU 1 ;LED LED1: .EQU 0 ;**************** PORTA ************************* PADDR: .EQU H'FFFFD1 PADR: .EQU H'FFFFD3 ;************************************************ ;* * ;* MAIN PROGRAM : CHKPA * ;* * ;************************************************ .SECTION PROG,CODE,LOCATE=H'010000 CHKPA: .EQU $ MOV.B #B'11111111,R0H MOV.B #B'00000000,R0L MOV.B R0H,@P4PCR ;プルアップを設定 MOV.B R0L,@P4DDR ;入力に設定 MOV.B R0H,@P5DDR ;出力に設定 MOV.B R0H,@PADDR ;出力に設定 CHKPA99: MOV.B @P4DR,R0L SHAR.B R0L ;プッシュSWの値をを4ビット右にシフトしてS1をビット0に合わせる SHAR.B R0L SHAR.B R0L SHAR.B R0L NOT.B R0L MOV.B R0L,@PADR MOV.B @PADR,R0L MOV.B R0L,@P5DR BRA CHKPA99 .END