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/common
- from Rev 5 to Rev 6
- ↔ Reverse comparison
Rev 5 → Rev 6
/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 |
*/ |
|
|
|
/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 |
/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 |
/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__ |
/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 ) |
{ |
/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; |
|
} |
|
|
//--------------------------------------------------------------------------- |
/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 |
/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); |
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
/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 ); |
|
} |
/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 |
|
/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); |
} |
|
/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 |
/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__ |
/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 |
/pex/dma_memory.cpp
File deleted
/pex/dma_memory.h
File deleted
/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; |
} |
/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(); |
} |
/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); |
/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 |
/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) |