реклама на сайте
подробности

 
 
> AT91SAM7SE, PIO и 8-bit параллельный интерфейс, Связь с SSD1305 Oled контроллером
Artkop
сообщение Aug 20 2009, 12:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 11-06-08
Пользователь №: 38 217



Доброго времени суток! Необходимо соединить at91sam7se и дисплейный OLED модуль (контроллер SSD1305). Для этого надо написать софтверный протокол на PIO (8080 параллельный интерфейс). Разбираюсь.. Выяснил, что можно выставлять уровни ножек PIO (в моем случае PIOA) регистрами PIO_SODR и PIO_СODR. Но если делать это в программе, в ручную, то временные диаграммы получаются не пойми какими. Для синхронной записи используется PIO_ODSR, я правильно понимаю?

Делаю так:

//----------------------------------------------------------------------------------

volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA;

volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;
pPMC->PMC_PCER = (1<<AT91C_ID_PIOA);

pPIO->PIO_PER = AT91C_PIO_PA0 | AT91C_PIO_PA1 | AT91C_PIO_PA2 | AT91C_PIO_PA3 |
AT91C_PIO_PA4 | AT91C_PIO_PA5 | AT91C_PIO_PA6 | AT91C_PIO_PA7 |
AT91C_PIO_PA8 | AT91C_PIO_PA9 | AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA14 | AT91C_PIO_PA15;

pPIO->PIO_OER = AT91C_PIO_PA0 | AT91C_PIO_PA1 | AT91C_PIO_PA2 | AT91C_PIO_PA3 |
AT91C_PIO_PA4 | AT91C_PIO_PA5 | AT91C_PIO_PA6 | AT91C_PIO_PA7 |
AT91C_PIO_PA8 | AT91C_PIO_PA9 | AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA14 | AT91C_PIO_PA15;

pPIO->PIO_OWER = AT91C_PIO_PA0 | AT91C_PIO_PA1 | AT91C_PIO_PA2 | AT91C_PIO_PA3 |
AT91C_PIO_PA4 | AT91C_PIO_PA5 | AT91C_PIO_PA6 | AT91C_PIO_PA7;

pPIO->PIO_ODSR = 0xFF; //
pPIO->PIO_ODSR = 0x00; // Сформировал строб на 8битной шине

//------------------------------------------------------------------------------------------------------------------------------------

Но длительность импульса получилась 600 нс. Как ее уменьшить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Aug 20 2009, 13:07
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Во-вторых, SAM7, как и любой арм, дрыгает ногами весьма неохотно.


Не так уж все и запущено именно на атмеловских армах. 3 такта на запись в порт (супротив двух при записи, например, в ОЗУ).

Тут решать надо по другому.
Код
#pragma optimize=no_inline
void Out8Bit(unsigned int d1, unsigned int d2, unsigned int d3, unsigned int d4)
{
pPIO->PIO_CODR = d1;
pPIO->PIO_CODR = d2;
pPIO->PIO_ODSR = d3;
pPIO->PIO_ODSR = d4;
pPIO->PIO_SODR = d2;
pPIO->PIO_SODR = d1;
}

и вызывать уже эту функцию, передавая ей в параметрах нужные биты.
Код
...
  Out8Bit(0x400,0x1000,0xFF,0x00);
...


Тогда будет достаточно быстро.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016