На всяк випадок розповім, в чому був сенс і проблема. А бо як хтось забажає зробити щось схоже.
Забажав я модернізувати свій працюючий, але несправний характерограф Х1-46. Відсутній режим логарифмічної функції частоти при качанні. В нього два генератора — один кварцований, другий — ГУН. ГУН управляється або лінійною напругою, або логарифмованою від тієї ж лінійної. Логарифматор досить примітивний, на діодах, але на ті часи іншого не було. Так ось я і вирішив вжити замість всього цього DDS на AD9833. І ніяк не вдавалось запустити її під управлінням STM32F103C6T6. Ну С8 я просто не знайшов, але різниця у розмірі флешу. Хоча проекти для С8 на С6 напряму не переносяться, мабуть щось з адресами при налаштуванні. Працюю в Cube IDE. Включив апаратний SPI у режимі Transmit only master, 16 біт, MSB — first, CPOL — High, CPLHA — 1 Edge, NSS — Software. І ніяк воно не йде. Перепробував всілякі варіанти — нічого. Вже поставив другу АД-шку (була) — те ж саме. І от звернув увагу на те, що логічний аналізатор (він має змогу декодувати протокол) не розпізнає перше слово. Подальші — нормально, все те, а перше — похибка. Виявилось, що сигнал SCLK і після ініціювання режиму SPI СТМ-ки є 0
! При передачі він спершу встановлюється в 1 і далі йде передача, як зазвичай. При цьому сигнал FSYNK, до того перебуваючи в 1 скидається в 0, але в програмі це здійснюється перед процедурою передачі. І відбувається така картина: FSYNK вже в нулі, а SCLK ще в нулі. І АД-шка сприймає початок фрейму, коли першим йде не спадання фронту SCLK, а зростання. Після першого переданого слова все стає гаразд, SCLK залишається високим. Першим йде слово управління, воно не сприймається і все, далі казна що. Проблему вирішено тупо в лоб. До початку головного циклу передав щось (в мене було 0) по SPI не торкаючи програмно FSYNK. Посилка уходить в нікуди, трохи займає памʼяті, але нічого іншого я не вигадав. Після цього все запрацювало, як бажано. Режим свіп мене відверто потішив.
Тобто: в програмі для передачі коду частоти першим передається молодше слово, за ним — старше, все йде старшим бітом вперед. Режим SPI — mode 2. Для режиму свіп першим передається слово управління, в якому не зачіпається біт Reset, а вказується тільки адреса регістрів частоти. В мене це 0х2000. Далі код частоти і більш нічого. [0Х2000 — LSB(кода частоти) — MSB(кода частоти)] і так в циклі до кінця. Генерується синус без розриву фази. За якою функцією буде змінюватись частота — за вашим бажанням. Ось і все.