これは1ms単位で測れるルーチンで、ARMではsystickを使って実装している。これを最初コメントアウトした時間計測のルーチンに使わせてもらう。640×480のJPEGデコードは、900msくらいかかっていることがわかった。これまでのBMPファイルでの送出が、2秒近辺なので、あわせると3秒。うーむ、やっぱりDMAを使いたいな。JPEGがデコードし終わってから、SPIで送るのだが、DMAを使えば、SPIの転送とJPEGデコードをかぶらせて処理時間を短縮できる。えらそうなことは言っているが、当研究所ではDMAの実装は始めてである。大型コンピューター時代から理屈はいやというほど知っているが(大型機ではチャネルと呼んでいた)、実際に動かしたことはない。8ビットのAVRにはない機能で前からマスターしたいと思っていたが機会がなかった。STM32のDMAを調べ始めた。SPIの例が見つからない。設定はわかるが、どうして動かし始めるのかが良く分からない。サンプルコードはタイマーの割り込みがスタートになっている。SPIの送信は何がトリガーになるのだろう。いうのは動かしてみるのが一番だ。見よう見まねで、コードを掻き集め、コーディングをすませて実際にテストしてみる。オシロで見てみるが全くSPIは動いていない。なると意地になるのが癖である。片っ端からウェブでDMAを勉強する。経ってから、突然、本体のFatFSがDMAを使用していることに気づいた。あわててソースを読み込む。ふむふむ、DMA転送の度に、初期化をしている。おお、ひとつコマンドが抜けていた。SPI_I2S_DMACmd()というコマンドがSPIとDMAをつなぐ。