URL
https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk
Subversion Repositories pcie_ds_dma
Compare Revisions
- This comparison shows the changes necessary to convert path
/pcie_ds_dma/trunk/soft/linux
- from Rev 5 to Rev 6
- ↔ Reverse comparison
Rev 5 → Rev 6
/application/adm_test/src/work/tf_teststrm.cpp
4,6 → 4,7
#include <fcntl.h> |
#include <pthread.h> |
#include <unistd.h> |
#include <math.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <pthread.h> |
10,7 → 11,6
#include "utypes.h" |
#include "tf_teststrm.h" |
#include "cl_ambpex.h" |
//#include "useful.h" |
|
#define BUFSIZEPKG 62 |
|
22,17 → 22,21
#define TRDIND_SPD_DATA 0x206 |
|
#define TRDIND_TESTSEQ 0x0C |
#define TRDIND_CHAN 0x10 |
#define TRDIND_FSRC 0x13 |
#define TRDIND_GAIN 0x15 |
#define TRDIND_CHAN 0x10 |
#define TRDIND_FSRC 0x13 |
#define TRDIND_GAIN 0x15 |
#define TRDIND_CONTROL1 0x17 |
#define TRDIND_DELAY_CTRL 0x1F |
|
//----------------------------------------------------------------------------- |
|
int GetTickCount(void) |
{ |
return time( NULL); |
} |
|
//----------------------------------------------------------------------------- |
|
TF_TestStrm::TF_TestStrm( char* fname, CL_AMBPEX *pex ) |
{ |
lc_status=0; |
53,12 → 57,17
isFirstCallStep=true; |
} |
|
//----------------------------------------------------------------------------- |
|
TF_TestStrm::~TF_TestStrm() |
{ |
pBrd->StreamDestroy( rd0.Strm ); |
//delete bufIsvi; bufIsvi=NULL; |
delete bufIsvi; |
bufIsvi=NULL; |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::Prepare( void ) |
{ |
PrepareAdm(); |
66,12 → 75,12
rd0.trd=trdNo; |
rd0.Strm=strmNo; |
pBrd->StreamInit( rd0.Strm, CntBuffer, SizeBuferOfBytes, rd0.trd, 1, isCycle, isSystem, isAgreeMode ); |
//pBrd->StreamInit( rd0.Strm, CntBuffer, SizeBuferOfBytes, rd0.trd, 2, isCycle, isSystem, isAgreeMode ); |
|
bufIsvi = new U32[SizeBlockOfWords*2]; |
//pBrd->StreamInit( strm, CntBuffer, SizeBuferOfBytes, rd0.trd, 1, 0, 0 ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::Start( void ) |
{ |
int res = pthread_attr_init(&attrThread_); |
111,35 → 120,47
} |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::Stop( void ) |
{ |
Terminate=1; |
lc_status=3; |
//BRDC_fprintf( stderr, "TF_TestStrm::Stop(): lc_status = %d\n", lc_status ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::Step( void ) |
{ |
rd0.testBuf.check_result( &rd0.BlockOk , &rd0.BlockError, NULL, NULL, NULL ); |
|
/* |
pkg_in.testBuf.check_result( &pkg_in.BlockOk , &pkg_in.BlockError, NULL, NULL, NULL ); |
rd0.testBuf.check_result( &rd0.BlockOk , &rd0.BlockError, NULL, NULL, NULL ); |
rd1.testBuf.check_result( &rd1.BlockOk , &rd1.BlockError, NULL, NULL, NULL ); |
*/ |
U32 status = pBrd->RegPeekDir( rd0.trd, 0 ) & 0xFFFF; |
|
rd0.testBuf.check_result( &rd0.BlockOk , &rd0.BlockError, NULL, NULL, NULL ); |
U32 cnt_rd=rd0.BlockRd; |
if( isRestart ) |
cnt_rd = cntRestart; |
|
//BRDC_fprintf( stderr, "%10s %10d %10d %10d %10d\n", "PACKAGE :", pkg_out.BlockWr, pkg_in.BlockRd, pkg_in.BlockOk, pkg_in.BlockError ); |
//BRDC_fprintf( stderr, "%10s %10d %10d %10d %10d\n", "FIFO_0 :", tr0.BlockWr, rd0.BlockRd, rd0.BlockOk, rd0.BlockError ); |
//BRDC_fprintf( stderr, "%10s %10d %10d %10d %10d\n", "FIFO_1 :", tr1.BlockWr, rd1.BlockRd, rd1.BlockOk, rd1.BlockError ); |
BRDC_fprintf( stderr, "%6s %3d %10d %10d %10d %10d %9.1f %10.1f 0x%.4X %d %4d\r", "TRD :", rd0.trd, rd0.BlockWr, cnt_rd, rd0.BlockOk, rd0.BlockError, rd0.VelocityCurrent, rd0.VelocityAvarage, status, IsviStatus, IsviCnt ); |
|
U32 status = pBrd->RegPeekDir( rd0.trd, 0 ) & 0xFFFF; |
BRDC_fprintf( stderr, "%6s %3d %10d %10d %10d %10d %9.1f %10.1f 0x%.4X %d %4d\r", "TRD :", rd0.trd, rd0.BlockWr, rd0.BlockRd, rd0.BlockOk, rd0.BlockError, rd0.VelocityCurrent, rd0.VelocityAvarage, status, IsviStatus, IsviCnt ); |
if( isSystemMonitor ) |
{ |
unsigned temp; |
float ty; |
pBrd->RegPokeInd( 0, 0x210, 0 ); |
temp = pBrd->RegPeekInd( 0, 0x211 ); |
|
temp >>=6; |
temp &= 0x3FF; |
ty = (temp*503.975)/1024-273.15; |
|
BRDC_fprintf( stderr, "%6s %3d %10.1f\n", "SYSMON", 0, ty ); |
|
|
} |
} |
|
//----------------------------------------------------------------------------- |
|
int TF_TestStrm::isComplete( void ) |
{ |
if( (lc_status==4) && (IsviStatus==100) ) |
147,12 → 168,11
return 0; |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::GetResult( void ) |
{ |
//if(pkg_in.BlockRd!=0 && pkg_in.BlockError!=0) |
// printf("%s\n", pkg_in.testBuf.report_word_error()); |
|
BRDC_fprintf( stderr, "\n\nResult of receiving data from tetrade %d \n", trdNo ); |
BRDC_fprintf( stderr, "\n\nResult of receiving data from trd %d \n", trdNo ); |
if(rd0.BlockRd!=0 && rd0.BlockError!=0) |
printf("%s\n", rd0.testBuf.report_word_error()); |
|
159,6 → 179,8
BRDC_fprintf( stderr, "\n\n" ); |
} |
|
//----------------------------------------------------------------------------- |
|
void* TF_TestStrm::ThreadFunc( void* lpvThreadParm ) |
{ |
TF_TestStrm *test=(TF_TestStrm*)lpvThreadParm; |
169,6 → 191,8
return (void*)ret; |
} |
|
//----------------------------------------------------------------------------- |
|
void* TF_TestStrm::ThreadFuncIsvi( void* lpvThreadParm ) |
{ |
TF_TestStrm *test=(TF_TestStrm*)lpvThreadParm; |
181,17 → 205,20
return (void*)ret; |
} |
|
//----------------------------------------------------------------------------- |
|
//! Установка параметров по умолчанию |
void TF_TestStrm::SetDefault( void ) |
{ |
int ii=0; |
|
array_cfg[ii++]=STR_CFG( 0, "CntBuffer", "16", (U32*)&CntBuffer, "Stream buffers number" ); |
array_cfg[ii++]=STR_CFG( 0, "CntBuffer", "16", (U32*)&CntBuffer, "Stream buffers number" ); |
array_cfg[ii++]=STR_CFG( 0, "CntBlockInBuffer", "512", (U32*)&CntBlockInBuffer, "Blocks in buffer" ); |
array_cfg[ii++]=STR_CFG( 0, "SizeBlockOfWords", "2048", (U32*)&SizeBlockOfWords, "Block size (in words)" ); |
array_cfg[ii++]=STR_CFG( 0, "isCycle", "1", (U32*)&isCycle, "1 - Stream working in cycle mode" ); |
array_cfg[ii++]=STR_CFG( 0, "isSystem", "1", (U32*)&isSystem, "1 - system memory allocation" ); |
array_cfg[ii++]=STR_CFG( 0, "isAgreeMode", "0", (U32*)&isAgreeMode, "1 - adjust mode" ); |
array_cfg[ii++]=STR_CFG( 0, "isCycle", "1", (U32*)&isCycle, "1 - Stream working in cycle mode" ); |
array_cfg[ii++]=STR_CFG( 0, "isSystem", "1", (U32*)&isSystem, "1 - system memory allocation" ); |
array_cfg[ii++]=STR_CFG( 0, "isAgreeMode", "0", (U32*)&isAgreeMode, "1 - adjust mode" ); |
array_cfg[ii++]=STR_CFG( 0, "isRestart", "0", (U32*)&isRestart, "1 - Перезапуск АЦП" ); |
|
array_cfg[ii++]=STR_CFG( 0, "trdNo", "4", (U32*)&trdNo, "Номер тетрады" ); |
array_cfg[ii++]=STR_CFG( 0, "strmNo", "0", (U32*)&strmNo, "Номер стрма" ); |
198,18 → 225,13
array_cfg[ii++]=STR_CFG( 0, "isTest", "0", (U32*)&isTest, "0 - нет, 1 - проверка псевдослучайной последовательности, 2 - проверка тестовой последовательности" ); |
array_cfg[ii++]=STR_CFG( 0, "isMainTest", "0", (U32*)&isMainTest, "1 - включение режима тестирования в тетраде MAIN" ); |
|
array_cfg[ii++]=STR_CFG( 0, "lowRange", "0", (U32*)&lowRange, "нижний уровень спектра" ); |
array_cfg[ii++]=STR_CFG( 0, "topRange", "0", (U32*)&topRange, "верхний уровень спектра" ); |
array_cfg[ii++]=STR_CFG( 0, "fftSize", "2048", (U32*)&fftSize, "размер БПФ" ); |
|
|
fnameAdmReg=NULL; |
array_cfg[ii++]=STR_CFG( 2, "AdmReg", "adcreg.ini", (U32*)&fnameAdmReg, "имя файла регистров" ); |
array_cfg[ii++]=STR_CFG( 2, "AdmReg", "adcreg.ini", (U32*)&fnameAdmReg, "имя файла регистров" ); |
|
array_cfg[ii++]=STR_CFG( 0, "isAdmReg", "0", (U32*)&isAdmReg, "1 - разрешение записи регистров из файла AdmReg" ); |
|
fnameAdmReg2=NULL; |
array_cfg[ii++]=STR_CFG( 2, "AdmReg2", "adcreg2.ini", (U32*)&fnameAdmReg2, "имя файла регистров (выполняется после старта стрима)" ); |
array_cfg[ii++]=STR_CFG( 2, "AdmReg2", "adcreg2.ini", (U32*)&fnameAdmReg2, "имя файла регистров (выполняется после старта стрима)" ); |
|
array_cfg[ii++]=STR_CFG( 0, "isAdmReg2", "0", (U32*)&isAdmReg2, "1 - разрешение записи регистров из файла AdmReg2" ); |
|
218,9 → 240,8
|
array_cfg[ii++]=STR_CFG( 0, "ISVI_HEADER", "0", (U32*)&IsviHeaderMode, "режим формирования суффикса ISVI, 0 - нет, 1 - DDC, 2 - ADC" ); |
|
array_cfg[ii++]=STR_CFG( 0, "FifoRdy", "0", (U32*)&isFifoRdy, "1 - генератор тестовой последовательности анализирует флаг готовности FIFO" ); |
|
array_cfg[ii++]=STR_CFG( 0, "FifoRdy", "0", (U32*)&isFifoRdy, "1 - генератор тестовой последовательности анализирует флаг готовности FIFO" ); |
|
array_cfg[ii++]=STR_CFG( 0, "Cnt1", "0", (U32*)&Cnt1, "Число тактов записи в FIFO, 0 - постоянная запись в FIFO" ); |
|
array_cfg[ii++]=STR_CFG( 0, "Cnt2", "0", (U32*)&Cnt2, "Число тактов паузы при записи в FIFO" ); |
231,24 → 252,22
|
array_cfg[ii++]=STR_CFG( 0, "isTestCtrl", "0", (U32*)&isTestCtrl, "1 - подготовка тетрады TEST_CTRL" ); |
|
array_cfg[ii++]=STR_CFG( 0, "TestSeq", "0", (U32*)&TestSeq, "Значение регистра TEST_SEQ" ); |
|
array_cfg[ii++]=STR_CFG( 0, "TestSeq", "0", (U32*)&TestSeq, "Значение регистра TEST_SEQ" ); |
|
max_item=ii; |
|
{ |
char str[1024]; |
char str[1024]; |
for( unsigned ii=0; ii<max_item; ii++ ) |
{ |
{ |
sprintf( str, "%s %s", array_cfg[ii].name, array_cfg[ii].def ); |
GetParamFromStr( str ); |
} |
|
|
} |
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
//! Расчёт параметров |
void TF_TestStrm::CalculateParams( void ) |
{ |
259,6 → 278,8
ShowParam(); |
} |
|
//----------------------------------------------------------------------------- |
|
//! Отображение параметров |
void TF_TestStrm::ShowParam( void ) |
{ |
265,26 → 286,14
TF_WorkParam::ShowParam(); |
|
BRDC_fprintf( stderr, "Total stream buffer size: %d MB\n\n", SizeStreamOfBytes/(1024*1024) ); |
|
} |
|
//----------------------------------------------------------------------------- |
|
U32 TF_TestStrm::Execute( void ) |
{ |
rd0.testBuf.buf_check_start( 32, 64 ); |
|
//U32 *buffer = pBrd->StreamGetBufByNum(rd0.Strm,0); |
|
//fprintf(stderr, "%s(): buffer = %p\n", __FUNCTION__, buffer); |
//getchar(); |
/* |
for(u32 i=0; i<SizeBlockOfWords; i++) { |
buffer[i] = 0x1; |
} |
*/ |
//Sleep( 100 ); |
//pBrd->RegPokeInd( 4, 0, 0x2038 ); |
|
pBrd->RegPokeInd( rd0.trd, 0, 0x2010 ); |
pBrd->StreamStart( rd0.Strm ); |
pBrd->RegPokeInd( rd0.trd, 0, 0x2038 ); |
293,8 → 302,9
StartTestCtrl(); |
} |
|
if( isAdmReg2 ) |
if( isAdmReg2 ) { |
PrepareAdmReg( fnameAdmReg2 ); |
} |
|
pBrd->RegPokeInd( 4, 0, 0x2038 ); |
|
309,8 → 319,8
} |
|
ReceiveData( &rd0 ); |
//Sleep( 100 ); |
} |
|
pBrd->RegPokeInd( rd0.trd, 0, 2 ); |
Sleep( 200 ); |
|
318,12 → 328,14
Sleep( 10 ); |
|
lc_status=4; |
|
//BRDC_fprintf( stderr, "TF_TestStrm::Execute(): lc_status = %d\n", lc_status ); |
|
return 1; |
} |
|
//----------------------------------------------------------------------------- |
|
|
|
void TF_TestStrm::ReceiveData( ParamExchange *pr ) |
{ |
U32 *ptr; |
335,10 → 347,6
int ret; |
int kk; |
|
//pr->BlockRd++; |
//Sleep( 10 ); |
//return; |
|
for( kk=0; kk<16; kk++ ) |
{ |
ret=pBrd->StreamGetBuf( pr->Strm, &ptr ); |
345,35 → 353,37
if( ret ) |
{ // Проверка буфера стрима |
|
for( unsigned ii=0; ii<CntBlockInBuffer; ii++ ) |
{ |
ptrBlock=ptr+ii*SizeBlockOfWords; |
if( isIsvi ) |
IsviStep( ptrBlock ); |
for( unsigned ii=0; ii<CntBlockInBuffer; ii++ ) |
{ |
ptrBlock=ptr+ii*SizeBlockOfWords; |
if( isIsvi ) |
IsviStep( ptrBlock ); |
|
if( 1==isTest ) |
pr->testBuf.buf_check_psd( ptrBlock, SizeBlockOfWords ); |
//int a=0; |
else if( 2==isTest ) |
pr->testBuf.buf_check( ptrBlock, pr->BlockRd, SizeBlockOfWords, BlockMode ); |
else if( 4==isTest ) |
pr->testBuf.buf_check_inv( ptrBlock, SizeBlockOfWords ); |
if( 1==isTest ) |
pr->testBuf.buf_check_psd( ptrBlock, SizeBlockOfWords ); |
//int a=0; |
else if( 2==isTest ) |
pr->testBuf.buf_check( ptrBlock, pr->BlockRd, SizeBlockOfWords, BlockMode ); |
else if( 4==isTest ) |
pr->testBuf.buf_check_inv( ptrBlock, SizeBlockOfWords ); |
|
pr->BlockRd++; |
} |
//if( isAgreeMode ) |
//{ |
// pBrd->StreamGetBufDone( pr->Strm ); |
//} |
pr->BlockRd++; |
} |
if( isAgreeMode ) |
{ |
pBrd->StreamGetBufDone( pr->Strm ); |
} |
if( (1==isRestart) && (pr->BlockRd==(CntBuffer*CntBlockInBuffer) ) ) |
{ |
RestartAdc(); |
} |
|
} else |
{ |
//Sleep( 0 ); |
} else { |
|
pr->freeCycle++; |
break; |
} |
} |
//Sleep( 0 ); |
|
U32 currentTime = GetTickCount(); |
if( (currentTime - pr->time_last)>10 ) |
391,14 → 401,10
pr->BlockLast = pr->BlockRd; |
pr->freeCycleZ=pr->freeCycle; |
pr->freeCycle=0; |
|
// if(lowRange == 0) |
// pr->testBuf.buf_check_sine_show(); |
//pr->testBuf.buf_check_sine_calc_delta(); |
} |
//Sleep(1); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::PrepareAdm( void ) |
{ |
411,20 → 417,13
id_mod = pBrd->RegPeekInd( trd, 0x101 ); |
ver = pBrd->RegPeekInd( trd, 0x102 ); |
|
//pBrd->RegPokeInd( trd, 0, 0x2038 ); |
|
BRDC_fprintf( stderr, "\nTetrade %d ID: 0x%.2X MOD: %d VER: %d.%d \n\n", |
trd, id, id_mod, (ver>>8) & 0xFF, ver&0xFF ); |
trd, id, id_mod, (ver>>8) & 0xFF, ver&0xFF ); |
|
|
//if( fnameDDS ) |
// PrepareDDS(); |
|
|
if( isMainTest ) |
PrepareMain(); |
|
|
BlockMode = DataType <<8; |
BlockMode |= DataFix <<7; |
|
434,7 → 433,6
if( isAdmReg ) |
PrepareAdmReg( fnameAdmReg ); |
|
|
IsviStatus=0; |
IsviCnt=0; |
isIsvi=0; |
443,23 → 441,9
IsviStatus=1; |
isIsvi=1; |
} |
/* |
pBrd->RegPokeInd( trd, 25, 3 ); |
pBrd->RegPokeInd( trd, 16, 3 ); |
pBrd->RegPokeInd( trd, 0x13, 0); |
pBrd->RegPokeInd( trd, 28, 0 ); |
*/ |
//pBrd->RegPokeInd( trd, 0x1B, 0x100 ); |
|
// pBrd->RegPokeInd( trdSdram, 0, 1 ); |
|
|
|
} |
|
|
|
|
//----------------------------------------------------------------------------- |
//! Подготовка MAIN |
void TF_TestStrm::PrepareMain( void ) |
{ |
466,10 → 450,10
|
if( 4==isTest ) |
{ |
BRDC_fprintf( stderr, "В тетраде MAIN установлен режим формирования двоично-инверсной последовательности\n" ); |
BRDC_fprintf( stderr, "In tetrade MAIN set mode of binary-inversion sequence\n" ); |
} else |
{ |
BRDC_fprintf( stderr, "В тетраде MAIN установлен режим формирования псевдослучайной последовательности\n" ); |
BRDC_fprintf( stderr, "In tetrade MAIN set of pseudo-random mode sequence\n" ); |
pBrd->RegPokeInd( 0, 12, 1 ); // Регистр TEST_MODE[0]=1 - режим формирования псевдослучайной последовательности |
} |
pBrd->RegPokeInd( 0, 0, 2 ); // Сброс FIFO - перевод в начальное состояние |
478,6 → 462,8
Sleep( 1 ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::IsviStep( U32* ptr ) |
{ |
unsigned ii; |
488,6 → 474,8
} |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::WriteFlagSinc(int flg, int isNewParam) |
{ |
int fs = -1; |
503,10 → 491,15
} |
val[0] = flg; |
val[1] = isNewParam; |
write( fs, val, 8 ); |
int res = write( fs, val, 8 ); |
if(res < 0) { |
BRDC_fprintf( stderr, "Error write flag sync\r\n" ); |
} |
close( fs ); |
} |
|
//----------------------------------------------------------------------------- |
|
int TF_TestStrm::ReadFlagSinc(void) |
{ |
int fs = -1; |
520,12 → 513,17
fs = open( fname, O_RDWR|O_CREAT, 0666 ); |
Sleep( 10 ); |
} |
read( fs, &flg, 4 ); |
int res = read( fs, &flg, 4 ); |
if(res < 0) { |
BRDC_fprintf( stderr, "Error read flag sync\r\n" ); |
} |
close( fs ); |
|
return flg; |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::WriteDataFile( U32 *pBuf, U32 sizew ) |
{ |
char fname[256]; |
538,13 → 536,20
} |
|
|
write( fl, pBuf, sizew*4 ); |
int res = write( fl, pBuf, sizew*4 ); |
if(res < 0) { |
BRDC_fprintf( stderr, "Error write ISVI data\r\n" ); |
} |
|
write( fl, IsviHeaderStr, IsviHeaderLen ); |
res = write( fl, IsviHeaderStr, IsviHeaderLen ); |
if(res < 0) { |
BRDC_fprintf( stderr, "Error write ISVI header\r\n" ); |
} |
|
close( fl ); |
} |
|
//----------------------------------------------------------------------------- |
|
U32 TF_TestStrm::ExecuteIsvi( void ) |
{ |
559,32 → 564,32
switch( IsviStatus ) |
{ |
case 2: // Подготовка суффикса |
{ |
IsviHeaderStr[0]=0; |
/* |
switch( IsviHeaderMode ) |
{ |
case 1: SetFileHeaderDdc( SizeBlockOfWords, IsviHeaderStr ); break; |
case 2: SetFileHeaderAdc( SizeBlockOfWords, IsviHeaderStr ); break; |
} |
*/ |
IsviHeaderLen = 0; //strlen( IsviHeaderStr ); |
WriteFlagSinc(0,0); |
WriteDataFile( bufIsvi, SizeBlockOfWords ); |
WriteFlagSinc(0xffffffff,0xffffffff); |
{ |
IsviHeaderStr[0]=0; |
/* |
switch( IsviHeaderMode ) |
{ |
case 1: SetFileHeaderDdc( SizeBlockOfWords, IsviHeaderStr ); break; |
case 2: SetFileHeaderAdc( SizeBlockOfWords, IsviHeaderStr ); break; |
} |
*/ |
IsviHeaderLen = 0; //strlen( IsviHeaderStr ); |
WriteFlagSinc(0,0); |
WriteDataFile( bufIsvi, SizeBlockOfWords ); |
WriteFlagSinc(0xffffffff,0xffffffff); |
|
IsviCnt++; |
IsviStatus=3; |
} |
IsviCnt++; |
IsviStatus=3; |
} |
break; |
|
case 3: |
{ |
rr=ReadFlagSinc(); |
if( 0==rr ) |
IsviStatus=4; |
{ |
rr=ReadFlagSinc(); |
if( 0==rr ) |
IsviStatus=4; |
|
} |
} |
break; |
|
case 4: |
593,12 → 598,12
break; |
|
case 5: |
{ |
WriteDataFile( bufIsvi, SizeBlockOfWords ); |
WriteFlagSinc(0xffffffff,0 ); |
IsviStatus=3; |
IsviCnt++; |
} |
{ |
WriteDataFile( bufIsvi, SizeBlockOfWords ); |
WriteFlagSinc(0xffffffff,0 ); |
IsviStatus=3; |
IsviCnt++; |
} |
break; |
|
} |
609,9 → 614,9
return 0; |
} |
|
//----------------------------------------------------------------------------- |
|
#define TRD_CTRL 1 |
|
#define REG_MUX_CTRL 0x0F |
#define REG_GEN_CNT1 0x1A |
#define REG_GEN_CNT2 0x1B |
619,9 → 624,9
#define REG_GEN_SIZE 0x1F |
#define TRD_DIO_IN 6 |
#define TRD_CTRL 1 |
//#define TRD_DIO_IN |
|
//----------------------------------------------------------------------------- |
//! Подготовка TEST_CTRL |
|
void TF_TestStrm::PrepareTestCtrl( void ) |
{ |
BRDC_fprintf( stderr, "\nПодготовка тетрады TEST_CTRL\n" ); |
666,7 → 671,7
pBrd->RegPokeInd( TRD_CTRL, REG_GEN_CNT2, Cnt2 ); |
float sp=1907.348632812 * (Cnt1-1)/(Cnt1+Cnt2-2); |
BRDC_fprintf( stderr, "Установлено ограничение скорости формирования потока: %6.1f МБайт/с \r\n" |
"REG_CNT1=%d REGH_CNT2=%d \r\n", sp, Cnt1, Cnt2 ); |
"REG_CNT1=%d REGH_CNT2=%d \r\n", sp, Cnt1, Cnt2 ); |
if( block_mode&0x1000 ) |
{ |
BRDC_fprintf( stderr, "Установлен режим без ожидания готовности FIFO\r\n\r\n" ); |
679,12 → 684,11
pBrd->RegPokeInd( TRD_CTRL, REG_GEN_CNT1, 0 ); |
pBrd->RegPokeInd( TRD_CTRL, REG_GEN_CNT2, 0 ); |
BRDC_fprintf( stderr, "Установлено формирование потока на максимальной скорости: 1907 МБайт/с \r\n" |
"Установлено ожидание готовности FIFO \r\n\r\n" ); |
"Установлено ожидание готовности FIFO \r\n\r\n" ); |
} |
|
|
} |
|
//----------------------------------------------------------------------------- |
//! Запуск TestCtrl |
void TF_TestStrm::StartTestCtrl( void ) |
{ |
708,16 → 712,16
|
} |
|
|
//----------------------------------------------------------------------------- |
//! Запись регистров из файла |
void TF_TestStrm::PrepareAdmReg( char* fname ) |
{ |
BRDC_fprintf( stderr, "\nУстановка регистров из файла %s\r\n\n", fname ); |
BRDC_fprintf( stderr, "\nSetting up ADM registers from file: %s\r\n\n", fname ); |
|
FILE *in = fopen( fname, "rt" ); |
if( in==NULL ) |
{ |
throw( "Ошибка доступа к файлу " ); |
throw( "Error file access" ); |
} |
|
char str[256]; |
742,3 → 746,47
BRDC_fprintf( stderr, "\n\n" ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::RestartAdc( void ) |
{ |
pBrd->RegPokeInd( rd0.trd, 0, 2 ); |
Sleep( 100 ); |
|
pBrd->StreamStop( rd0.Strm ); |
Sleep( 100 ); |
|
pBrd->RegPokeInd( rd0.trd, 0, 0x2000 ); |
|
pBrd->StreamStart( rd0.Strm ); |
Sleep( 100 ); |
|
rd0.BlockRd=0; |
cntRestart++; |
|
pBrd->RegPokeInd( rd0.trd, 0, 0x2038 ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::RestartDac( void ) |
{ |
U32 trdDac = 5; |
|
pBrd->RegPokeInd( trdDac, 0, 2 ); |
Sleep( 100 ); |
} |
|
//----------------------------------------------------------------------------- |
|
void TF_TestStrm::PrepareDac( void ) |
{ |
U32 trdDac = 5; |
|
fprintf(stderr,"%s(): Start DAC\n", __FUNCTION__); |
pBrd->RegPokeInd( trdDac, 0x0, 0x0010 ); |
Sleep( 1 ); |
pBrd->RegPokeInd( trdDac, 0x0, 0x0030 ); |
} |
|
//----------------------------------------------------------------------------- |
/application/adm_test/src/work/tf_teststrm.h
5,8 → 5,8
|
class CL_AMBPEX; |
class TF_TestDDS; |
class TF_Emac; |
|
|
class TF_TestStrm : public TF_WorkParam, public TF_Test |
{ |
|
96,7 → 96,6
//! Отображение параметров |
virtual void ShowParam( void ); |
|
|
U32 Terminate; |
U32 BlockRd; |
U32 BlockOk; |
103,14 → 102,14
U32 BlockError; |
U32 TotalError; |
|
U32 CntBuffer; // Число буферов стрима |
U32 CntBuffer; // Число буферов стрима |
U32 CntBlockInBuffer; // Число блоков в буфере |
U32 SizeBlockOfWords; // Размер блока в словах |
U32 SizeBlockOfBytes; // Размер блока в байтах |
U32 SizeBuferOfBytes; // Размер буфера в байтах |
U32 SizeStreamOfBytes; // Общий размер буфера стрима |
U32 isCycle; // 1 - циклический режим работы стрима |
U32 isSystem; // 1 - системная память |
U32 isCycle; // 1 - циклический режим работы стрима |
U32 isSystem; // 1 - системная память |
U32 isAgreeMode; // 1 - согласованный режим |
|
U32 trdNo; // номер тетрады |
118,10 → 117,6
U32 isTest; // 1 - проверка псевдослучайной последовательности, 2 - проверка тестовой последовательности |
U32 isMainTest; // 1 - включение режима тестирования в тетараде MAIN |
|
U32 lowRange; |
U32 topRange; |
U32 fftSize; |
|
U32 isFifoRdy; // 1 - генератор тестовой последовательности анализирует флаг готовности FIFO |
U32 Cnt1; // Число тактов записи в FIFO, 0 - постоянная запись в FIFO |
U32 Cnt2; // Число тактов паузы при записи в FIFO |
158,35 → 153,29
U32 lc_status; |
float cpuFreq; |
|
ParamExchange rd0; |
ParamExchange rd0; |
|
|
|
//void SendPkg( ParamExchange *pr ); |
//void ReceivePkg( ParamExchange *pr ); |
//void SendData( ParamExchange *pr ); |
void ReceiveData( ParamExchange *pr ); |
|
U32 TestSeq; // Региср управления режимом формирования тестовой последовательности |
|
void RestartAdc( void ); |
|
U32 isRestart; // 1 - перезапуск сбора после завершения заполнения буфера стрима |
U32 cntRestart; // число перезапусков |
|
U32 isSystemMonitor; //!< 1 - чтение данных системного монитора |
|
private : |
|
bool isFirstCallStep; |
|
void PrepareAdm( void ); |
|
void PrepareAdmReg( char* fname ); |
|
|
//! Подготовка MAIN |
void PrepareAdc( void ); |
void PrepareDac( void ); |
void RestartDac(void); |
void PrepareMain( void ); |
|
//! Подготовка TEST_CTRL |
void PrepareTestCtrl( void ); |
|
//! Запуск TestCtrl |
void StartTestCtrl( void ); |
|
|
}; |
/application/adm_test/src/work/main.cpp
31,10 → 31,9
#include "tf_test.h" |
#include "tf_teststrm.h" |
#include "tf_teststrmout.h" |
//#include "useful.h" |
|
#define DEVICE_NAME "/dev/AMBPEXARM_DEVID0" |
//#define DEVICE_NAME "/dev/AMBPEX50" |
#define DEVICE_NAME "/dev/pexdrv0" |
|
CL_AMBPEX *pBrd = NULL; |
U32 isTwoTest=0; |
static volatile int exit_flag = 0; |
74,6 → 73,7
{ |
BRDC_fprintf( stderr, _BRDC("Module "DEVICE_NAME" successfuly opened\n") ); |
|
|
for( int trd=0; trd<8; trd++ ) |
pBrd->RegPokeInd( trd, 0, 1 ); |
|
85,6 → 85,7
pBrd->RegPokeInd( trd, 0, 0 ); |
|
|
|
} else |
{ |
BRDC_fprintf( stderr, _BRDC("Error open module "DEVICE_NAME": ret=0x%.8X\n"), ret ); |
119,51 → 120,37
|
//int key; |
int isFirstCallStep=1; |
int isStopped = 0; |
for( ; ; ) |
{ |
//if( kbhit() ) |
//{ |
//int key=getch(); |
if( exit_flag ) |
{ |
if( exit_flag ) |
{ |
if(!isStopped) { |
pTest->Stop(); |
if( pTest2 ) |
if( pTest2 ) { |
pTest2->Stop(); |
} |
BRDC_fprintf( stderr, _BRDC("\n\nCancel\n") ); |
isStopped = 1; |
} |
/* |
if( key=='i' ) |
{ |
pBrd->RegPokeInd( 4, TRDIND_DELAY_CTRL, 0x12 ); |
pBrd->RegPokeInd( 4, TRDIND_DELAY_CTRL, 0x10 ); |
g_DelayCnt--; BRDC_fprintf( stderr, "\n\ng_DelayCnt = %d ", g_DelayCnt ); |
} |
} |
|
if( key=='o' ) |
{ |
pBrd->RegPokeInd( 4, TRDIND_DELAY_CTRL, 0x13 ); |
pBrd->RegPokeInd( 4, TRDIND_DELAY_CTRL, 0x11 ); |
g_DelayCnt++; BRDC_fprintf( stderr, "\n\ng_DelayCnt = %d ", g_DelayCnt ); |
} |
*/ |
//} |
if( exit_flag ) |
{ |
if(isStopped) { |
|
ret=pTest->isComplete(); |
if( ret ) |
{ |
if( pTest2 ) |
{ |
ret=pTest2->isComplete(); |
if( ret ) |
break; |
} else |
{ |
break; |
if( pTest->isComplete() ) { |
|
if( pTest2 ) { |
if( pTest2->isComplete() ) |
break; |
} else { |
break; |
} |
} |
} |
|
} |
|
//SetConsoleCursorPosition(hConsoleOut, rCursorPosition); |
if( isFirstCallStep || isTwoTest ) |
{ |
|
184,18 → 171,14
if( isTwoTest ) |
BRDC_fprintf( stderr, "\n\n" ); |
|
Sleep( 400 ); |
Sleep( 1400 ); |
|
fflush( stdout ); |
|
if(exit_flag) |
break; |
} |
pTest->GetResult(); |
if( pTest2 ) |
pTest2->GetResult(); |
|
|
delete pTest; pTest=NULL; |
delete pTest2; pTest2=NULL; |
|
209,7 → 192,7
BRDC_fprintf( stderr, _BRDC("Неизвестная ошибка выполнения программы\n") ); |
} |
|
BRDC_fprintf( stderr, "\n Press any key\n" ); |
BRDC_fprintf( stderr, "Exit program\n" ); |
|
return 0; |
} |
/application/adm_test/src/Makefile
12,14 → 12,28
CC = $(CROSS_COMPILE)g++ |
LD = $(CROSS_COMPILE)g++ |
|
CFLAGS := -D__LINUX__ -O2 -Wall -I../../../driver/pexdrv -I../../../common/board -I../../../common/pex -I./work -I./utils |
LFLAGS := -Wl -ldl -lrt -lpthread |
SRCDIR := board pex work utils |
INCDIR := . \ |
../../../driver/pexdrv \ |
../../../common/board \ |
../../../common/pex \ |
../../../common/utils \ |
../../../common/dac \ |
../../../common/adc \ |
../../../common/dma |
|
INCLUDE := $(addprefix -I, $(INCDIR)) |
|
CFLAGS := -D__LINUX__ -O2 -Wall $(INCLUDE) |
LFLAGS := -Wl -ldl -lrt -lpthread -lm |
|
SRCFILE := $(wildcard *.cpp) |
SRCFILE += $(wildcard ../../../common/board/*.cpp) |
SRCFILE += $(wildcard ../../../common/pex/*.cpp) |
SRCFILE += $(wildcard ../../../common/board/*.cpp) |
SRCFILE += $(wildcard ./work/*.cpp) |
SRCFILE += $(wildcard ./utils/*.cpp) |
SRCFILE += $(wildcard ../../../common/utils/*.cpp) |
#SRCFILE += $(wildcard ../../../common/dma/*.cpp) |
#SRCFILE += $(wildcard ../../../common/adc/*.cpp) |
#SRCFILE += $(wildcard ../../../common/dac/*.cpp) |
SRCFILE += $(wildcard ./work/*.cpp) |
OBJFILE := $(patsubst %.cpp,%.o, $(SRCFILE)) |
|
$(TARGET_NAME): $(OBJFILE) |
/application/adm_test/bin/test_main.cfg
0,0 → 1,59
|
CntBuffer 8 ; число буферов стрима |
|
CntBlockInBuffer 1 ; Число блоков в буфере |
|
;SizeBlockOfWords 4096 ; Размер блока в словах 4KB |
SizeBlockOfWords 262144 ; Размер блока в словах 1MB |
;SizeBlockOfWords 1048576 ; Размер блока в словах 1MB |
;SizeBlockOfWords 4194304 ; Размер блока в словах 4MB |
|
isCycle 1 ; 1 - циклический режим работы стрима |
|
isAgreeMode 1 ; 1 - согласованный режим работы |
|
isSystem 1 ; 1 - системная память |
|
|
isMainTest 1 ; 1 - включение режима тестирования в тетраде MAIN |
|
isSdram 0 ; 1 - инициализация SDRAM |
|
trdNo 0 ; Номер тетрады |
|
strmNo 1 ; Номер стрима |
|
isDDC 0 ; 2 - АЦП, 1 - DDC |
|
ISVI_FILE data_main ; имя файла данных ISVI |
|
;ISVI_HEADER 2 ; 2 - установка параметров для АЦП, 1 - для DDC |
|
|
isTest 1 ; 0 - нет проверки |
; 1 - проверка псевдослучайной последовательности |
; 2 - проверка тестовой последовательности |
; 4 - проверка двоично-инверсной последовательности |
; 5 - проверка синусоидального сигнала с использованием БПФ и библиотеки IPP от Intel |
|
FifoRdy 1 ; 1 - генератор тестовой последовательности анализирует флаг готовности FIFO |
|
Cnt1 0 ; Число тактов записи в FIFO, 0 - постоянная запись в FIFO |
|
Cnt2 0 ; Число тактов паузы при записи в FIFO |
|
DataType 6 ; Тип данных при фиксированном типе блока, 6 - счётчик, 8 - псевдослучайная последовательность |
|
DataFix 1 ; 1 - фиксированный тип блока, 0 - данные в блоке записят от номера блока |
|
isTestCtrl 0 ; 1 - подготовка тетрады TEST_CTRL |
|
isCheckLvds 1 ; 1 - проверка LVDS_FPGA |
|
isEmac0 3 ; 1 - приём через EMAC0, 2 - передача через EMAC0, 3 - приём и передача через EMAC0 |
|
isEmac1 3 ; 1 - приём через EMAC1, 2 - передача через EMAC1, 3 - приём и передача через EMAC1 |
|
isSystemMonitor 1 ; 1 - чтение данных системного монитора |
|
isCheckInOutControl 1 ; 1 - проверка сигналов in_control, out_control |
/application/board_exam/main.cpp
1,6 → 1,6
|
#ifndef __PEX_H__ |
#include "pex_board.h" |
#ifndef __BOARD_H__ |
#include "board.h" |
#endif |
|
#include <cassert> |
10,6 → 10,7
#include <iomanip> |
#include <climits> |
#include <cstdio> |
#include <dlfcn.h> |
|
//----------------------------------------------------------------------------- |
|
16,58 → 17,136
using namespace std; |
|
//----------------------------------------------------------------------------- |
#define NUM_BLOCK 4 |
#define BLOCK_SIZE 0x1000 |
#define NUM_BLOCK 8 |
#define BLOCK_SIZE 0x10000 |
//----------------------------------------------------------------------------- |
|
int main(int argc, char *argv[]) |
{ |
if(argc == 1) { |
std::cerr << "usage: %s <device name>" << argv[0] << endl; |
if(argc != 3) { |
std::cerr << "usage: " << argv[0] << " <libname.so> </dev/devname>" << endl; |
return -1; |
} |
|
std ::cout << "Start testing device " << argv[1] << endl; |
|
char *libname = argv[1]; |
char *devname = argv[2]; |
int dmaChan = 0; |
void* pBuffers[NUM_BLOCK] = {NULL}; |
void* pBuffers[NUM_BLOCK] = {NULL,NULL,NULL,NULL}; |
void *hlib = NULL; |
board_factory factory = NULL; |
board *brd = NULL; |
u32 *buffer = NULL; |
|
board *brd = new pex_board(); |
brd->brd_open(argv[1]); |
std ::cout << "Loading library: " << libname << endl; |
|
hlib = dlopen(libname, RTLD_LAZY); |
if(!hlib) { |
fprintf(stderr, "%s\n", dlerror()); |
return -1; |
} |
|
factory = (board_factory)dlsym(hlib, "create_board"); |
if(!factory) { |
fprintf(stderr, "%s\n", dlerror()); |
dlclose(hlib); |
return -1; |
} |
|
std ::cout << "Start testing device " << devname << endl; |
|
brd = factory(); |
if(!brd) { |
dlclose(hlib); |
return -1; |
} |
|
if(brd->brd_open(devname) < 0) { |
|
delete brd; |
|
if(hlib) { |
int res = dlclose(hlib); |
if(res < 0) { |
fprintf(stderr, "%s\n", dlerror()); |
return -1; |
} |
} |
|
return -1; |
} |
|
brd->brd_init(); |
brd->brd_pld_info(); |
|
std::cout << "Reset FPGA..." << std::endl; |
brd->brd_reg_poke_ind(0,0,1); |
brd->brd_delay(100); |
brd->brd_reg_poke_ind(0,0,0); |
brd->brd_delay(100); |
|
std::cout << "Init FPGA..." << std::endl; |
for( int trd=0; trd<8; trd++ ) { |
brd->brd_reg_poke_ind( trd, 0, 1 ); |
} |
for( int trd=0; trd<8; trd++ ) { |
for( int ii=1; ii<32; ii++ ) { |
brd->brd_reg_poke_ind( trd, ii, 0 ); |
} |
} |
for( int trd=0; trd<8; trd++ ) { |
brd->brd_reg_poke_ind( trd, 0, 0 ); |
} |
|
std ::cout << "Press enter to allocate DMA memory..." << endl; |
getchar(); |
|
int DmaChan = 1; |
|
// Check BRDSHELL DMA interface |
BRDctrl_StreamCBufAlloc sSCA = { |
1, //dir |
1, |
1, |
NUM_BLOCK, |
BLOCK_SIZE, |
&pBuffers[0], |
pBuffers, |
NULL, |
}; |
|
brd->dma_alloc(dmaChan, &sSCA); |
|
brd->dma_set_local_addr(DmaChan, 0x1000); |
brd->dma_stop(DmaChan); |
brd->dma_reset_fifo(DmaChan); |
brd->dma_reset_fifo(DmaChan); |
|
std ::cout << "Press enter to start DMA channel..." << endl; |
getchar(); |
|
// fill data buffers |
for(int j=0; j<NUM_BLOCK; j++) { |
buffer = (u32*)pBuffers[j]; |
for(unsigned i=0; i<32; i++) { |
buffer[i] = 0xAA556677; |
} |
} |
|
brd->dma_start(dmaChan, 0); |
|
std ::cout << "Press enter to stop DMA channel..." << endl; |
getchar(); |
|
|
brd->dma_stop(dmaChan); |
|
std ::cout << "Press enter to view DMA data (buffer 0)..." << endl; |
getchar(); |
// show data buffers |
for(int j=0; j<NUM_BLOCK; j++) { |
|
u32 *buffer = (u32*)pBuffers[0]; |
for(unsigned i=0; i<BLOCK_SIZE/4; i+=128) { |
std::cout << hex << buffer[i] << " "; |
std ::cout << "DMA data buffer " << j << ":" << endl; |
buffer = (u32*)pBuffers[j]; |
for(unsigned i=0; i<32; i++) { |
std::cout << hex << buffer[i] << " "; |
} |
std ::cout << endl; |
} |
std::cout << dec << endl; |
|
75,19 → 154,18
getchar(); |
|
brd->dma_free_memory(dmaChan); |
/* |
for(int i=0; i<16; i++) |
std ::cout << "BAR0[" << i << "] = 0x" << hex << brd->brd_bar0_read(i) << dec << endl; |
|
fprintf(stderr, "Press enter to read BAR1...\n"); |
getchar(); |
|
for(int i=0; i<16; i++) |
std ::cout << "BAR1[" << i << "] = 0x" << hex << brd->brd_bar1_read(i) << dec << endl; |
*/ |
brd->brd_close(); |
|
delete brd; |
|
if(hlib) { |
int res = dlclose(hlib); |
if(res < 0) { |
fprintf(stderr, "%s\n", dlerror()); |
return -1; |
} |
} |
|
return 0; |
} |
/application/board_exam/Makefile
1,6 → 1,3
# |
#change this makefile for your target... |
# |
|
PHONY = clean |
TARGET_NAME = pex_board_test |
7,21 → 4,31
|
all: $(TARGET_NAME) |
|
ROOT_DIR = $(shell pwd) |
BINPATH := ../.. |
BINDIR := $(BINPATH)/bin |
LIBPATH := ../.. |
LIBDIR := $(LIBPATH)/lib |
|
CC = $(CROSS_COMPILE)g++ |
LD = $(CROSS_COMPILE)g++ |
CC := $(CROSS_COMPILE)g++ |
LD := $(CROSS_COMPILE)g++ |
|
CFLAGS := -D__LINUX__ -g -Wall -I../../driver/pexdrv -I../../common/board -I../../common/pex -I../adm_test/src/utils |
LFLAGS := -Wl |
SRCDIR := ../../common/board ../../common/pex |
#SRCFILE := $(wildcard *.cpp) $(wildcard $(SRCDIR)/*.cpp) |
SRCFILE := $(wildcard *.cpp) $(wildcard ../../common/board/*.cpp) |
SRCFILE += $(wildcard *.cpp) $(wildcard ../../common/pex/*.cpp) |
OBJFILE := $(patsubst %.cpp,%.o, $(SRCFILE)) |
INCDIR := . \ |
../../driver/pexdrv \ |
../../common/board \ |
../../common/utils |
|
$(TARGET_NAME): $(OBJFILE) |
$(LD) $(LFLAGS) $(notdir $^) -o $(TARGET_NAME) |
INCLUDE := $(addprefix -I, $(INCDIR)) |
|
#CFLAGS := -D__linux__ -D__VERBOSE__ -g -Wall $(INCLUDE) |
CFLAGS := -D__linux__ -O2 -Wall $(INCLUDE) |
LFLAGS := -Wl,-rpath $(LIBDIR) -L"$(LIBDIR)" -lboard -ldl -lpthread |
|
#EXTFILES := ../common/net/net_board.cpp |
#EXTFILES := ../common/net/netcmn.cpp |
|
$(TARGET_NAME): $(patsubst %.cpp,%.o, $(wildcard *.cpp)) $(EXTFILES) |
$(LD) -o $(TARGET_NAME) $(notdir $^) $(LFLAGS) |
cp $(TARGET_NAME) $(BINDIR) |
rm -f *.o *~ core |
|
%.o: %.cpp |
30,6 → 37,9
include $(wildcard *.d) |
|
|
test: |
@echo $(SRC) |
|
clean: |
rm -f *.o *~ core |
rm -f *.d *~ core |
39,7 → 49,3
rm -f *.o *~ core |
rm -f *.d *~ core |
rm -f $(TARGET_NAME) |
|
src: |
@echo $(SRCFILE) |
@echo $(OBJFILE) |
/application/wb_test/src/Makefile
12,12 → 12,28
CC = $(CROSS_COMPILE)g++ |
LD = $(CROSS_COMPILE)g++ |
|
CFLAGS := -D__LINUX__ -g -Wall -I./board -I./pex -I./work -I./utils |
LFLAGS := -Wl -ldl -lrt -lpthread |
SRCDIR := board pex work utils |
#SRCFILE := $(wildcard *.cpp) $(wildcard $(SRCDIR)/*.cpp) |
INCDIR := . \ |
../../../driver/pexdrv \ |
../../../common/board \ |
../../../common/pex \ |
../../../common/utils \ |
../../../common/dac \ |
../../../common/adc \ |
../../../common/dma |
|
INCLUDE := $(addprefix -I, $(INCDIR)) |
|
CFLAGS := -D__LINUX__ -O2 -Wall $(INCLUDE) |
LFLAGS := -Wl -ldl -lrt -lpthread -lm |
|
SRCFILE := $(wildcard *.cpp) |
SRCFILE += $(wildcard pex/*.cpp) $(wildcard board/*.cpp) $(wildcard work/*.cpp) $(wildcard utils/*.cpp) |
SRCFILE += $(wildcard ../../../common/board/*.cpp) |
SRCFILE += $(wildcard ../../../common/pex/*.cpp) |
SRCFILE += $(wildcard ../../../common/utils/*.cpp) |
#SRCFILE += $(wildcard ../../../common/dma/*.cpp) |
#SRCFILE += $(wildcard ../../../common/adc/*.cpp) |
#SRCFILE += $(wildcard ../../../common/dac/*.cpp) |
SRCFILE += $(wildcard ./work/*.cpp) |
OBJFILE := $(patsubst %.cpp,%.o, $(SRCFILE)) |
|
$(TARGET_NAME): $(OBJFILE) |
/common/utils/utypes.h
1,351 → 1,351
/*************************************************** |
* |
* UTYPES.H - define usefull types. |
* |
* (C) Instrumental Systems Corp. Ekkore, Dec. 1997-2001 |
* |
****************************************************/ |
|
|
#ifndef _UTYPES_H_ |
#define _UTYPES_H_ |
|
#include "utypes_linux.h" |
|
|
|
/************************************* |
* |
* Types for MSDOS |
*/ |
|
|
#ifdef __MSDOS__ |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned long UINT32; |
typedef signed long SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned long U32, *PU32; |
typedef signed long S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
//typedef enum{ FALSE=0, TRUE=1} BOOL; |
typedef unsigned char UCHAR; |
typedef unsigned short USHORT; |
typedef unsigned long ULONG; |
typedef unsigned long HANDLE; |
|
#endif /* __MSDOS__ */ |
|
|
/************************************* |
* |
* Types for Windows |
*/ |
|
|
#ifdef _WIN32 |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
#if _MSC_VER == 1200 |
#else |
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
#endif |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
#ifdef _WIN64 |
typedef wchar_t BRDCHAR; |
#define _BRDC(x) L ## x |
#define BRDC_strlen wcslen |
#define BRDC_strcpy wcscpy |
#define BRDC_strncpy wcsncpy |
#define BRDC_strcmp wcscmp |
#define BRDC_stricmp _wcsicmp |
#define BRDC_strnicmp wcsnicmp |
#define BRDC_strcat wcscat |
#define BRDC_strchr wcschr |
#define BRDC_strstr wcsstr |
#define BRDC_strtol wcstol |
#define BRDC_strtoul wcstoul |
#define BRDC_strtod wcstod |
#define BRDC_atol _wtol |
#define BRDC_atoi _wtoi |
#define BRDC_atoi64 _wtoi64 |
#define BRDC_atof _wtof |
#define BRDC_printf wprintf |
#define BRDC_fprintf fwprintf |
#define BRDC_sprintf swprintf |
#define BRDC_vsprintf vswprintf |
#define BRDC_sscanf swscanf |
#define BRDC_fopen _wfopen |
#define BRDC_sopen _wsopen |
#define BRDC_fgets fgetws |
#define BRDC_fputs fputws |
#define BRDC_getenv _wgetenv |
#define BRDC_main wmain |
#else |
typedef char BRDCHAR; |
#define _BRDC(x) x |
#define BRDC_strlen strlen |
#define BRDC_strcpy strcpy |
#define BRDC_strncpy strncpy |
#define BRDC_strcmp strcmp |
#define BRDC_stricmp _stricmp |
#define BRDC_strnicmp _strnicmp |
#define BRDC_strcat strcat |
#define BRDC_strchr strchr |
#define BRDC_strstr strstr |
#define BRDC_strtol strtol |
#define BRDC_strtoul strtoul |
#define BRDC_strtod strtod |
#define BRDC_atol atol |
#define BRDC_atoi atoi |
#define BRDC_atoi64 _atoi64 |
#define BRDC_atof atof |
#define BRDC_printf printf |
#define BRDC_fprintf fprintf |
#define BRDC_sprintf sprintf |
#define BRDC_vsprintf vsprintf |
#define BRDC_sscanf sscanf |
#define BRDC_fopen fopen |
#define BRDC_sopen sopen |
#define BRDC_fgets fgets |
#define BRDC_fputs fputs |
#define BRDC_getenv getenv |
#define BRDC_main main |
#endif |
|
#endif /* _WIN32 */ |
|
|
/************************************* |
* |
* Types for TMS320C3x/C4x |
*/ |
|
|
#if defined(_TMS320C30) || defined(_TMS320C40 ) |
|
/* |
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
*/ |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* _TMS320C30 || _TMS320C40 */ |
|
|
/************************************* |
* |
* Types for TMS320C6x |
*/ |
|
|
#ifdef _TMS320C6X |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT16 USHORT; |
typedef UINT08 UCHAR; |
|
#endif /* _TMS320C6X */ |
|
|
/************************************* |
* |
* Types for ADSP2106x |
*/ |
|
|
#if defined(__ADSP21060__) || defined(__ADSP21061__) || defined(__ADSP21062__)|| defined(__ADSP21065L__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSP2106x__ */ |
|
/************************************* |
* |
* Types for ADSP2116x |
*/ |
|
|
#if defined(__ADSP21160__) || defined(__ADSP21161__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSP2116x__ */ |
|
/************************************* |
* |
* Types for ADSP-TS101 |
*/ |
|
|
#if defined(__ADSPTS__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef long double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSPTS__ */ |
|
/************************************* |
* |
* Types for MC24 |
*/ |
|
#if defined(__GNUC__) && !defined(__linux__) |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned long UINT32; |
typedef signed long SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned long U32, *PU32; |
typedef signed long S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef unsigned char UCHAR; |
typedef unsigned short USHORT; |
typedef unsigned long ULONG; |
typedef unsigned long HANDLE; |
|
#endif /* __GNUC__ */ |
|
/************************************* |
* |
* Type Aliasing |
*/ |
|
typedef UINT32 Uns; |
|
/************************************************* |
* |
* Entry Point types |
* |
*/ |
#if !defined(WIN32) && !defined(__WIN32__) |
//#ifndef WIN32 |
#define FENTRY |
#define STDCALL |
#else |
#include <windows.h> |
#define DllImport __declspec( dllimport ) |
#define DllExport __declspec( dllexport ) |
#define FENTRY DllExport |
#define STDCALL __stdcall |
#define huge |
#endif // WIN32 |
|
|
#endif /* _UTYPES_H_ */ |
|
/* |
* End of File |
*/ |
|
|
|
/*************************************************** |
* |
* UTYPES.H - define usefull types. |
* |
* (C) Instrumental Systems Corp. Ekkore, Dec. 1997-2001 |
* |
****************************************************/ |
|
|
#ifndef _UTYPES_H_ |
#define _UTYPES_H_ |
|
#include "utypes_linux.h" |
|
|
|
/************************************* |
* |
* Types for MSDOS |
*/ |
|
|
#ifdef __MSDOS__ |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned long UINT32; |
typedef signed long SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned long U32, *PU32; |
typedef signed long S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
//typedef enum{ FALSE=0, TRUE=1} BOOL; |
typedef unsigned char UCHAR; |
typedef unsigned short USHORT; |
typedef unsigned long ULONG; |
typedef unsigned long HANDLE; |
|
#endif /* __MSDOS__ */ |
|
|
/************************************* |
* |
* Types for Windows |
*/ |
|
|
#ifdef _WIN32 |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
#if _MSC_VER == 1200 |
#else |
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
#endif |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
#ifdef _WIN64 |
typedef wchar_t BRDCHAR; |
#define _BRDC(x) L ## x |
#define BRDC_strlen wcslen |
#define BRDC_strcpy wcscpy |
#define BRDC_strncpy wcsncpy |
#define BRDC_strcmp wcscmp |
#define BRDC_stricmp _wcsicmp |
#define BRDC_strnicmp wcsnicmp |
#define BRDC_strcat wcscat |
#define BRDC_strchr wcschr |
#define BRDC_strstr wcsstr |
#define BRDC_strtol wcstol |
#define BRDC_strtoul wcstoul |
#define BRDC_strtod wcstod |
#define BRDC_atol _wtol |
#define BRDC_atoi _wtoi |
#define BRDC_atoi64 _wtoi64 |
#define BRDC_atof _wtof |
#define BRDC_printf wprintf |
#define BRDC_fprintf fwprintf |
#define BRDC_sprintf swprintf |
#define BRDC_vsprintf vswprintf |
#define BRDC_sscanf swscanf |
#define BRDC_fopen _wfopen |
#define BRDC_sopen _wsopen |
#define BRDC_fgets fgetws |
#define BRDC_fputs fputws |
#define BRDC_getenv _wgetenv |
#define BRDC_main wmain |
#else |
typedef char BRDCHAR; |
#define _BRDC(x) x |
#define BRDC_strlen strlen |
#define BRDC_strcpy strcpy |
#define BRDC_strncpy strncpy |
#define BRDC_strcmp strcmp |
#define BRDC_stricmp _stricmp |
#define BRDC_strnicmp _strnicmp |
#define BRDC_strcat strcat |
#define BRDC_strchr strchr |
#define BRDC_strstr strstr |
#define BRDC_strtol strtol |
#define BRDC_strtoul strtoul |
#define BRDC_strtod strtod |
#define BRDC_atol atol |
#define BRDC_atoi atoi |
#define BRDC_atoi64 _atoi64 |
#define BRDC_atof atof |
#define BRDC_printf printf |
#define BRDC_fprintf fprintf |
#define BRDC_sprintf sprintf |
#define BRDC_vsprintf vsprintf |
#define BRDC_sscanf sscanf |
#define BRDC_fopen fopen |
#define BRDC_sopen sopen |
#define BRDC_fgets fgets |
#define BRDC_fputs fputs |
#define BRDC_getenv getenv |
#define BRDC_main main |
#endif |
|
#endif /* _WIN32 */ |
|
|
/************************************* |
* |
* Types for TMS320C3x/C4x |
*/ |
|
|
#if defined(_TMS320C30) || defined(_TMS320C40 ) |
|
/* |
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
*/ |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* _TMS320C30 || _TMS320C40 */ |
|
|
/************************************* |
* |
* Types for TMS320C6x |
*/ |
|
|
#ifdef _TMS320C6X |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT16 USHORT; |
typedef UINT08 UCHAR; |
|
#endif /* _TMS320C6X */ |
|
|
/************************************* |
* |
* Types for ADSP2106x |
*/ |
|
|
#if defined(__ADSP21060__) || defined(__ADSP21061__) || defined(__ADSP21062__)|| defined(__ADSP21065L__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSP2106x__ */ |
|
/************************************* |
* |
* Types for ADSP2116x |
*/ |
|
|
#if defined(__ADSP21160__) || defined(__ADSP21161__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSP2116x__ */ |
|
/************************************* |
* |
* Types for ADSP-TS101 |
*/ |
|
|
#if defined(__ADSPTS__) |
|
typedef unsigned int UINT32; |
typedef signed int SINT32; |
|
typedef unsigned int U32, *PU32; |
typedef signed int S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef long double REAL64, *PREAL64; |
|
typedef UINT32 ULONG; |
typedef UINT32 USHORT; |
typedef UINT32 UCHAR; |
|
#endif /* __ADSPTS__ */ |
|
/************************************* |
* |
* Types for MC24 |
*/ |
|
#if defined(__GNUC__) && !defined(__linux__) |
|
typedef unsigned char UINT08; |
typedef signed char SINT08; |
typedef unsigned short UINT16; |
typedef signed short SINT16; |
typedef unsigned long UINT32; |
typedef signed long SINT32; |
|
typedef unsigned char U08, *PU08; |
typedef signed char S08, *PS08; |
typedef unsigned short U16, *PU16; |
typedef signed short S16, *PS16; |
typedef unsigned long U32, *PU32; |
typedef signed long S32, *PS32; |
|
typedef unsigned long long int U64, *PU64; |
typedef signed long long int S64, *PS64; |
|
typedef float REAL32, *PREAL32; |
typedef double REAL64, *PREAL64; |
|
typedef unsigned char UCHAR; |
typedef unsigned short USHORT; |
typedef unsigned long ULONG; |
typedef unsigned long HANDLE; |
|
#endif /* __GNUC__ */ |
|
/************************************* |
* |
* Type Aliasing |
*/ |
|
typedef UINT32 Uns; |
|
/************************************************* |
* |
* Entry Point types |
* |
*/ |
#if !defined(WIN32) && !defined(__WIN32__) |
//#ifndef WIN32 |
#define FENTRY |
#define STDCALL |
#else |
#include <windows.h> |
#define DllImport __declspec( dllimport ) |
#define DllExport __declspec( dllexport ) |
#define FENTRY DllExport |
#define STDCALL __stdcall |
#define huge |
#endif // WIN32 |
|
|
#endif /* _UTYPES_H_ */ |
|
/* |
* End of File |
*/ |
|
|
|
/common/utils/cl_ambpex.h
4,19 → 4,16
#define TF_CheckItem_CL_AMBPEXH |
|
#include "utypes.h" |
//#include "brd.h" |
//#include "time.h" |
#include "board.h" |
#include "time.h" |
#include "ctrlstrm.h" |
|
//#include <string.h> |
|
class board; |
|
class CL_AMBPEX |
{ |
|
|
public: |
// virtual char* GetName( void ); //!< Возвращает название класса |
|
//! Инициализация модуля |
virtual U32 init( void ); |
57,14 → 54,16
//! Чтение из прямого регистра |
U32 RegPeekDir( S32 trdNo, S32 rgnum ); |
|
CL_AMBPEX(const char* dev_name = NULL); |
|
CL_AMBPEX(const char *devname); |
virtual ~CL_AMBPEX(); |
|
|
private: |
|
//! Указатель на модуль |
board *m_pBoard; |
|
|
struct StreamParam |
{ |
U32 status; |
95,6 → 94,8
|
}; |
|
void Sleep( int ms ); |
void Sleep(int ms); |
|
//--------------------------------------------------------------------------- |
|
#endif |
/common/utils/ctrlstrm.h
171,7 → 171,7
BRDstrm_STAT_STOP = 2, |
BRDstrm_STAT_DESTROY = 3, |
BRDstrm_STAT_BREAK = 4 |
}; |
}; |
|
// |
// Constants: Direction of CBUF |
193,6 → 193,6
BRDstrm_DRQ_ALMOST = 0x0, // Almost empty = 1 for input FIFO, Almost full = 1 for output FIFO |
BRDstrm_DRQ_READY = 0x1, // Ready = 1 |
BRDstrm_DRQ_HALF = 0x2 // Half full = 0 for input FIFO, Half full = 1 for output FIFO |
}; |
}; |
|
#endif // _CTRL_STREAM_H |
/common/utils/tf_workparam.h
1,18 → 1,7
/** |
\file |
\brief Объявление класса TF_WorkParam |
|
\version 1 |
#ifndef __TF_WORK_PARAM_H__ |
#define __TF_WORK_PARAM_H__ |
|
|
*/ |
|
#pragma once |
|
|
|
|
|
//! Класс хранения параметров обработки |
/** |
|
38,8 → 27,8
struct STR_CFG { |
|
U32 is_float; //!< 1 - число с плавающей точкой; 0 - целое. |
const char *name; //!< Название параметра |
const char *def; //!< Значение по умолчанию |
const char *name; //!< Название параметра |
const char *def; //!< Значение по умолчанию |
U32 *ptr; //!< Указатель на переменную |
const char *cmt; //!< Комментарий для параметра |
|
101,3 → 90,5
//! Функция отображения параметров |
void log_out( const char* fmt, ... ); |
}; |
|
#endif //__TF_WORK_PARAM_H__ |
/common/utils/cl_wbpex.cpp
24,8 → 24,8
//! Инициализация модуля |
U32 CL_WBPEX::init( void ) |
{ |
S32 err; |
S32 num; |
//S32 err; |
//S32 num; |
|
/* |
if( g_hBrd<=0) |
41,7 → 41,7
board *brd = new pex_board(); |
m_pBoard = brd; |
|
brd->brd_open( "/dev/AMBPEX50" ); |
brd->brd_open( "/dev/pexdrv0" ); |
brd->brd_init(); |
brd->brd_board_info(); |
//brd->brd_pld_info(); |
53,7 → 53,7
//! Завершение работы с модулем |
void CL_WBPEX::cleanup( void ) |
{ |
S32 ret; |
//S32 ret; |
//ret=BRD_cleanup(); |
|
} |
195,8 → 195,8
if( pStrm->status!=1 ) |
return; |
|
S32 err; |
U32 val; |
//S32 err; |
//U32 val; |
|
//val=RegPeekInd( pStrm->trd, 0 ); |
//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_CBUF_STOP, NULL); |
205,7 → 205,7
pStrm->indexDma=-1; |
pStrm->indexPc=-1; |
|
val=pStrm->cycle; // 0 - однократный режим, 1 - циклический |
//val=pStrm->cycle; // 0 - однократный режим, 1 - циклический |
//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_CBUF_START, &val ); |
} |
|
214,9 → 214,9
if( strm>1 ) |
return; |
|
StreamParam *pStrm= m_streamParam+strm; |
//StreamParam *pStrm= m_streamParam+strm; |
|
S32 err; |
//S32 err; |
|
//RegPokeInd( pStrm->trd, 0, 2 ); |
|
259,7 → 259,7
if( strm>1 ) |
return -1; |
|
StreamParam *pStrm= m_streamParam+strm; |
//StreamParam *pStrm= m_streamParam+strm; |
|
|
|
273,8 → 273,8
return; |
|
StreamParam *pStrm= m_streamParam+strm; |
S32 err; |
static U32 err_code=0; |
//S32 err; |
//static U32 err_code=0; |
|
if( pStrm->agree_mode ) |
{ |
/common/utils/tf_testbufm2.cpp
1,10 → 1,16
/** \file |
\brief Функции формирования и проверки массива данных |
|
В файле содержится реализация класса TF_TestBufM2 - формирование и проверка массива данных. |
|
\author Dmitry Smekhov |
\version 1.0 |
|
|
*/ |
|
|
#include <stdio.h> |
#include <stdlib.h> |
#include <math.h> |
|
#include "utypes.h" |
#include "tf_testbufm2.h" |
33,16 → 39,13
{ |
// n%100 - тип блока |
U32 ii; |
//U32 di0, di1; |
//U32 cnt_err=0; |
|
__int64 *ptr=(__int64*)buf; |
U32 size64 = size/2; |
__int64 data_ex; |
//__int64 data_in; |
__int64 data_sig; |
__int64 data_ex1; |
__int64 data_ex2; |
__int64 data_ex = 0ULL; |
__int64 data_sig = 0ULL; |
__int64 data_ex1 = 0ULL; |
__int64 data_ex2 = 0ULL; |
|
data_sig = n; |
if( mode & 0x80 ) |
62,7 → 65,7
case 2: data_ex = 1; break; |
case 3: data_ex = ~1; break; |
case 4: data_ex = 1; data_ex2=0; break; |
case 5: data_ex = ~1; data_ex2=0xFFFFFFFFFFFFFFFFLL; break; |
case 5: data_ex = ~1; data_ex2=0xFFFFFFFFFFFFFFFFULL; break; |
case 6: |
case 7: data_ex = data_ex_cnt; break; |
case 8: |
79,7 → 82,7
//data_in=*ptr++; |
*ptr++=data_ex; |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
93,7 → 96,7
//data_in=*ptr++; |
*ptr++=(~data_ex); |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
106,7 → 109,7
*ptr++=~data_ex; |
|
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
128,7 → 131,7
*ptr++=data_ex1; |
if( flag ) |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
325,11 → 328,11
|
__int64 *ptr=(__int64*)buf; |
U32 size64 = size/2; |
__int64 data_ex; |
__int64 data_in; |
__int64 data_sig; |
__int64 data_ex1; |
__int64 data_ex2; |
__int64 data_ex = 0ULL; |
__int64 data_in = 0ULL; |
__int64 data_sig = 0ULL; |
__int64 data_ex1 = 0ULL; |
__int64 data_ex2 = 0ULL; |
|
data_sig = n; |
if( mode & 0x80 ) |
369,7 → 372,7
case 2: data_ex = 1; break; |
case 3: data_ex = ~1; break; |
case 4: data_ex = 1; data_ex2=0; break; |
case 5: data_ex = ~1; data_ex2=0xFFFFFFFFFFFFFFFFLL; break; |
case 5: data_ex = ~1; data_ex2=0xFFFFFFFFFFFFFFFFULL; break; |
case 6: |
case 7: data_ex = data_ex_cnt; break; |
case 8: |
390,7 → 393,7
//cnt_err=0; |
} |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
407,7 → 410,7
cnt_err+=check( 1, ~data_ex, data_in ); |
} |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
431,7 → 434,7
|
|
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
457,7 → 460,7
} |
if( flag ) |
{ |
U32 f= (data_ex & 0x8000000000000000LL) ? 1:0; |
U32 f= (data_ex & 0x8000000000000000ULL) ? 1:0; |
data_ex <<= 1; |
data_ex &=~1; |
data_ex |=f; |
590,7 → 593,7
Массив должен быть сформирован функцией buf_set или аналогичной |
При обнаружении ошибки в массив word_error записываются четыре числа: |
- номер массива |
- индекс в массиве |
- индекс в массивк |
- ожидаемые данные |
- полученные данные |
В массивы bit_error0 и bit_error1 заносится распределение ошибок по битам. |
616,7 → 619,6
__int64 data_ex; |
__int64 data_in; |
|
|
data_ex = data_ex_psd ; |
|
|
626,7 → 628,16
|
if( data_ex!=data_in ) |
{ |
cnt_err+=check( ii, data_ex, data_in ); |
if( word_cnt_error<max_cnt_error ) |
{ |
word_error[ word_cnt_error*4+0 ]=buf_current; |
word_error[ word_cnt_error*4+1 ]=ii; |
word_error[ word_cnt_error*4+2 ]=data_ex; |
word_error[ word_cnt_error*4+3 ]=data_in; |
} |
word_cnt_error++; |
cnt_err++; |
//cnt_err+=check( ii, data_ex, data_in ); |
data_ex=data_in; |
} |
|
637,6 → 648,7
f59 = data_ex >> 59; |
f0 = (f63 ^ f62 ^ f60 ^ f59)&1; |
*/ |
|
U32 data_h=data_ex>>32; |
U32 f63 = data_h >> 31; |
U32 f62 = data_h >> 30; |
643,6 → 655,7
U32 f60 = data_h >> 28; |
U32 f59 = data_h >> 27; |
U32 f0 = (f63 ^ f62 ^ f60 ^ f59)&1; |
|
//U32 data_l=data_ex; |
//U32 f31 = (data_l>>31) & 1; |
//data_l<<=1; |
680,7 → 693,59
|
} |
|
//! Проверка двоично-инверсной последовательности |
U32 TF_TestBufM2::buf_check_inv( U32 *buf, U32 size ) |
{ |
|
// n%100 - тип блока |
U32 ii; |
U32 cnt_err=0; |
|
__int64 *ptr=(__int64*)buf; |
U32 size64 = size/2; |
__int64 data_ex; |
__int64 data_in; |
|
register unsigned f0; |
|
|
data_ex = data_ex_inv ; |
|
|
for( ii=0; ii<size64; ii++ ) |
{ |
data_in=*ptr++; |
|
if( data_ex!=data_in ) |
{ |
cnt_err+=check( ii, data_ex, data_in ); |
//data_ex=data_in; |
} |
|
//data_h=data_ex>>32; f63 = data_h >> 31; f0 = f63^1; data_ex <<= 1; data_ex &= ~1; data_ex |=f0; |
f0 = ((data_ex >>63) & 1) ^1; data_ex <<= 1; data_ex &= ~1; data_ex |=f0; |
|
|
|
|
} |
|
data_ex_inv = data_ex; |
|
block_mode++; |
if( block_mode==10 ) |
block_mode=0; |
|
buf_current++; |
if (cnt_err==0) |
buf_cnt_ok++; |
else |
buf_cnt_error++; |
|
return cnt_err; |
|
} |
|
//! Начало проверки группы массивов |
/** Функция подготавливает параметры для проверки нескольких массивов. |
Обнуляются счётчики ошибок. |
764,10 → 829,11
|
char *ptr=str; |
int len; |
char bit[64], *ptr_bit; |
//char bit[64], *ptr_bit; |
U32 nb, na; |
__int64 dout, din; |
int size=0; |
//U32 mask; |
*ptr=0; |
int cnt=max_cnt_error; |
if( word_cnt_error<max_cnt_error ) |
777,7 → 843,7
na=word_error[ii*4+1]; |
dout=word_error[ii*4+2]; |
din=word_error[ii*4+3]; |
ptr_bit=bit; |
//ptr_bit=bit; |
/* |
mask=0x80000000; |
for( int jj=0; jj<32; jj++ ) { |
816,63 → 882,14
char* TF_TestBufM2::report_bit_error( void ) { |
|
char *ptr=str; |
//int len; |
//char bit[64], *ptr_bit; |
//U32 mask; |
*ptr=0; |
|
return str; |
} |
|
//! Проверка двоично-инверсной последовательности |
U32 TF_TestBufM2::buf_check_inv( U32 *buf, U32 size ) |
{ |
|
// n%100 - тип блока |
U32 ii; |
U32 cnt_err=0; |
//--------------------------------------------------------------------------- |
|
__int64 *ptr=(__int64*)buf; |
U32 size64 = size/2; |
__int64 data_ex; |
__int64 data_in; |
|
register unsigned f0; |
|
|
data_ex = data_ex_inv ; |
|
|
for( ii=0; ii<size64; ii++ ) |
{ |
data_in=*ptr++; |
|
if( data_ex!=data_in ) |
{ |
cnt_err+=check( ii, data_ex, data_in ); |
//data_ex=data_in; |
} |
|
//data_h=data_ex>>32; f63 = data_h >> 31; f0 = f63^1; data_ex <<= 1; data_ex &= ~1; data_ex |=f0; |
f0 = ((data_ex >>63) & 1) ^1; data_ex <<= 1; data_ex &= ~1; data_ex |=f0; |
|
|
|
|
} |
|
data_ex_inv = data_ex; |
|
block_mode++; |
if( block_mode==10 ) |
block_mode=0; |
|
buf_current++; |
if (cnt_err==0) |
buf_cnt_ok++; |
else |
buf_cnt_error++; |
|
return cnt_err; |
|
} |
|
|
//--------------------------------------------------------------------------- |
/common/utils/tf_testbufm2.h
12,7 → 12,6
#ifndef TF_TestBufM2H |
#define TF_TestBufM2H |
|
|
//! Проверка массива данных |
/** Класс содержит функции для проверки произвольных |
массивов. |
51,8 → 50,8
Начальное значение - 1 |
Слово формируется сдвигом на один разряд вправо. |
В младший разряд слова записывается значение x[63] xor x[62] xor x[60] xor x[59] |
|
|
|
Для режима счётчика и псевдослучайной последовательности начальное значение |
формируется при инициализации тестовой последовательности. |
Для остальных режимов - при инициализации проверки блока |
74,75 → 73,55
*/ |
class TF_TestBufM2 { |
|
U32 bit_error0[64]; //!< Число ошибок типа принят 0 |
U32 bit_error1[64]; //!< Число ошибок типа принят 1 |
U32 bit_error0[64]; //!< Число ошибок типа принят 0 |
U32 bit_error1[64]; //!< Число ошибок типа принят 1 |
|
U32 max_cnt_error; //!< Заданное максимальное число ошибок |
U32 max_bit_cnt; //!< Число бит в слове |
U32 buf_cnt_ok; //!< Число правильных массивов. |
U32 buf_cnt_error; //!< Число неправильных массивов. |
U32 word_cnt_error; //!< Число неправильных слов. |
U32 buf_current; //!< Номер текущего массива. |
__int64 word_error[4*32]; //!< Список ошибок |
U32 max_cnt_error; //!< Заданное максимальное число ошибок |
U32 max_bit_cnt; //!< Число бит в слове |
U32 buf_cnt_ok; //!< Число правильных массивов. |
U32 buf_cnt_error; //!< Число неправильных массивов. |
U32 word_cnt_error; //!< Число неправильных слов. |
U32 buf_current; //!< Номер текущего массива. |
__int64 word_error[4*32]; //!< Список ошибок |
|
char str[10240]; //!< Буфер сообщений |
U32 block_mode; //!< Тип блока |
__int64 data_ex_cnt; |
__int64 data_ex_noise; |
__int64 data_ex_psd; |
__int64 data_ex_inv; |
char str[10240]; //!< Буфер сообщений |
U32 block_mode; //!< Тип блока |
__int64 data_ex_cnt; |
__int64 data_ex_noise; |
__int64 data_ex_psd; |
__int64 data_ex_inv; |
|
public: |
|
TF_TestBufM2(); //!< Конструктор |
~TF_TestBufM2(); //!< Деструктор |
|
float *resData; |
int FFT_size; |
int numberOfSteps; |
int numberOfFFTSizeSteps; |
int m_chanMask; |
|
U32 lowRange; |
U32 topRange; |
U32 fftSize; |
//! Формирование массива |
void buf_set( U32 *buf, U32 n, U32 size, U32 mode ) ; |
|
inline U32 check( U32 index, __int64 d0, __int64 di0 ); |
|
public: |
//! Проверка массива |
U32 buf_check( U32 *buf, U32 n, U32 size, U32 mode );//, U32 *err, U32 size_err, U32 *bit_err, U32 bit_cnt ); |
|
TF_TestBufM2(); //!< Конструктор |
~TF_TestBufM2(); //!< Деструктор |
//! Начало проверки группы массивов |
void buf_check_start( U32 n_error, U32 bit_cnt ); |
|
//! Результаты проверки группы массивов |
U32 check_result( U32 *cnt_ok, U32 *cnt_error, U32 **error, U32 **bit0, U32 **bit1 ); |
|
//! Формирование массива |
void buf_set( U32 *buf, U32 n, U32 size, U32 mode ) ; |
//! Формирование отчёта по ошибкам |
char* report_word_error( void ); |
|
inline U32 check( U32 index, __int64 d0, __int64 di0 ); |
//! Формирование отчёта распределения ошибок по битам |
char* report_bit_error( void ); |
|
//! Проверка массива |
U32 buf_check( U32 *buf, U32 n, U32 size, U32 mode );//, U32 *err, U32 size_err, U32 *bit_err, U32 bit_cnt ); |
//! Проверка псевдослучайной последовательности |
U32 buf_check_psd( U32 *buf, U32 size ); |
|
//! Начало проверки группы массивов |
void buf_check_start( U32 n_error, U32 bit_cnt ); |
|
//! Результаты проверки группы массивов |
U32 check_result( U32 *cnt_ok, U32 *cnt_error, U32 **error, U32 **bit0, U32 **bit1 ); |
|
//! Формирование отчёта по ошибкам |
char* report_word_error( void ); |
|
//! Формирование отчёта распределения ошибок по битам |
char* report_bit_error( void ); |
|
//! Проверка псевдослучайной последовательности |
U32 buf_check_psd( U32 *buf, U32 size ); |
|
//! Проверка двоично-инверсной последовательности |
U32 buf_check_inv( U32 *buf, U32 size ); |
|
|
//! Проверка двоично-инверсной последовательности |
U32 buf_check_inv( U32 *buf, U32 size ); |
}; |
|
|
|
|
|
//--------------------------------------------------------------------------- |
#endif |
/common/utils/cl_ambpex.cpp
1,29 → 1,28
//--------------------------------------------------------------------------- |
|
#include <stdio.h> |
#include <stdint.h> |
#include <sys/select.h> |
|
#include "board.h" |
//#include "brderr.h" |
#include "ctrlstrm.h" |
//#include "ctrlreg.h" |
//#include "useful.h" |
//#include "CL_AMBPEX.h" |
|
#ifndef __PEX_BOARD_H__ |
#include "pex_board.h" |
#endif |
|
#ifndef __BOARD_H__ |
#include "board.h" |
#endif |
|
#include "cl_ambpex.h" |
#include "sys/select.h" |
//BRD_Handle g_hBrd=0; |
#include "ctrlstrm.h" |
#include "cl_ambpex.h" |
|
//--------------------------------------------------------------------------- |
|
void Sleep( int ms ); |
|
//----------------------------------------------------------------------------- |
//! Инициализация модуля |
U32 CL_AMBPEX::init( void ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
// сброс прошивки ПЛИС |
RegPokeInd( 0, 0, 1 ); |
Sleep( 100 ); |
33,21 → 32,25
return 0; |
} |
|
//----------------------------------------------------------------------------- |
//! Завершение работы с модулем |
void CL_AMBPEX::cleanup( void ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
} |
|
//----------------------------------------------------------------------------- |
//! Открываем модуль |
CL_AMBPEX::CL_AMBPEX(const char *devname) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
// Доступ к регистрам |
CL_AMBPEX::CL_AMBPEX(const char* dev_name) |
{ |
m_pBoard = new pex_board(); |
|
if(dev_name) { |
m_pBoard->brd_open(dev_name); |
if(devname) { |
m_pBoard->brd_open(devname); |
} else { |
m_pBoard->brd_open("/dev/AMBPEX50"); |
m_pBoard->brd_open("/dev/pexdrv0"); |
} |
|
m_pBoard->brd_init(); |
55,64 → 58,67
m_pBoard->brd_pld_info(); |
} |
|
//----------------------------------------------------------------------------- |
|
CL_AMBPEX::~CL_AMBPEX() |
{ |
if(m_pBoard) delete m_pBoard; |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
} |
|
//----------------------------------------------------------------------------- |
|
|
|
//=********************* RegPokeInd ******************* |
//=**************************************************** |
void CL_AMBPEX::RegPokeInd( S32 trdNo, S32 rgnum, U32 val ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
m_pBoard->brd_reg_poke_ind( trdNo, rgnum, val ); |
|
} |
|
//=********************* RegPeekInd ******************* |
//=**************************************************** |
//----------------------------------------------------------------------------- |
|
U32 CL_AMBPEX::RegPeekInd( S32 trdNo, S32 rgnum ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
U32 ret; |
ret=m_pBoard->brd_reg_peek_ind( trdNo, rgnum ); |
return ret; |
} |
|
//=********************* RegPokeDir ******************* |
//=**************************************************** |
//----------------------------------------------------------------------------- |
|
void CL_AMBPEX::RegPokeDir( S32 trdNo, S32 rgnum, U32 val ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
m_pBoard->brd_reg_poke_dir( trdNo, rgnum, val ); |
} |
|
//=********************* RegPeekDir ******************* |
//=**************************************************** |
//----------------------------------------------------------------------------- |
|
U32 CL_AMBPEX::RegPeekDir( S32 trdNo, S32 rgnum ) |
{ |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
U32 ret; |
ret=m_pBoard->brd_reg_peek_dir( trdNo, rgnum ); |
return ret; |
} |
|
//----------------------------------------------------------------------------- |
|
|
|
int CL_AMBPEX::StreamInit( U32 strm, U32 cnt_buf, U32 size_one_buf_of_bytes, U32 trd, U32 dir, U32 cycle, U32 system, U32 agree_mode ) |
{ |
if( strm>1 ) |
return 1; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
if( pStrm->status!=0 ) |
return 1; |
|
pStrm->cnt_buf = cnt_buf; |
pStrm->size_one_buf_of_bytes = size_one_buf_of_bytes; |
pStrm->trd = trd; |
pStrm->cycle = cycle; |
pStrm->system = system; |
pStrm->cnt_buf = cnt_buf; |
pStrm->size_one_buf_of_bytes = size_one_buf_of_bytes; |
pStrm->trd = trd; |
pStrm->cycle = cycle; |
pStrm->system = system; |
|
pStrm->indexDma=-1; |
pStrm->indexPc=-1; |
120,16 → 126,15
|
StreamDestroy( strm ); |
|
|
__int64 size=cnt_buf*(__int64)size_one_buf_of_bytes/(1024*1024); |
|
if( system ) |
{ |
if( system ) { |
|
BRDC_fprintf( stderr, _BRDC("Allocation memory: \r\n") |
_BRDC(" Type of block: system memory\r\n") |
_BRDC(" Block size: %lld MB\r\n"), size ); |
} else |
{ |
} else { |
|
BRDC_fprintf( stderr, _BRDC("Allocation memory: \r\n") |
_BRDC(" Type of block: userspace memory\r\n") |
_BRDC(" Block size: %lld MB (%dx%d MB)\r\n"), size, cnt_buf, size_one_buf_of_bytes/(1024*1024) ); |
145,6 → 150,11
}; |
|
u32 err = m_pBoard->dma_alloc( strm, &sSCA ); |
if(err != 0) { |
throw( "Error allocate stream memory\n" ); |
return -1; |
} |
|
pStrm->pStub=sSCA.pStub; |
if(!pStrm->pStub) { |
throw( "Error allocate stream memory\n" ); |
162,8 → 172,6
*/ |
m_pBoard->dma_set_local_addr( strm, trd ); |
|
//agree_mode = 1; |
|
// Перевод на согласованный режим работы |
if( agree_mode ) { |
|
175,9 → 183,9
BRDC_fprintf( stderr, _BRDC("Stream working in regular mode\n")); |
} |
|
m_pBoard->dma_stop(strm);//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_CBUF_STOP, NULL); |
m_pBoard->dma_reset_fifo(strm);//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_RESETFIFO, NULL ); |
m_pBoard->dma_reset_fifo(strm);//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_RESETFIFO, NULL ); |
m_pBoard->dma_stop(strm); |
m_pBoard->dma_reset_fifo(strm); |
m_pBoard->dma_reset_fifo(strm); |
|
pStrm->status=1; |
|
184,26 → 192,31
return 0; |
} |
|
//----------------------------------------------------------------------------- |
|
int CL_AMBPEX::StreamGetNextIndex( U32 strm, U32 index ) |
{ |
if( strm>1 ) |
return 0; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
int n=index+1; |
if( (U32)n>=pStrm->cnt_buf ) |
n=0; |
return n; |
|
} |
|
//----------------------------------------------------------------------------- |
|
void CL_AMBPEX::StreamDestroy( U32 strm ) |
{ |
S32 err; |
|
if( strm>1 ) |
return; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
if( pStrm->status==0 ) |
return; |
210,21 → 223,20
|
StreamStop( strm ); |
|
if( 1 ) |
{ |
BRDC_fprintf( stderr, _BRDC("\r\nStream free %.8X\r\n"), err ); |
// pStrm->hStream=0; |
} |
m_pBoard->dma_free_memory( strm ); |
|
pStrm->status=0; |
|
} |
|
//----------------------------------------------------------------------------- |
|
U32* CL_AMBPEX::StreamGetBufByNum( U32 strm, U32 numBuf ) |
{ |
if( strm>1 ) |
return NULL; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
if( pStrm->status!=1 ) |
return NULL; |
236,17 → 248,19
return ptr; |
} |
|
//----------------------------------------------------------------------------- |
|
void CL_AMBPEX::StreamStart( U32 strm ) |
{ |
|
if( strm>1 ) |
return; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
if( pStrm->status!=1 ) |
return; |
|
//S32 err; |
U32 val; |
|
val=RegPeekInd( pStrm->trd, 0 ); |
257,27 → 271,31
pStrm->indexPc=-1; |
|
val=pStrm->cycle; // 0 - однократный режим, 1 - циклический |
|
m_pBoard->dma_start(strm, val); |
} |
|
//----------------------------------------------------------------------------- |
|
void CL_AMBPEX::StreamStop( U32 strm ) |
{ |
if( strm>1 ) |
return; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
|
S32 err; |
|
RegPokeInd( pStrm->trd, 0, 2 ); |
|
m_pBoard->dma_stop(strm);//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_CBUF_STOP, NULL); |
m_pBoard->dma_reset_fifo(strm);//err = BRD_ctrl( pStrm->hStream, 0, BRDctrl_STREAM_RESETFIFO, NULL ); |
m_pBoard->dma_stop(strm); |
m_pBoard->dma_reset_fifo(strm); |
|
RegPokeInd( pStrm->trd, 0, 0 ); |
|
} |
|
//----------------------------------------------------------------------------- |
|
int CL_AMBPEX::StreamGetBuf( U32 strm, U32** ptr ) |
{ |
U32 *buf; |
288,6 → 306,7
|
StreamParam *pStrm= m_streamParam+strm; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
if( pStrm->indexPc==pStrm->indexDma ) |
{ |
304,11 → 323,15
return ret; |
} |
|
//----------------------------------------------------------------------------- |
|
int CL_AMBPEX::StreamGetIndexDma( U32 strm ) |
{ |
if( strm>1 ) |
return -1; |
|
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
StreamParam *pStrm= m_streamParam+strm; |
|
if(!pStrm->pStub) { |
323,9 → 346,11
return lastBlock; |
} |
|
//----------------------------------------------------------------------------- |
|
void CL_AMBPEX::StreamGetBufDone( U32 strm ) |
{ |
//fprintf(stderr, "%s()\n", __FUNCTION__); |
DEBUG_PRINT("CL_AMBPEX::%s()\n", __FUNCTION__); |
|
if( strm>1 ) |
return; |
344,6 → 369,7
} |
} |
|
//----------------------------------------------------------------------------- |
|
void Sleep( int ms ) |
{ |
353,7 → 379,4
select(0,NULL,NULL,NULL,&tv); |
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
/common/utils/tf_workparam.cpp
1,10 → 1,9
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <stdio.h> |
#include <stdarg.h> |
|
#include "utypes.h" |
//#include "useful.h" |
#include "tf_workparam.h" |
|
#ifdef _DEBUG |
13,10 → 12,8
static char THIS_FILE[] = __FILE__; |
#endif |
|
|
// |
|
|
TF_WorkParam::TF_WorkParam(void) |
{ |
|
24,8 → 21,6
memset( this, 0, sizeof( TF_WorkParam ) ); |
|
SetDefault(); |
|
|
} |
|
TF_WorkParam::~TF_WorkParam(void) |
68,55 → 63,13
} |
|
|
//ZeroMemory( this, sizeof( TF_WorkParam ) ); |
|
|
|
|
|
ii=0; |
/* |
array_cfg[ii++]=STR_CFG( 0, "RGG_SideObservation", "1", (U32*)&st.Nav_LR_Side, "борт наблюдения (правый +1, левый -1)" ); |
array_cfg[ii++]=STR_CFG( 1, "lambda", "0.0032", (U32*)&st.lambda, "длина волны (м)" ); |
array_cfg[ii++]=STR_CFG( 2, "RliFileName", "..\\gol\\bmp\\_A_4Kx16k.bmp", (U32*)&pRliFileName, "имя файла с изображением для режима иммитации РЛИ " ); |
array_cfg[ii++]=STR_CFG( 3, "SYNTH_OBZOR_cutDoppler", "1", (U32*)(&st.cutDoppler), "cutDoppler" ); |
*/ |
|
max_item=ii; |
|
|
/* |
|
{ |
if( pPathVega==NULL ) |
{ |
pPathVega = (char*)malloc( 1024 ); |
} |
|
int ret=GetEnvironmentVariableA( |
"VEGA", |
pPathVega, |
1020 |
); |
char buf[1024]; |
if( ret==0 ) |
sprintf( pPathVega, "c:\\vega" ); |
|
sprintf( buf, "%s\\temp\\obzor\\", pPathVega ); |
|
|
strcpy( st.output_dir, buf ); // директория файлов вычислений(server) |
strcpy( st.output_dir_loc, buf ); // директория файлов вычислений(client) |
|
strcpy( sk.output_dir, buf ); // директория файлов вычислений(server) |
strcpy( sk.output_dir_loc, buf ); // директория файлов вычислений(client) |
|
//free( pPathVega ); |
}; |
*/ |
{ |
char str[1024]; |
for( unsigned ii=0; ii<max_item; ii++ ) |
for( U32 ii=0; ii<max_item; ii++ ) |
{ |
sprintf( str, "%s %s", array_cfg[ii].name, array_cfg[ii].def ); |
GetParamFromStr( str ); |
137,12 → 90,10
|
in=BRDC_fopen( fname, _BRDC("rt") ); |
if( in==NULL ) { |
//log_out( "Не могу открыть файл конфигурации %s\r\n", fname ); |
BRDC_fprintf( stderr, _BRDC("Can't open configuration file: %s\r\n"), fname ); |
BRDC_printf( _BRDC("Can't open configuration file: %s\r\n"), fname ); |
return; |
} |
//log_out( "\r\nЧтение параметров из файла %s\r\n\r\n", fname ); |
BRDC_fprintf( stderr, _BRDC("\r\nReading parameters from file: %s\r\n\r\n"), fname ); |
BRDC_printf( _BRDC("\r\nRead parameters from file: %s\r\n\r\n"), fname ); |
|
char str[512]; |
|
155,7 → 106,6
} |
log_out( "\r\n" ); |
fclose( in ); |
|
} |
|
//! Получение параметра из строки |
171,12 → 121,10
if( strcmp( array_cfg[ii].name, name )==0 ) { |
if( array_cfg[ii].is_float==0 ) { |
sscanf( val, "%i", array_cfg[ii].ptr ); |
// scr.log_out( "%-20s %d\r\n", array_cfg[ii].name, *(array_cfg[ii].ptr) ); |
} else if( array_cfg[ii].is_float==1 ) { |
sscanf( val, "%g", (float*)array_cfg[ii].ptr ); |
// scr.log_out( "%-20s %g\r\n", array_cfg[ii].name, *((float*)(array_cfg[ii].ptr)) ); |
} else if( array_cfg[ii].is_float==2 ) { |
//*((CString*)array_cfg[ii].ptr)=val; |
|
{ |
|
STR_CFG *cfg=array_cfg+ii; |
186,9 → 134,8
if( ps!=NULL ) |
free( ps ); |
ps = (char*)malloc( 128 ); |
*(cfg->ptr)=((size_t)ps); |
*(cfg->ptr)=(U32)ps; |
sprintf( ps, "%s", val ); |
//scr.log_out("%-20s %s\r\n", array_cfg[ii].name, ps ); |
|
} |
} else if( array_cfg[ii].is_float==3 ) { |
197,10 → 144,8
sscanf( val, "%d", &v ); |
if( v ) { |
*p=true; |
//scr.log_out( "%-20s true\r\n", array_cfg[ii].name ); |
} else { |
*p=false; |
//scr.log_out( "%-20s false\r\n", array_cfg[ii].name ); |
} |
} |
break; |
224,7 → 169,7
char str[256]; |
int len; |
int total=0; |
unsigned ii; |
U32 ii; |
STR_CFG *cfg; |
|
*((U32*)ptr)=max_item; |
258,7 → 203,7
|
} |
len=strlen( str )+1; |
if( (total+len)<(int)max_size ) |
if( (total+len)<(S32)max_size ) |
{ |
strcpy( ptr+total, str ); |
total+=len; |
274,7 → 219,7
U32 len; |
U32 n; |
n=*((U32*)ptr); |
unsigned ii; |
U32 ii; |
int total=4; |
|
for( ii=0; ii<n; ii++ ) |
290,34 → 235,34
//! Отображение параметров |
void TF_WorkParam::ShowParam( void ) |
{ |
U32 ii; |
STR_CFG *item; |
log_out( "\r\n\r\n\r\nParameters value:\r\n\r\n" ); |
for( ii=0; ii<max_item; ii++ ) |
{ |
item=array_cfg+ii; |
if( item->is_float==2 ) |
{ |
U32 ii; |
STR_CFG *item; |
log_out( "\r\n\r\n\r\nParameters:\r\n\r\n" ); |
for( ii=0; ii<max_item; ii++ ) |
{ |
item=array_cfg+ii; |
if( item->is_float==2 ) |
{ |
|
char **ptr=(char**)item->ptr; |
char *ps=*ptr; |
log_out( "%s %s\r\n", item->name, ps ); |
} else if( item->is_float==0 ) |
{ |
U32 ps=*((U32*)item->ptr); |
log_out( "%s %d\r\n", item->name, ps ); |
} else if( item->is_float==1 ) |
{ |
float ps=*((float*)item->ptr); |
log_out( "%s %g\r\n", item->name, ps ); |
} else if( item->is_float==3 ) |
{ |
U32 ps=*((U32*)item->ptr); |
if( ps ) log_out( "%s %s\r\n", item->name, "true" ); |
else log_out( "%s %s\r\n", item->name, "false" ); |
} |
} |
log_out( "\r\n\r\n\r\n" ); |
char **ptr=(char**)item->ptr; |
char *ps=*ptr; |
log_out( "%s %s\r\n", item->name, ps ); |
} else if( item->is_float==0 ) |
{ |
U32 ps=*((U32*)item->ptr); |
log_out( "%s %d\r\n", item->name, ps ); |
} else if( item->is_float==1 ) |
{ |
float ps=*((float*)item->ptr); |
log_out( "%s %g\r\n", item->name, ps ); |
} else if( item->is_float==3 ) |
{ |
U32 ps=*((U32*)item->ptr); |
if( ps ) log_out( "%s %s\r\n", item->name, "true" ); |
else log_out( "%s %s\r\n", item->name, "false" ); |
} |
} |
log_out( "\r\n\r\n\r\n" ); |
|
} |
|
325,13 → 270,13
void TF_WorkParam::log_out( const char* format, ... ) |
{ |
|
char buffer[2048]; |
char buffer[2048]; |
|
va_list marker; |
va_start( marker, format ); |
vsprintf( buffer, format, marker ); |
va_end( marker ); |
va_list marker; |
va_start( marker, format ); |
vsprintf( buffer, format, marker ); |
va_end( marker ); |
|
BRDC_fprintf( stderr, "%s", buffer ); |
printf( "%s", buffer ); |
|
} |
/common/Mk.Rules
0,0 → 1,55
|
# |
# Detect operation system |
# |
|
#GPROF := -pg |
|
# |
# Setup common Makefile rules and defines |
# |
|
CC := $(CSTOOL_PREFIX)g++ |
LD := $(CSTOOL_PREFIX)g++ |
|
CFLAGS += -fPIC -Wall -g $(GPROF) |
|
%.o: %.cpp |
$(CC) $(CFLAGS) -c -MD $< |
|
%.o: %.c |
$(CC) $(CFLAGS) -c -MD $< |
|
include $(wildcard *.d) |
|
distclean: |
rm -f *.o *~ core |
rm -f *.d *~ core |
rm -f *.so |
rm -f *.0 |
|
clean: |
rm -f *.o *~ core |
rm -f *.d *~ core |
rm -f *.so |
rm -f *.0 |
|
SYSLIBDIR := /usr/local/lib/board |
|
# |
# в каталоге /etc/ld.so.conf.d/ |
# создать файл board.conf |
# в котором прописать путь к библиотекам |
# /usr/local/lib/board |
# и выполнить ldconfig -v -n |
# |
|
install: |
mkdir -p $(SYSLIBDIR) |
chmod 777 $(SYSLIBDIR) |
cp -af $(LIBNAME) $(SYSLIBDIR) |
ln -sf $(SYSLIBDIR)/$(LIBNAME) $(SYSLIBDIR)/$(SONAME) |
ln -sf $(SYSLIBDIR)/$(SONAME) $(SYSLIBDIR)/$(BASENAME) |
echo '/usr/local/lib/board' > /etc/ld.so.conf.d/board.conf |
/sbin/ldconfig |
|
/common/board/board.cpp
1,6 → 1,6
|
#ifndef __BOARD_H__ |
#include "board.h" |
#include "board.h" |
#endif |
|
//----------------------------------------------------------------------------- |
32,6 → 32,7
|
int board::brd_open(const char *name) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_open(name); |
} |
|
39,6 → 40,7
|
int board::brd_init() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_init(); |
} |
|
46,6 → 48,7
|
int board::brd_reset() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reset(); |
} |
|
53,6 → 56,7
|
int board::brd_close() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_close(); |
} |
|
60,6 → 64,7
|
int board::brd_load_dsp() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_load_dsp(); |
} |
|
67,6 → 72,7
|
int board::brd_load_pld() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_load_pld(); |
} |
|
74,6 → 80,7
|
int board::brd_board_info() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_board_info(); |
} |
|
81,6 → 88,7
|
int board::brd_pld_info() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_pld_info(); |
} |
|
88,10 → 96,18
|
int board::brd_resource() |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_resource(); |
} |
|
//----------------------------------------------------------------------------- |
|
void board::brd_delay(int ms) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
core_delay(ms); |
} |
|
/* |
std::vector<struct memory_block>* board::dma_alloc(u32 dmaChannel, u32 blockNumber, u32 blockSize) |
{ |
144,6 → 160,7
|
u32 board::brd_reg_peek_dir( u32 trd, u32 reg ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reg_peek_dir( trd, reg ); |
} |
|
151,6 → 168,7
|
u32 board::brd_reg_peek_ind( u32 trd, u32 reg ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reg_peek_ind( trd, reg ); |
} |
|
158,6 → 176,7
|
void board::brd_reg_poke_dir( u32 trd, u32 reg, u32 val ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reg_poke_dir( trd, reg, val ); |
} |
|
165,6 → 184,7
|
void board::brd_reg_poke_ind( u32 trd, u32 reg, u32 val ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reg_poke_ind( trd, reg, val ); |
} |
|
172,6 → 192,7
|
u32 board::brd_bar0_read( u32 offset ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_bar0_read( offset ); |
} |
|
179,6 → 200,7
|
void board::brd_bar0_write( u32 offset, u32 val ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_bar0_write( offset, val ); |
} |
|
186,6 → 208,7
|
u32 board::brd_bar1_read( u32 offset ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_bar1_read( offset ); |
} |
|
193,6 → 216,7
|
void board::brd_bar1_write( u32 offset, u32 val ) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_bar1_write(offset, val); |
} |
|
200,14 → 224,19
|
u32 board::dma_alloc(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_alloc(DmaChan, sSCA); |
} |
|
//----------------------------------------------------------------------------- |
|
u32 board::dma_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, u32 blkNum, u32 isSysMem, u32 dir, u32 addr) |
u32 board::dma_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, |
u32 blkNum, u32 isSysMem, u32 dir, |
u32 addr, BRDstrm_Stub **pStub) |
{ |
return core_allocate_memory(DmaChan, pBuf, blkSize, blkNum, isSysMem, dir, addr); |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_allocate_memory(DmaChan, pBuf, blkSize, |
blkNum, isSysMem, dir, addr, pStub); |
} |
|
//----------------------------------------------------------------------------- |
214,6 → 243,7
|
u32 board::dma_free_memory(int DmaChan) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_free_memory(DmaChan); |
} |
|
221,6 → 251,7
|
u32 board::dma_start(int DmaChan, int IsCycling) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_start_dma(DmaChan, IsCycling); |
} |
|
228,6 → 259,7
|
u32 board::dma_stop(int DmaChan) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_stop_dma(DmaChan); |
} |
|
235,6 → 267,7
|
u32 board::dma_state(int DmaChan, u32 msTimeout, int& state, u32& blkNum) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_state_dma(DmaChan, msTimeout, state, blkNum); |
} |
|
242,6 → 275,7
|
u32 board::dma_wait_buffer(int DmaChan, u32 msTimeout) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_wait_buffer(DmaChan, msTimeout); |
} |
|
249,6 → 283,7
|
u32 board::dma_wait_block(int DmaChan, u32 msTimeout) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_wait_block(DmaChan, msTimeout); |
} |
|
256,6 → 291,7
|
u32 board::dma_reset_fifo(int DmaChan) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_reset_fifo(DmaChan); |
} |
|
263,6 → 299,7
|
u32 board::dma_set_local_addr(int DmaChan, u32 addr) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_set_local_addr(DmaChan, addr); |
} |
|
270,6 → 307,7
|
u32 board::dma_adjust(int DmaChan, u32 mode) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_adjust(DmaChan, mode); |
} |
|
277,6 → 315,7
|
u32 board::dma_done(int DmaChan, u32 blockNumber) |
{ |
DEBUG_PRINT("%s()\n", __FUNCTION__); |
return core_done(DmaChan, blockNumber); |
} |
|
/common/board/brd_info.h
1,11 → 1,40
#ifndef _BRD_INFO_H_ |
#define _BRD_INFO_H_ |
|
#ifndef __BRD_INFO_H__ |
#define __BRD_INFO_H__ |
//----------------------------------------------------------------------------- |
// board configuration data structure |
|
#include <string> |
struct board_info { |
size_t PhysAddress[6]; |
void* VirtAddress[6]; |
size_t Size[6]; |
size_t InterruptLevel; |
size_t InterruptVector; |
unsigned short vendor_id; |
unsigned short device_id; |
}; |
/* |
//----------------------------------------------------------------------------- |
// memory block structure |
struct memory_block { |
size_t phys; |
void* virt; |
size_t size; |
}; |
|
struct board_info_t { |
std::string name; |
//----------------------------------------------------------------------------- |
// memory block structure |
struct memory_descriptor { |
size_t dma_channel; |
size_t total_blocks; |
struct memory_block *blocks; |
}; |
|
#endif //__BRD_INFO_H__ |
//----------------------------------------------------------------------------- |
// stub memory structure |
struct stub_descriptor { |
size_t dma_channel; |
struct memory_block stub; |
}; |
*/ |
#endif |
/common/board/board.h
23,6 → 23,13
#include "ctrlstrm.h" |
#endif |
|
#ifdef __VERBOSE__ |
#include <stdio.h> |
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, fmt, ## args) |
#else |
#define DEBUG_PRINT(fmt, args...) |
#endif |
|
class board { |
|
private: |
36,9 → 43,12
virtual int core_board_info() = 0; |
virtual int core_pld_info() = 0; |
virtual int core_resource() = 0; |
virtual void core_delay(int ms) = 0; |
|
virtual u32 core_alloc(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA) = 0; |
virtual u32 core_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, u32 blkNum, u32 isSysMem, u32 dir, u32 addr) = 0; |
virtual u32 core_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, |
u32 blkNum, u32 isSysMem, u32 dir, |
u32 addr, BRDstrm_Stub **pStub ) = 0; |
virtual u32 core_free_memory(int DmaChan) = 0; |
virtual u32 core_start_dma(int DmaChan, int IsCycling) = 0; |
virtual u32 core_stop_dma(int DmaChan) = 0; |
69,6 → 79,7
int brd_close(); |
int brd_load_dsp(); |
int brd_load_pld(); |
void brd_delay(int ms); |
|
int brd_board_info(); |
int brd_pld_info(); |
76,7 → 87,9
|
//! Методы управления каналами DMA BRDSHELL |
u32 dma_alloc(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA); |
u32 dma_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, u32 blkNum, u32 isSysMem, u32 dir, u32 addr); |
u32 dma_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, |
u32 blkNum, u32 isSysMem, |
u32 dir, u32 addr, BRDstrm_Stub **pStub); |
u32 dma_free_memory(int DmaChan); |
u32 dma_start(int DmaChan, int IsCycling); |
u32 dma_stop(int DmaChan); |
100,9 → 113,7
void brd_bar1_write( u32 offset, u32 val ); |
}; |
|
//#define RegPeekDir(trd, reg) brd_reg_peek_dir((trd), (reg)) |
//#define RegPeekInd(trd, reg) brd_reg_peek_ind((trd), (reg)); |
//#define RegPokeDir(trd, reg, val) brd_reg_poke_dir((trd), (reg), (val)); |
//#define RegPokeOnd(trd, reg, val) brd_reg_poke_ind((trd), (reg), (val)); |
//! Тип конструктора объектов |
typedef board* (*board_factory)(void); |
|
#endif //__BOARD_H__ |
/common/board/Makefile
0,0 → 1,29
# |
#change this makefile for your target... |
# |
|
BASENAME = libboard.so |
SONAME = $(BASENAME).0 |
LIBNAME = $(BASENAME).0.0 |
|
ROOT_DIR := $(shell pwd) |
LIBDIR := ../../lib |
|
SRC := $(wildcard *.cpp) |
SOURCE := $(SRC) |
OBJ_FILES := $(SOURCE:.cpp=.o) |
|
all: $(LIBNAME) |
|
CFLAGS += -I. -I../utils |
|
$(LIBNAME): $(OBJ_FILES) |
$(LD) -g -shared -rdynamic -Wl,-soname,$(SONAME) \ |
-o $(LIBNAME) $(notdir $(OBJ_FILES)) -ldl -lrt -lc -lpthread |
chmod 666 $(LIBNAME) |
ln -sf $(LIBNAME) $(SONAME) |
ln -sf $(SONAME) $(BASENAME) |
cp -vfa $(BASENAME) $(SONAME) $(LIBNAME) $(LIBDIR) |
rm *.o *.d |
|
include ../Mk.Rules |
/common/pex/dma_memory.cpp
File deleted
/common/pex/dma_memory.h
File deleted
/common/pex/pex_board.cpp
2,9 → 2,6
#ifndef __PEX_BOARD_H__ |
#include "pex_board.h" |
#endif |
#ifndef __DMA_MEMORY__H__ |
#include "dma_memory.h" |
#endif |
|
//----------------------------------------------------------------------------- |
|
33,7 → 30,7
fd = -1; |
bar0 = bar1 = NULL; |
memset(&bi, 0, sizeof(bi)); |
m_dma = new dma_memory(); |
//m_dma = new dma_memory(); |
} |
|
//----------------------------------------------------------------------------- |
40,7 → 37,7
|
pex_board::~pex_board() |
{ |
if(m_dma) delete m_dma; |
//if(m_dma) delete m_dma; |
core_close(); |
} |
|
161,21 → 158,21
// подготовим к работе ПЛИС ADM |
fprintf(stderr,"%s(): Prepare ADM PLD.\n", __FUNCTION__); |
core_block_write( 0, 8, 0); |
core_pause(100); // pause ~ 100 msec |
core_delay(100); // pause ~ 100 msec |
for(i = 0; i < 10; i++) |
{ |
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_pause(100); // pause ~ 100 msec |
core_delay(100); // pause ~ 100 msec |
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; |
if(temp) |
break; |
} |
core_block_write( 0, 8, 0xF ); |
core_pause(100); // pause ~ 100 msec |
core_delay(100); // pause ~ 100 msec |
|
return 0; |
} |
293,9 → 290,9
d5=core_reg_peek_ind( ii, 0x105 ); |
|
switch( d ) { |
case 1: str="TRD_MAIN "; break; |
case 2: str="TRD_BASE_DAC "; break; |
case 3: str="TRD_PIO_STD "; break; |
case 1: str="TRD_MAIN "; break; |
case 2: str="TRD_BASE_DAC "; break; |
case 3: str="TRD_PIO_STD "; break; |
case 0: str=" - "; break; |
case 0x47: str="SBSRAM_IN "; break; |
case 0x48: str="SBSRAM_OUT "; break; |
319,6 → 316,9
case 0x72: str="TRD_TS201 "; break; |
case 0x73: str="TRD_STREAM_IN "; 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; |
351,7 → 351,7
|
//----------------------------------------------------------------------------- |
|
void pex_board::core_pause(int ms) |
void pex_board::core_delay(int ms) |
{ |
struct timeval tv = {0, 0}; |
tv.tv_usec = 1000*ms; |
394,7 → 394,7
break; |
|
if( ii>10000 ) |
core_pause( 1 ); |
core_delay( 1 ); |
if( ii>20000 ) { |
return 0xFFFF; |
} |
439,7 → 439,7
break; |
|
if( ii>10000 ) |
core_pause( 1 ); |
core_delay( 1 ); |
if( ii>20000 ) { |
return; |
} |
452,7 → 452,7
|
u32 pex_board::core_bar0_read( u32 offset ) |
{ |
return bar0[offset]; |
return bar0[2*offset]; |
} |
|
//----------------------------------------------------------------------------- |
459,7 → 459,7
|
void pex_board::core_bar0_write( u32 offset, u32 val ) |
{ |
bar0[offset] = val; |
bar0[2*offset] = val; |
} |
|
//----------------------------------------------------------------------------- |
466,7 → 466,7
|
u32 pex_board::core_bar1_read( u32 offset ) |
{ |
return bar1[offset]; |
return bar1[2*offset]; |
} |
|
//----------------------------------------------------------------------------- |
582,7 → 582,14
|
//----------------------------------------------------------------------------- |
|
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_Descr[DmaChan] = (AMB_MEM_DMA_CHANNEL*) new u8[m_DescrSize[DmaChan]]; |
644,6 → 651,7
} |
|
*pBuf = &m_Descr[DmaChan]->pBlock[0]; |
*pStub = (BRDstrm_Stub*)m_Descr[DmaChan]->pStub; |
|
return 0; |
} |
/common/pex/factory.cpp
0,0 → 1,14
|
#include <iostream> |
#include <string> |
#include <istream> |
#include <fstream> |
#include <iomanip> |
|
#include "pex_board.h" |
#include "factory.h" |
|
BRD_API board* create_board() |
{ |
return new pex_board(); |
} |
/common/pex/pex_board.h
21,7 → 21,7
|
//----------------------------------------------------------------------------- |
|
class dma_memory; |
//class dma_memory; |
|
//----------------------------------------------------------------------------- |
#define MAX_NUMBER_OF_DMACHANNELS 4 |
36,7 → 36,7
struct board_info bi; |
void core_pause(int ms); |
|
dma_memory *m_dma; |
//dma_memory *m_dma; |
|
AMB_MEM_DMA_CHANNEL *m_Descr[MAX_NUMBER_OF_DMACHANNELS]; |
u32 m_DescrSize[MAX_NUMBER_OF_DMACHANNELS]; |
54,9 → 54,12
int core_board_info(); |
int core_pld_info(); |
int core_resource(); |
void core_delay(int ms); |
|
u32 core_alloc(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA); |
u32 core_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, u32 blkNum, u32 isSysMem, u32 dir, u32 addr); |
u32 core_allocate_memory(int DmaChan, void** pBuf, u32 blkSize, |
u32 blkNum, u32 isSysMem, u32 dir, |
u32 addr, BRDstrm_Stub **pStub); |
u32 core_free_memory(int DmaChan); |
u32 core_start_dma(int DmaChan, int IsCycling); |
u32 core_stop_dma(int DmaChan); |
/common/pex/factory.h
0,0 → 1,23
#ifndef FACTORY_H |
#define FACTORY_H |
|
#include "board.h" |
|
#ifdef WINDOWS |
#define BRD_API __declspec( dllexport ) |
#else |
#define BRD_API |
#endif |
|
#ifdef __cplusplus |
extern "C" { |
#endif |
|
BRD_API board* create_board(); |
|
#ifdef __cplusplus |
}; |
#endif |
|
|
#endif // FACTORY_H |
/common/pex/Makefile
0,0 → 1,45
# |
#change this makefile for your target... |
# |
|
BASENAME = libpex_board.so |
SONAME = $(BASENAME).0 |
LIBNAME = $(BASENAME).0.0 |
|
ROOT_DIR := $(shell pwd) |
LIBDIR := ../../lib |
|
CC := $(CROSS_COMPILE)g++ |
LD := $(CROSS_COMPILE)g++ |
|
INCDIR := . \ |
../../driver/pexdrv \ |
../board \ |
../utils \ |
../dma |
|
INCLUDE := $(addprefix -I, $(INCDIR)) |
|
CFLAGS := -D__LINUX__ -O2 -Wall $(INCLUDE) |
LFLAGS := -ldl -lrt -lpthread -lm |
|
SRCFILE := $(wildcard *.cpp) |
SRCFILE += $(wildcard ../board/*.cpp) |
#SRCFILE += $(wildcard ../dma/*.cpp) |
OBJFILE := $(patsubst %.cpp,%.o, $(SRCFILE)) |
|
all: $(LIBNAME) |
|
$(LIBNAME): $(OBJFILE) |
$(LD) -shared -rdynamic -Wl,-soname,$(SONAME) \ |
-o $(LIBNAME) $(notdir $(OBJFILE)) $(LFLAGS) |
chmod 666 $(LIBNAME) |
ln -sf $(LIBNAME) $(SONAME) |
ln -sf $(SONAME) $(BASENAME) |
cp -fa $(BASENAME) $(SONAME) $(LIBNAME) $(LIBDIR) |
rm *.o *.d |
|
include ../Mk.Rules |
|
src: |
echo $(SRCFILE) |
/exam/pex_test.cpp
15,6 → 15,8
#include <sys/mman.h> |
#include <fcntl.h> |
|
#include "utypes_linux.h" |
#include "brd_info.h" |
#include "pexioctl.h" |
#include "ambpexregs.h" |
|
/exam/Makefile
12,11 → 12,11
CC = $(CROSS_COMPILE)g++ |
LD = $(CROSS_COMPILE)g++ |
|
CFLAGS := -D__LINUX__ -g -Wall -I../driver/pexdrv -I../common/board |
CFLAGS := -D__LINUX__ -g -Wall -I../driver/pexdrv -I../common/board -I../common/utils |
LFLAGS = -Wl |
|
$(TARGET_NAME): $(patsubst %.cpp,%.o, $(wildcard *.cpp)) |
$(LD) $(LFLAGS) $(notdir $^) -o $(TARGET_NAME) |
$(LD) -o $(TARGET_NAME) $(notdir $^) $(LFLAGS) |
rm -f *.o *~ core |
|
%.o: %.cpp |
/driver/pexdrv/hardware.h
11,6 → 11,8
#define AMBPEX5_DEVID 0x5507 |
#define AMBPEXARM_DEVID 0x5702 |
#define AMBFMC106P_DEVID 0x550A |
#define AMBFMC114V_DEVID 0x550C |
#define AMBKU_SSCOS_DEVID 0x5703 |
|
//----------------------------------------------------------------------------- |
|
26,8 → 28,6
void WriteOperationReg(struct pex_device *brd, u32 RelativePort, u32 Value); |
u16 ReadOperationWordReg(struct pex_device *brd, u32 RelativePort); |
void WriteOperationWordReg(struct pex_device *brd, u32 RelativePort, u16 Value); |
u8 ReadOperationByteReg(struct pex_device *brd, u32 RelativePort); |
void WriteOperationByteReg(struct pex_device *brd, u32 RelativePort, u8 Value); |
u32 ReadAmbReg(struct pex_device *brd, u32 AdmNumber, u32 RelativePort); |
u32 ReadAmbMainReg(struct pex_device *brd, u32 RelativePort); |
void WriteAmbReg(struct pex_device *brd, u32 AdmNumber, u32 RelativePort, u32 Value); |
/driver/pexdrv/pexmodule.c
39,7 → 39,7
static LIST_HEAD(device_list); |
static int boards_count = 0; |
static struct mutex pex_mutex; |
int dbg_trace = 0; |
int dbg_trace = 1; |
int err_trace = 1; |
|
//----------------------------------------------------------------------------- |
473,6 → 473,18
.subvendor = PCI_ANY_ID, |
.subdevice = PCI_ANY_ID, |
}, |
{ |
.vendor = INSYS_VENDOR_ID, |
.device = AMBFMC114V_DEVID, |
.subvendor = PCI_ANY_ID, |
.subdevice = PCI_ANY_ID, |
}, |
{ |
.vendor = INSYS_VENDOR_ID, |
.device = AMBKU_SSCOS_DEVID, |
.subvendor = PCI_ANY_ID, |
.subdevice = PCI_ANY_ID, |
}, |
{ }, |
}; |
|
573,9 → 585,9
dbg_msg(dbg_trace, "%s(): Add cdev %d\n", __FUNCTION__, boards_count); |
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) |
brd->m_device = device_create(pex_class, NULL, brd->m_devno, "%s", brd->m_name); |
brd->m_device = device_create(pex_class, NULL, brd->m_devno, "%s%d", "pexdrv", boards_count); |
#else |
brd->m_device = device_create(pex_class, NULL, brd->m_devno, NULL, "%s", brd->m_name); |
brd->m_device = device_create(pex_class, NULL, brd->m_devno, NULL, "%s%d", "pexdrv", boards_count); |
#endif |
if(!brd->m_device ) { |
err_msg(err_trace, "%s(): Error create device for board: %s\n", __FUNCTION__, brd->m_name); |
643,6 → 655,7
{ |
struct list_head *pos, *n; |
struct pex_device *brd = NULL; |
int i = 0; |
|
dbg_msg(dbg_trace, "%s(): device_id = %x, vendor_id = %x\n", __FUNCTION__, dev->device, dev->vendor); |
|
658,6 → 671,12
dbg_msg(dbg_trace, "%s(): free_irq() - complete\n", __FUNCTION__); |
pex_remove_proc(brd->m_name); |
dbg_msg(dbg_trace, "%s(): pex_remove_proc() - complete\n", __FUNCTION__); |
for(i = 0; i < MAX_NUMBER_OF_DMACHANNELS; i++) { |
if(brd->m_DmaChannel[i]) { |
CDmaChannelDelete(brd->m_DmaChannel[i]); |
dbg_msg(dbg_trace, "%s(): free DMA channel %d - complete\n", __FUNCTION__, i); |
} |
} |
free_memory(brd); |
dbg_msg(dbg_trace, "%s(): free_memory() - complete\n", __FUNCTION__); |
device_destroy(pex_class, brd->m_devno); |
/driver/pexdrv/exam/pex_test.cpp
15,6 → 15,8
#include <sys/mman.h> |
#include <fcntl.h> |
|
#include "utypes_linux.h" |
#include "brd_info.h" |
#include "pexioctl.h" |
#include "ambpexregs.h" |
|
/driver/pexdrv/exam/Makefile
12,7 → 12,7
CC = $(CROSS_COMPILE)g++ |
LD = $(CROSS_COMPILE)g++ |
|
CFLAGS := -D__LINUX__ -g -Wall -I.. |
CFLAGS := -D__LINUX__ -g -Wall -I.. -I../../../common/utils -I../../../common/board |
LFLAGS = -Wl |
|
$(TARGET_NAME): $(patsubst %.cpp,%.o, $(wildcard *.cpp)) |
/driver/pexdrv/pexproc.c
19,7 → 19,7
|
void pex_register_proc( char *name, void *fptr, void *data ) |
{ |
create_proc_read_entry( name, 0, NULL, fptr, data ); |
create_proc_read_entry( name, 0, NULL, fptr, data ); |
} |
|
//-------------------------------------------------------------------- |
26,11 → 26,74
|
void pex_remove_proc( char *name ) |
{ |
remove_proc_entry( name, NULL ); |
remove_proc_entry( name, NULL ); |
} |
|
//-------------------------------------------------------------------- |
|
int pex_show_capabilities( char *buf, struct pex_device *brd ) |
{ |
int i = 0, res = -1; |
char *p = buf; |
u8 cap; |
u8 cap_id; |
|
p += sprintf(p,"\n" ); |
p += sprintf(p," Device capabilities\n" ); |
p += sprintf(p,"\n" ); |
|
res = pci_read_config_byte(brd->m_pci, 0x34, &cap); |
if(res < 0) { |
p += sprintf(p, " Error read capabilities pointer\n"); |
goto err_exit; |
} |
|
res = pci_read_config_byte(brd->m_pci, cap, &cap_id); |
if(res < 0) { |
p += sprintf(p, " Error read capabilities id\n"); |
goto err_exit; |
} |
|
if(cap_id != 0x10) { //not PCI Express capabilities |
|
res = pci_read_config_byte(brd->m_pci, cap+1, &cap); |
if(res < 0) { |
p += sprintf(p, " Error read capabilities id\n"); |
goto err_exit; |
} |
} |
|
res = pci_read_config_byte(brd->m_pci, cap, &cap_id); |
if(res < 0) { |
p += sprintf(p, " Error read capabilities id\n"); |
goto err_exit; |
} else { |
p += sprintf(p, " CAP_ID = 0x%X\n", cap_id); |
} |
|
if(cap_id != 0x10) { |
p += sprintf(p, " Can't find PCI Express capabilities\n"); |
goto err_exit; |
} |
|
for(i=0; i<9; i++) { |
u32 reg = 0; |
int j = cap + 4*i; |
res = pci_read_config_dword(brd->m_pci, j, ®); |
if(res < 0) { |
p += sprintf(p, " Error read capabilities sructure: offset %x\n", j); |
goto err_exit; |
} |
p += sprintf(p, " %x: = 0x%X\n", j, reg); |
} |
|
err_exit: |
|
return (p-buf); |
} |
|
//-------------------------------------------------------------------- |
|
int pex_proc_info( char *buf, |
char **start, |
off_t off, |
38,63 → 101,68
int *eof, |
void *data ) |
{ |
int iBlock = 0; |
char *p = buf; |
struct pex_device *brd = (struct pex_device*)data; |
int iBlock = 0; |
char *p = buf; |
struct pex_device *brd = (struct pex_device*)data; |
|
if(!brd) { |
p += sprintf(p," Invalid device pointer\n" ); |
*eof = 1; |
return p - buf; |
} |
if(!brd) { |
p += sprintf(p," Invalid device pointer\n" ); |
*eof = 1; |
return p - buf; |
} |
|
p += sprintf(p," Device information\n" ); |
p += pex_show_capabilities(p, brd); |
|
p += sprintf(p, " m_TotalIRQ = %d\n", atomic_read(&brd->m_TotalIRQ)); |
p += sprintf(p,"\n" ); |
p += sprintf(p," Device information\n" ); |
|
for(iBlock = 0; iBlock < brd->m_BlockCnt; iBlock++) |
{ |
u32 FifoAddr = 0; |
u16 val = 0; |
p += sprintf(p, " m_TotalIRQ = %d\n", atomic_read(&brd->m_TotalIRQ)); |
|
FifoAddr = (iBlock + 1) * PE_FIFO_ADDR; |
val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_ID + FifoAddr); |
|
if((val & 0x0FFF) != PE_EXT_FIFO_ID) |
continue; |
|
p += sprintf(p,"\n" ); |
p += sprintf(p," PE_EXT_FIFO %d\n", iBlock+1 ); |
p += sprintf(p,"\n" ); |
for(iBlock = 0; iBlock < brd->m_BlockCnt; iBlock++) |
{ |
u32 FifoAddr = 0; |
u16 val = 0; |
|
p += sprintf(p," BLOCK_ID = %x\n", (val & 0x0FFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_VER + FifoAddr); |
p += sprintf(p," BLOCK_VER = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_ID + FifoAddr); |
p += sprintf(p," FIFO_ID = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_NUM + FifoAddr); |
p += sprintf(p," FIFO_NUMBER = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_DMA_SIZE + FifoAddr); |
p += sprintf(p," RESOURCE = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_CTRL + FifoAddr); |
p += sprintf(p," DMA_MODE = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_DMA_CTRL + FifoAddr); |
p += sprintf(p," DMA_CTRL = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_STATUS + FifoAddr); |
p += sprintf(p," FIFO_STATUS = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FLAG_CLR + FifoAddr); |
p += sprintf(p," FLAG_CLR = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRL + FifoAddr); |
p += sprintf(p," PCI_ADRL = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRH + FifoAddr); |
p += sprintf(p," PCI_ADRH = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_LOCAL_ADR + FifoAddr); |
p += sprintf(p," LOCAL_ADR = %x\n", (val & 0xFFFF) ); |
} |
FifoAddr = (iBlock + 1) * PE_FIFO_ADDR; |
val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_ID + FifoAddr); |
|
*eof = 1; |
if((val & 0x0FFF) != PE_EXT_FIFO_ID) |
continue; |
|
return p - buf; |
p += sprintf(p,"\n" ); |
p += sprintf(p," PE_EXT_FIFO %d\n", iBlock+1 ); |
p += sprintf(p,"\n" ); |
|
p += sprintf(p," BLOCK_ID = %x\n", (val & 0x0FFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_VER + FifoAddr); |
p += sprintf(p," BLOCK_VER = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_ID + FifoAddr); |
p += sprintf(p," FIFO_ID = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_NUM + FifoAddr); |
p += sprintf(p," FIFO_NUMBER = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_DMA_SIZE + FifoAddr); |
p += sprintf(p," RESOURCE = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_CTRL + FifoAddr); |
p += sprintf(p," DMA_MODE = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_DMA_CTRL + FifoAddr); |
p += sprintf(p," DMA_CTRL = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_STATUS + FifoAddr); |
p += sprintf(p," FIFO_STATUS = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_FLAG_CLR + FifoAddr); |
p += sprintf(p," FLAG_CLR = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRL + FifoAddr); |
p += sprintf(p," PCI_ADRL = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRH + FifoAddr); |
p += sprintf(p," PCI_ADRH = %x\n", (val & 0xFFFF) ); |
val = ReadOperationWordReg(brd, PEFIFOadr_LOCAL_ADR + FifoAddr); |
p += sprintf(p," LOCAL_ADR = %x\n", (val & 0xFFFF) ); |
} |
|
*eof = 1; |
|
return p - buf; |
} |
|
//-------------------------------------------------------------------- |
/driver/pexdrv/insert
4,32 → 4,69
# This script is loading modules in the kernel. |
# |
|
kernel=`uname -r | grep 2.6` |
status () |
{ |
if [ $1 -eq 0 ] ; then |
echo "[SUCCESS]" |
else |
echo "[FAILED]" |
|
if [ ${kernel} = "" ] |
if [ $2 -eq 1 ] ; then |
echo "... loading aborted." |
exit 1 |
fi |
fi |
} |
|
echo |
|
kernel=`uname -r | grep 2.4` |
|
if [ $kernel ] |
then |
module=ambpex.o |
module=pexdrv.o |
mname=${module%.o} |
else |
module=`find *.ko` |
mname=${module%.ko} |
fi |
module="pexdrv.ko" |
|
if [ ${module} = "" ] |
device=pexdrv |
mode="666" |
|
chmod 777 /dev/shm |
|
if [ ${module} ] |
then |
echo No kernel module found. ${module} |
exit |
echo -n " Find ${module} module : " |
status $? 0 |
else |
echo Find ${module} - kernel module. |
echo -n " Kernel module not found : " |
status 1 0 |
exit |
fi |
|
/sbin/insmod ./$module $* || exit 1 |
was_loaded=`/sbin/lsmod | cut -c 1-6 | grep $device` |
|
sleep 1 |
if [ ${was_loaded} ] |
then |
echo -n " Remove loaded module : " |
/sbin/rmmod $device |
status $? 0 |
else |
echo Loading module: ${module} |
fi |
|
devfiles=`ls /dev/* | grep AMB` |
echo -n " Loading pexdrv module : " |
insmod ./${module} |
|
#echo ${devfiles} |
until [ -e /dev/pexdrv0 ] |
do |
sleep 1.5 |
done |
|
chmod -v 666 ${devfiles} |
chmod 666 /dev/pexdrv* |
|
status $? 0 |
|
echo |
/driver/pexdrv/ioctlrw.c
15,6 → 15,7
#include "pexioctl.h" |
#include "hardware.h" |
#include "ambpexregs.h" |
#include "brd_info.h" |
|
//-------------------------------------------------------------------- |
|
/driver/pexdrv/dmachan.c
79,6 → 79,8
// а при повторных только отображаем выделенную память на пользовательское пространство |
if(!dma->m_UseCount) |
{ |
dma_addr_t pa = (dma_addr_t)0; |
|
dma->m_MemType = bMemType; |
dma->m_BlockCount = *pCount; |
dma->m_BlockSize = size; |
86,7 → 88,7
// выделяем память под описатели блоков (системный, и логический адрес для каждого блока) |
dma->m_pBufDscr.SystemAddress = (void*)dma_alloc_coherent( dma->m_dev, |
dma->m_BlockCount * sizeof(SHARED_MEMORY_DESCRIPTION), |
&dma->m_pBufDscr.LogicalAddress, GFP_KERNEL); |
&pa, GFP_KERNEL); |
if(!dma->m_pBufDscr.SystemAddress) |
{ |
printk("<0>%s(): Not memory for buffer descriptions\n", __FUNCTION__); |
93,6 → 95,7
return -ENOMEM; |
} |
|
dma->m_pBufDscr.LogicalAddress = (size_t)pa; |
dma->m_ScatterGatherTableEntryCnt = 0; |
} |
|
/driver/pexdrv/pexioctl.h
93,18 → 93,6
PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_ADJUST) |
|
//----------------------------------------------------------------------------- |
// board configuration data structure |
struct board_info { |
size_t PhysAddress[6]; // OUT |
void* VirtAddress[6]; // OUT |
size_t Size[6]; // OUT |
size_t InterruptLevel; // OUT |
size_t InterruptVector;// OUT |
unsigned short vendor_id; // OUT |
unsigned short device_id; // OUT |
}; |
|
//----------------------------------------------------------------------------- |
// memory block structure |
struct memory_block { |
size_t phys; |
/driver/pexdrv/Makefile
1,6 → 1,7
|
KERNELVER := $(shell uname -r) |
EXTRA_CFLAGS += -O2 |
EXTRA_CFLAGS += -I $(PWD)/../../common/board |
|
ifneq ($(KERNELRELEASE),) |
|
14,7 → 15,7
PWD := $(shell pwd) |
|
modules: |
$(MAKE) -C $(KERNELDIR) M=$(PWD) $(DIRS) |
$(MAKE) -C $(KERNELDIR) M=$(PWD) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" |
|
endif |
|
29,3 → 30,6
ifeq (.depend, $(wildcard .depend)) |
include .depend |
endif |
|
install: |
./insert |
/driver/pexdrv/hardware.c
27,8 → 27,10
case AMBPEX8_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBPEX8", index); break; |
case ADP201X1AMB_DEVID: snprintf(brd->m_name, 128, "%s%d", "ADP201X1AMB", index); break; |
case ADP201X1DSP_DEVID: snprintf(brd->m_name, 128, "%s%d", "ADP201X1DSP", index); break; |
case AMBPEXARM_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBPEXARM_DEVID", index); break; |
case AMBFMC106P_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBFMC106P_DEVID", index); break; |
case AMBPEXARM_DEVID: snprintf(brd->m_name, 128, "%s%d", "D2XT005", index); break; |
case AMBFMC106P_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBFMC106P", index); break; |
case AMBFMC114V_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBFMC114V", index); break; |
case AMBKU_SSCOS_DEVID: snprintf(brd->m_name, 128, "%s%d", "AMBKU_SSCOS", index); break; |
default: |
snprintf(brd->m_name, sizeof(brd->m_name), "%s%d", "Unknown", index); break; |
} |
113,8 → 115,12
if((AMBPEX8_DEVID != deviceID) && |
(ADP201X1AMB_DEVID != deviceID) && |
(AMBPEX5_DEVID != deviceID) && |
(AMBPEXARM_DEVID != deviceID)) |
(AMBPEXARM_DEVID != deviceID) && |
(AMBFMC114V_DEVID != deviceID)) { |
|
dbg_msg(dbg_trace, "%s(): Unsupported device id: 0x%X.\n", __FUNCTION__, deviceID); |
return -ENODEV; |
} |
|
temp = ReadOperationWordReg(brd, PEMAINadr_PLD_VER); |
|
265,7 → 271,9
|
u16 ReadOperationWordReg(struct pex_device *brd, u32 RelativePort) |
{ |
return readw((u16*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
u32 tmpVal = readl((u32*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
return (tmpVal & 0xFFFF); |
//return readw((u16*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
} |
|
//-------------------------------------------------------------------- |
272,25 → 280,13
|
void WriteOperationWordReg(struct pex_device *brd, u32 RelativePort, u16 Value) |
{ |
writew( Value, (u16*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
u32 tmpVal = Value; |
//writew( Value, (u16*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
writel( tmpVal, (u32*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
} |
|
//-------------------------------------------------------------------- |
|
u8 ReadOperationByteReg(struct pex_device *brd, u32 RelativePort) |
{ |
return readb((u8*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
} |
|
//-------------------------------------------------------------------- |
|
void WriteOperationByteReg(struct pex_device *brd, u32 RelativePort, u8 Value) |
{ |
writeb( Value, (u8*)((u8*)brd->m_BAR0.virtual_address + RelativePort)); |
} |
|
//-------------------------------------------------------------------- |
|
u32 ReadAmbReg(struct pex_device *brd, u32 AdmNumber, u32 RelativePort) |
{ |
u8* pBaseAddress = (u8*)brd->m_BAR1.virtual_address + AdmNumber * ADM_SIZE; |