Перейти к содержанию
    

как обработать прерывание - SOC cycloneV

нашел статью с примером https://zhehaomao.com/blog/fpga/2014/05/24/sockit-10.html

 

не получается подключить библиотеки

 

module.h

nit.h

kernel.h

fs.h

ioport.h

sched.h

 

даже не могу найти заголовочные файлы на диске. Слышал что эти библиотеки входят в состав какой то другой обобщающей библиотеки.

 

Прошу помощи !!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Сформулируйте свой вопрос по-точнее пожалуйста. Вы работаете с процессором HPS или с Nios? Версию софта в студию, можно также указать на какой отладке работаете.

Как я смутно понял, вы хотите в bare metal приложении добавить обработку прерывания от некоторого модуля. Неплохо бы указать от какого. Есть свои ньюансы в зависимости от, например, самописный ли это модуль в FPGA части или это хардовый модуль в HPS части.

 

 

В целом рецепт такой (возьмем например general purpose timer):

 

1. Все необходимые файлы лежат в $ALTERA_PATH\embedded\ip\altera\hps\altera_hps\hwlib. Это собственно hwlib от Altera для разработки bare metal приложений. Для работы с таймером и его прерываниями потребуются, если мне не изменяет память:

#include "alt_interrupt.h"
#include "alt_timers.h"

За основу можно взять пример Altera_SoCFPGA_HardwareLib_Timers_CV_GNU.tar.gz

Там же рядом есть src файлы. Их нужно прописать в списке makefile'a (для arm-gcc), таким вот образом:

HWLIBS_SRC  := alt_interrupt.c (...)
C_SRC       := (...) $(HWLIBS_SRC)

Всё это уже сделано в примере, поэтому рекомендую посмотреть его внимательно.

 

2. Для добавления прерывания требуется вызвать в программе следующие функции:

int cpu_target = 0x1;
ALT_STATUS_CODE status = ALT_E_SUCCESS;
status = alt_int_global_init();
status = alt_int_cpu_init();
// назначить какому ядру адресуется прерывание
status = alt_int_dist_target_set(ALT_INT_INTERRUPT_TIMER_OSC1_0_IRQ, cpu_target);
// выбрать тип триггера
status = alt_int_dist_trigger_set(ALT_INT_INTERRUPT_TIMER_OSC1_0_IRQ, ALT_INT_TRIGGER_AUTODETECT);
// разрешить данное прерывание локально
status = alt_int_dist_enable(ALT_INT_INTERRUPT_TIMER_OSC1_0_IRQ);
// зарегестировать обработчик
status = alt_int_isr_register(ALT_INT_INTERRUPT_TIMER_OSC1_0_IRQ, timer_isr, NULL);
// разрешить прерывание в модуле
status = alt_gpt_int_enable(ALT_GPT_OSC1_TMR0);
status = alt_int_cpu_enable();
status = alt_int_global_enable();

Простейший обработчик:

volatile bool timer_flag = false;
static void timer_isr()
{
    alt_gpt_int_clear_pending(ALT_GPT_OSC1_TMR0);
    timer_flag = true;
}

Если вы подключаете прерывание от самодельного модуля на FPGA, то ключевым отличием будет способ детектирования прерывания. Обратите внимание:

status = alt_int_dist_trigger_set(ALT_INT_INTERRUPT_TIMER_OSC1_0_IRQ, ALT_INT_TRIGGER_AUTODETECT);

По-умолчанию стоит ALT_INT_TRIGGER_AUTODETECT, но для обработки прерываний от FPGA необходимо задавать тип триггера явно:

status = alt_int_dist_trigger_set(ALT_INT_INTERRUPT_F2S_FPGA_IRQ31, ALT_INT_TRIGGER_LEVEL);

Рекомендую посмотреть файл alt_interrupt.h, там очень много и подробно описано про перечисленные функции, есть список доступных каналов контроллера прерываний и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за информацию. Уточняю данные по проекту.

 

Работаю с системой на кристале HPS - ARM, Cyclone-V, ОС linux - сборка ядра Angstrom v2013.12 - Kernel 3.10.31 - ltsi - 02861 - g801a40f

Прерывание хочу обрабатывать от собственного модуля, подключаемого к HPS по avalon шине (вроде того что в ссылке которую привел в начале)

 

Изменено пользователем TSURKOV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По линуксу ничего сказать не могу :(

Я изучал подходы к программированию HPS без ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...