ベクタ割り込みコントローラ (VIC)

注釈

ここで説明する要実装関数は、CPUが割り込みコントローラとして GICではなくVICを 使用している場合にのみ 実装が必要です。GICを使用するターゲットでは、これらの 関数を実装する必要はありません。

一部のターゲットでは、GICの代わりにベクタ割り込みコントローラ(VIC)を割り込み コントローラとして使用します。VICを使用する構成では、VICハードウェアの制御を 要実装関数として実装する必要があります。

要実装関数

VICの要実装関数の定義は、impl_vic.h にあります。

#include "impl_vic.h"

一部の関数は、初期化時に IMPL_VIC_Init で設定する IMPL_VIC_INFOfeature によって実装要否が決まります。対応する IMPL_VIC_FEATURE_NOxxxfeature に設定して「その機能を持たない」ことを通知した場合、対応する関数を実装する 必要はありません(コアサービスから呼び出されません)。各関数の説明を参照してください。

IMPL_VIC_INFO

typedef struct _IMPL_VIC_INFO_ IMPL_VIC_INFO
struct _IMPL_VIC_INFO_

説明

VICの構成情報を格納する構造体です。IMPL_VIC_Init で設定します。

定義

typedef struct _IMPL_VIC_INFO_ {
    uint32_t feature;
    int maxIntNo;
    int maxPriority;
} IMPL_VIC_INFO;

メンバー

uint32_t feature

VICの機能を表すフラグ(IMPL_VIC_FEATURE_XXX の組み合わせ)

int maxIntNo

扱える割り込み番号の最大値

int maxPriority

指定可能な優先度の最大値

IMPL_VIC_FEATURE_NONVECTORMODE
IMPL_VIC_FEATURE_NOPRIORITYMASK
IMPL_VIC_FEATURE_NOMODIFYPENDING
IMPL_VIC_FEATURE_NOEDGECONFIG

IMPL_VIC_INFOfeature に指定する、VICがサポートしない機能を表す フラグです。

名前

説明

IMPL_VIC_FEATURE_NONVECTORMODE

0x00000001

ベクタモードをサポートしない

IMPL_VIC_FEATURE_NOPRIORITYMASK

0x00000002

優先度マスクをサポートしない

IMPL_VIC_FEATURE_NOMODIFYPENDING

0x00000004

Pending状態の変更をサポートしない

IMPL_VIC_FEATURE_NOEDGECONFIG

0x00000008

エッジ/レベル設定をサポートしない

IMPL_VIC_Init

void IMPL_VIC_Init(IMPL_VIC_INFO *pInfo)

VICを初期化し、構成情報を pInfo に格納します。

パラメータ:
  • pInfo -- VIC構成情報の格納先

IMPL_VIC_SetVector

void IMPL_VIC_SetVector(int intno, SOLID_ADDRESS vector)

指定した割り込みのベクタ(ジャンプ先アドレス)を設定します。

パラメータ:
  • intno -- 割り込み番号

  • vector -- ベクタアドレス

IMPL_VIC_Enable

void IMPL_VIC_Enable(int intno)

指定した割り込みを有効化します。

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_Disable

void IMPL_VIC_Disable(int intno)

指定した割り込みを無効化します。

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_SetPending

void IMPL_VIC_SetPending(int intno)

指定した割り込みをPending状態にセットします。 featureIMPL_VIC_FEATURE_NOMODIFYPENDING を設定しない場合 (Pending状態の変更をサポートする場合)に実装が必要です。

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_ClearPending

void IMPL_VIC_ClearPending(int intno)

指定した割り込みのPending状態をクリアします。 featureIMPL_VIC_FEATURE_NOMODIFYPENDING を設定しない場合 (Pending状態の変更をサポートする場合)に実装が必要です。

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_SetConfig

void IMPL_VIC_SetConfig(int intno, int config)

指定した割り込みのエッジ/レベル設定を行います。 featureIMPL_VIC_FEATURE_NOEDGECONFIG を設定しない場合 (エッジ/レベル設定をサポートする場合)に実装が必要です。

パラメータ:

IMPL_VIC_GetConfig

int IMPL_VIC_GetConfig(int intno)

指定した割り込みのエッジ/レベル設定を取得します。 featureIMPL_VIC_FEATURE_NOEDGECONFIG を設定しない場合 (エッジ/レベル設定をサポートする場合)に実装が必要です。

パラメータ:
  • intno -- 割り込み番号

戻り値:

Config値

IMPL_VIC_IsEnabled

int IMPL_VIC_IsEnabled(int intno)

指定した割り込みが有効かどうかを問い合わせます。

パラメータ:
  • intno -- 割り込み番号

戻り値:

  • 0以外: 有効

  • 0: 無効

IMPL_VIC_IsPending

int IMPL_VIC_IsPending(int intno)

指定した割り込みがPending中かどうかを問い合わせます。

パラメータ:
  • intno -- 割り込み番号

戻り値:

  • 0以外: Pending中

  • 0: Pendingでない

IMPL_VIC_IsActive

int IMPL_VIC_IsActive(int intno)

指定した割り込みがActive中かどうかを問い合わせます。

パラメータ:
  • intno -- 割り込み番号

戻り値:

  • 0以外: Active中

  • 0: Activeでない

IMPL_VIC_SetPriority

void IMPL_VIC_SetPriority(int intno, int priority)

指定した割り込みの優先度を設定します。

パラメータ:
  • intno -- 割り込み番号

  • priority -- 優先度

IMPL_VIC_GetPriority

int IMPL_VIC_GetPriority(int intno)

指定した割り込みの優先度を取得します。

パラメータ:
  • intno -- 割り込み番号

戻り値:

優先度

IMPL_VIC_GetRaisedInterrupt

int IMPL_VIC_GetRaisedInterrupt(void)

発生した割り込みの番号を取得します。

戻り値:

発生した割り込み番号

IMPL_VIC_ClearInterrupt

void IMPL_VIC_ClearInterrupt(int intno)

指定した割り込みの終了処理(EOI)を行います。

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_SetPriorityMask

void IMPL_VIC_SetPriorityMask(int maskLevel)

優先度マスクレベルを設定します。 featureIMPL_VIC_FEATURE_NOPRIORITYMASK を設定しない場合 (優先度マスクをサポートする場合)に実装が必要です。

パラメータ:
  • maskLevel -- マスクレベル

IMPL_VIC_GetPriorityMask

int IMPL_VIC_GetPriorityMask(void)

優先度マスクレベルを取得します。 featureIMPL_VIC_FEATURE_NOPRIORITYMASK を設定しない場合 (優先度マスクをサポートする場合)に実装が必要です。

戻り値:

マスクレベル

IMPL_VIC_RaiseSoftwareInterrupt

void IMPL_VIC_RaiseSoftwareInterrupt(int intno)

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

パラメータ:
  • intno -- 割り込み番号

IMPL_VIC_ClearSoftwareInterrupt

void IMPL_VIC_ClearSoftwareInterrupt(int intno)

ソフトウェア割り込みの発生状態をクリアします。

パラメータ:
  • intno -- 割り込み番号