К LPC2478 подключена 32 битная SDRAM, плата самодельная. Выявилась проблемка, если читать слово 4 байта (32бита) из SDRAM по адресу не кратному 4 (не выровненому по слову) то байты переходящие через "границу" грузятся не из следующего слова а из этого же. Любые чтения и записи не нарушающие границу слова работают замечательно. Документация както умалчивает эту проблему, либо плохо искал. Вопрос ... это я туплю или так и должно быть ? Детали программирования схему пока не привожу есть ощущение что этот EMC по другому не умеет.
Сообщение отредактировал Nick Nickl's - Apr 11 2011, 07:30
Это особенность не конкретного ядра, а вообще архитектуры ARM. В ряде случаев попытка обращения по невыровненному адресу вызывает падение, в других случаях -- загрузку выровненного слова, но с "вращением" содержимого... В общем, там целая куча нюансов, так что лучше взять за правило: никогда не обращаться по невыровненным адресам.
Хорошо, если уж быть точней, -- до ARMv5 включительно. Начиная с ARMv6, появились средства управления невыровненными доступами, и в зависимости от значений соответствующих управляющих битов процессор может вести себя по-разному. Тем не менее, общее правило остаётся в силе: избегать невыровненных доступов.