Комплекс измерения параметров обратного канала

// 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;

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13 


Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы