アノーマリ#55

ADSP-BF533 Rev0.2のアノーマリ#55には

EBIU_AMGCTLのCDPRIOビットが0に固定されており、コアとDMAの外部アクセスが重なると必ずコアが優先される

というそっけない記述があるだけです。しかしこのそっけないアノーマリには直感的ではない重大な問題が潜んでいます。
コアの外部アクセスとDMAがぶつかったときにコアが優先されるというのはDMAのバックグラウンドアクセスという性質を考えるとそれほどおかしなものに感じられません。おそらくこれ自身はごく自然な設定でしょう。
問題はDMA FIFOの設計がまずいことです。DMAはデバイスの送信FIFOが空になったときや受信FIFOが一杯になったときに、バスに対するアクセス順位が「緊急」状態になります。この状態ではすべてのアクセスに対して優先的にバスを獲得できるために差し迫ったFIFOのアンダーランやオーバーランに緊急対応できます。ところが、キャッシュ・フィルのようなバーストアクセスは途中で中断できません。そのため、緊急状態になっても実際にバスを獲得してデータ転送を開始するまでそれなりの遅延が生じてしまいます。この遅延はSPORTのような中速デバイスでは問題にならず、PPIで問題になります。FIFOが一杯、あるいは空になる前に緊急状態になれば余裕があるのですが、そこまで考えていなかったのでしょう。
具体的に書けば

  • PPIを使った画像伝送
  • キャッシュ経由で外部RAMにアクセス

の両者を行うアプリケーションでは、おそらく画面の乱れが発生します。
これを避ける方法はありません。RTOSを使う場合のような大きなアプリケーションでは命令キャッシュは必須であり、問題を回避できません。アノーマリにはこの問題は次のシリコンで修正されると書いてありますので、必要ならばアナログ・デバイセズにスケジュールを確認するといいでしょう。