чтобы иметь возможность управлять всеми режимами микросхемы за одну команду, нужно передавать 5 слов (10 байт), делается это примерно так :
Код
;управление частотой
AppCmd6:
;Формат входных данных:
;0xXXXX - слово конфигурации (должно содержать команду RESET), типовое значение - 0x2100
;0xXXXX - частота, младшие 14 бит (два старших бита указывают адрес регистра частоты)
;0xXXXX - частота, старшие 14 бит (два старших бита указывают адрес регистра частоты)
;0xXXXX - фаза, (два старших бита указывают адрес регистра фазы)
;0xXXXX - слово конфигурации и запуска, типовое значение - 0x2000
;всего 10 байт, во входных данных
;21 00 45 1e 40 2e 20 00 20 00
ldi YL, low(DataIn)
ldi YH, high(DataIn)
;выдача пяти управляющих слов в микросхему
WordOutLoop:
cbi portb, SYNC_DDS ; устанавливаем фрейм микросхем на каждое слово
ld tmp, Y+
rcall SPIOutByte ; выводим старший байт
ld tmp, Y+
rcall SPIOutByte ; выводим младший байт
sbi portb, SYNC_DDS ; убираем фрейм
cpi YL, low(DataIn + 10)
brne WordOutLoop
ret
А вот так эти 5 слов формируются (в текстбоксе SingleFreqTextBox частота в герцах ), системная частота - 16МГц
Код
// установка Частоты
dataOut = new byte[10] { 0x21, 0x00, 0x6d, 0x0e, 0x40, 0x48, 0x20, 0x00, 0x20, 0x00 };
uint freq = Convert.ToUInt32(SingleFreqTextBox.Text);
double freqConst = Math.Pow(2, 28) / 16000000;
uint freqReg = Convert.ToUInt32(freqConst * freq);
//младшая часть множителя частоты
uint freqSettingsL = 0x4000 | (freqReg & 0x3FFF);
//старшая часть множителя частоты
uint freqSettingsH = 0x4000 | ((freqReg >> 14) & 0x3FFF);
dataOut[2] = Convert.ToByte((freqSettingsL >> 8) & 0xFF);
dataOut[3] = Convert.ToByte(freqSettingsL & 0xFF);
dataOut[4] = Convert.ToByte((freqSettingsH >> 8) & 0xFF);
dataOut[5] = Convert.ToByte(freqSettingsH & 0xFF);