Полная версия этой страницы:
Шина данных AT91RM
Cadavre
Mar 24 2011, 12:08
Здравствуйте!
Программирую готовое устройство на AT91RM9200. Нужно вручную управлять пинами шины данных контроллера (D0-D15/D16-D31) для связи с LCD. Выводами 16-31 удаётся управлять через PIO (порт С), а вот как быть с 0-15? Данные выводы не подключены к PIO-контроллеру, но в даташите в разделе Static Memory Controller (куда входят 0-15) написано, что всётаки можно ими управлять по-своему. Как?
Спасибо.
aaarrr
Mar 24 2011, 13:27
Цитата(Cadavre @ Mar 24 2011, 15:08)

Данные выводы не подключены к PIO-контроллеру, но в даташите в разделе Static Memory Controller (куда входят 0-15) написано, что всётаки можно ими управлять по-своему.
Где такое написано, цитату приведите.
Cadavre
Mar 24 2011, 14:15
18.5.1 I/O Lines
The pins used for interfacing the Static Memory Controller may be multiplexed with the PIO lines. The programmer must first program the PIO controller... и ещё they can be used for other purposes by the PIO controller.
Так понимаю, что всётаки можно вручную ими управлять?
aaarrr
Mar 24 2011, 14:20
Цитата(Cadavre @ Mar 24 2011, 17:15)

Так понимаю, что всётаки можно вручную ими управлять?
Там же не сказано, что всеми. Младшими данными нельзя.
Поставьте защелку на данные, подключите соответствующий chip select и будет счастье. Надеюсь для LCD достаточно только на выход. Если еще и вход надо, то в параллель 74HC245 или типа того. Т.е. как с обычным процессором. Или мультиплексировать D16-D31.
Cadavre
Mar 25 2011, 14:54
Получилось вручную управлять ногами через макрос:
#define write_data(x) *((volatile unsigned short*)0x40000000) = (unsigned short)(x)
Кусочек кода этот я нашёл в одном примере. Тогда напрашивается у меня ещё вопрос: почему именно по адресу 0x40000000? Вроде как это начало области EBI (Chip Select3 / NANDFlash Logic), если я правильно понимаю. Как тогда определить адрес, например, для NCS2, также входящего в EBI?
DmitryM
Mar 26 2011, 06:38
Цитата(Cadavre @ Mar 25 2011, 17:54)

Получилось вручную управлять ногами через макрос:
#define write_data(x) *((volatile unsigned short*)0x40000000) = (unsigned short)(x)
Кусочек кода этот я нашёл в одном примере. Тогда напрашивается у меня ещё вопрос: почему именно по адресу 0x40000000? Вроде как это начало области EBI (Chip Select3 / NANDFlash Logic), если я правильно понимаю. Как тогда определить адрес, например, для NCS2, также входящего в EBI?
Это не управление ногами, а вывод на шину данных числа х, соответсвенно все тайминги определяются настройками чипселекта в EBI SMC.
Для NCS2 адресс, соответственно, будет 0x30000000. Но, если чипселект определен как 8-битный, при выводе short будет два обращения.
Cadavre
Mar 28 2011, 06:34
Не могли бы вы для новичка пояснить почему всётаки 0х30000000 для NCS2?

и где найти информаию для остальных (NRD, NWR0, A1 и т.д.)?
VladislavS
Mar 28 2011, 13:14
doc1768.pdf раздел 8.Memories На странице 17.
Cadavre
Mar 30 2011, 06:43
Как я понял, при записи/чтении числа на шину данных через 0x30000000, состояние ног NCS2, NRD и NWR0 изменяется автоматически или ими можно управлять также, записывая число по адресу в память? Вот, например, для управления LCD нужно вручную управлять выводом A1 (low - индекс. регистр, high - данные GRAM ЖК экрана), который идёт на LCD. Разбираюсь уже долго и никак не могу понять, как всё это укротить, чтобы формировать желаемые импульсы через D0-15, NCS2, NRD, NWR0 и A1?
Dron_Gus
Mar 30 2011, 07:30
Пишете по (базовый адрес + 0), шина адреса выставляет соответсвенно адрес 0х0, на шину данных выставляются данные, делается строб WR. Если Вы ходтите выставить A1 в 1 пишите в (базовый адрес + 0х2) и т.д.
DmitryM
Mar 30 2011, 16:48
Цитата(Cadavre @ Mar 30 2011, 10:43)

Как я понял, при записи/чтении числа на шину данных через 0x30000000, состояние ног NCS2, NRD и NWR0 изменяется автоматически или ими можно управлять также, записывая число по адресу в память? Вот, например, для управления LCD нужно вручную управлять выводом A1 (low - индекс. регистр, high - данные GRAM ЖК экрана), который идёт на LCD. Разбираюсь уже долго и никак не могу понять, как всё это укротить, чтобы формировать желаемые импульсы через D0-15, NCS2, NRD, NWR0 и A1?
Что Вы собираетесь укорачивать??? Если у Вас LCD имеет интерфейс обычной статической памяти, то и пишите просто по заданным адресам, как уже сказали, BASE и BASE+1(2), зависит от обращения. Тайминги выставляются автоматом в соответствии с настройкой SMC.
aaarrr
Mar 30 2011, 17:55
Cadavre: выложите схему подключения вашего экрана и его название. Тогда можно будет давать предметные советы.
Cadavre
Apr 1 2011, 05:40
OLED на контроллере S6E63D6X, параллельный интерфейс 8080 16-бит. У меня получилось таки запустить экран и выводить изображение! Спасибо вам большое, без вас бы у меня ничего не вышло
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.