Использование порта вывода видеоданных в программе на языке С

Фрагмент программы на языке С, в котором используются графический и символьный буферы, показан в листинге 17. Первый цикл while изображает прямоугольник в графическом буфере, используя цвет pixel_color. Прямоугольник задается координатами двух противоположных углов (x1,y1) и (x2,y2). Второй цикл while записывает символьную строку text_ptr, с нулевым байтом в конце, в символьный буфер, начиная с координаты (x,y). Представленный в листинге 17 фрагмент программы включен в образцы программ приложения AMP под именем Media.

Модуль конфигурации аудио/видеопортов

Модуль конфигурации аудио/видеопортов управляет установками, которые влияют на работу аудио и видеопортов. Модуль конфигурации аудио/видео автоматически конфигурирует и инициализирует эти порты, когда выполняется сброс процессорной системы. Для типового использования процессорной системы нет необходимости модифицировать эти установки. Если такая потребность всё таки появиться, то в этом случае необходимо обратиться к документации по модулю конфигурации аудио/видеопортов, доступной на сайте фирмы Altera [3] и эти установки изменить.

Листинг 17. Пример программы, в котором используется выходной видеопорт

void VGA_text (int, int, char *);

void VGA_box (int, int, int, int, short);

int main(void)

{

volatile int * green_LED_ptr = (int *) 0x10000010;

/* Тексты для вывода на экран монитора и lcd дисплей */

char text_top_row[40] = "Altera DE2-70\0";

char text_bottom_row[40] = "Media Computer\0";

/* Выводит текстовые строки на экран монитора */

VGA_text (35, 29, text_top_row);

VGA_text (35, 30, text_bottom_row);

VGA_box (34*4, 28*4, 50*4, 32*4, 0x187F);

}

/*******************************************************************************

* Вывод строки на экран монитора

*******************************************************************************/

void VGA_text(int x, int y, char * text_ptr)

{

int offset;

volatile char * character_buffer = (char *) 0x09000000; // адрес символьного буфера VGA

offset = (y << 7) + x; //Вычисляем смещение в памяти

while (*(text_ptr))

{

*(character_buffer + offset) = *(text_ptr);// Записываем в символьный буфер значение

++text_ptr;

++offset;

}

}

/*******************************************************************************

* Рисование на экране монитора прямоугольника

*******************************************************************************/

void VGA_box(int x1, int y1, int x2, int y2, short pixel_color)

{

int offset, row, col;

volatile short * pixel_buffer = (short *) 0x08000000; // адрес пиксельного буфера VGA

for (row = y1; row <= y2; row++)

{

col = x1;

while (col <= x2)

{

offset = (row << 9) + col; //Вычисляем смещение пиксельном буфере

*(pixel_buffer + offset) = pixel_color; // Устанавливаем цвет пиксела

++col;

}

}

}



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: