前々々回、前々回、前回に引き続き、Arduino用のTFT液晶をRaspberry Pi PICOにつなぎ、240 x 320ピクセルのBitmapを表示してみました。前回は24bitBitmapを16bitBitmapに変換する処理とGPIOへの出力部分をPIOを使って作りました。残念ながら遅くなってしまいましたが、BitmapデータをPIOにそのまま流し込めるようになりましたので、今回は、DMAを使って画像データをPIOに転送してみました。 その結果は、なんと0.094秒と、最初の18.2秒から193倍の速度になりました。すごいぞDMAとPIO!C++なんていらないじゃん!何でもMicroPythonで作れるんじゃない? DMAの利用は、myDMA.pyを使わせていただきました。下のページからコピペし、同じフォルダに入れておいてください。 danjperron/PicoAudioPWM - GitHub DMAを使う際に注意する点として、フルスピードのDMAで転送するとPIOのFIFOがオーバーフローしてしまうので、DMAのクロックを1/5にしています。(この値は1/2,1/3…と試してみて、うまくいった値を使っています。適当です。) | |
下のコードは,MicroPython1.17をインストールしたRaspberry Pi PICOで作成・動作確認をしています。(同じフォルダに240 x 340ピクセル、24bitカラーの画像を「sample.bmp」という名前で配置してください。)