Цитата(_Артём_ @ May 16 2012, 00:38)

Код
#pragma location=0xFFFF0400
__no_init volatile char PORT1; /* PORT1 is located at address 0xFFFF0400 */
а, такой вариант определения переменных я пробовал. В принципе подойдёт, но всё же не хотелось бы вручную считать адреса для каждой глобальной структуры.
У меня проблема сейчас в том, что не удаётся корректно записать во внешнюю SRAM 8-битные данные.
Например, заполняю область с адреса 0x60000000 256ю байтами от 0 до 255:
Код
void MemTest(char *pMem)
{
for (int i=0; i<256; i++)
*(pMem+i) = i;
}
int main(void)
{
Init();
while (1)
{
MemTest((char*) (0x60000000));
}
}
Смотрю в отладке, что записалось:
При записи 0 - записался байт 0x00 по адресу 0x60000001
При записи 1 - записался байт 0x01 по адресу 0x60000000
При записи 2 - записался байт 0x00 по адресу 0x60000003
При записи 3 - записался байт 0x03 по адресу 0x60000002
При записи 4 - записался байт 0x00 по адресу 0x60000005
При записи 5 - записался байт 0x05 по адресу 0x60000004
и так далее
Если заполнять память данными по 16-32 бит - данные пишутся верно.
Цитата(KRS @ May 16 2012, 01:13)

Нет, не правильно!
там есть сигналы byte enable.
Тут конечно моя ошибка в том что, не посмотрел на подключение SRAM и настройку FSMC (плату разрабатывал, трассировал другой сотрудник).
Покурил Reference Manual по FSMC и Application Note AN2784.
Проверил сигналы NBL[1..0] - выставляются верно, выбирается по очереди сначала младший байт, потом старший. При записи 16-32битных значений - выбираются оба байта.
Посмотреть шину данных и адреса в данный момент проблематично на этой плате.
Код инициализации ExtSRAM и фрагмент схемы с подключением микросхемы памяти привожу (шины адреса и данных так развёрнуты для удобства трассировки

).
Сообщение отредактировал athlon64 - May 16 2012, 06:28
Эскизы прикрепленных изображений