Комплекс измерения параметров обратного канала
// FwdTunerLoadWord.bit_s.N_14_0 = ((Freq+4)<<2); //Reference divider = 1024.
FwdTunerLoadWord.bit_s.BS_4_1 = 0;
// Загрузка синтезатора частоты в модуляторе прямого канала.
FWD_CE = 1;
i = 3;
j = 3;
mask = 0x04;
do
{
do
{
if (FwdTunerLoadWord.byte_s.B[i] & mask)
SIO4_DATA = 1;
else
SIO4_DATA = 0;
mask >>= 1;
SIO4_
CLK = 1;
asm («NOP»);
asm («NOP»);
asm («NOP»);
SIO4_CLK = 0;
}
while(–j);
j = 8;
mask = 0x80;
} while (i–);
SIO4_DATA = 0;
FWD_CE = 0;
// Загрузка ЦАП'а в модуляторе прямого канала.
Level = Level*cnst_FwdTransm_Lev_mult + cnst_FwdTransm_Lev_add;
FwdTunerLoadWord.byte_s.B[0] = (Level) & 0xFF;
FwdTunerLoadWord.byte_s.B[1] = (Level) >> 8; // Уровень на выходе ЦАП'а.
i = 1;
j = 8;
mask = 0x80;
FWD_ADCE = 0;
do
{
do
{
if (FwdTunerLoadWord.byte_s.B[i] & mask)
SIO4_DATA = 1;
else
SIO4_DATA = 0;
mask >>= 1;
SIO4_CLK = 1;
asm («NOP»);
asm («NOP»);
asm («NOP»);
SIO4_CLK = 0;
}
while(–j);
j = 8;
mask = 0x80;
} while (i–);
SIO4_DATA = 0;
FWD_ADCE = 1;
}
#else
// Версия функции для тюнера Tuner_1v1.
void LoadFwdTuner (WORD Freq, WORD Level)
{ // Загрузка синтезатора I2C‑шного передатчика и ЦАП'а DAC7513.
BYTE i, j, mask;
xFwdTuner FwdTunerLoadWord;
xTunerMeasCmdWord tmpTunerCmdW;
xMeasDescr volatile tmpTunerCmdDescr;
// Загрузка ЦАП'а в модуляторе прямого канала.
Level = Level*cnst_FwdTransm_Lev_mult + cnst_FwdTransm_Lev_add;
FwdTunerLoadWord.byte_s.B[0] = (Level) & 0xFF;
FwdTunerLoadWord.byte_s.B[1] = (Level) >> 8; // Уровень на выходе ЦАП'а.
i = 1;
j = 8;
mask = 0x80;
FWD_ADCE = 0;
do
{
do
{
if (FwdTunerLoadWord.byte_s.B[i] & mask)
SIO4_DATA = 1;
else
SIO4_DATA = 0;
mask >>= 1;
SIO4_CLK = 1;
asm («NOP»);
asm («NOP»);
asm («NOP»);
SIO4_CLK = 0;
}
while(–j);
j = 8;
mask = 0x80;
} while (i–);
SIO4_DATA = 0;
FWD_ADCE = 1;
// Подготовка для отдачи команды на загрузку синтезатора передатчика.
tmpTunerCmdW. Cmd = cmdMT_LoadFwdTransmitter;
tmpTunerCmdW. MeasDescr = (xMeasDescr*)&tmpTunerCmdDescr;
tmpTunerCmdDescr. StartFreq = Freq;
tmpTunerCmdDescr. Flags. Busy = 1;
tmpTunerCmdDescr. Flags. Interrupt = 0;
cQueueSend (CommandQueue_of_TunMeas, &tmpTunerCmdW, 0);
while (tmpTunerCmdDescr. Flags. Busy == 1)
vTaskDelay(1);
}
#endif
void MakeAndSendFwdPack (BYTE Cmd, BYTE Param)
{
xStruct_PtrAndLen FwdTrCmd;
BYTE i;
switch(Cmd)
{
union
{ // Структура, которая используется только внутри switch'а.
struct xs_FWD_CMD_00 pack_0_body;
struct xs_FWD_CMD_01 pack_1_body;
struct xs_FWD_CMD_02 pack_2_body;
struct xs_FWD_CMD_03 pack_3_body;
struct xs_FWD_CMD_03 pack_4_body;
} xFwdPacks;
case fwdtr_ConfigOfPSG_Fr:
{ // Команда «Настройка ГПС: частоты».
for (i=0; i<cnst_PSG_Num_Of_Freqs; ++i)
{ // Заполняем тело пакета частотами ГПСа.
WORD f = PsgArray[Param].Freqs[i].Freq;
if (f!= cnst_PSG_null_freq)
{
xFwdPacks.pack_0_body. Freqs[i].MHz = f>>3;
xFwdPacks.pack_0_body. Freqs[i].kHz = f & 0x07;
}
else
break;
}
xFwdPacks.pack_0_body. Cmd = fwdtr_ConfigOfPSG_Fr;
xFwdPacks.pack_0_body.PSG. GenNum = Param;
xFwdPacks.pack_0_body.PSG. Freqs = i;
xFwdPacks.pack_0_body.PSG.nevermind = 0;
i = sizeof (xFwdPacks.pack_0_body) – ((cnst_PSG_Num_Of_Freqs-i)<<1);
FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD);
FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)),
(WORD)&xFwdPacks.pack_0_body,
(BYTE) ((DWORD)&xFwdPacks.pack_0_body >> 16),
i);
break;
} // Конец case'а по «Настройка ГПС: частоты».
case fwdtr_ConfigOfPSG_Txt:
{ // Команда «Настройка ГПС: комментарии».
xFwdPacks.pack_1_body. Cmd = fwdtr_ConfigOfPSG_Txt;
xFwdPacks.pack_1_body.PSG. GenNum = Param;
xFwdPacks.pack_1_body.PSG.nevermind = 0;
for (i=0; i<cnst_PSG_TextMsgLen; ++i)
{
BYTE s = PsgArray[Param].TextMsg[i];
if (s!= 0) // Записываем в пакет ненулевые символы.
xFwdPacks.pack_1_body. TxtMsg[i] = s;
else
break; // Встретили нулевой символ.
}
// Здесь i – кол-во ненулевых символов.
xFwdPacks.pack_1_body. TxtMsg[i] = 0; // Конец строки, как и обещал.
i += 3;
FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD);
FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)),
(WORD)&xFwdPacks.pack_1_body,
(BYTE) ((DWORD)&xFwdPacks.pack_1_body >> 16),
i);
break;
} // Конец case'а по «Настройке ГПС: комментарии».
case fwdtr_LevelsOfPSG:
{ // Команда «Уровни сигнала с ГПС».
for (i=0; i<cnst_PSG_Num_Of_Freqs; ++i)
{ // Заполняем тело пакета чатотами ГПСа.
if (PsgArray[Param].Freqs[i].Freq!= cnst_PSG_null_freq)
xFwdPacks.pack_2_body. Levels[i] = PsgArray[Param].Freqs[i].Level;
else
break;
}
xFwdPacks.pack_2_body. Cmd = fwdtr_LevelsOfPSG;
xFwdPacks.pack_2_body.PSG. GenNum = Param;
xFwdPacks.pack_2_body.PSG. Freqs = i;
xFwdPacks.pack_2_body.PSG.nevermind = 0;
i = (i<<1) + 2;
FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD);
FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)),
(WORD)&xFwdPacks.pack_2_body,
(BYTE) ((DWORD)&xFwdPacks.pack_2_body >> 16),
i);
break;
} // Конец case'а по «Уровни сигнала с ГПС».
case fwdtr_LevelsOfSpectrum:
{ // Команда «Спектр обратного канала».
xFwdPacks.pack_3_body. Cmd = fwdtr_LevelsOfSpectrum;
xFwdPacks.pack_3_body. StartFr = Param;
xFwdPacks.pack_3_body. StopFr = Param + 1;
i = sizeof (xFwdPacks.pack_3_body);
FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD);
FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)),
(WORD)&xFwdPacks.pack_3_body,
(BYTE) ((DWORD)&xFwdPacks.pack_3_body >> 16),
3);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields) + 3),
(WORD) (&pw_RC_Scan_Buf [Param*_1MHz_subdiv – cnst_RevMinFreq]),
(BYTE) ((DWORD) (&pw_RC_Scan_Buf [Param*_1MHz_subdiv – cnst_RevMinFreq]) >> 16),
i‑3);
break;
} // Конец case'а по «Спектр обратного канала».
case fwdtr_LevelsOfAFC:
{ // Команда «Спектр обратного канала».
xFwdPacks.pack_4_body. Cmd = fwdtr_LevelsOfAFC;
xFwdPacks.pack_4_body. StartFr = Param;
Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:
- Мощный стереофонический усилитель
- Микроконтроллер системы управления
- Сбор и обработка измерительной информации
- Исследование и разработка методов и технических средств и измерения для формирования статистических высококачественных моделей радиоэлементов
- Проектирование схемы трехфазного регулируемого выпрямителя
Поиск рефератов
Последние рефераты раздела
- Микроконтроллер системы управления
- Разработка алгоритмического и программного обеспечения стандарта IEEE 1500 для тестирования гибкой автоматизированной системы в пакете кристаллов
- Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi 7.0
- Разработка детектора высокочастотного излучения
- Разработка микропроцессорного устройства для проверки и диагностики двигателя внутреннего сгорания автомобиля
- Разработка микшерного пульта
- Математические основы теории систем