SAMSUNG S3C4530A

Loading thread data ...

AM> Пытаюсь применить сабж. Hаблюдаю странное явление. К сабжу подключено AM> 16-разрядное ПЗУ, соответственно, B0SIZE установлено в 10, то есть half-word. AM> Выполняю (через ICE-Braker) команду strh r1,[r0]. Если r0 содержит адрес, AM> скажем, 0x444 - то все работает нормально, то есть при записи на шине AM> выставляется адрес 0x222. Если же r0 содержит адрес 0x666, то на внешней шине AM> выставляется адрес 0x332. А почему A0 равен нулю? Аналогично, при записи в AM> адрес 0xaaa на шине получается адрес 0x554. AM> В чем дело? Почему A0 всегда 0? Сам провод исправен, если делать str AM> r1,[r0], то запись, как и положено, выполняется в два цикла, в первом A0=0, во AM> втором A0=1. Hикакие конфигурационные регистры после сброса не трогались. Два AM> имеющихся у меня кристалла ведут себя одинаково. Что я делаю неправильно?

Обычно при использовании 16-ти битной данных А0 не используется. Ведь память она все равно определяется в байтах, только доступ к ней осуществляется пословно. То есть, например: Для чтения байта по адресу 0 на ША выставляется адрес 0, читается целиком 16-ти битное слово, но берется младший байт. Для чтения байта по адресу 1 на ША выставляется адрес 0,читается

16-ти битное слово, но берется уже старший байт. Для чтения слова, выравненного по четному адресу за одно обращение будет считано слово целиком. Если нужно считать слово, не выравненное по четному адресу, то есть один байт которого находится по адресу 1, а другой по адресу 2, то для считывания такого слова будет производиться 2 обращения к памяти.

То есть, если применяется 16-ти битный доступ, то коммутация процессора и памяти делается по схеме uC Память А0 - А1 А0 А2 А1 А3 А2 ....

Для 32-х разрядной шины соответственно uC Память А0 - А1 - А2 А0 А3 А1

При подключении ROM и/или при чтении из RAM uC сам разбирается, какой байт в слове соответсвует именно тому адресу, из которого производится чтение. При записи в RAM по 16 битной шины задействуются сигналы WRH' WRL', позворляющие писать соответственно только старший или только младший байт в текущем цикле обращения к RAM. У 32-х битных RAM (если такие бывают) по идее должно быть 4 сигнала WR.

Reply to
Andy Mozzhevilov

Hello Alex,

AM> Пытаюсь применить сабж. Hаблюдаю странное явление. К сабжу подключено AM> 16-разрядное ПЗУ, соответственно, B0SIZE установлено в 10, то есть half-word. AM> Выполняю (через ICE-Braker) команду strh r1,[r0]. Если r0 содержит адрес, AM> скажем, 0x444 - то все работает нормально, то есть при записи на шине AM> выставляется адрес 0x222. Если же r0 содержит адрес 0x666, то на внешней шине AM> выставляется адрес 0x332. А почему A0 равен нулю? Аналогично, при записи в AM> адрес 0xaaa на шине получается адрес 0x554.

А с endianess все в порядке? У самсов, как правило, она задается отдельной ногой.

Reply to
Vyacheslav Ovsiyenko
Reply to
Alex Mogilnikov
Reply to
Alex Mogilnikov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.