В предыдущих примерах, мы создавали программы, способные работать практически со всеми конфигурациями процессорных систем Nios II. Уровень аппаратной абстракции (HAL) позволял нам работать, не задумываясь о конфигурации нашей системы. Следующим шагом будет овладение навыками использования аппаратных ядер в составе нашей процессорной системы Nios II.
1. Если вы хотите вспомнить, как разрабатывается аппаратная часть системы, то вам проще обратиться к самоучителю, поскольку наша процессорная система почти полностью его повторяет. В нашей системе small_nios мы использовали "самое бюджетное" ядро Nios II и, на это стоит обратить особое внимание, изменили индивидуальные названия ядер системы. Вся система в SOPC Builder представлена на рис. 21. Чтобы потренироваться в выводе данных PIO, создадим приложение, которое будет мигать светодиодом, подключенным к одному из выводов чипа Altera. Подробная информация об ядре PIO находится здесь.
рис. 21
2. Создадим проект, называемый pio_2_led, с хорошо уже известным нам BSP проектом hello_world_bsp. Если вы вдруг забыли, как создавать проект приложения, обратитесь к первым пунктам в любом из предыдущих разделов.
3. Добавим в проект файлы заголовочный и исходный (pio_2_led.h и pio_2_led.c). В заголовочный файл добавим следующий код:
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include <stdio.h>
4. Исходный файл проекта будет иметь следующий код:
{
#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_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 можно считать законченной.