FC2カウンター FPGAの部屋 2010年12月29日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

The Simple MicroBlaze Microcontroller 19 (SCCB設定レジスタを設定できたが...)

シミュレーションも大丈夫のようなので、もう一度、実機で確かめてみた。やはり、SCCB設定レジスタに設定できない。もしかして?と思って、同じ設定レジスタにもう一度設定するようにしたら設定できた。。。

        // state check
        switch (setting_item) {
            case AGC_SET :
                if (current_state == SETTING_ITEM_ST){
                    if (rot_pulse == left_pulse)
                        setting_item = MIRROR_SET;
                    else if (rot_pulse == right_pulse)
                        setting_item = GAIN_LEVEL_SET;
                } else { // AGC ON -> OFF, OFF -> ON
                    if (rot_pulse != no_pulse){
                        if (agc_reg){
                            agc_reg = 0;
                            reg13 = AGC_OFF_2_SCCB13;
                        }else{
                            agc_reg = 1;
                            reg13 = AGC_ON_2_SCCB13;
                        }
                        while (XIo_In8(STATUS_ADDR) & 0x08) ; // SCCB_busy
                        *SCCB_Reg_Write = (((0x13)<<8) | reg13); // Dummy Write
                        while (XIo_In8(STATUS_ADDR) & 0x08) ; // SCCB_busy
                        *SCCB_Reg_Write = (((0x13)<<8) | reg13); // addr data
                    }
                }
                break;


*SCCB_Reg_Write = (((0x13)<<8) | reg13);を2回書いたら、AGCがON,OFFできた(必ずしも、同じアドレスに同じデータを2回ということではなく、1回どこのアドレスにでもWriteすれば後のWriteはOKのように見える)。
だが、初期化は出来ているはず?間をおくとだめなんだろうか?SCCBのデータはハイインピーダンスにしている。下のタイミングチャートのsdaの最後の頃が'Z'になっていると思う。
SMM_65_101228.png

だが、CMOSカメラモジュールでプルアップしているはず。。。
試しに、FPGAの内部プルアップを使用してみた。

NET "cam_sio_d" LOC = "AB2" | IOSTANDARD = LVTTL | PULLUP ;


やはり、変化がない。やはり、2度書きしないとだめだ。

それでは、初期化でも最初の設定はミスっているのか?それを調べるために、最初にAGC ON,OFFを決定するレジスタ0x13にAGC OFFの設定を書いてみた。

13EB


インプリメントして、やってみるとAGCはOFFで問題なかった。では、初期化では最初の設定も問題がないようだ。
ちょっと訳が分からなくなったが、sdaを'Z'にしないで1にドライブし続けようと思う。(やってみたが結果は変化なし)

操作について説明すると、LCDの1行目がSCCB設定レジスタを示す。下の写真ではAGCのゲインを設定する。今は000なので、下のステータス表示行のGの後に000と表示されている。ちなみにGはAGC ONを表す。Gが表示されない場合はAGC OFFだ。
SMM_66_101229.jpg

ロータリーエンコーダを押すと、1行目の最後に'E’が表示されて、ロータリーエンコーダを回すと値が増減できる。
SMM_67_101229.jpg
  1. 2010年12月29日 14:48 |
  2. SMM
  3. | トラックバック:0
  4. | コメント:2