Darkside(https対応しました)

2021年11月24日(水) 22:15

オートパワーオフ

 ADC値をナマ値で表示すると、異常はすぐに明白になった。8つの2バイト値があるわけだが、右スティックを上下させると4つの2バイト値が同期して変化する。左スティックを上下させると、それ以外の4つの2バイト値が同期して変化する。
 それ以外のボタンでは、値は変わらない。が、これひょっとしてADC値を4回転送×8になっているのでは?
 仮にそうだとすれば、DMA転送で16バイトを受け取る想定のところに64バイトが転送されていることになる。完全にメモリーを破壊している。症状からすると、いかにもありそうな話である。

 DMA転送の設定を確認する。
 アドレッシングモードが Register Indirect without Post-Increment mode でなければならないのに、with になっていた。
 DMA1CON の NULLW は enabled のはずなのに、disabled になっていた。

 しかし、それでも治らない。
 アドレッシングモードを with に戻しても、元の症状に戻るだけ。ADCの設定も見直すが、何も変わらない。

 ならば、MCCでありがちだが・・・ADCとDMAをいったん削除。
 ADCとDMAを追加し直し、設定する。更に、DMAはチャンネル1を使っていたのをチャンネル0に変える。
 これで、治った。疑問を感じていたが、アドレッシングモードは with が正解のようだ。

 その後は一部設定を復活し切れていなくて障害が発生したものの、基本的に想定外の動作は無し。
 MCCって使っているうちに内部で良くわからないゴミが残って、動作がおかしくなることがある。便利だが、困ったものだ。何しろ、便利は便利だが「使わないと論外」なのであって使わないという選択肢が事実上存在しない。

 具体的に何が壊れていたかも不明なまま破損を修復すると、後は想定通りに進んだ。すんなりと、オートパワーオフ機能は実装できた。ひとまず、3分にしておいた。

 残るはスティックの左右反転問題など、少しの問題だけ。それらは、使いながら修正すれば良い。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4