AVRでビデオ信号を出力したり、PIC24でVGA出力する例はあるので今更、珍しくは無いのだがstm32f4のDMAの勉強を兼ねてSTM32F4-DiscoveryでVGA信号を出力させてみた。
回路は、ポートが抵抗を介してVGAコネクタに接続されているだけ。VGAコネクタにはaitendoの在庫一掃セールで購入したピッチ変換基板を使用。[caption id="attachment_4449" align="alignright" width="300" caption=" pixel clock 13MHz(上)と下. 水平同期(下)"]
[/caption]仕様は、VGA信号 横320×縦240dot, 1pixelは8bit。Video RAMは、320×240 = 76.8Kbyte必要なので、これを 112Kbyteあるメインメモリーに配置。プログラムは DMAで使用できないCCM(core coupled memory)領域64kbyteを使用した。VGA出力の仕組みは、TIM2で水平同期信号を生成、TIM8で13MHzのpixelクロックを生成し、DMA2に要求を発生させ、メモリ→GPIOEの転送を実行。水平同期で割り込みを発生させ、垂直同期信号の生成とDMAの設定を行なっている。
[caption id="attachment_4450" align="alignright" width="300" caption="割り込み処理時間(上), 水平同期(下)"]
[/caption]この割り込みにかかる時間は水平同期約30μS毎に1μS程度。あとは全部DMAで処理され、CPUの介在なし。CPUのメモリーアクセスへの干渉も少なそうなので良いんじゃないかと思う。やっぱり、stm32f4xxはRAMが大きいのが良い。stm32のDMAやtimerは、なかなか強力。いろいろ使えそうだ。