Собственно к 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 такие фортели выкидывает?