wmakc 0 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба void InitMMU(unsigned int *pTranslationTable) { int i; // Program the TTB _writeTTB((unsigned int) pTranslationTable); // Program the domain access register _writeDomain(0xC0000000); // Reset table entries for (i = 0; i < 4096; ++i) pTranslationTable[i] = 0; // Program level 1 page table entry pTranslationTable[0x3] = (0x3 << 20) | // Physical Address (1 << 10) | // Access in supervisor mode (15 << 5) | // Domain (1 << 4) | (1 << 3) | // Cachable 0x2; // Set as 1 Mbyte section /* SDRAM entire mapping */ for(i=0;i<64;i++) pTranslationTable[0x200+i] = ((0x200+i) << 20) | // Physical Address (1 << 10) | // Access in supervisor mode (15 << 5) | // Domain (1 << 4) | (1 << 3) | // Cachable 0x2; // Set as 1 Mbyte section pTranslationTable[0xFFF] = (0xFFF << 20) | // Physical Address (1 << 10) | // Access in supervisor mode (15 << 5) | // Domain (1 << 4) | 0x2; // Set as 1 Mbyte section // Enable the MMU CP15_EnableMMU(); } int main(void) { CP15_Enable_I_Cache(); InitMMU((unsigned int *) 0x310000); Попробовал запустить MMU. Все операции с памятью теперь не работают. В чем ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба В чем ошибка? Ну, как минимум таблица расположена мимо памяти - адрес 0x310000 у 9G20 попадает в Reserved. Положите ее в SDRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wmakc 0 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Пробовал в sdram, результата не дало Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Ну вот протестировал. Результат здесь: http://eewiki.ru/wiki/Example_DRAMSpeed_for_ARMGS10 Как видно для внешней RAM результат не так уж критично отличается. Но в Keil-е, например, явно заданные массивы никогда не располагаются невыровненными, даже если в стеке объявлены. Более того, рекомендуется выравнивание включать по границе 8-мь чтобы не было проблем с плавающей точкой. Поэтому и в голову не приходило тестировать на невыровненных массивах. Да и DMA работать не должно на невыровненных массивах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wmakc 0 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int. тоесть если в char {0xAB, 0xFA, 0xFF, 0x01} то один int получится 0xABFAFF01, а мне нужно чтобы было 0x000000AB, 0x000000FA и т.д. Пробовал объявлять char c __align. Результата не дало Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int. тоесть если в char {0xAB, 0xFA, 0xFF, 0x01} то один int получится 0xABFAFF01, а мне нужно чтобы было 0x000000AB, 0x000000FA и т.д. Пробовал объявлять char c __align. Результата не дало От это вы зря спросили, щаз ваш пост снесут в раздел для самых начинающих новичков. Даже знаете, боюсь что мой ответ пролетит мимо, поскольку покуда я пишу ответ вашего поста может тут уже не быть. Скажу коротко: memcpy для такого переноса данных не подойдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wmakc 0 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Да я вроде как новичек, так что если перенесут, то не страшно, главное что ответили на вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Пробовал в sdram, результата не дало Как пробовали и что именно получили? Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int. тоесть если в char {0xAB, 0xFA, 0xFF, 0x01} то один int получится 0xABFAFF01, а мне нужно чтобы было 0x000000AB, 0x000000FA и т.д. Так это уже не копирование совсем, а перепаковка данных. Ее придется сделать руками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wmakc 0 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба указал в качестве адреса pTranslationTable указать 0x20040000. Также как и до этого программа дальше InitMMU не работала( хотя возможно и нет, нужно проверить под отладчиком). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 августа, 2010 Опубликовано 22 августа, 2010 · Жалоба Перед инициализацией MMU следует запретить и инвалидировать ICache. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 23 августа, 2010 Опубликовано 23 августа, 2010 · Жалоба Делаю jpeg кодер для сжатия raw картинки с матрицы mt9d131. Картинка сжимается примерно за 3 секунды. Для такого контроллера это нормально? Нормально, учитывая, что картинка цветная и её размер 1600х1200. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 августа, 2010 Опубликовано 23 августа, 2010 · Жалоба Нормально, учитывая, что картинка цветная и её размер 1600х1200. Картинка около 600 килобайт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wmakc 0 23 августа, 2010 Опубликовано 23 августа, 2010 · Жалоба картинка 640 на 480, цветная. Хотелось бы чтобы за секунду смог сжать. Попробовал проверить инициализацию MMU через отладчик, все вроде проходит нормально. Но дальше уже ничего толком не работает. Не могу объяснить пока что именно, так как с отладчиком не работает TWI, и матрица не запускается, поэтому думаю нужно сделать отдельный проект и уже там вести отладку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 августа, 2010 Опубликовано 23 августа, 2010 · Жалоба ...думаю нужно сделать отдельный проект и уже там вести отладку Вот это правильно. Задвиньте пока JPEG и разберитесь с процессором и его периферией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 24 августа, 2010 Опубликовано 24 августа, 2010 · Жалоба Да и 3 секунды для такой картинки это много. У меня оцифровка, ресайз и сжатие занимала без кэширования порядка секунды. С кэшированием насколько я помню около 0,3 секунды. Ну и простор для оптимизации ещё очень большой. Процессор AT91SAM9260. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться