vlad242 (13.03.2006 12:03, просмотров: 1593)
Не могу заставить работать SSC на at91rm9200, pls, знающие, подскажите! Не могу заставить работать SSC, вот простецкий код инициализации и основного цикла.
Что здесь не так?
Клок осцилографом вижу, фреймы(когда включены)- вижу, а данных не вижу!
//* Configure SSC1 PIOs TF/TK/TD
//назначаем выводы
*AT91C_PIOB_PDR = AT91C_PB7_TK1 |
AT91C_PB8_TD1 |
AT91C_PB6_TF1 ;
//* Configure PMC by enabling SSC1 clock включаем клок для SSC1
*AT91C_PMC_PCER |= 1 << AT91C_ID_SSC1; /* enable the SSC1 peripheral clock */
//* Reset All the Peripheral ресетим
*AT91C_SSC1_CR = AT91C_SSC_SWRST ;
//* Define the Clock Mode Register
// for MCK ei 60000000 => 21
// клок 1.8 МГц
*AT91C_SSC1_CMR = 0x15;
*AT91C_SSC1_TCMR = (((BITS_BY_SLOT*SLOT_BY_FRAME/2)-1) <<24) |// период, если нет фрейма, то и период не нужен
AT91C_SSC_START_CONTINOUS|//старт по записи в регистр AT91C_SSC1_THR
AT91C_SSC_CKO_CONTINOUS | // continuous transmit clock постоянная генерация
AT91C_SSC_CKS_DIV; // Divided clock клок внутренний
*AT91C_SSC1_TFMR =
AT91C_SSC_FSOS_NONE |//фрейма нет
//AT91C_SSC_FSDEN |//нет данных синхронизации
//AT91C_SSC_DATDEF |
(((BITS_BY_SLOT/2-1)<<16) & AT91C_SSC_FSLEN) | // Fslen => 16 Clock
(((SLOT_BY_FRAME-1)<<8) & AT91C_SSC_DATNB) | // 2 Data by frame
AT91C_SSC_MSBF | // MSB in first
(BITS_BY_SLOT-1) ; // 16 bits
*AT91C_SSC1_CR = AT91C_SSC_TXEN; /* Enable Tx */
//конец инициализации
//теперь в основном цикле просто пишу в регистр и проверяю флаг
*AT91C_SSC1_THR = 0xaaa2; ; /* Write the TD data */
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){data_out= 0x1112; } /* Wait ready */