Полная версия этой страницы:
LPC2292 c внешней ОЗУ и JTAG
Добрый день, вечер и утро всем!!!
Вот проблема есть такая был у меня модуль LPC-H2294 так как известно две микросхемы ОЗУ установлено с 16-ти битной организацией, другими словами на 32-х битную шину данных прицеплена ОЗУ. Так вот я прописывал в IAR адреса ПЗУ и ОЗУ в адресном пространстве внешнего ОЗУ и грузил туда через JTAG программу объемом ~200кБайт и все было ОК.
А потом при разработки принципиальной схемы пришлось отказаться от 32-ти битной шины данных и сделал 16-ти битную шину но вот не задача теперь когда пытаюсь грузить данные в внешнюю ОЗУ через JTAG данные теряются как мне кажется это обусловлено тем что данные передаются 32-х битными словами.
Так вот вопрос может можно заставить грузить данные 16 битными словами?
Может в трумб режиме ?
Alex03
May 17 2006, 18:11
А загрузить во внутреннюю память тестик внешней и прогнать? Всё нормально?
Посмотрите на регистры BCFG0..BCFG3. Не инициализировали ли Вы их раньше в какихнить скриптах (я с ИАР-ом не работал.)
Если нет, то видимо Вы ранее полагались на дефолтные установки и использовали банк 1, т.е. диапазон адресов 0x81000000-0x81FFFFFF.
Если так то сейчас Вам надо использовать банк 2 (CS2 и соответственно диапазон 0x82000000-0x82FFFFFF). Или инициализировать нужный BCFGх соответствующим значением перед загрузкой.
тумб/арм тут не при чём.
адреса прописаны верно
и вообще какая разници в настройках BCFG0..BCFG3 при загрузки процессора через JTAG ведь она выполняется аппаратно. BCFG0..BCFG3 нужны чтобы конфигурировать разрядность и другое при чтении/записи во внешнее ОЗУ в рабочем режиме. Озу подключена ко всем сигналам CS0,CS1 по одной микрухе K6R4016 к каждому.
Вопрос в том как заставить аппартно укладывать данные полученые из JTAG 16-ти битными словами чтобы потом при запуске части программы из внутреннего ОЗУ настроить шину в 16-ти битный режим и продолжить выполнение программы уже из внешнего ОЗУ.
Alex03
May 18 2006, 04:43
Цитата(asen @ May 18 2006, 08:55)

адреса прописаны верно
и вообще какая разници в настройках BCFG0..BCFG3 при загрузки процессора через JTAG ведь она выполняется аппаратно. BCFG0..BCFG3 нужны чтобы конфигурировать разрядность и другое при чтении/записи во внешнее ОЗУ в рабочем режиме. Озу подключена ко всем сигналам CS0,CS1 по одной микрухе K6R4016 к каждому.
Сам проц про внешнюю память ничего не знает, поэтому ему надо сказать об этом.
В регистрах BCFGx есть биты 29:28 которые отвечают за разрядность памяти в соответствующем банке.
По ресету они устанавливаются в:
Банк 0 - В зависимости от входов BOOT[1:0] во время ресета.
Банк 1 - 32 рагдяда
Банк 2 - 16 рагдядов
Банк 3 - 8 рагдядов
Цитата
Вопрос в том как заставить аппартно укладывать данные полученые из JTAG 16-ти битными словами чтобы потом при запуске части программы из внутреннего ОЗУ настроить шину в 16-ти битный режим и продолжить выполнение программы уже из внешнего ОЗУ.
Прописать BCGFx, проц сам будет разбивать одно 32-х разрядное обращение на два 16-ти.
Ладно бох с ним с JTAG
Может кто нибуть сказать как обратится (записать/прочитать) в IAR к конкретной ячейке по заданому адресу памяти подключеной к внешней шине.
zltigo
May 18 2006, 07:43
Цитата(asen @ May 18 2006, 10:37)

Ладно бох с ним с JTAG
Может кто нибуть сказать как обратится (записать/прочитать) в IAR к конкретной ячейке по заданому адресу памяти подключеной к внешней шине.
Абсолютно аналогично как и к внутренней, и как к 'портам'. Или я чего-то не понимаю в проблеме?
Вообщем на внешней шине у меня висит дисплей PG320240-D И линия А4 завадена для выбора команда/данные вот мне надо писать по адресу 0x83000001 данные и 0x83000011 команды чтобы соответственно на передаче данных А4 = 0, а на ппередаче адреса А4=0. Вот попробывал так обьявить но видемо на правельно. Может как еще можно?
__IO_REG8 (LCD_DATA, 0x83000001,__READ_WRITE);
__IO_REG8 (LCD_COM, 0x83000011,__READ_WRITE);
Цитата(asen @ May 18 2006, 11:37)

