問題の原因は、非常に高い確度で「DMAエラー割り込み」であると特定できた。
現在の実装ではDMAの伝送終了割り込みは処理しているが、DMAエラー割り込みに関しては無視している。そのため、割り込みハンドラの中では何もしていない。DMAエラー割り込みから帰ってくると同じエラー割り込みが再度発生するため、割り込みが連続し、タスクが停止する。結果的に「起動しない」ように見える。
エラー割り込みの発生原因、対処方法についてはまだ不明である。
問題の関数はi2s_subsystem.c の i2s_dma_intr_handler() である。 http://sourceforge.jp/projects/uzume/scm/svn/blobs/60/kirishima/uzume/trunk/uzume/i2s_subsystem.c
@yrntrlmnmnt(あなたの天然記念物)です。 (ツイート再掲)「受信側(チャネル1)だけで動作しませんか? ※チャネル0の転送完了未確認でアクセスしてるもんで。」 Uzume_Kirishima_Rev_0.1_20111127.tar.gzのdemo00_talkthroughを拝見しますと、DMAはチャネル0(送信)と1(受信)を使っているにも関わらず チャネル0の転送状態を確認しないで転送バッファのコピーを行っています。 DMAのチャネル0と1を使うサンプルでは両方とも状態を確認してからバッファをアクセスしていました。 とりあえず、チャネル0のDMA転送を起動しないで1だけで動作するか確認すると問題解決の糸口が見つかりませんか?
ARMのアクティブな開発者がいないため優先度を下げる
Kirishima基板からLPC-LinkのUSBケーブルを抜くと、uzumeプログラムが起動しなくなる。
IDEからROMに焼いて実行すると問題なく動作する。