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

Шина данных AT91RM

Здравствуйте!

Программирую готовое устройство на AT91RM9200. Нужно вручную управлять пинами шины данных контроллера (D0-D15/D16-D31) для связи с LCD. Выводами 16-31 удаётся управлять через PIO (порт С), а вот как быть с 0-15? Данные выводы не подключены к PIO-контроллеру, но в даташите в разделе Static Memory Controller (куда входят 0-15) написано, что всётаки можно ими управлять по-своему. Как?

Спасибо.

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


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

Данные выводы не подключены к PIO-контроллеру, но в даташите в разделе Static Memory Controller (куда входят 0-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.

 

Так понимаю, что всётаки можно вручную ими управлять?

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


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

Так понимаю, что всётаки можно вручную ими управлять?

Там же не сказано, что всеми. Младшими данными нельзя.

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


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

Поставьте защелку на данные, подключите соответствующий chip select и будет счастье. Надеюсь для LCD достаточно только на выход. Если еще и вход надо, то в параллель 74HC245 или типа того. Т.е. как с обычным процессором. Или мультиплексировать D16-D31.

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


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

Получилось вручную управлять ногами через макрос:

 

#define write_data(x) *((volatile unsigned short*)0x40000000) = (unsigned short)(x)

 

Кусочек кода этот я нашёл в одном примере. Тогда напрашивается у меня ещё вопрос: почему именно по адресу 0x40000000? Вроде как это начало области EBI (Chip Select3 / NANDFlash Logic), если я правильно понимаю. Как тогда определить адрес, например, для NCS2, также входящего в EBI?

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


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

Получилось вручную управлять ногами через макрос:

 

#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 будет два обращения.

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


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

Не могли бы вы для новичка пояснить почему всётаки 0х30000000 для NCS2? :rolleyes: и где найти информаию для остальных (NRD, NWR0, A1 и т.д.)?

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


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

Как я понял, при записи/чтении числа на шину данных через 0x30000000, состояние ног NCS2, NRD и NWR0 изменяется автоматически или ими можно управлять также, записывая число по адресу в память? Вот, например, для управления LCD нужно вручную управлять выводом A1 (low - индекс. регистр, high - данные GRAM ЖК экрана), который идёт на LCD. Разбираюсь уже долго и никак не могу понять, как всё это укротить, чтобы формировать желаемые импульсы через D0-15, NCS2, NRD, NWR0 и A1?

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


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

Пишете по (базовый адрес + 0), шина адреса выставляет соответсвенно адрес 0х0, на шину данных выставляются данные, делается строб WR. Если Вы ходтите выставить A1 в 1 пишите в (базовый адрес + 0х2) и т.д.

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


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

Как я понял, при записи/чтении числа на шину данных через 0x30000000, состояние ног NCS2, NRD и NWR0 изменяется автоматически или ими можно управлять также, записывая число по адресу в память? Вот, например, для управления LCD нужно вручную управлять выводом A1 (low - индекс. регистр, high - данные GRAM ЖК экрана), который идёт на LCD. Разбираюсь уже долго и никак не могу понять, как всё это укротить, чтобы формировать желаемые импульсы через D0-15, NCS2, NRD, NWR0 и A1?

 

Что Вы собираетесь укорачивать??? Если у Вас LCD имеет интерфейс обычной статической памяти, то и пишите просто по заданным адресам, как уже сказали, BASE и BASE+1(2), зависит от обращения. Тайминги выставляются автоматом в соответствии с настройкой SMC.

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


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

Cadavre: выложите схему подключения вашего экрана и его название. Тогда можно будет давать предметные советы.

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


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

OLED на контроллере S6E63D6X, параллельный интерфейс 8080 16-бит. У меня получилось таки запустить экран и выводить изображение! Спасибо вам большое, без вас бы у меня ничего не вышло :yeah:

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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