応用製作② PCI Expressで測定する温度計
gpio_in <= gpio_out(31 downto 8) & debug(7 downto 0) when (gpio_out(17 downto 16) = "00") else gpio_out(31 downto 8) & ledcount when (gpio_out(17 downto 16) = "01") else ledlfsr when (gpio_out(17 downto 16) = "10") else gpio_out(31 downto 0);
このままでは外部からの信号入力を読めないので、gpio_out(17 downto 16) = "11"のときに、上位8ビットにSW_INの信号が見えるようにします。
gpio_in <= gpio_out(31 downto 8) & debug(7 downto 0) when (gpio_out(17 downto 16) = "00") else gpio_out(31 downto 8) & ledcount when (gpio_out(17 downto 16) = "01") else ledlfsr when (gpio_out(17 downto 16) = "10") else sw_ip(7 downto 0) & gpio_out(23 downto 0); |
これで、BAR0の信号を読めるようになります。
7−3.動作結果
コントロールソフトはC言語で作成しました。
このソフトを使って120秒間のデータを取りました。
最初の90秒間は白熱電球を点灯させ、温度を上昇させます。
最後の30秒間は白熱電球を消灯し、自然に冷却します。
そのとき測定された温度変化を次のグラフに示します。
図4 PCI Express温度計で測定された温度
コントロールソフトウェアからSPIの信号を操作して、AD変換値を取得する際の波形をMITOUJTAGのJTAGロジックアナライザでキャプチャしたものを次の図5に示します。波形キャプチャ用にプログラム中にWAITをいれ、ゆっくり動かしています。
図5 ADコンバータへアクセスする信号をJTAGロジックアナライザで観測
GPIO_OP<4>がSPIのデータ出力、GPIO_OP<3>がSPIのクロック、GPIO_OP<2>がSPIのCS、SW_IP<0>がSPIのデータ入力です。なお、GPIO_OP<1>と<0>は電球・扇風機のコントロール用です。
このように、PCI Expressを通じて温度を測る装置を作ることができました。
Copyright(C) 2009 TokushuDenshiKairo Inc. All rights reserved.
info@tokudenkairo.co.jp