ARMのDMAの構成はなかなか複雑。

 

たいていは複数のバスにそれぞれDMAコントローラが居たりする。

 

そんなのを無理やり統合して扱おうとしている世界。

 

しかし、無理くり統合して、持てる機能を実装した結果、

 

CPUの負荷を軽減するサポート機能のDMAとして、

 

ものすごくオーバーヘッドの大きなライブラリになってしまってる。

 

 

複数のバスサポート、複数の割り込みコントローラーサポート、

 

DMAにコマンドをDMAするような、複数の間接DMAサポート。

 

でも、実際に使うDMAはごく限られている。w

 

例えば、、、とある実装では、

 

16ch をシームレスに使う必要はない

 

必要なのは3モード (ReadWrite、ReadOnly、WriteOnly)、

 

4機能(シンプル、リニア、リンクド、ハイブリッド)で

 

全12種類の内の1つだけ。

 

なので、軽いそれ専用のドライバを書き起こす必要に迫られてる。