|
LPC2214 External Memory Interface, Непонятная временная диаграмма |
|
|
|
Nov 18 2006, 09:51
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Собственно к LPC2214 подключен внешний чип (НЕ ПАМЯТЬ) по параллельной шине. Используется EMC BANK0 в восмиразрядном режиме.
При выполнении нескольких последовательно идущих операций записи CS0 устанавливается в активный уровень и "под ним" идут несколько импульсов BLS0. При выполнении операций чтения все нормально - на каждый импольс OE идет свой импульс CS.
Кроме того, при чередовании операций чтения и записи, независимо от порядка следования, CS захваиывает один импульс OE, при чем всегда ближайший к BLS.
Пример 1:
char C = 2;
*((char *)0x80000000) = C; *((char *)0x80000001) = C + 1; *((char *)0x80000002) = C + 2; *((char *)0x80000003) = C + 3;
Приводит к появлению одного импульса CS и четырех импульсов BLS. Длительность CS перекрывает все импульсы BLS.
Пример 2:
char C = 2; char X;
*((char *)0x80000000) = C; X = *((char *)0x80000001) ; *((char *)0x80000002) = C + 2; X = *((char *)0x80000003);
Приводит к появлению двух импульсов CS. Под первым СНАЧАЛА импульс OE для адреса 0x80000001, ПОТОМ импульс BLS для адреса 0x80000000. Под вторым то-же самое для адресов 0x80000002 0x80000003.
Собственно адрес не имеет значение.
Пример 3:
*((char *)0x80000000) = C; X = *((char *)0x80000000) ;
Или:
*((char *)0x800000E0) = C; X = *((char *)0x80000008) ;
Приводит к тому-же результату, то есть СНАЧАЛА импульс OE, ПОТОМ импульс BLS.
И еще. Обнаружил странную зависимость. Если перед и после оперции записи есть загрузка PC (ветвление, вызов подпрограмм) то все идет как по маслу, на каждый BLS выдается свой CS.
Прошерстил даташиты и ераты. Ничего по этому поводу не нашел.
Кто нибудь может хоть как-то покоментировать?
В догонку.
Проверить на другом CS не имею возможности ввиду занятых пинов другими функциями.
И вопрос: Неужели это MAM такие фортели выкидывает?
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
 |
Ответов
|
Nov 19 2006, 21:18
|
Частый гость
 
Группа: Свой
Сообщений: 122
Регистрация: 24-05-05
Пользователь №: 5 329

|
наблюдал этот эффект. много волос на себе порвал, пока понял, почему моё устройство работает, мягко говоря, не так. Единственное, что мне помогло получить отдельный cs на каждую операцию - это запись или чтение в другой CS. Запись или чтение во внутреннюю память почему-то не влияла. То ли это EMC как-то "оптимизирует" свою работу, то ли просто ошибка. Я перестал над этим думать, пока не столкнулся с чудесами контроллера внешних прерываний. Просто принял по умолчанию, что данный контроллер работает именно так. Ктати, ещё одно интересное наблюдение есть: при выключении бита RBLE устройство перестаёт работать окончательно, хотя линий bls не использует, а работает исключительно по cs,oe,we
|
|
|
|
Сообщений в этой теме
amw LPC2214 External Memory Interface Nov 18 2006, 09:51 zltigo Цитата(amw @ Nov 18 2006, 11:51) Неужели ... Nov 18 2006, 19:24 Alex03 А компилятор ничего лишнего не оптимизирует?
Да и... Nov 20 2006, 08:45 makc Я эту проблему решаю вставкой nop между операциями... Nov 20 2006, 08:51 radist ЦитатаДругих (кроме еще больших, нежели описано) ... Nov 20 2006, 15:43 amw Выходит не я единственный такой везучий .
ЦитатаА... Nov 21 2006, 19:18 zltigo Цитата(amw @ Nov 21 2006, 18:18) BCFG0 = ... Nov 21 2006, 19:55 Alex03 Цитата(zltigo @ Nov 21 2006, 21:55) Цитат... Nov 22 2006, 08:47 amw Не ожидал такой полемики.
Может повторюсь, извини... Nov 22 2006, 12:20  amw Цитата(amw @ Nov 22 2006, 13:20) Сейчас в... Nov 22 2006, 12:47   amw Цитата(amw @ Nov 22 2006, 13:47) Цитата(a... Nov 22 2006, 13:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|