[Newbie] Re: DMAコントローラについて

newbie @ embedded.jp newbie @ embedded.jp
2009年 2月 19日 (木) 21:04:34 JST


海苔通さん

こんばんは。中村@アップウィンドテクノロジーです。

newbie @ embedded.jp さんは書きました:
> お世話になります、海苔通です。
> 
>> 発生しているFIFOエラーは「受信FIFOオーバラン」です。
>> これらのエラーが、一日に2000回程度発生しています。
>> エラー発生原因はだいたい見当ついています。
>> DMAC転送割込みの優先レベルが3と低かったので10にすると全く出なくなりました。
>> 恐らくEDMAC転送割込みの優先レベルも3であったため、
>> 頻繁にtcpやudp通信しているのでEDMACとDMACの転送割込みがぶつかり、
>> DMAC転送割込み処理が遅れることがあるからだと推測しています。
>> ちなみに、レベルの高いIRL割込みも使用しています。
>>
>> ただし、このFIFOエラーが発生してもDMA転送割込みが突然停止する直接的な原因とは思えず
>> (データシートには記載されていませんでしたので)、
>> 仮にレベル10にしたとしても、割込みが停止する現象が発生すると考えています。
>>
>> ちなみに、シリアルIOのFIFOエラーはクリアした方がよろしいのでしょうか?
>> 現状、FIFOエラーが発生しても何もしないようにしています。
>> 例えば、シリアルIO受信の転送処理はDMAにまかせるが、
>> FIFOエラーの割込みを許可してエラー割込み発生時はエラークリアをする処理を
>> 追加する必要があるのでしょうか?
>>
> 
> 色々調査した結果、どうやらこのFIFOエラーがDMA転送停止に関係することが分かりました。
> また、シリアルIOではなくSCIFの例ですが、FIFOエラー発生時はDMA転送が停止するという資料も見つかりました。

原因が判明して良かったですね。

> よって、以下の2点の考慮が必要であると考えています。
> ・DMA転送割込み優先レベルの調整(FIFOエラーが発生しないよう)
> ・DMA転送割込みが万が一停止した場合の復旧処理(タイマを使って割り込みを監視)
> 優先レベルを変更するには、ipr_irq.cのソースを修正するしかないと思っております。

このファイル名は見たことがないのですが・・・。

> それだとOSを再構築する手間が出てきますが、
> もしかしたら、ipr_irq.cのみメイクして出来たオブジェクトファイルを上書きするだけで良いかもしれないのでこれは調査中です。

そちらのほうが面倒かと思いますが・・・。
カーネルの再構築でよいのではないでしょうか?

--
アップウィンドテクノロジー・インコーポレイテッド (Upwind Technology, Inc.)
技術部 中村憲一
E-mail:nakamura @ upwind-technology.com
URL:http://www.upwind-technology.com/



Newbie メーリングリストの案内