Цитата(Bulat @ Jan 5 2010, 14:35)

...пауза между клоками в виде длинной 1, а мне ноль нужен.
Там не "1", а третье состояние, поэтому уровень в паузах будет зависеть от бита CKI. Но в любом случае снаружи потребуется pull-down, если нужен честный ноль.
Цитата(Bulat @ Jan 5 2010, 14:35)

При добавлении поля AT91C_SSC_DATDEF первым битом TD является 1, что меня тоже не устраивает.
Я его специально добавил, чтобы видеть границы реального слова.
Цитата(Bulat @ Jan 5 2010, 14:35)

То есть, SSC почему-то после загрузки буфера THR сначало передает бит, который должен висеть на TD при отключенном передатчике SSC (поле DATDEF), а затем уже слово данных, но при этом на все это выделяется всего 32 клока! Как исключить передачу DATDEF при первом клоке?
Он не "передает DATDEF", а почему-то неправильно гейтирует клок (со сдвигом на один такт). Сейчас попробуем разобраться.
Увы, работа CKO/CKG в мануале как-то обойдена стороной

Что можно еще попробовать:
1. Привязать старт к уровню вместо фронта. Возможно, это изменит поведение CKO.
2. Отказаться от CKO и использовать вместо него CKG:
Код
//* Write the Transmit Clock Mode Register
AT91C_BASE_SSC->SSC_TCMR = (17 << 24) & AT91C_SSC_PERIOD | (4<<16) & AT91C_SSC_STTDLY |
AT91C_SSC_START_RISE_RF | (0x1 << 6) | AT91C_SSC_CKI | AT91C_SSC_CKS_DIV;
//* Write the Transmit Frame Mode Register
AT91C_BASE_SSC->SSC_TFMR = AT91C_SSC_FSOS_POSITIVE | (31<<0) & AT91C_SSC_DATLEN |
(3 << 16) & AT91_SSC_FSLEN | AT91C_SSC_DATDEF;
Возможно, придется отинвертировать TF, если передатчик действительно отказывается работать при 0x1 в CKG:
Код
//* Write the Transmit Clock Mode Register
AT91C_BASE_SSC->SSC_TCMR = (17 << 24) & AT91C_SSC_PERIOD | (4<<16) & AT91C_SSC_STTDLY |
AT91C_SSC_START_FALL_RF | (0x2 << 6) | AT91C_SSC_CKI | AT91C_SSC_CKS_DIV;
//* Write the Transmit Frame Mode Register
AT91C_BASE_SSC->SSC_TFMR = AT91C_SSC_FSOS_NEGATIVE | (31<<0) & AT91C_SSC_DATLEN |
(3 << 16) & AT91_SSC_FSLEN | AT91C_SSC_DATDEF;
3. Если ничего из перечисленного не поможет, задействовать еще и приемник.