
Возник сразу вопрос. У меня задача такая. Есть массив, хочу его гнать по SSC через PDC следующим макаром: 1 байт неважно чего, 7 байт данных (и т.д.). Синхронизация -- внешняя на ногу TK. Фреймовые сигналы вообще не важны.
Самая простая настройка передатчика
Код
AT91F_SSC_Configure (AT91C_BASE_SSC,
MCK, // \arg System Clock Frequency
0,// \arg Expected Baud Rate Frequency
0, // \arg Receiver Clock Parameters
0, // \arg mode Register to be programmed
0x2 | AT91C_SSC_CKI, // \arg Transmitter Clock Parameters
7); // \arg mode Register to be programmed
MCK, // \arg System Clock Frequency
0,// \arg Expected Baud Rate Frequency
0, // \arg Receiver Clock Parameters
0, // \arg mode Register to be programmed
0x2 | AT91C_SSC_CKI, // \arg Transmitter Clock Parameters
7); // \arg mode Register to be programmed
приводит к тому, что перед данными в течении 3-х клоков мусор (0-1-0). Я думал, что мусор будет в течении 1 клока (минимальный фреймовый сигнал), но не 3. И почему 1 -- ведь AT91C_SSC_DATDEF не взведен. В общем непонятно.
Дальше я пытался различными настройками удлинить фрейм до необходимых мне 8 бит, чтобы данные шли после. Но никакие настройки не влияли -- неизменно первые три клока заполнялись разного рода фигней, и только потом шли данные. Только AT91C_SSC_STTDLY влияет, 5 бит если поставить, то все как надо. Но тут проблема, что при перегоне большого массива через PDC эта задержка я так понимаю только один раз будет.
Может кто посоветует с настройками.