Без использования прерываний генерировать восходящий пилообразный сигнал
Здесь мне нужно вывести сигнал на осциллограф в C, который должен быть в виде восходящего пилообразного сигнала. Я не уверен, что мой код правильный. Любая помощь или предложения?
while(1)
{
for (i = 1; i < 360; i++);
// Check to see if status.TRDY is 1
while(*(base+2) & 0x40 != 1);
// while shift register is not empty
// Make the sawtooth pattern
if (saw == 0x1fff){
saw = 0x1000;
}
else {
saw = saw+1;
}
// transmit sawtooth to the oscilloscope
*(base+1) = saw;
}
1 ответ
Это только приводит в порядок опубликованный код ОП. Он не отвечает, как программировать ЦАП. OP использует 16-битное значение амплитуды, но его адресация регистров предполагает 8-битные регистры - возможно, необходимы две записи.
Я также предлагаю вам аргументы функции, определяющие период пилообразной волны и количество шагов. Вам также нужно условие выхода. Я оставляю вам эти очки.
@Chris Stratton также отметил, что порт ввода-вывода должен иметь правильный тип языка.
#define MINSAW 0x1000
#define MAXSAW 0x1FFF
unsigned *base = (unsigned *)0xD000; // "insert your value"
int main() {
unsigned saw, i;
while(1) {
for (i = 0; i < 360; i++) {
// ratio the waveform amplitude
saw = MINSAW + i * (MAXSAW - MINSAW) / 359;
// Check to see if status.TRDY is 1
while((*(base+2) & 0x40) != 0x40);
// transmit sawtooth to the oscilloscope
*(base+1) = saw;
}
}
return 1;
}