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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [common/] [pex/] [pex_board.cpp] - Diff between revs 5 and 6

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 6
Line 1... Line 1...
 
 
#ifndef __PEX_BOARD_H__
#ifndef __PEX_BOARD_H__
#include "pex_board.h"
#include "pex_board.h"
#endif
#endif
#ifndef __DMA_MEMORY__H__
 
#include "dma_memory.h"
 
#endif
 
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
Line 31... Line 28...
pex_board::pex_board()
pex_board::pex_board()
{
{
    fd = -1;
    fd = -1;
    bar0 = bar1 = NULL;
    bar0 = bar1 = NULL;
    memset(&bi, 0, sizeof(bi));
    memset(&bi, 0, sizeof(bi));
    m_dma = new dma_memory();
    //m_dma = new dma_memory();
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
pex_board::~pex_board()
pex_board::~pex_board()
{
{
    if(m_dma) delete m_dma;
    //if(m_dma) delete m_dma;
    core_close();
    core_close();
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
Line 159... Line 156...
    }
    }
 
 
    // подготовим к работе ПЛИС ADM
    // подготовим к работе ПЛИС ADM
    fprintf(stderr,"%s(): Prepare ADM PLD.\n", __FUNCTION__);
    fprintf(stderr,"%s(): Prepare ADM PLD.\n", __FUNCTION__);
    core_block_write( 0, 8, 0);
    core_block_write( 0, 8, 0);
    core_pause(100);    // pause ~ 100 msec
    core_delay(100);    // pause ~ 100 msec
    for(i = 0; i < 10; i++)
    for(i = 0; i < 10; i++)
    {
    {
        core_block_write( 0, 8, 1);
        core_block_write( 0, 8, 1);
        core_pause(100);        // pause ~ 100 msec
        core_delay(100);        // pause ~ 100 msec
        core_block_write( 0, 8, 3);
        core_block_write( 0, 8, 3);
        core_pause(100);        // pause ~ 100 msec
        core_delay(100);        // pause ~ 100 msec
        core_block_write( 0, 8, 7);
        core_block_write( 0, 8, 7);
        core_pause(100);        // pause ~ 100 msec
        core_delay(100);        // pause ~ 100 msec
        temp = core_block_read( 0, 010 ) & 0x01;
        temp = core_block_read( 0, 010 ) & 0x01;
        if(temp)
        if(temp)
            break;
            break;
    }
    }
    core_block_write( 0, 8, 0xF );
    core_block_write( 0, 8, 0xF );
    core_pause(100);    // pause ~ 100 msec
    core_delay(100);    // pause ~ 100 msec
 
 
    return 0;
    return 0;
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Line 317... Line 314...
        case 0x70: str="AMBPEX5_SDRAM "; break;
        case 0x70: str="AMBPEX5_SDRAM "; break;
        case 0x71: str="TRD_MSG       "; break;
        case 0x71: str="TRD_MSG       "; break;
        case 0x72: str="TRD_TS201     "; break;
        case 0x72: str="TRD_TS201     "; break;
        case 0x73: str="TRD_STREAM_IN "; break;
        case 0x73: str="TRD_STREAM_IN "; break;
        case 0x74: str="TRD_STREAM_OUT"; break;
        case 0x74: str="TRD_STREAM_OUT"; break;
 
        case 0xA0: str="TRD_ADC       "; break;
 
        case 0xA1: str="TRD_DAC       "; break;
 
        case 0x91: str="TRD_EMAC      "; break;
 
 
 
 
        default: str="UNKNOWN"; break;
        default: str="UNKNOWN"; break;
        }
        }
        fprintf(stderr,  " %d  0x%.4X %s ", ii, d, str );
        fprintf(stderr,  " %d  0x%.4X %s ", ii, d, str );
Line 349... Line 349...
    return 0;
    return 0;
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
void pex_board::core_pause(int ms)
void pex_board::core_delay(int ms)
{
{
    struct timeval tv = {0, 0};
    struct timeval tv = {0, 0};
    tv.tv_usec = 1000*ms;
    tv.tv_usec = 1000*ms;
 
 
    select(0,NULL,NULL,NULL,&tv);
    select(0,NULL,NULL,NULL,&tv);
Line 392... Line 392...
        status = bar1[Status/4];
        status = bar1[Status/4];
        if( status & 1 )
        if( status & 1 )
            break;
            break;
 
 
        if( ii>10000 )
        if( ii>10000 )
            core_pause( 1 );
            core_delay( 1 );
        if( ii>20000 ) {
        if( ii>20000 ) {
            return 0xFFFF;
            return 0xFFFF;
        }
        }
    }
    }
 
 
Line 437... Line 437...
        status = bar1[Status/4];
        status = bar1[Status/4];
        if( status & 1 )
        if( status & 1 )
            break;
            break;
 
 
        if( ii>10000 )
        if( ii>10000 )
            core_pause( 1 );
            core_delay( 1 );
        if( ii>20000 ) {
        if( ii>20000 ) {
            return;
            return;
        }
        }
    }
    }
 
 
Line 450... Line 450...
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
u32  pex_board::core_bar0_read( u32 offset )
u32  pex_board::core_bar0_read( u32 offset )
{
{
    return bar0[offset];
    return bar0[2*offset];
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
void pex_board::core_bar0_write( u32 offset, u32 val )
void pex_board::core_bar0_write( u32 offset, u32 val )
{
{
    bar0[offset] = val;
    bar0[2*offset] = val;
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
u32  pex_board::core_bar1_read( u32 offset )
u32  pex_board::core_bar1_read( u32 offset )
{
{
    return bar1[offset];
    return bar1[2*offset];
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
void pex_board::core_bar1_write( u32 offset, u32 val )
void pex_board::core_bar1_write( u32 offset, u32 val )
Line 580... Line 580...
    return 0;
    return 0;
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
u32 pex_board::core_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, u32 blkNum, u32 isSysMem, u32 dir, u32 addr)
u32 pex_board::core_allocate_memory(int DmaChan,
 
                                    void** pBuf,
 
                                    u32 blkSize,
 
                                    u32 blkNum,
 
                                    u32 isSysMem,
 
                                    u32 dir,
 
                                    u32 addr,
 
                                    BRDstrm_Stub **pStub )
{
{
    m_DescrSize[DmaChan] = sizeof(AMB_MEM_DMA_CHANNEL) + (blkNum - 1) * sizeof(void*);
    m_DescrSize[DmaChan] = sizeof(AMB_MEM_DMA_CHANNEL) + (blkNum - 1) * sizeof(void*);
    m_Descr[DmaChan] = (AMB_MEM_DMA_CHANNEL*) new u8[m_DescrSize[DmaChan]];
    m_Descr[DmaChan] = (AMB_MEM_DMA_CHANNEL*) new u8[m_DescrSize[DmaChan]];
 
 
    m_Descr[DmaChan]->DmaChanNum = DmaChan;
    m_Descr[DmaChan]->DmaChanNum = DmaChan;
Line 642... Line 649...
 
 
        m_Descr[DmaChan]->pStub = StubAddress;
        m_Descr[DmaChan]->pStub = StubAddress;
    }
    }
 
 
    *pBuf = &m_Descr[DmaChan]->pBlock[0];
    *pBuf = &m_Descr[DmaChan]->pBlock[0];
 
    *pStub = (BRDstrm_Stub*)m_Descr[DmaChan]->pStub;
 
 
    return 0;
    return 0;
}
}
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------

powered by: WebSVN 2.1.0

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