割り込みコントローラ

SOLID-OSでは、割り込み要求発生時に、登録した関数を呼び出すことができます。

関数は、コアサービスが内部で所有しているスタックを使用して、SVCモードで呼び出されます。

SOLID_INTC_HANDLER

typedef struct _SOLID_INTC_HANDLER_ SOLID_INTC_HANDLER

説明

割り込みハンドラ登録用構造体

定義

typedef struct _SOLID_INTC_HANDLER_ {
   int intno;
   int priority;
   int config;
   int (*func)(void*, SOLID_CPU_CONTEXT*);
   void* param;
} SOLID_INTC_HANDLER;

メンバー

intno

割り込み番号

0-15:SGI (CallSGIで生成)
16-31:PPI (各コア個別の割り込み)
31-255:SPI (通常の割り込み)
priority
処理優先度 0: 高 - 255: 低
config

割り込み設定(ICFGR) 2bitのみ有効

SGI:無効
PPI:実装依存
SPI:0X/レベルトリガ 1X:エッジトリガ
func
割り込み発生時に呼び出される関数
param
割り込み発生時に関数に引き渡される第一引数

割り込み状態

SOLID_INTC_STATUS_ENABLED
SOLID_INTC_STATUS_PENDING
SOLID_INTC_STATUS_ACTIVE

定数

名前 説明
SOLID_INTC_STATUS_ENABLED 0x00000001 割り込みが有効になっていることを示します。
SOLID_INTC_STATUS_PENDING 0x00000002 割り込みが発生しているが、処理待ちであることを示します。
SOLID_INTC_STATUS_ACTIVE 0x00000004 割り込み処理を実行中であることを示します。 ただし、SOLIDでは多重割り込みに対応するため、割り込み処理を受け付けた時点で実行中をクリアします。

SOLID_INTC_Register

int SOLID_INTC_Register(SOLID_INTC_HANDLER *pHandler)

割り込み用のハンドラを登録します

パラメータ:pHandler – 登録するハンドラ
戻り値:

SOLID_INTC_UnRegister

int SOLID_INTC_UnRegister(SOLID_INTC_HANDLER *pHandler)

割り込み用のハンドラの登録を解除します

パラメータ:pHandler – 登録を解除するハンドラ
戻り値:

SOLID_INTC_CallSGI

int SOLID_INTC_CallSGI(int id, unsigned long cpuBits)

ソフトウェア割り込み(SGI)を発生させます

割り込みコントローラの機能であり、ソフトウェア割り込み命令(SWI)とは異なります

パラメータ:
  • id – 割り込み番号(0-31)
  • cpuBits – 発生させるCPUマスク (SOLID_INTC_CPUBITS_XXX, またはbit0:CPU0, bit1:CPU1,…)
戻り値:

SOLID_INTC_Disable

int SOLID_INTC_Disable(int intno)

指定された割り込みの通知を禁止状態にします

パラメータ:intno – 割り込み番号
戻り値:

SOLID_INTC_Enable

int SOLID_INTC_Enable(int intno)

指定された割り込みの通知を許可状態にします

パラメータ:intno – 割り込み番号
戻り値:

SOLID_INTC_GetStatus

int SOLID_INTC_GetStatus(int intno, unsigned long *pStatus)

指定された割り込みの状態を取得します

param intno:

割り込み番号

param pStatus:

状態を格納するバッファ (SOLID_INTC_STATUS_XXX がOR状態で入ります)

return:

SOLID_INTC_SetPriorityMask

int SOLID_INTC_SetPriorityMask(int threshold)

割り込みコントローラの割り込みマスク設定を変更します。

パラメータ:threshold – 割り込みマスク
戻り値:

SOLID_INTC_GetPriorityMask

int SOLID_INTC_GetPriorityMask(void)

割り込みコントローラの割り込みマスク設定を取得します。

戻り値:現在の割り込みマスク値