STM32でDCCを作ろう! INDEXページへ
DCCを作ったらI2S DACを動かすんだもんね! というわけで「にわかAVマニア」連載は一体何日ぶりなのだろうと過去を振り返ったら、前回は2020年2月6日でした.ほとんど5か月前.まだダイヤモンドプリンセスを隔離して横浜港でごにょごにょやってた頃でした.旧正月の中国人さんいらっしゃーいと熱烈歓迎していた頃でした.
この約半年間の事態の推移のドラスティックさと言ったら軽い世界大戦1回分ぐらいは在ったのではないかと、2020年前半を遠い目で思いやるわたくしでぇす.
当ブログを振り返ると「EZUSBでDDCを作ろう」連載は4月18日で投了しています.戒厳令が始まってしばらく経った頃でした.
EZUSBの投了後にはSTM32へ移行しました.3か月弱が経過しても相変わらずSTM32をいじっていて他の業務はほとんど活動停止状態です.いわゆるハマっている状況ですね.
直近のSTM32ハマリはどんなだったか?
●STM32の内部状態をUARTへ吐き出させるのだが、文字化けとfreezeで死亡.
→起動時のUSB setupが情報過多なため115200bpsを追い越してメモリを破壊する
●stream dataのLittle endian→Big endian変換がのろい (Fs384kHzでロスト)
→いろいろと調整中
●memory-memory間のDMAが全く動かない
→原因:2回目以降がBUSYになってしまっている.次の掟があるらしい
→掟1:HAL_DMA_Start()で始めたらHAL_DMA_PollForTransfer()でBUSYが終了するまで監視すること(これじゃDMAの意味が薄いなぁ)
→掟2:HAL_DMA_Start_IT()で始めたらcallback関数でBUSYが自動終了する
→IRQ不要だけど後者を使うことにした
●memory-memory間のDMAで、audio streamが破壊される
→softでバッファコピーするなら化けない、正常
→DMAでバッファコピーすると完全に破壊される
→原因:USB moduleとDMAが一つのbuffer領域にアクセスしようとする.つまりAHBを二者が同時に掴もうとする.するとAHBが発狂し、dataが完全破壊される (同アドレスカキコ時点で化けるのではなくて、AHBの権利を2人が申請した時点で完全発狂するみたいな超破滅的挙動w)
→ふ~ん、そのためにバスアービタがあるのかと思ってたのだが.....
追記: data破壊の件は、DMA priorityに格差をつけたら治った.バスアービタが役割を果たすようになってくれたみたいです.
programmingしてるというよりも、hardwareの知らない掟を探索していると言うべきです.こんななので全然進捗しないです.
かしこ
0 件のコメント:
コメントを投稿