2021年01月08日

Teensy4.1にPSRAMを実装する

基板の裏側にあるランドに容量8MBのPSRAMを2個取り付け、チェック用のプログラムを走らせた。

Screen Shot 2021-01-07 at 17.44.51.png

Screen Shot 2021-01-07 at 17.42.53.png

無事16MBを認識している。 これで広大なバッファー領域を確保することが出来た。
posted by Yasuski at 08:16| Teensy

2020年07月05日

GPT2_IRQの扱いに関して

チャンネルが分離されていたFLEXPWMとは違って、GPT関連のIRQはフラグが統合されているようだ。

Screen Shot 2020-07-04 at 15.58.02.png

InputCapture1/2のフラグはランダムなタイミングで発生するため、チャンネル毎に制御信号を分離した方が安全そうなのだが、条件分岐によって判定を行うポイントを設定する場所が問題になりそうだ。

例えば、ひとまず統合されたIRQをそのままサブルーチンに投げる方法と、、、

Screen Shot 2020-07-04 at 23.49.21.png

フラグの条件でIRQが発動した際の分岐先を決定する方法とでは、キャプチャの挙動が変わってくる可能性がある。

Screen Shot 2020-07-05 at 0.58.35.png

GPT系ではイニシャライズからタイマの起動、オーバーフロー、タイマの停止を統一して行うことになるが、

Screen Shot 2020-07-04 at 17.01.43.png

タイマ停止時にはGPIOの属性をALT1からALT5に変更し、InputCaptureに設定した端子を開放している。

Screen Shot 2020-07-04 at 23.52.27.png

キャプチャ・イベントが発生したタイミングでカウンタの値をレジスタに記録し、

Screen Shot 2020-07-05 at 0.57.29.png

値を読み込んだ後に、キャプチャ・フラグのクリアを行う。サブルーチン内でインターラプトの介入をを禁止することで、処理の混乱を回避している。

カウンタの読み出しは、InputCapture1/2 個別のタイミングで行っている。

Screen Shot 2020-07-04 at 23.50.54.png

本来はプライオリティーが設定されたIRQが分離されているGPT1/2を並列に運用するのが筋なのだが、ボードから端子が取り出せないためにGPT2のみの運用で妥協せざるを得ない。 

無理をすれば、ボード裏にあるPSRAMのCSからGPT1のInputCaptureを取り出せるが、

teensy41_memory.jpg

これは最後の手段と考えている。

32bitフルスケールをカウントする時間は7秒程度で、この間にOverFloorによるエラーが1回発生する。

Screen Shot 2020-07-05 at 8.20.29.png

テルミン用のFVCは、パルスのアッパーエッジのタイミングで取得したカウント値の差分を検出するために、実際に取得した値の実効値を調整する必要がある。Teensy3.6で構成した16bit精度のFVCから得られるデータの実効値は14bit程で、ピッチの制御に用いるには微妙な数値だ。 

32bit精度のカウンタからはより柔軟に実効域を切り取ることが出来るので、データエラーによって発生するバウンシング現象を防止できるかもしれない。





posted by Yasuski at 01:44| Teensy