{ ---------------------------------------------------------------------	}
{ ************************ МОДУЛЬ USB-3000 ****************************	}
{ ---------------------------------------------------------------------	}
{ !!!!!!!!!!!!!!!!!!!!!! ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ !!!!!!!!!!!!!!!!!!!!!!!! }
{ --------------------------------------------------------------------- }

{***********************************************************************}
{ определим необходимые макросы														}
{***********************************************************************}
#define M(x) x*256 							{ сдвиг на 8 бит влево				}
#define PutPm(Reg,Addr) I4 = Addr; PM(I4, M4) = Reg
#define PutValPm(Reg,Val,Addr) Reg = Val; I4=Addr; PM(I4, M4) = Reg
#define GetPm(Reg,Addr) I4 = Addr; Reg = PM(I4, M4)

{***********************************************************************}
{ переменные драйвера DSP																}
{***********************************************************************}
{ базовый адрес сегмента программ													}
.VAR/SEG=INT_PM_USER/ABS=ProgramBaseAddressAddr/PM/RAM PBA;
.INIT PBA: M(ProgramBaseAddress);

{ строка с названием устройства														}
.VAR/SEG=INT_PM_USER/ABS=TargetAddr/PM/RAM Target[5];
.INIT Target: M(0x0), M(0x0), M(0x0), M(0x0), M(0x0);

{ метка разработчика даннойго драйвера DSP										}
.VAR/SEG=INT_PM_USER/ABS=LabelAddr/PM/RAM Label[3];
.INIT Label: M(0x0), M(0x0), M(0x0);

{ весрия текущего драйвера DSP														}
.VAR/SEG=INT_PM_USER/ABS=VersionAddr/PM/RAM Version;
.INIT Version: M(0x0);

{ Test Var 1                                                     			}
.VAR/SEG=INT_PM_USER/ABS=TMode1Addr/PM/RAM TMode1;
.INIT TMode1: M(0x1111);

{ Test Var 2                                                     			}
.VAR/SEG=INT_PM_USER/ABS=TMode2Addr/PM/RAM TMode2;
.INIT TMode2: M(0x3333);

{ Test Variable                                                 			}
.VAR/SEG=INT_PM_USER/ABS=TestLoadVarAddr/PM/RAM TestLoadVar;
.INIT TestLoadVar: M(0x7777);

{ флажок готовности к дальнейшей работе после загрузки DSP					}
.VAR/SEG=INT_PM_USER/ABS=ReadyAddr/PM/RAM Ready;
.INIT Ready: M(0x0);

{ command for IRQE DSP                                           			}
.VAR/SEG=INT_PM_USER/ABS=CommandAddr/PM/RAM Command;
.INIT Command: M(0x77);

{ разрешение прерываний IRQE (команды)												}
.VAR/SEG=INT_PM_USER/ABS=ImaskValueAddr/PM/RAM ImaskValue;
.INIT ImaskValue: M(0x200);

{ ????? }
.VAR/SEG=INT_PM_USER/ABS=InputClockSourceAddr/PM/RAM InputClockSource;
.INIT InputClockSource: M(0x0);



{ -------------- Переменные для работы с вводом данных ---------------- }
{ длина Control Table 																	}
.VAR/SEG=INT_PM_USER/ABS=ControlTableLenghtAddr/PM/RAM ControlTableLenght;
.INIT ControlTableLenght: M(0x8);

{ значение однократного ввода отсчета												}
.VAR/SEG=INT_PM_USER/ABS=InputSampleAddr/PM/RAM InputSample;
.INIT InputSample: M(0x0);

{ логический номер канала для однократного ввода отсчета						}
.VAR/SEG=INT_PM_USER/ABS=InputChannelAddr/PM/RAM InputChannel;
.INIT InputChannel: M(0x0);

{ тактовая частота ввода данных														}
.VAR/SEG=INT_PM_USER/ABS=InputRateAddr/PM/RAM InputRate;
.INIT InputRate: M(59);

{ Величина межкадровой задержки в единицах клоков SCLK SPORT1				}
.VAR/SEG=INT_PM_USER/ABS=InterKadrDelayAddr/PM/RAM InterKadrDelay;
.INIT InterKadrDelay: M(0x0);

