Главная > Статьи > Вывод данных в регистр PIO

  Вывод данных в регистр PIO

В предыдущих примерах, мы создавали программы, способные работать практически со всеми конфигурациями процессорных систем Nios II. Уровень аппаратной абстракции (HAL) позволял нам работать, не задумываясь о конфигурации нашей системы. Следующим шагом будет овладение навыками использования аппаратных ядер в составе нашей процессорной системы Nios II.

1.    Если вы хотите вспомнить, как разрабатывается аппаратная часть системы, то вам проще обратиться к самоучителю, поскольку наша процессорная система почти полностью его повторяет. В нашей системе small_nios мы использовали "самое бюджетное" ядро Nios II и, на это стоит обратить особое внимание, изменили индивидуальные названия ядер системы. Вся система в SOPC Builder представлена на рис. 21. Чтобы потренироваться в выводе данных PIO, создадим приложение, которое будет мигать светодиодом, подключенным к одному из выводов чипа Altera. Подробная информация об ядре PIO находится здесь.

20.gif

рис. 21

2.            Создадим проект, называемый pio_2_led, с хорошо уже известным нам BSP проектом hello_world_bsp. Если вы вдруг забыли, как создавать проект приложения, обратитесь к первым пунктам в любом из предыдущих разделов.

3.            Добавим в проект файлы заголовочный и исходный (pio_2_led.h и pio_2_led.c).  В заголовочный файл добавим следующий код:

 #include "alt_types.h"
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include <stdio.h>

 В заголовочном файле (в отличии от предыдущих разделов) появилось включение двух файлов: altera_avalon_pio_regs.h – заголовочный файл ядра PIO, и system.h – файл информации о нашей системе SOPC Builder и BSP.

4.            Исходный файл проекта будет иметь следующий код:

  #include "pio_2_led.h"
 static alt_u8 count;
 static void count_led()
{
#ifdef PIO_0_BASE
    IOWR_ALTERA_AVALON_PIO_DATA(
            PIO_0_BASE,
        count
        );
#endif
}
 
static void start_message()
{
    printf("\n\n**************************\n");
    printf("*       LED start!     *\n");
    printf("**************************\n");
}
 
int main(void)
{
    alt_u16 i = 0;
    start_message();
 
            while (1)
            {
            count_led();
            for ( i = 0 ; i < 10000; i++)
                                   {
                                    count = (i = = 0)? (~count) : (count);
                                   }
            }
return 0;
}

 Подробнее рассмотрим код программы. Сначала объявляется глобальная переменная count в классе памяти static (alt_u8 – означает 8 бит данных типа unsigned integer).

Рассмотрим подпрограмму count_led().  Директива #ifdef проверяет наличие идентификатора PIO_0_BASE. Этот идентификатор может существовать только, если в нашей процессорной системе присутствует ядро PIO с именем pio_0 (см. рис. 21).  IOWR_ALTERA_AVALON_PIO_DATA (PIO_0_BASE, count) означает, что в выходной регистр данных ядра PIO с именем pio_0 помещается значение count. Перечень идентификаторов ядра PIO находится в файле altera_avalon_pio_regs.h.

Далее по тексту следует хорошо знакомая подпрограмма вывода сообщения в окно терминала и собственно тело main(void).

5.            Скомпилируем и запустим программу, для этого нажимаем на иконку . Во всплывающем окне Run As выбираем Nios II Hardware и кликаем OK ( рис. 17 ). Если появляется окно, предлагающее сохранить изменённые файлы, соглашаемся на сохранение.

6.            После запуска программы в окне терминала появится хорошо знакомое сообщение, а светодиод на оценочной плате замигает. Практику создания собственного проекта вывода данных в регистры PIO можно считать законченной.

 

<<Назад Оглавление Далее >>

Хостинг от uCoz