Skip to content

Instantly share code, notes, and snippets.

Логика работы IPIC

Входом IPIC являются 16 линий прерываний(IRQ lines). С помощью регистра IPIC_ICSR каждая из линий может быть выключена, также можно выбрать уровень активного сигнала линии.

Линия может быть настроена как:

  1. level-triggered - при активном уровне линии, соответсвующее ей прерывание переходит в состояние Pending. Отмена активного уровня переводит обратно в Idle.

  2. edge-triggered - прерывание переходит в состояние Pending по активному фронту линии. Дальнейшего поддержания уровня линии не требуется.

Поддерживаются вложенные прерывания. Больший приоритет у прерывания с меньшим номером. Все 16 IPIC прерываний мультиплексируются на один вектор прерывания в scr1 - Machine external interrupt. Номер конкретного прерывания становится известен из регистра IPIC_CISV.

#include <assert.h>
#include <errno.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>