FC2カウンター FPGAの部屋 ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する11(Linuxで確認)
FC2ブログ

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

FPGAの部屋

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

ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する11(Linuxで確認)

ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する10(デバック2)”の続き。

前回、カメラの機能をベアメタル・アプリケーションで確認することができた。今度は、ZYBO用のUbuntu14.04 LTS で確認する。

ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する6(BOOT.BINの生成)”に書いたようにFSBLと新しく生成したビットストリーム、u-boot から BOOT.bin を生成した。

生成したBOOT.bin をSDカードに入れて、ZYBOに挿入して電源ONした。

ZYBO用の Linaro Ubuntu のPL部にカメラ・コントローラを搭載する8(実機でテスト)”に載せておいた cam_disp_uio.c を実行するとカメラ画像が表示できた。やった~~~。嬉しい。。。
ZYBO_Cam_Linux_72_141122.jpg

cam_capture.c を作って、画像のキャプチャを行った。と言うか、frame_valid を止めただけなのだが。。。これも成功。。。
cam_capture.c を下に示す。

//
// cam_capture.c
// Created on: 2014/11/22
//      Author: Masaaki
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

int main(){
    int fd1;
    volatile unsigned *mt9d111_axi_lites;

    // mt9d111 interface AXI4 Lite Slave (UIO1)
    fd1 = open("/dev/uio1", O_RDWR); // mt9d111 interface AXI4 Lite Slave
    if (fd1 < 1){
        fprintf(stderr, "/dev/uio1 open error\n");
        exit(-1);
    }
    mt9d111_axi_lites = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
    if (!mt9d111_axi_lites){
        fprintf(stderr, "mt9d111_axi_lites mmap error\n");
        exit(-1);
    }
    
    mt9d111_axi_lites[1] = 3;
    
    munmap((void *)mt9d111_axi_lites, 0x10000);
}


次に、画像キャプチャ状態から連続表示モードに戻すアプリケーションを作った。cam_on.c だ。
cam_on.c を下に示す。 cc でコンパイルした。

//
// cam_on.c
// Created on: 2014/11/22
//      Author: Masaaki
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

int main(){
    int fd1;
    volatile unsigned *mt9d111_axi_lites;

    // mt9d111 interface AXI4 Lite Slave (UIO1)
    fd1 = open("/dev/uio1", O_RDWR); // mt9d111 interface AXI4 Lite Slave
    if (fd1 < 1){
        fprintf(stderr, "/dev/uio1 open error\n");
        exit(-1);
    }
    mt9d111_axi_lites = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
    if (!mt9d111_axi_lites){
        fprintf(stderr, "mt9d111_axi_lites mmap error\n");
        exit(-1);
    }
    
    mt9d111_axi_lites[1] = 0;

    munmap((void *)mt9d111_axi_lites, 0x10000);
}

  1. 2014年11月23日 04:38 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/2985-5af49816
この記事にトラックバックする(FC2ブログユーザー)