{ Задержка для первого отсчета в FIFO буфере ввода               			}
.VAR/SEG=INT_PM_USER/ABS=FirstSampleDelayAddr/PM/RAM FirstSampleDelay;
.INIT FirstSampleDelay: M(0x64); 	{ 100 - задержка на 2.5 мкс			}

{ Флажок разрешения/запрещения ввода данных                					}
.VAR/SEG=INT_PM_USER/ABS=InputEnableAddr/PM/RAM InputEnable;
.INIT InputEnable: M(0x0);

{ Текущий базовый адреса FIFO буфера ввода                       			}
.VAR/SEG=INT_PM_USER/ABS=InputFifoBaseAddressAddr/PM/RAM InputFifoBaseAddress;
.INIT InputFifoBaseAddress: M(0x0);

{ Требуемая лина FIFO буфера ввода, которую хотелось бы установить  		}
.VAR/SEG=INT_PM_USER/ABS=InputFifoLengthAddr/PM/RAM InputFifoLength;
.INIT InputFifoLength: M(0x3000);

{ Текущая длина FIFO буфера ввода							           			}
.VAR/SEG=INT_PM_USER/ABS=CurInputFifoLengthAddr/PM/RAM CurInputFifoLength;
.INIT CurInputFifoLength: M(0x3000);

{ Половина длины FIFO буфера ввода							           			}
.VAR/SEG=INT_PM_USER/ABS=InputFifoLengthOver2Addr/PM/RAM InputFifoLengthOver2;
.INIT InputFifoLengthOver2: M(0x1800);

{ Флажок разрешения/запрещения корректировки входных данных					}
.VAR/SEG=INT_PM_USER/ABS=IsCorrectionEnabledAddr/PM/RAM IsCorrectionEnabled;
.INIT IsCorrectionEnabled: M(0x0);

{ тип вводимых данных: АЦП или ТТЛ													}
.VAR/SEG=INT_PM_USER/ABS=InputTypeAddr/PM/RAM InputType;
.INIT InputType: M(0x0);

{ ----------------- Параметры синхронизации --------------------------- }
{ тип синхронизации вводимых с модуля даных										}
.VAR/SEG=INT_PM_USER/ABS=SynchroTypeAddr/PM/RAM SynchroType;
.INIT SynchroType: M(0x0);

{ тип аналоговой синхронизации														}
.VAR/SEG=INT_PM_USER/ABS=SynchroAdTypeAddr/PM/RAM SynchroAdType;
.INIT SynchroAdType: M(0x0);

{ режим аналоговой сихронизации														}
.VAR/SEG=INT_PM_USER/ABS=SynchroAdModeAddr/PM/RAM SynchroAdMode;
.INIT SynchroAdMode: M(0x0);

{ канал АЦП при аналоговой синхронизации											}
.VAR/SEG=INT_PM_USER/ABS=SynchroAdChannelAddr/PM/RAM SynchroAdChannel;
.INIT SynchroAdChannel: M(0x0);

{ порог срабатывания АЦП при аналоговой синхронизации							}
.VAR/SEG=INT_PM_USER/ABS=SynchroAdPorogAddr/PM/RAM SynchroAdPorog;
.INIT SynchroAdPorog: M(0x0);

.VAR/SEG=INT_PM_USER/ABS=SynchroAdStepAddr/PM/RAM SynchroAdStep;
.INIT SynchroAdStep: M(0x0);
{-----------------------------------------------------------------------}

{ корректируемый логический номер канала АЦП			 							}
.VAR/SEG=INT_PM_USER/ABS=CorrectableInputChannelAddr/PM/RAM CorrectableInputChannel;
.INIT CorrectableInputChannel: M(0x0);


{ ----------- Переменные для работы с выводом данных ------------------ }
{ Однократное выходное значение для вывода                             	}
.VAR/SEG=INT_PM_USER/ABS=OutputSampleAddr/PM/RAM OutputSample;
.INIT OutputSample: M(0x0);

{ делитель SCLK0_DIV для работы при выводе данных       						}
.VAR/SEG=INT_PM_USER/ABS=Sclk0DivAddr/PM/RAM Sclk0Div;
.INIT Sclk0Div: M(0x8);

