Прерывание RX_COMPLETE_INT возникает, как я понимаю, по приходу первого байта
Ну, я же вам нарисовал один из возможных сценариев. Оно и потом возникает при приеме каждого следующего байта (так называемы pending), и откладывается на некоторое время, когда прерывания будут разрешены, ну а когда подошла инструкция RETI, оно, это прерывание, тут как тут.
Нельзя ли Вашу прошивку доработать так, чтобы она умела необходимый минимум:
- установка частоты (это есть)
- вкл-откл РТТ
- вкл-откл тона. (Для чего нужно: ведь можно прекращать формирование сигнала просто записав нулевую частоту? Нужно для обеспечения когерентности сигнала. То есть когда выход выключен, аккумулятор фазы продолжает считать и в момент включения выхода сигнал продолжится с нужной фазой, обеспечивая когерентное накопление на приеме.)
- инверсия фазы.
Если это получится, можно было бы подправить и мою программу управления DDS_ctrl и иметь все богатство разнообразных режимов на Вашем качественном DDS.
1) Да, установка частоты реализована. Код частоты любой от 0х00000000 до 0x7FFFFFFF. Возможно стоит ограничить диапазон кодов в диапазоне частот 135-138 кГц или что-то около того. Как бы допзащита от ошибочно переданных байт.
2) Включение/Отключение передатчика. Если имеется в виду сигнал 0/1 на какой-то ноге МК, то это легко осуществить. В принципе можно выдавать до 8 сигналов, если ног проца хватит :-).
3) Сделать можно, но надо ли? За одну секунду любая когерентность нарушится, даже если синтезатор выдаёт абсолютное значение частоты, то присутствуют погрешности первого гетеродина приёмника, а то и второго, генератора звуковой карты, так что когерентность становится проблематичной. Вообще, я думал, что в цифре у вас имеется квадратурный приёмник и подстройка частоты осуществляется каждый раз при приеме новой посылки. Хотя нет, у вас просто БПФ на весь ДВ диапазон.
4) Инверсия фазы. Имеется в виду установка фазы сигнала относительно предыдущего значения? Мы с вами как-то касались этого вопроса, так что такая установка фазы реализована, просто не хотел пугать народ всякими наворотами. Фаза устанавливается с дискретом 360/65536=0.005493 град, естественно, без прерывания генерации синуса. Надеюсь, этого достаточно?
Да, уже говорил, повторюсь. Наличие фильтра НЧ или ПП на выходе синтезатора крайне желательно. Я сейчас подключил ДДС на основе AD9851 к микроконтроллеру, сижу, играюсь. Плату ДДС купил по интернету, ну и в качестве МК взял плату ардуино-уно, а энкодер - от какой-то бытовой техники. Не айс, зато ничего не надо делать, в смысле паять, пиши себе программу. А, нет, паять пришлось 12 проводков - от ардуины к синтезатору и 4 провода к энкодеру. Ну так вот, фильтр на плате синтезатора не гуд, частота до 55 МГц ещё ничего, а потом начинается джиттер, уровень сигнала резко падает. Хотя должен признать, опорник 30 МГц хорош, выбег частоты 5-6 Гц, а потом стоит, как у волка на морозе..хвост.