FC2カウンター FPGAの部屋 Spartan-3A Starter KitでEDKを使ってカメラ表示27(独自にタイマーのカスタムIPを作る2)
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示27(独自にタイマーのカスタムIPを作る2)

Spartan-3A Starter KitでEDKを使ってカメラ表示26(独自にタイマーのカスタムIPを作る1)”の続き。

今回はSDKを使ってソフトウェアを作る。
今回もSDKでのソフトウェアの作り方を手順を追って書いていく。

1.Project NavigatorでEDKインスタンスをクリックし、Exprot Hardware Design To SDK with Bitstreamをダブルクリックして、ハードウェア仕様をSDKに渡しながらSDKを立ち上げるのを忘れないようにする。

2.SDKのWorkspaceを指定する。

3.SDKが立ち上がる。Fileメニュー -> New -> Xilinx C projectを選択して新しいプロジェクトを作成する。

4.一般的には、Fileメニュー -> New -> Source FileでCソースを作って、編集する。(私は、Notepad++でCソースを作って、srcフォルダにドラッグアンドドロップ)

5.Cソースが出来たら、セーブすると、自動的にビルドする。

6.Xilinx Toolsメニュー -> Program FPGAを選択。

7A.Cソースのソフトウェアを直接実行する際は、Software Configuration で .elfファイルを選択して、Programボタンをクリックする。

7B.Cソースのソフトウェアをデバックする際は、Software Configuration で .elfファイルを選択せずにbootloopのままで、Programボタンをクリックする。

8B.Project Explorerウインドウのプロジェクト(今回はsmm_timer_test)のBinariesを展開して、.elfを右クリックする。

9B.Degub As -> Launch on Hardware を選択する。



smm_timer_testプロジェクトを作成して、smm_timer_test.c を書いた。コンパイルして実行したら、今度はうまく動いた。LEDが順番に点灯していくのが見えた。成功!!!やった~。

smm_timer_test.c を下に示す。

/* * xps_timer_test.c * *  Created on: 2011/10/02 *      Author: Masaaki *  *  65MHzクロック */

#include "xbasic_types.h"
#include "xio.h"
#include "mb_interface.h"
#include "xparameters.h"

// XPS_GPIO_LEDS_8BIT define
#define XPS_GPIO_LEDS_8BIT_DATA    XPAR_LEDS_8BIT_BASEADDR        // データ
#define XPS_GPIO_LEDS_8BIT_TRI    XPAR_LEDS_8BIT_BASEADDR+0x4    // 0 - Output, 1 - Input

int interrupt = 0;
int k;

void timer_int_handler(void * arg) {
    interrupt = 1;
    k = *(volatile unsigned int *)(XPAR_SMM_TIMER_0_BASEADDR); // 割り込みリセット
}

int main()
{
    unsigned int i;
    
    *(volatile unsigned int *)(XPS_GPIO_LEDS_8BIT_TRI) = 0;    // 出力設定
    
    // 割り込みハンドラ登録、割り込み許可
    microblaze_register_handler(timer_int_handler, (void *) 0);
    microblaze_enable_interrupts();

    for(i=1; i<256; i++){
        *(volatile unsigned int *)(XPS_GPIO_LEDS_8BIT_DATA) = i;

        *(volatile unsigned int *)(XPAR_SMM_TIMER_0_BASEADDR) = 62500000// 1秒カウントをsmm_timerにセット
        // xps_timter割り込み待ち
        interrupt = 0;
        while (interrupt==0);
    }

    return 0;
}

  1. 2011年10月13日 05:39 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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