|
Atmel SAM3U4, Различные вопросы |
|
|
|
Jun 26 2011, 18:46
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Доброго времени суток! Начал потихоньку осваивать SAM3U4C, сделал темку, так как возникают различные вопросы, которые хотелось бы обсудить.
В этом камне, не смотря на два банка, RAM можно использовать как единый блок по адресам 0x20078000 - 0x20083FFF.
Можно ли такую же методику применить к флеш? В комплекте с ИАРом идёт флешлоадер, который шьёт сразу два банка по адресам 0x000E0000 - 0x0011FFFF.
Сделал в .icf файле также, посмотрим, как получится на практике, если вместо 0x00080000 везде в программе использовать 0x000E0000.
Ещё хотел спросить про встроенный RTC, если кто им пользовался.
Я так понял, что модифицировать время тут не так просто - надо сначала остановить часы, записать новые значения, запустить их, и подождать около 1 секунды, пока можно будет проводить следующую модификацию. Вот что интересно - после записи и запуска часов сбрасывается ли прескалер секунд? То есть переход на следующую секунду наступит ровно через секунду после запуска, или раньше, в зависимости от значения прескалера?
|
|
|
|
|
 |
Ответов
(105 - 119)
|
Dec 28 2011, 16:47
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Dec 28 2011, 20:38)  Ну, не такая уж большая разница (особенно если учесть, что контроллеру вообще затруднительно будет "перепахивать" такие потоки). Возможно, используют большие блоки. С PRE-ERASE в свое время экспериментировал, но сколько-нибудь значимого влияния на скорость записи никогда не наблюдал. Да перепахивать-то особо будет не нужно, просто "закидывать" на карточку с компа по USB MSC. Вернее всего рулят большие блоки по 128 секторов в ридере. Хотя при увеличении кол-ва секторов с 32 до 64 получил прирост на запись всего около одного мегабайта в секунду. А может быть "тормозит" мой драйвер или атмеловский контроллер MCI, а в ридере более оптимальная аппаратная реализация... ЗЫ: ах да, загрузка процессора при этом составила 4-5% под scmRTOS (96 МГц).
|
|
|
|
|
Dec 28 2011, 16:59
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Dec 28 2011, 20:52)  В общем, я бы не стал убиваться за пару мегабайт в секунду  Согласен, тем более, пока не знаю, куда копать, вроде нигде нет лишних задержек... Кстати, всё вроде нормально работает с XFRDONE, единственное, чтобы сигнал не проскакивал раньше времени, пришлось разрешать его прерывание только непосредственно после выдачи команды STOP_TRANSMISSION(CMD12).
|
|
|
|
|
Jan 1 2012, 17:25
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Да, SSC можно заставить быть I2S-мастером. Вот пример (он, правда, от SAM7, да неважно): Код void ssc_start_i2s(void) { AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST;
AT91C_BASE_SSC->SSC_CMR = 16; // MCK / 32
// PERIOD: 32, STTDLY: 1, START: falling edge on TF, CKO: continuous, CKS: TK AT91C_BASE_SSC->SSC_TCMR = (15 << 24) | (1 << 16) | AT91C_SSC_START_FALL_RF | AT91C_SSC_CKO_CONTINOUS | AT91C_SSC_CKS_DIV; // FSOS: negative pulse on TF, DATNB: 1, MSB first, 16 bits AT91C_BASE_SSC->SSC_TFMR = AT91C_SSC_FSOS_NEGATIVE | (15 << 16) | (1 << 8) | AT91C_SSC_MSBF | 15;
...
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_TXEN; }
|
|
|
|
|
Jan 2 2012, 09:09
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Jan 2 2012, 00:00)  Мутна вода, как водится. Это точно  Всё, достал меня I2C Я, конечно, понимаю - длинные провода и всё такое - но когда мастер в виде SAM3U4 при малейшем шорохе на стороне сыпет NACKами и ARBLOSTами... Навешал на шину ёмкостей под 300пф, вроде заработало стабильно, но стоило одновременно с передачей по I2C поработать с картой памяти на 24 мегабита/сек - снова ошибки, причём именно со стороны мастера - NACK, ARBLOST (какой арбитрейшн лост, ты же единственный мастер на шине!) или просто тупой зависон всего модуля с подтянутыми к земле данными и/или клоком, из которого можно выйти только сняв с контроллера питание...  При этом если воткнуть другую карточку, более скоростную - на 48 мегабит/сек - всё снова стабильно. Снижение скорости до черепашьего уровня никак не влияет на ситуацию. На осциллограммах хорошо видно, как мастер перед ошибкой "режет" клок - ширина импульса высокого уровня становится во много раз меньше необходимой. Что он там "ловит" не знаю, но такому неустойчивому дерьму просто необходимо было повесить на входа фильтр, а не гордо писать в мануале: Цитата Slope control and input filtering (Fast mode) Not Supported Помнится, с LPC17xx тоже пришлось немного повозиться, но там были NACKи только от привередливого кодека (у которого, видимо, тоже по аналогии с сэмом отсутствовали фильтры на входе), но проблема быстро решилась а мастер работал безо всяких проблем. Попробую тоже написать работу с I2C девайсами врукопашную, может, будет получше... ЗЫ: так и хочется уже отказаться от неустойчивого I2C в пользу SPI, но подкупает малое кол-во проводников...
|
|
|
|
|
Jan 2 2012, 15:49
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Jan 2 2012, 16:50)  Только к сэмам. Скажем, на AVR совершенно замечательный TWI, хотя и называется так же. А что касается влияния высокочастотных цепей, то это вопрос к трассировке. Вот ведь позор то какой, на крошке AVR хороший TWI, а на крупных камнях - совсем никакой  На девятых армах, интересно, как с этим дела? Написал софтовый TWI, правда, пока без поддержки Clock Stretching и без фильтрации, и только в режиме мастера. Но результат налицо - пока что ни одного глюка, убрал все кондёры с шины, и даже щупы осциллографа не мешают - ни одного чиха!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|