OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [application/] [board_exam/] [main.cpp] - Blame information for rev 54

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
 
2 6 v.karak
#ifndef __BOARD_H__
3
#include "board.h"
4 2 dsmv
#endif
5
 
6
#include <cassert>
7
#include <cstdlib>
8
#include <cstring>
9
#include <iostream>
10
#include <iomanip>
11
#include <climits>
12
#include <cstdio>
13 6 v.karak
#include <dlfcn.h>
14 2 dsmv
 
15
//-----------------------------------------------------------------------------
16
 
17
using namespace std;
18
 
19
//-----------------------------------------------------------------------------
20 6 v.karak
#define NUM_BLOCK   8
21
#define BLOCK_SIZE  0x10000
22 2 dsmv
//-----------------------------------------------------------------------------
23
 
24
int main(int argc, char *argv[])
25
{
26 6 v.karak
    if(argc != 3) {
27
        std::cerr << "usage: " << argv[0] << " <libname.so> </dev/devname>" << endl;
28 2 dsmv
        return -1;
29
    }
30
 
31 6 v.karak
    char *libname = argv[1];
32
    char *devname = argv[2];
33 2 dsmv
    int dmaChan = 0;
34 6 v.karak
    void* pBuffers[NUM_BLOCK] = {NULL,NULL,NULL,NULL};
35
    void *hlib = NULL;
36
    board_factory factory = NULL;
37
    board *brd = NULL;
38
    u32 *buffer = NULL;
39 2 dsmv
 
40 6 v.karak
    std ::cout << "Loading library: " << libname << endl;
41
 
42
    hlib = dlopen(libname, RTLD_LAZY);
43
    if(!hlib) {
44
        fprintf(stderr, "%s\n", dlerror());
45
        return -1;
46
    }
47
 
48
    factory = (board_factory)dlsym(hlib, "create_board");
49
    if(!factory) {
50
        fprintf(stderr, "%s\n", dlerror());
51
        dlclose(hlib);
52
        return -1;
53
    }
54
 
55
    std ::cout << "Start testing device " << devname << endl;
56
 
57
    brd = factory();
58
    if(!brd) {
59
        dlclose(hlib);
60
        return -1;
61
    }
62
 
63
    if(brd->brd_open(devname) < 0) {
64
 
65
        delete brd;
66
 
67
        if(hlib) {
68
            int res = dlclose(hlib);
69
            if(res < 0) {
70
                fprintf(stderr, "%s\n", dlerror());
71
                return -1;
72
            }
73
        }
74
 
75
        return -1;
76
    }
77
 
78 2 dsmv
    brd->brd_init();
79
    brd->brd_pld_info();
80
 
81
    std ::cout << "Press enter to allocate DMA memory..." << endl;
82
    getchar();
83
 
84 6 v.karak
    int DmaChan = 1;
85
 
86 2 dsmv
    // Check BRDSHELL DMA interface
87
    BRDctrl_StreamCBufAlloc sSCA = {
88 6 v.karak
        1,      //dir
89 2 dsmv
        1,
90
        NUM_BLOCK,
91
        BLOCK_SIZE,
92 6 v.karak
        pBuffers,
93 2 dsmv
        NULL,
94
    };
95
 
96 54 v.karak
    brd->dma_allocate_memory(dmaChan, &sSCA);
97 2 dsmv
 
98 6 v.karak
    brd->dma_set_local_addr(DmaChan, 0x1000);
99
    brd->dma_stop(DmaChan);
100
    brd->dma_reset_fifo(DmaChan);
101
 
102 2 dsmv
    std ::cout << "Press enter to start DMA channel..." << endl;
103
    getchar();
104
 
105 6 v.karak
    // fill data buffers
106
    for(int j=0; j<NUM_BLOCK; j++) {
107
        buffer = (u32*)pBuffers[j];
108
        for(unsigned i=0; i<32; i++) {
109
            buffer[i] = 0xAA556677;
110
        }
111
    }
112
 
113 2 dsmv
    brd->dma_start(dmaChan, 0);
114
 
115
    std ::cout << "Press enter to stop DMA channel..." << endl;
116
    getchar();
117
 
118 6 v.karak
 
119 2 dsmv
    brd->dma_stop(dmaChan);
120
 
121 6 v.karak
    // show data buffers
122
    for(int j=0; j<NUM_BLOCK; j++) {
123 2 dsmv
 
124 6 v.karak
        std ::cout << "DMA data buffer " << j << ":" << endl;
125
        buffer = (u32*)pBuffers[j];
126 54 v.karak
        for(unsigned i=0; i<8; i++) {
127 6 v.karak
            std::cout << hex << buffer[i] << " ";
128
        }
129
        std ::cout << endl;
130 2 dsmv
    }
131
    std::cout << dec << endl;
132
 
133
    std ::cout << "Press enter to free DMA memory..." << endl;
134
    getchar();
135
 
136
    brd->dma_free_memory(dmaChan);
137
 
138
    brd->brd_close();
139
 
140
    delete brd;
141
 
142 6 v.karak
    if(hlib) {
143
        int res = dlclose(hlib);
144
        if(res < 0) {
145
            fprintf(stderr, "%s\n", dlerror());
146
            return -1;
147
        }
148
    }
149
 
150 2 dsmv
    return 0;
151
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.