реклама на сайте
подробности

 
 
> как обработать прерывание - SOC cycloneV
TSURKOV
сообщение Mar 20 2015, 10:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



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

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

module.h
nit.h
kernel.h
fs.h
ioport.h
sched.h

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

Прошу помощи !!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
serjj
сообщение Mar 20 2015, 11:26
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Здравствуйте. Сформулируйте свой вопрос по-точнее пожалуйста. Вы работаете с процессором 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 ( 10.42 килобайт ) Кол-во скачиваний: 65

Там же рядом есть 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, там очень много и подробно описано про перечисленные функции, есть список доступных каналов контроллера прерываний и т.д.
Go to the top of the page
 
+Quote Post
TSURKOV
сообщение Mar 20 2015, 12:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 1-11-05
Пользователь №: 10 385



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

Работаю с системой на кристале HPS - ARM, Cyclone-V, ОС linux - сборка ядра Angstrom v2013.12 - Kernel 3.10.31 - ltsi - 02861 - g801a40f
Прерывание хочу обрабатывать от собственного модуля, подключаемого к HPS по avalon шине (вроде того что в ссылке которую привел в начале)


Сообщение отредактировал TSURKOV - Mar 20 2015, 12:07
Go to the top of the page
 
+Quote Post
serjj
сообщение Mar 20 2015, 12:10
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



По линуксу ничего сказать не могу sad.gif
Я изучал подходы к программированию HPS без ОС.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.02864 секунд с 7
ELECTRONIX ©2004-2016