Перейти к содержанию
    


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. Все операции с памятью теперь не работают. В чем ошибка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В чем ошибка?

Ну, как минимум таблица расположена мимо памяти - адрес 0x310000 у 9G20 попадает в Reserved. Положите ее в SDRAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот протестировал. Результат здесь:

http://eewiki.ru/wiki/Example_DRAMSpeed_for_ARMGS10

 

Как видно для внешней RAM результат не так уж критично отличается.

 

Но в Keil-е, например, явно заданные массивы никогда не располагаются невыровненными, даже если в стеке объявлены.

Более того, рекомендуется выравнивание включать по границе 8-мь чтобы не было проблем с плавающей точкой.

Поэтому и в голову не приходило тестировать на невыровненных массивах. Да и DMA работать не должно на невыровненных массивах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int.

тоесть если в char {0xAB, 0xFA, 0xFF, 0x01}

то один int получится 0xABFAFF01, а

мне нужно чтобы было 0x000000AB, 0x000000FA и т.д. Пробовал объявлять char c __align. Результата не дало

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int.

тоесть если в char {0xAB, 0xFA, 0xFF, 0x01}

то один int получится 0xABFAFF01, а

мне нужно чтобы было 0x000000AB, 0x000000FA и т.д. Пробовал объявлять char c __align. Результата не дало

 

От это вы зря спросили, щаз ваш пост снесут в раздел для самых начинающих новичков.

Даже знаете, боюсь что мой ответ пролетит мимо, поскольку покуда я пишу ответ вашего поста может тут уже не быть.

 

Скажу коротко: memcpy для такого переноса данных не подойдет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я вроде как новичек, так что если перенесут, то не страшно, главное что ответили на вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал в sdram, результата не дало

Как пробовали и что именно получили?

 

Как использовать memcpy для копирования из массива char в int? а то когда копировал, получалось что char просто записывается в каждый байт int.

тоесть если в char {0xAB, 0xFA, 0xFF, 0x01}

то один int получится 0xABFAFF01, а

мне нужно чтобы было 0x000000AB, 0x000000FA и т.д.

Так это уже не копирование совсем, а перепаковка данных. Ее придется сделать руками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

указал в качестве адреса pTranslationTable указать 0x20040000. Также как и до этого программа дальше InitMMU не работала( хотя возможно и нет, нужно проверить под отладчиком).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делаю jpeg кодер для сжатия raw картинки с матрицы mt9d131. Картинка сжимается примерно за 3 секунды. Для такого контроллера это нормально?

 

Нормально, учитывая, что картинка цветная и её размер 1600х1200.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нормально, учитывая, что картинка цветная и её размер 1600х1200.

 

Картинка около 600 килобайт.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

картинка 640 на 480, цветная. Хотелось бы чтобы за секунду смог сжать.

 

Попробовал проверить инициализацию MMU через отладчик, все вроде проходит нормально. Но дальше уже ничего толком не работает. Не могу объяснить пока что именно, так как с отладчиком не работает TWI, и матрица не запускается, поэтому думаю нужно сделать отдельный проект и уже там вести отладку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...думаю нужно сделать отдельный проект и уже там вести отладку

Вот это правильно. Задвиньте пока JPEG и разберитесь с процессором и его периферией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да и 3 секунды для такой картинки это много. У меня оцифровка, ресайз и сжатие занимала без кэширования порядка секунды. С кэшированием насколько я помню около 0,3 секунды. Ну и простор для оптимизации ещё очень большой. Процессор AT91SAM9260.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...