Петр Юркевич 0 8 ноября, 2020 Опубликовано 8 ноября, 2020 (изменено) · Жалоба Здравствуйте! Делаю частотомер на ПЛИС (Cyclone V на DE0-Nano-SoC) с выводом на дисплей значения частоты. Рассчитанное значение частоты выдаётся (обновляется) каждую секунду, вместе с ним поднимается сигнал переполнения счётчика (на один такт). Поскольку вывод осуществляется через Nios, использую прерывание по уровню (ядро PIO) для регистрации сигнала переполнения и в обработчике вывожу значение частоты на экран. Код инициализации прерывания: static void init_freq_en_IRQ() { alt_putstr("irq_init start\n"); void* edge_capture_ptr = (void*) &edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(FREQ_EN_BASE, 0xf); alt_ic_isr_register(FREQ_EN_IRQ_INTERRUPT_CONTROLLER_ID, FREQ_EN_IRQ, handler_freq_en, edge_capture_ptr, 0x0); alt_putstr("irq_init finish\n"); } Код обработчика: static void handler_freq_en (void * context) { IOWR_ALTERA_AVALON_PIO_IRQ_MASK(FREQ_EN_BASE, 0x0); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(FREQ_EN_BASE, 0xf); freq_to_lcd(); alt_putstr("handler\n"); } Но почему-то при запуске прерывания генерируются, но процессор в них не уходит. Скрин SignalTap'a. Верхний сигнал - это счётчик, отмеряющий секунду, средний - сигнал переполнения, нижний - вроде как генерируемый сигнал IRQ из контроллера PIO (по крайней мере он исчезает, когда я отключаю инициализацию прерывания) При этом в один момент он зависает и прекращает выполнение основной программы (Это выяснилось после того, как я сделал отправку на дисплей в бесконечном цикле в функции main). Есть подозрение, что он уходит в прерывание, но не доходит до обработчика (он не выполняется), или же это какое-то другое исключение, из которого он не возвращается. Что это может быть? Может, я неправильно настраиваю прерывания (с прерываниями по фронту всё работало, но там была другая проблема)? Или, если проблема в другом исключении, как это отследить? Ссылка на гитхаб (в папке DE0_Nano_SoC_project) UPD: Посмотрел на сигнал IRQ при прерывании по фронту. Там он находится в положении 1 до момента сброса прерывания. Здесь же почему-то всего один такт Изменено 8 ноября, 2020 пользователем Петр Юркевич Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться