Прерывания
Описанный здесь интерфейс является низкоуровневым. Для работы с прерываниями в большинстве случаев рекомендуется использовать интерфейс, предоставляемый библиотекой kdf.
KnIoAttachIrq()
Функция объявлена в файле coresrv/io/irq.h
.
Retcode KnIoAttachIrq(Handle rid, rtl_uint32_t flags, Handle *handle);
Функция привязывает вызывающий поток к прерыванию.
Входные параметры:
rid
– дескриптор прерывания, полученный с помощью вызоваKnRegisterIrq()
;flags
– флаги прерывания.
Выходной параметр handle
содержит IPC-дескриптор, посредством которого вызывающий поток будет ожидать прерывание, выполнив вызов Recv()
.
В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.
Флаги прерывания
- IRQ_LEVEL_LOW – генерация по низкому уровню;
- IRQ_LEVEL_HIGH – генерация по высокому уровню;
- IRQ_EDGE_RAISE – генерация по переднему фронту;
- IRQ_EDGE_FALL – генерация по заднему фронту;
- IRQ_SHARED – разделяемое прерывание;
- IRQ_PRIO_LOW – низкий приоритет прерывания;
- IRQ_PRIO_NORMAL – нормальный приоритет;
- IRQ_PRIO_HIGH – высокий приоритет;
- IRQ_PRIO_RT – приоритет реального времени.
KnIoDetachIrq()
Функция объявлена в файле coresrv/io/irq.h
.
Retcode KnIoDetachIrq(Handle rid);
Функция отвязывает вызывающий поток от прерывания.
rid
– дескриптор прерывания, полученный с помощью вызова KnRegisterIrq()
;
В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.
В началоKnIoDisableIrq()
Функция объявлена в файле coresrv/io/irq.h
.
Retcode KnIoDisableIrq(Handle rid);
Функция маскирует (запрещает) прерывание с дескриптором rid
.
В случае успеха функция возвращает rcOk.
В началоKnIoEnableIrq()
Функция объявлена в файле coresrv/io/irq.h
.
Retcode KnIoEnableIrq(Handle rid);
Функция демаскирует (разрешает) прерывание с дескриптором rid
.
В случае успеха функция возвращает rcOk.
В началоKnRegisterIrq()
Функция объявлена в файле coresrv/io/irq.h
.
Retcode KnRegisterIrq(int irq, Handle *outRid);
Функция регистрирует прерывание с номером irq
.
Выходной параметр outRid
содержит дескриптор прерывания.
В случае успеха функция возвращает rcOk.
Если прерывание больше не используется, его необходимо освободить с помощью функции KnIoClose()
.