Ладно бох с ним с JTAG
Может кто нибуть сказать как обратится (записать/прочитать) в IAR к конкретной ячейке по заданому адресу памяти подключеной к внешней шине.
1 способ через указатель, годится для любого С
Код
unsigned short* Ptr;
Ptr=(unsigned short*)(0x82000000);
Ptr[0]=0x55AA;
if (Ptr[0]!=0x55AA) .....
.....
2 способ использовать @ (фишка IAR)
Код
unsigned short ExtRam[8192]@0x82000000;
3 способ использовать сегменты и XCL файл
Попробывал вот этот способ
unsigned short LCD_DATA@0x83000001;
unsigned short LCD_COM@0x83000011;
но он выдает ошибку
Error[Be012]: location address not allowed (object must have static storage duration and be const or __no_init) C:\prog\proba\main.cpp 6
Error[Be012]: location address not allowed (object must have static storage duration and be const or __no_init) C:\prog\proba\main.cpp 7
zltigo
May 18 2006, 08:40
Цитата(asen @ May 18 2006, 11:20)

Error[Be012]: location address not allowed (object must have static storage duration and be const or __no_init) C:\prog\proba\main.cpp 6
Ну так успокойте его - скажите, что согласны не инициализировать
Ну и главное - адреса-то странные- смещенные.
С адресацией я разобрался всем спасибо !!!
Вот только теперь другая проблема у меня по сигналу CS3 выбирается ЖКИ подключенной к внешней шине к младшим 8 разрядам. А адресация между командами/данными выполняется за счет линии А4. Дисплей имеет контроллер SED1335 и имеет возможность работать в режиме i8080. Так проблема собственно следующая так как дисплей имеет питание 5 В а контроллер питается от 3,3 В и видимо уровни не дотягивают. В общем, он отказывается работать. Когда до этого я его запускал совместно с модулем LPC-H2294, я ставил на порты подтягивающие резисторы к +5В. А на шину ставить боюсь, так как не кто не гарантирует, что внешняя шина у контроллера тоже не боится 5 В.
Вопросы следующие
1. Может, кто пробовал цеплять к внешней шине привязывающие резисторы
2. Может можно еще как то поднять уровни до 5 вольтовых.
Alex03
May 18 2006, 17:56
Оно и без подтяжки работать должно.
Сравните минимальные/максимальные уровни напряжения на вход/выход LPC и SED
В том то и дело что минимальный высокий входной уровень на входе ЖКИ 4В а максимальный который может обеспечить микроконтроллер 3-3,3 В вот такая борада!!!
zltigo
May 19 2006, 05:35
Цитата(asen @ May 18 2006, 17:25)

В общем, он отказывается работать. Когда до этого я его запускал совместно с модулем LPC-H2294, я ставил на порты подтягивающие резисторы к +5В. А на шину ставить боюсь, так как не кто не гарантирует, что внешняя шина у контроллера тоже не боится 5 В.
А документацию почитать что мешает?
[6] 5 V tolerant pad with built-in pull-up resistor providing digital I/O functions with TTL levels and hysteresis and 10 ns slew rate control.
The pull-up resistor’s value ranges from 60 kΩ to 300 kΩ.
Alex03
May 19 2006, 05:52
ХМ
В том PDF-е на SED1335 который у меня есть D0..D7 и все остальные линии микропроцессорного интерфейса обозваны как TTL.А далее в табличке про TTL:
Код
min typ max
Supply voltage VDD 4.5 5.0 5.5 V
HIGH-level input voltage VIHT 0.5VDD — VDD V
LOW-level input voltage VILT VSS — 0.2VDD V
HIGH-level output voltage VOHT 2.4 — — V
LOW-level output voltage VOLT — — VSS + 0.4 V
Где:
Vss - 0В
PDF - Seiko Epson corporation 1999.
Цитата(zltigo @ May 19 2006, 11:35)

[6] 5 V tolerant pad with built-in pull-up resistor providing digital I/O functions with TTL levels and hysteresis and 10 ns slew rate control.
The pull-up resistor’s value ranges from 60 kΩ to 300 kΩ.
НУ и не забудте удостовериться что на другие чипы по шине данных (и др. общ. сигналах) также можно подавать +5В
Не знаю что там с описанием контроллера SED1335 не в доке на ЖКИ написано следующее
и судя по этой картинке верхний уровень составляет 4В
может есть какие буржуйские микрухи для этих целей
Не знаю что там с описанием контроллера SED1335 не в доке на ЖКИ написано следующее
и судя по этой картинке верхний уровень составляет 4В
может есть какие буржуйские микрухи для этих целей
Нажмите для просмотра прикрепленного файла
Alex03
May 19 2006, 08:38
Цитата(asen @ May 19 2006, 12:08)

Не знаю что там с описанием контроллера SED1335 не в доке на ЖКИ написано следующее
...
не повезло однако.
и эту проблему мы решили поставили шинный формирователь 74HC245 вроде работает толька получили лишнию задержку на распространение сигнала не что поделаеш!
воттеперь думаем как лудше при помощи этого контроллера подсчитать частоту сигнала с индуктивного датчика частоты как я понял таймеры не могут тактироваться от внешнего сигнала а частота полезного сигнала ~300кГц вот надо считать частоту и с периудом 0,5-1с выводить на дисплей
что придумать пириуд мерить не хочется !
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.