У меня есть значение "0x1FF40001", которое я записываю в регистр, подобный этому,
myserial[0].write(0x807, 0x1FF40001);
Но теперь прошивка говорит, что в этом значении есть 4 части, которые я записываю в регистр 807, "1FF4 00 01 "и что второй полубайт (32 бита), который в настоящее время является" F4 "(индекс антенны), может изменяться при вводе пользователем и может иметь значения от 0 до 255 (десятичное число). На данный момент это значение равно 4.
Поэтому я добавляю его в форму выигрыша, чтобы ввести значение для индекса антенны следующим образом:

//In Form1.Designer.cs
this.Antenna_index_box.TextChanged += new System.EventHandler(this.Antenna_index_box_TextChanged);
//In Form1.cs
private void Antenna_index_box_TextChanged(object sender, EventArgs e)
{
uint[] ant_index = Antenna_index_box.Text;
Ant_indx = ant_index; //Ant_indx is a global variable so that I may pass it
}
Теперь, как мне изменить только часть этой строки, прежде чем я ее напишу? Пользовательский ввод для Ant_indx теперь находится в глобальной переменной Ant_indx
.
myserial[0].write(0x807, Ant_indx);
Я хочу изменить только «F4» в строке 0x1F «F4» 0001 и оставить все остальное таким же.
Если пользователь вводит 4, я должен запрограммировать 807 как 0x1F040001
Если пользователь вводит 25, я должен запрограммировать 807 как 0x1F1D0001
Как изменить только эти биты отдельно?
myserial[0].write(0x807, Ant_indx); // both arguments have to be uint32
РЕДАКТИРОВАТЬ: Я реализовал это следующим образом:
UInt32 special_register_value = 0x1FF00001;
special_register_value |= (Ant_indx << 16);
serial[0].write(0x807, special_register_value);