AT32UC3BのPDCA(読んでみただけ2)

前回の続き。
ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。



19.4.8 Interrupts
IER(Interrupt Enable Register)に書くことで割込を有効にすることができ、IDR(Interrupt Disable Register)に書くことで割込を無効にすることができる。割込が有効か無効かどうか確認するためIMR(Interrupt Mask Register)を読むことができる。ISR(Interrupt Status Register)を通して割込要因の現在の状態を読むことができる。
PDCAは3つの割込要因持つ:

  • リロード・カウンタがゼロ - TCRRがゼロである。
  • 転送終了 - TCRとTCRRの両方がゼロである。
  • 転送エラー - メモリにアクセスする際にエラーが発生した。



19.4.9 Priority
もし1つ以上のPDCAチャンネルが一時に転送を要求しているなら、PDCAチャンネルはチャンネル番号により優先順位をつける。低い番号のチャンネルが他の高い番号のチャンネルより優先権を持ち、チャンネル0に最優先権が与えられる。

19.4.10 Error Handling
メモリアドレスがメモリの無効の位置を示すように設定されると、PDCAが転送を実行しようとするとき、エラーが発生するだろう。エラーが発生するとき、Interrupt Status RegisterのTERR(Transfer Error)フラグが設定され、エラーを引き起こしたDMA(訳注:PDCAの誤り)チャネルは止められるであろう。チャンネルを再起動するために、ユーザはMemory Address Registerを有効なアドレスにプログラムして、それからControl Register(CR)のError Clearビット(ECLR)に'1'を書かなければならない。Interrupt Enable Register(IER)のTERRビットに'1'を書くことにより、エラーのとき割込を任意に引き起こすことができる。