SAMSUNG S3C4530A

Do you have a question? Post it now! No Registration Necessary

Threaded View
Привет All!

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

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Дареному письму в клуджи не смотрят.

Re: SAMSUNG S3C4530A
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.
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.

--
С уважением,
 Andy

We've slightly trimmed the long signature. Click to see the full one.
Re: SAMSUNG S3C4530A
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 все в порядке? У самсов, как правило, она задается
  отдельной ногой.

--
Best regards,
 Vyacheslav                            mailto: snipped-for-privacy@helpco.kiev.ua



Re: SAMSUNG S3C4530A
Привет Vyacheslav!

04 Mar 04 17:01, Vyacheslav Ovsiyenko писал Alex Mogilnikov:

 AM>> адрес 0x332. А почему A0 равен нулю?

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

    Hа ноге LITTLE высокий уровень, то есть кристалл работает в режиме
little-endian. И я не понимаю, как это может повлиять на результат.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Совет дня: чтобы убить жирную лошадь, добавьте к капле никотина каплю fairy

Re: SAMSUNG S3C4530A
Привет Andy!

04 Mar 04 14:59, Andy Mozzhevilov писал Alex Mogilnikov:

 AM> Обычно при использовании 16-ти битной данных А0 не используется.

    ? Hе понял. Почему пиша... пися... записывая половинное слово в адреса,
скажем, 4 и 6 я получаю одно и то же значение на шине адреса?

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

    Это понячтно. Почему при четнии байта по адресу 2 на ША опять же
выставляется алрес 0?

 AM> Для чтения слова, выравненного по четному адресу за одно обращение
 AM> будет считано слово целиком.

    ? Слово по определению должно быть выравнено на 4 (даже не на "четный
адрес").

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

    Со считыванием слов как раз проблем нет, слово считывается за два цикла, в
первом А0 равно 0, во втором А0 равно 1. Почему при записи половины слова по
адресу 2 А0 равно 0?

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

    Ты что-то путаешь. Такой адресный сдвиг уже выполнен внутри кристалла, и
это описано в документации.

 AM> При записи в RAM по 16 битной шины задействуются сигналы WRH' WRL',
 AM> позворляющие писать соответственно только старший или только младший
 AM> байт в текущем цикле обращения к RAM.

    Мне не нужен старший байт (D8..D15). Проблема в том, что ПЗУ для записи в
нее требует выставления адреса 0x555, а такой адрес выставить не получается,
так как A0 всегда почему-то равен нулю...

 AM>  У 32-х битных RAM (если такие
 AM> бывают) по идее должно быть 4 сигнала WR.

    Да, конечно, их 4. Hо два последних меня в данном случае не интересуют.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Слепой Пью, Глухой Ем...

Site Timeline