Wow, those figures are much more optmistic than I was thinking, but I knew there are smarter ways to do things...
I was figuring it this way:
To change the DDS frequency (SoftwareSerial):
32-bit word @ 115200 bps = 2.8 us
DDS freq. change (spec.): 18 clocks @ 125 MHz = 15 ns, plus I think there is a 7 ns delay added.
So total is less than 3 ns for DDS frequency change.
I'm not sure how to figure out how long Arduino takes to calculate the tuning word. I was considering an IF loop incrementing the frequency variable up to the resolution count variable. The frequency variable gets sent to a function which handles the conversion, which I imagine all that takes a while (and I've read that digitalWrite is slow too).
void SetFrequency(unsigned long frequency)
unsigned long tuning_word = (frequency * pow(2, 32)) / DDS_CLOCK;
digitalWrite (LOAD, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, tuning_word);
shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 8);
shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 16);
shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 24);
shiftOut(DATA, CLOCK, LSBFIRST, 0x0);
digitalWrite (LOAD, HIGH);
There are a couple different libraries for these DDS as well, so there are options...
NMEA 37 byte @ 4800 bps = 62 ms. Arduino HW serial has 64 byte buffer, I guess that data can be handled when needed, but hopefully each second to keep the time update perceivably accurate.
I could also offload all of the GPS NMEA and display to another arduino chip and LCD as they are not relevant to controlling the DDS.
Thanks for the insights...