Использование порта вывода видеоданных в программе на языке С
Фрагмент программы на языке С, в котором используются графический и символьный буферы, показан в листинге 17. Первый цикл while изображает прямоугольник в графическом буфере, используя цвет pixel_color. Прямоугольник задается координатами двух противоположных углов (x1,y1) и (x2,y2). Второй цикл whileзаписывает символьную строку text_ptr, с нулевым байтом в конце, в символьный буфер, начиная с координаты (x,y). Представленный в листинге 17 фрагмент программы включен в образцы программ приложения AMP под именем Media.
3.4.3. Модуль конфигурации аудио/видеопортов
Модуль конфигурации аудио/видеопортов управляет установками, которые влияют на работу аудио и видеопортов. Модуль конфигурации аудио/видео автоматически конфигурирует и инициализирует эти порты, когда выполняется сброс процессорной системы. Для типового использования процессорной системы нет необходимости модифицировать эти установки. Если такая потребность всё таки появиться, то в этом случае необходимо обратиться к документации по модулю конфигурации аудио/видеопортов, доступной на сайте фирмы 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;
}
}
}
Дата добавления: 2015-05-30; просмотров: 604;