{ татктовая частота вывода данных                                  		}
.VAR/SEG=INT_PM_USER/ABS=OutputRateAddr/PM/RAM OutputRate;
.INIT OutputRate: M(49);

{ флажок разрешения/запрещения вывода данных										}
.VAR/SEG=INT_PM_USER/ABS=OutputEnableAddr/PM/RAM OutputEnable;
.INIT OutputEnable: M(0x0);

{ Текущий базовый адреса FIFO буфера вывода                      			}
.VAR/SEG=INT_PM_USER/ABS=OutputFifoBaseAddressAddr/PM/RAM OutputFifoBaseAddress;
.INIT OutputFifoBaseAddress: M(0x3000);

{ Требуемая длина FIFO буфера вывода, которую хотелось бы установить 	}
.VAR/SEG=INT_PM_USER/ABS=OutputFifoLengthAddr/PM/RAM OutputFifoLength;
.INIT OutputFifoLength: M(0xF80);
{ Текущая длина FIFO буфера вывода							             		}
.VAR/SEG=INT_PM_USER/ABS=CurOutputFifoLengthAddr/PM/RAM CurOutputFifoLength;
.INIT CurOutputFifoLength: M(0xF80);

{ Половина длины FIFO буфера вывода							           			}
.VAR/SEG=INT_PM_USER/ABS=OutputFifoLengthOver2Addr/PM/RAM OutputFifoLengthOver2;
.INIT OutputFifoLengthOver2: M(0x7C0);



{ ----------- Переменные для работы с цифровыми линиями --------------- }
{ Флажок разрешения/запрещения вывода на ТТЛ										}
.VAR/SEG=INT_PM_USER/ABS=TtlOutEnableAddr/PM/RAM TtlOutEnable;
.INIT TtlOutEnable: M(0x0);
{ Ttl Out var                                       							}
.VAR/SEG=INT_PM_USER/ABS=TtlOutAddr/PM/RAM TtlOut;
.INIT TtlOut: M(0x0);
{ Ttl in var                                                    			}
.VAR/SEG=INT_PM_USER/ABS=TtlInAddr/PM/RAM TtlIn;
.INIT TtlIn: M(0x0);
{-----------------------------------------------------------------------}

{ Scale array for all gains                                      			}
.VAR/SEG=INT_PM_USER/ABS=ScaleFactorAddr/PM/RAM ScaleFactor[8];
.INIT ScaleFactor:      M(0x8000), M(0x8000), M(0x8000), M(0x8000),
								M(0x8000), M(0x8000), M(0x8000), M(0x8000);

{ ZeroOffset array for all gains                   							}
.VAR/SEG=INT_PM_USER/ABS=ZeroOffsetAddr/PM/RAM ZeroOffset[8];
.INIT ZeroOffset:      	M(0x0), M(0x0), M(0x0), M(0x0),
								M(0x0), M(0x0), M(0x0), M(0x0);

{ Control Table 																			}
.VAR/SEG=INT_PM_USER/ABS=ControlTableAddr/PM/RAM ControlTable[128];
.INIT ControlTable:   	M(0x0), M(0x1), M(0x2), M(0x3), M(0x4), M(0x5), M(0x6), M(0x7),
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
								0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0;

.VAR/SEG=INT_PM_USER/ABS=CalibrationArrayAddr/PM/RAM CalibrationArray[256];


{ В ПАМЯТИ ДАННЫХ ДАПАЗОН АДРЕСОВ ОТ 0x3F80 ДО 0x3FDF ПОЛНОСТЬЮ СВОБОДЕН	}
{ внутренняя переменная для хранения регистра маски								}
.VAR/SEG=INT_DM_USER/ABS=0x3F80/DM/RAM TempImask;
{ внутренняя переменная для хранения введённого отсчёта							}
.VAR/SEG=INT_DM_USER/ABS=0x3F81/DM/RAM TempInputSample;

{ временные внутренние переменные														}
.VAR/SEG=INT_DM_USER/ABS=0x3F84/DM/RAM TempArray[4];

{ 0x400 -> Last Program Memory Address for Vars Data								}
