Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Синхронный порт SSC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
DpInRock
Имею кодек и порт SSC1 at....9261.

Кодек работает мастером.
SSC настраиваю, PDC настраиваю. Активизирую кодек.
Начинает бегать счетчик PDC, вхожу в прерывания по ENDTX и ENDRX, обновляю next указатели и счетчики.
Все просто замечательно. Мистика в одном.

Никаких данных реально никуда не передается. Хуже того. Прямой доступ приемника НЕ ИЗМЕНЯЕТ память.
Указатели проверял вживую. Прямо из регистров PDC. Совпадают с нужными. Счетчики тикают с нужной скоростью.
Т.е. полная имитация работы.

В любом случае, даже если порт работает неправильно и все сгорело, то прямой доступ ДОЛЖЕН портить память хоть как-то.
Размещал буферы во всех типах памяти. Результат одинаковый.

Кроме прерываний ENDTX и ENDRX вздымаются еще два бита в регистре статуса SSC - это SYNTX и SYNRX. Они торчат всегда. Изчезают только тогда, когда я останавливаю мастер-кодек.

Почему прямой доступ тикает, но память по указателям прямого доступа не изменяется? Регистры matrix не трогал. Арбитраж стоит по умолчанию.
aaarrr
Наверное, в кэшируемую область гоните через PDC smile.gif
DpInRock
Я в фоновой программе через комп меняю эту память руками. Все изменения отображаются.

Но параллельно - выход передатчика также не работает. Симметрично.

Попробую ММУ не включать, конечно..
aaarrr
Цитата(DpInRock @ Apr 10 2009, 18:57) *
Я в фоновой программе через комп меняю эту память руками. Все изменения отображаются.

И что? Точно так же кэш меняете, если он включен.

Для приема/передачи данных извне нужно или отключить кэш для используемой области, или делать invalidate/flush.
DpInRock
Да.
Вот, блин, зараза. Думал по-легкому кодек срубить.
А сделаю-ка последний мегабайт некэшируемым и буду туда всякую дрянь пихать. Все равно там таблица ММУ чистоту крови портит.
DpInRock
Кэш оказался не причем. После выключения ММУ долго искал опчему программа не работает. Оказалось сильное замедление (из-за выключения кэша) убило несколько таймаутов.

Картина та же. Всё тикает, а реальных данных нет. Попробую без прямого доступа.
DpInRock
Кэш. Гад.
Но вроде уладилось. Узнал, что я намного чище играю на гитаре, чем Ричи Блэкмор через мой кодек.
aaarrr
Что-то мне это сильно напоминает, только вот никак не могу вспомнить, что именно sad.gif Как будто наблюдал уже такую картину.

А что за кодек, и какие настройки у SSC?

UPD: А, все-таки кэш.
DpInRock
Кодек SSM2602. Настройки простые. Так как он slave, то указаны внешние источники TF, RF и clock T. Clock К указан равным клоку T.
Кодек стерео, но работает в режиме DSP. Т.е. короткий Sync и дальше 2X16 бита для обоих каналов.

Код
AT91C_BASE_SSC1->SSC_CR=0x8000;//software reset
AT91C_BASE_SSC1->SSC_CMR=BOARD_MCK/(32*16000/2); for any case
//Slave Mode
//Rx
AT91C_BASE_SSC1->SSC_RCMR=0x521;
AT91C_BASE_SSC1->SSC_RFMR=0x1F;
//Tx
AT91C_BASE_SSC1->SSC_TCMR=0x502;
AT91C_BASE_SSC1->SSC_TFMR=0x3F;
//interrupt
AT91C_BASE_SSC1->SSC_IER=0x44;
//PDC
AT91C_BASE_SSC1->SSC_RCR=I2S_LEN/2;//receive counter
AT91C_BASE_SSC1->SSC_RNCR=I2S_LEN/2;//receive next counter
AT91C_BASE_SSC1->SSC_TCR=I2S_LEN/2;//tx counter
AT91C_BASE_SSC1->SSC_TNCR=I2S_LEN/2;//next tx counter;
AT91C_BASE_SSC1->SSC_RPR=(unsigned int )0x21e00000;//&rx_i2s[0];//receive buffer
AT91C_BASE_SSC1->SSC_RNPR=(unsigned int )0x21e10000;//&rx_i2s[I2S_LEN/2];//next receive buffer
AT91C_BASE_SSC1->SSC_TPR=(unsigned int )0x21e20000;//&tx_i2s[0];//tx buffer
AT91C_BASE_SSC1->SSC_TNPR=(unsigned int )0x21e30000;//&tx_i2s[I2S_LEN/2];//next tx buffer
AT91C_BASE_SSC1->SSC_PTCR=0x101;//Enable Rx Tx

AT91C_BASE_SSC1->SSC_CR=0x101;


Кэш. Но очень все странно. У меня на TMS тоже было полно кэша. И прямой доступ тоже был. Но он как-то не приносил такого опыта. ОН не переносил только самомодифициующийся код. Что было понятно сразу и не вызывало вопросов.
aaarrr
Цитата(DpInRock @ Apr 11 2009, 01:19) *
У меня на TMS тоже было полно кэша. И прямой доступ тоже был. Но он как-то не приносил такого опыта.

Что на TMS (как я понимаю, какой-то из 6000), что на ARM когерентность кэша - забота программиста.
DpInRock
Да 6414. Там как раз было два таких порта и кучка потоков Е1. Со своими собственными проблемами.

Ну да ладно. Это последняя мелкосхема на этой плате. Теперь остается чистое и скучное программирование.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.