(57)【特許請求の範囲】
【請求項１】
ＩＣ無線通信装置を構成する方法であって、
前記装置は、メモリと、無線通信回路と、割り込みインタフェース回路と、ハードウェア割り込み入力ラインを有するプロセッサとを備え、
前記メモリと、前記無線通信回路と、前記割り込みインタフェース回路と、前記プロセッサと、はシリコンチップ上に集積されていて、
前記割り込みインタフェース回路は、前記装置の前記プロセッサで実行中のソフトウェアによって生成される信号を受信する入力回路と、ソフトウェア生成された信号を前記入力回路で受信すると前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように設定された出力回路とを備え、
前記メモリは、前記プロセッサで実行するためのファームウェアモジュールを収容して、前記ファームウェアモジュールは、（ｉ）所定の無線プロトコルに従って前記無線通信回路を制御するように前記プロセッサに指示する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能の特定情報を受信し、特定された前記無線通信機能を呼び出すように前記プロセッサに指示する命令を備えた割り込みルーチンと、を含み、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると前記割り込みルーチンを呼び出すように構成され、
前記方法は、前記装置の前記メモリにソフトウェアアプリケーションを読み込むことを含む方法であって、
前記ソフトウェアアプリケーションは、（ｉ）前記割り込みインタフェース回路へ送る信号を生成することによって、前記割り込みインタフェース回路に前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にさせ、さらに、（ｉｉ）呼び出すべき無線通信機能を特定し前記割り込みルーチンに知らせることによって、前記ファームウェアモジュール内の無線通信機能を呼び出すように前記プロセッサに指示する命令を備える
ことを特徴とする、ＩＣ無線通信装置を構成する方法。
【請求項２】
ＩＣ無線通信装置を構成する方法であって、
前記装置は、メモリと、無線通信回路と、割り込みインタフェース回路と、ハードウェア割り込み入力ラインを有するプロセッサとを備え、
前記メモリと、前記無線通信回路と、前記割り込みインタフェース回路と、前記プロセッサと、はシリコンチップ上に集積されていて、
前記割り込みインタフェース回路は、前記装置の前記プロセッサで実行するソフトウェアによって生成された信号を受信する入力回路と、前記入力回路でソフトウェアが生成した信号を受信すると、前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように設けられた出力回路とを含み、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると、割り込みルーチンを呼び出すように構成されていて、
前記方法は
前記プロセッサで実行するために、ファームウェアモジュールを前記装置の前記メモリに読み込むことと、
前記プロセッサで実行するために、ソフトウェアアプリケーションを前記装置の前記メモリに読み込むことと、を含み、
前記ファームウェアモジュールは、（ｉ）所定の無線プロトコルに従って前記無線通信回路を制御するように前記プロセッサに指示する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能の特定情報を受信し、特定された前記無線通信機能を呼び出すように前記プロセッサに指示する命令を含む割り込みルーチンと、を含んで、
前記ソフトウェアアプリケーションは、前記割り込みインタフェース回路へ送る信号を生成することによって、前記割り込みインタフェース回路に前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にさせるとともに、呼び出すべき無線通信機能を特定し前記割り込みルーチンに知らせることによって、前記ファームウェアモジュールの無線通信機能を呼び出すように前記プロセッサに指示する命令を含む
ことを特徴とする、ＩＣ無線通信装置を構成する方法。
【請求項３】
前記ファームウェアモジュールは、予めリンクされたバイナリイメージである
ことを特徴とする、請求項１または請求項２に記載の方法。
【請求項４】
さらに、前記ソフトウェアアプリケーションを所定のアプリケーションメモリアドレスに読み込むことを含む
ことを特徴とする、請求項１乃至請求項３のいずれかに記載の方法。
【請求項５】
前記ソフトウェアアプリケーションは、前記ファームウェアモジュールのメモリアドレスに関して何もデータを含まない
ことを特徴とする、請求項１乃至請求項４のいずれかに記載の方法。
【請求項６】
前記割り込みインタフェース回路の前記入力回路は、前記プロセッサが所定のメモリアドレスまたはレジスタに書き込みを行なうと、信号を検出するように設定される
ことを特徴とする、請求項１乃至請求項５のいずれかに記載の方法。
【請求項７】
前記ソフトウェアアプリケーションは、呼び出すべき前記無線通信機能を特定する機能特定情報を前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項１乃至請求項６のいずれかに記載の方法。
【請求項８】
前記ソフトウェアアプリケーションは、前記装置の共有メモリ位置に前記機能特定情報を書き込むように前記プロセッサに指示する命令を含み、前記割り込みルーチンは、前記共有メモリ位置から前記機能特定情報を読み出すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項７に記載の方法。
【請求項９】
前記共有メモリ位置のアドレスは、前記ファームウェアモジュールと前記ソフトウェアアプリケーションにハードコードされている
ことを特徴とする、請求項８に記載の方法。
【請求項１０】
前記ソフトウェアアプリケーションは、前記機能特定情報をコールスタックで前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項７に記載の方法。
【請求項１１】
前記ソフトウェアアプリケーションは、前記無線通信機能用のパラメータをコールスタックに書き込むことによって前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項１乃至請求項１０のいずれかに記載の方法。
【請求項１２】
前記割り込みルーチンは、前記パラメータを前記コールスタックから読み出し、前記パラメータを前記無線通信機能に渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項１１に記載の方法。
【請求項１３】
前記ファームウェアモジュールは、前記ソフトウェアアプリケーションのコールバック機能のアドレスを含み、前記割り込みルーチンは、一つ以上のメモリアドレスを前記コールバック機能に渡し、前記一つ以上のメモリアドレスからデータを読み出すことによって、前記コールバック機能から機能特定情報または機能パラメータを受け取るように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項１乃至請求項１２のいずれかに記載の方法。
【請求項１４】
前記ファームウェアモジュールは、前記ファームウェアモジュールによって前記ソフトウェアアプリケーションに提供されるすべての前記無線通信機能が、前記割り込みインタフェース回路へ送る信号を生成することによって呼び出すことができるように設定される  ことを特徴とする、請求項１乃至請求項１３のいずれかに記載の方法。
【請求項１５】
前記プロセッサは、複数の割り込み優先度をサポートしており、前記装置は、前記ファームウェアモジュールの一部の機能を比較的高い優先度で実行し、前記ファームウェアモジュールの他の機能を比較的低い優先度で実行するように設定されている
ことを特徴とする、請求項１乃至請求項１４のいずれかに記載の方法。
【請求項１６】
前記装置は、前記ソフトウェアアプリケーションの一部の機能を比較的高い優先度で実行し、前記ソフトウェアアプリケーションの他の機能を比較的低い優先度で実行し、前記ソフトウェアアプリケーションの前記高い優先度と前記低い優先度が、前記ファームウェアモジュールの前記高い優先度と前記低い優先度と交互配置されるように設定されている
ことを特徴とする、請求項１５に記載の方法。
【請求項１７】
前記ファームウェアモジュールの最も高い優先順位は、前記ソフトウェアアプリケーションの最も高い優先順位よりも高い
ことを特徴とする、請求項１６に記載の方法。
【請求項１８】
前記ファームウェアモジュールと前記ソフトウェアアプリケーションは、それぞれ割り込みベクタテーブルを有し、前記装置は、割り込みを処理する際に、前記ファームウェアモジュールの前記ベクタテーブルを使用するように構成されていて、前記ファームウェアモジュールは、自ら処理するようにはプログラムされていないすべての割り込みが前記ソフトウェアアプリケーションに渡されるように構成されている
ことを特徴とする、請求項１乃至請求項１７のいずれかに記載の方法。
【請求項１９】
前記装置は、メモリアクセス命令をインターセプトして、前記ソフトウェアアプリケーションが前記ファームウェアモジュールを読み出したり上書きしたりするのを防止するように設定されたメモリ保護回路を備えている  ことを特徴とする、請求項１乃至請求項１８のいずれかに記載の方法。
【請求項２０】
ハードウェア割り込み入力ラインを有するプロセッサと、
メモリと、
無線通信回路と、
割り込みインタフェース回路と、を備えるＩＣ無線通信装置であって、
前記メモリと、前記無線通信回路と、前記割り込みインタフェース回路と、前記プロセッサと、はシリコンチップ上に集積されていて、
前記メモリは、前記プロセッサで実行するためのファームウェアモジュールを収容して、前記ファームウェアモジュールは、（ｉ）所定の無線プロトコルに従って無線通信回路を制御するように前記プロセッサに指示する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能を特定できる情報を受信し、特定された前記無線通信機能を呼び出すように前記プロセッサに指示する命令を含む割り込みルーチンと、を含み、
前記割り込みインタフェース回路は、前記装置の前記プロセッサで実行中のソフトウェアによって生成される信号を受信する入力回路と、ソフトウェア生成された信号を前記入力回路で受信すると前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように構成された出力回路とを含み、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると前記割り込みルーチンを呼び出すように構成される
ことを特徴とする、ＩＣ無線通信装置。
【請求項２１】
前記ファームウェアモジュールは、予めリンクされたバイナリイメージである
ことを特徴とする、請求項２０に記載の装置。
【請求項２２】
前記割り込みインタフェース回路の前記入力回路は、前記プロセッサが所定のメモリアドレスまたはレジスタに書き込みを行なうと、信号を検出するように設定される
ことを特徴とする、請求項２０または請求項２１に記載の装置。
【請求項２３】
前記メモリは、追加として、前記割り込みインタフェース回路へ送る信号を生成することによって前記割り込みインタフェース回路に前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にさせ、呼び出すべき無線通信機能を特定し前記割り込みルーチンに知らせることによって、前記ファームウェアモジュールの前記無線通信機能を呼び出すように前記プロセッサに指示する命令を含むソフトウェアアプリケーションを収容している
ことを特徴とする、請求項２０乃至請求項２２のいずれかに記載の装置。
【請求項２４】
前記ソフトウェアアプリケーションは、前記ファームウェアモジュールのメモリアドレスに関して何もデータを含まない
ことを特徴とする、請求項２３に記載の装置。
【請求項２５】
前記ソフトウェアアプリケーションは、呼び出すべき前記無線通信機能を特定する機能特定情報を前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２３または請求項２４に記載の装置。
【請求項２６】
前記ソフトウェアアプリケーションは、前記装置の共有メモリ位置に前記機能特定情報を書き込むように前記プロセッサに指示する命令を含み、前記割り込みルーチンは、前記共有メモリ位置から前記機能特定情報を読み出すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２５に記載の装置。
【請求項２７】
前記共有メモリ位置のアドレスは、前記ファームウェアモジュールと前記ソフトウェアアプリケーションにハードコードされている
ことを特徴とする、請求項２６に記載の装置。
【請求項２８】
前記ソフトウェアアプリケーションは、前記機能特定情報をコールスタックで前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２５に記載の装置。
【請求項２９】
前記ソフトウェアアプリケーションは、前記無線通信機能用のパラメータをコールスタックに書き込むことによって前記割り込みルーチンに渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２３乃至請求項２８のいずれかに記載の装置。
【請求項３０】
前記割り込みルーチンは、前記パラメータを前記コールスタックから読み出し、前記パラメータを前記無線通信機能に渡すように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２９に記載の装置。
【請求項３１】
前記ファームウェアモジュールは、前記ソフトウェアアプリケーションのコールバック機能のアドレスを収容し、前記割り込みルーチンは、一つ以上のメモリアドレスを前記コールバック機能に渡し、前記一つ以上のメモリアドレスからデータを読み出すことによって、前記コールバック機能から機能特定情報または機能パラメータを受け取るように前記プロセッサに指示する命令を含む
ことを特徴とする、請求項２３乃至請求項３０のいずれかに記載の装置。
【請求項３２】
前記ファームウェアモジュールは、前記ファームウェアモジュールによって前記ソフトウェアアプリケーションに提供されるすべての前記無線通信機能が、前記割り込みインタフェース回路へ送る信号を生成することによって呼び出すことができるように設定される  ことを特徴とする、請求項２３乃至請求項３１のいずれかに記載の装置。
【請求項３３】
前記プロセッサは、複数の割り込み優先度をサポートしており、前記装置は、前記ファームウェアモジュールの一部の機能を比較的高い優先度で実行し、前記ファームウェアモジュールの他の機能を比較的低い優先度で実行するように設定されている
ことを特徴とする、請求項２３乃至請求項３２のいずれかに記載の装置。
【請求項３４】
前記装置は、前記ソフトウェアアプリケーションの一部の機能を比較的高い優先度で実行し、前記ソフトウェアアプリケーションの他の機能を比較的低い優先度で実行し、前記ソフトウェアアプリケーションの前記高い優先度と前記低い優先度が、前記ファームウェアモジュールの前記高い優先度と前記低い優先度と交互配置されるように設定されている
ことを特徴とする、請求項３３に記載の装置。
【請求項３５】
前記ファームウェアモジュールの最も高い優先順位は、前記ソフトウェアアプリケーションの最も高い優先順位よりも高い
ことを特徴とする、請求項３４に記載の装置。
【請求項３６】
前記ファームウェアモジュールと前記ソフトウェアアプリケーションは、それぞれ割り込みベクタテーブルを有し、前記装置は、割り込みを処理する際に、前記ファームウェアモジュールの前記ベクタテーブルを使用するように構成されていて、前記ファームウェアモジュールは、自ら処理するようにはプログラムされていないすべての割り込みが前記ソフトウェアアプリケーションに渡されるように構成されている
ことを特徴とする、請求項２３乃至請求項３５のいずれかに記載の装置。
【請求項３７】
前記装置は、メモリアクセス命令をインターセプトして、前記ソフトウェアアプリケーションが前記ファームウェアモジュールを読み出したり上書きしたりするのを防止するように設定されたメモリ保護回路を備えている
ことを特徴とする、請求項２３乃至請求項３６のいずれかに記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣ無線通信装置およびその装置を構成する方法に関する。
【背景技術】
【０００２】
ＩＣ無線通信装置は、通常、プロセッサとメモリと無線通信回路とをシリコンチップ上に集積している。アンテナは、シリコン上に組み込んでもよいし、または、外部接続してもよい。該装置は、通常、電源と、クロック源と、センサ、タイマー、デジタルアナログ変換器、出力装置などの外部周辺機器とに接続するためのピンを有する。プロセッサは、この装置が無線メッセージの送受信を行なうのを管理するために、無線通信回路と相互にやり取りする。
【０００３】
このような無線通信装置は、無線マウスとキーボード、ゲーム機器用コントローラ、自転車の速度計、リモートコントロール、ガレージドア開閉器、ワイヤレススピーカーなどといった広範囲の無線製品で使用される。
【０００４】
このような装置のプロセッサは、ブルートゥースやジグビーといった所定の無線プロトコルに従って無線通信回路を制御するために、該装置の不揮発性メモリに格納されたソフトウェアを実行することもある。
【０００５】
ワイヤレスマウス等の完成品は、通常、製品メーカーが別の無線チップメーカーから無線通信チップを仕入れて組み立てる。このチップメーカーは、該製品メーカーが該無線装置用の特別仕様ソフトウェアアプリケーションを開発し、導入し、デバッグすることができる、クロスコンパイラとローダとデバッガと説明書等のツールを含んだ開発キットも製品メーカーに提供することもある。特製アプリケーションソフトウェアは、例えば、所望の通信プロトコルに従って、ワイヤレスマウスの動作センサからの入力を受信し、関連するＵＳＢドングルに適切な無線メッセージを送信するためのルーチンを備えることができる。 
【０００６】
製品メーカーにチップの無線回路と直接やり取りすることを求めるのではなく、通常、チップメーカーは、チップと共に開発キットを提供する。開発キットは、チップメーカーによって書かれた、例えば、ブルートゥース低エネルギ等の特定無線プロトコルを実行するといった、無線回路の制御を行なう機能を含んだソフトウェアライブラリやオペレーティングシステムのソースコードを備えていてもよい。また、メモリ管理やプロセッサスケジューリングやプロセス間通信用の機能といった他の機能も備えていてもよい。アプリケーション開発者は、ゼロからそれらをコーディングする必要がなく、自らのアプリケーションコードからこれらの提供機能を呼び出すことができる。このようにすれば、アプリケーションソフトウェアの開発を簡単かつ迅速に行なうことができる。また、該無線装置の異なるモデル間での移植性を楽にすることができる。
【０００７】
製品メーカーは、通常、チップメーカーから入手したソースコードを自らの特別仕様ソフトウェアアプリケーションとともにコンパイル・リンクし、各装置のメモリ内の所定アドレスにロードする単一バイナリイメージファイルを作成する。
【０００８】
しかし、出願人は、このような従来のやり方を改善することができることに気付いた。
【発明の概要】
【０００９】
一態様によれば、本発明は、ＩＣ無線通信装置を構成する方法を提供するものであって、
前記装置は、メモリと、無線通信回路と、割り込みインターフェイス回路と、ハードウェア割り込み入力ラインを有するプロセッサとを備え、
前記割り込みインタフェース回路は、前記装置で実行中のソフトウェアによって生成される信号を受信する入力回路と、ソフトウェア生成された信号を前記入力回路で受信すると前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように設定された出力回路とを備え、
前記メモリは、（ｉ）所定の無線プロトコルに従って無線通信回路を制御する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能の特定情報を受信すると、特定された前記無線通信機能を呼び出す命令を備えた割り込みルーチンとを含むファームウェアモジュールを収容し、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると前記割り込みルーチンを呼び出すように構成され、
前記方法は、前記装置の前記メモリにソフトウェアアプリケーションを読み込むことを含む方法であって、
前記ソフトウェアアプリケーションは、（ｉ）前記割り込みインターフェイス回路へ送る信号を生成することによって、前記割り込みインターフェイス回路に前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にさせ、さらに、（ｉｉ）呼び出すべき無線通信機能を特定して前記割り込みルーチンに知らせることによって、前記ファームウェアモジュール内の前記無線通信機能を呼び出す命令を備える。
【００１０】
このようにして、本発明によれば、ハードウェア割り込みを介してファームウェアモジュールから複数の無線通信機能を呼び出すソフトウェアアプリケーションを無線通信装置に読み込むことが可能であることが、当業者には理解できるであろう。
【００１１】
このメカニズムによれば、ソフトウェアアプリケーション開発者がソフトウェアアプリケーションのコードを装置メーカーによって供給されるライブラリやオペレーティングシステムとリンクする必要がなくなる。ソフトウェアアプリケーション開発者は、無線通信機能がメモリ内のどこに配置されているのか知らなくても、これらを呼び出すコードを記述できるようになる。このようにすれば、開発プロセスは、より安定し、より簡単で、より確実なものになり得る。
【００１２】
好ましい実施形態では、前記ファームウェアモジュールは、予めリンクされたバイナリイメージすなわちモジュールである。前記ファームウェアモジュールと前記ソフトウェアアプリケーションとのリンク作業は発生しないことが好ましい。前記ファームウェアモジュールは、その一部または全部をマシンコードから直接アセンブルすることも可能であるが、通常、コンパイルされた（例えば、Ｃプログラミング言語からコンパイルされた）バイナリイメージであると想定される。
【００１３】
前記ファームウェアモジュールと前記ソフトウェアアプリケーションとのリンク時における依存関係が不要となることによって、前記ソフトウェアアプリケーションの開発中にバグが発生する可能性を低減することができる。前記ソフトウェアアプリケーションの開発中に、前記ファームウェアモジュールを再コンパイルして再リンクし続ける必要はなくなる。このような開発の連続性により、バグが発生するのを回避することができ、仮にバグが発生してもデバッグ処理の助けとなる。
【００１４】
前記装置メーカーが前記ソフトウェアアプリケーション開発者に提供する情報は、比較的少なくて済む。前記ソフトウェアアプリケーションを開発するにあたり、前記アプリケーション開発者には、以下でより詳細に説明するように、前記ソフトウェアアプリケーション内のコールバック機能を配置するＲＡＭ内の所定の位置すなわちアドレス等の、呼び出すべき無線通信機能を特定するメカ二ズムに関する詳細、および、機能を特定できる情報と取り得る機能パラメータの詳細が提供される。前記アプリケーション開発者には、前記ソフトウェアアプリケーションを読み込むべき所定のソフトウェア用メモリアドレスが提供される。また、前記アプリケーション開発者には、前記ソフトウェアアプリケーションが利用可能なメモリ（コード域および／またはデータ域など）の量に関連する情報が提供されることも多い。少なくともいくつかの実施形態において、（前記プロセッサや装置アーキテクチャの標準的な詳細情報に加えて）この情報があれば、前記アプリケーション開発者が前記装置用のソフトウェアアプリケーションを記述し、コンパイルし、読み込むには十分である。
【００１５】
前記アプリケーション開発者に、この情報の一部またはすべてを含むヘッダファイルまたはソースファイル（Ｃプログラミング言語の場合の例）が提供されれば、好都合であると想定される（このようなヘッダファイルまたはソースファイルは、当然のことながら、前記アプリケーション開発者をさらに支援する、他の付加的な特徴を必要に応じて含んでいてもよい）。
【００１６】
このようにすれば、装置メーカーが、前記無線通信機能のオブジェクトファイルやソースコードを前記ソフトウェアアプリケーション開発者に供給しないで済む。このようにすれば、装置メーカーは、前記ファームウェアモジュール内の機能の内容と位置を前記アプリケーション開発者に通知することなく変更することができ、バージョン管理を簡素化することができる。
【００１７】
また、装置メーカーは、ファームウェアモジュールの機密ソースコードを前記アプリケーション開発者に公開する必要がないことを意味する。
【００１８】
前記ファームウェアモジュールが前記装置に予め読み込まれた状態でＩＣ装置を前記ソフトウェアアプリケーションの開発者に提供することによって、特に前記装置に前記ファームウェアモジュールの不正な読み出しを防ぐメモリ保護機能が含まれている場合は、前記オブジェクトコードにアクセスすることがさらに難しくなり、前記ファームウェアモジュールに含まれる機密情報のセキュリティを高めることができる。
【００１９】
前記ファームウェアモジュールを前記ソフトウェアアプリケーションにリンクする必要がないので、前記装置がエンドユーザの所有となった後であっても前記ファームウエアモジュールと前記ソフトウェアアプリケーションの一方または他方を（例えば、更新されたバージョンで）入れ換えることが可能である。
【００２０】
さらなる態様によれば、本発明は、ＩＣ無線通信装置を提供するものであって、前記装置は、
ハードウェア割り込み入力ラインを有するプロセッサと、
メモリと、
無線通信回路と、
割り込みインタフェース回路とを備え、
前記メモリは、（ｉ）所定の無線プロトコルに従って無線通信回路を制御する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能を特定できる情報を受信し、特定された前記無線通信機能を呼び出す命令を含む割り込みルーチンとを備えたファームウェアモジュールを収容し、
前記割り込みインタフェース回路は、前記装置で実行中のソフトウェアによって生成される信号を受信する入力回路と、ソフトウェア生成された信号を前記入力回路で受信すると前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように構成された出力回路とを含み、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると前記割り込みルーチンを呼び出すように構成される
ことを特徴とする。
【００２１】
ソフトウェアアプリケーションは、そのような装置の前記メモリに読み込まれ、そして、前記割込みインターフェース回路へ送る信号を生成し、無線通信機能を特定し前記割り込みルーチンに知らせることによって、無線通信機能を呼び出すことができる。
【００２２】
このように、いくつかの実施形態では、前記メモリは、前記割り込みインターフェイス回路へ送る信号を生成し、前記割り込みインターフェイス回路に前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にさせるとともに、呼び出すべき前記無線通信機能を特定し前記割り込みルーチンに知らせることによって、前記ファームウェアモジュールの無線通信機能を呼び出す命令を含むソフトウェアアプリケーションをさらに収容している。
【００２３】
前記ファームウェアモジュールは、読み出し制限および／または書き込み制限が適用されるメモリ領域に収容することができる。前記ファームウェアモジュールは、ＲＯＭに配置することができる。しかし、より好ましくは、前記ファームウェアモジュールは、前記装置上で実行される非特権コードでは読み出しおよび／または書き込みができない不揮発性メモリ（ＥＥＰＲＯＭやフラッシュメモリ等）の領域にある。読み出し保護によって、機密性保護をさらに高めることができる。書き込み保護によって、前記ファームウェアモジュールが前記装置に読み込まれた後に（前記ソフトウェアアプリケーションのバグ等によって）偶発的に、または、悪意を持って破損される危険性を減らすことができる。
【００２４】
しかし、前記アプリケーション開発者は、前記ファームウェアモジュールをバイナリイメージとして提供され、製造過程で、前記ファームウェアモジュールと任意のソフトウェアアプリケーションの両方を前記装置に読み込むことも可能である。こうすれば、前記装置メーカーにとって、ソースコードを前記アプリケーション開発者に提供するよりもまだ安全である。また、前記アプリケーション開発者が、前記ファームウェアモジュールをコンパイルし前記ソフトウェアアプリケーションにリンクする義務から救うこともできる。
【００２５】
このように、さらなる態様によれば、本発明は、ＩＣ無線通信装置を構成する方法を提供するものであって、
前記装置は、メモリと、無線通信回路と、割り込みインターフェイス回路と、ハードウェア割り込み入力ラインを有するプロセッサとを備え、
前記割り込みインタフェース回路は、前記装置で実行するソフトウェアによって生成された信号を受信する入力回路と、前記入力回路でソフトウェアが生成した信号を受信すると、前記プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように設けられた出力回路とを含み、
前記装置は、前記プロセッサの前記ハードウェア割り込み入力ラインが割り込み可能状態になると、割り込みルーチンを呼び出すように構成されていて、
前記方法は
（ｉ）所定の無線プロトコルに従って無線通信回路を制御する命令と、（ｉｉ）前記ファームウェアモジュールにある無線通信機能を特定できる情報を受信し、特定された前記無線通信機能を呼び出す命令を含む割り込みルーチンとを含むファームウェアモジュールを前記装置の前記メモリに読み込むことと、
前記割り込みインターフェイス回路へ送る信号を生成することによって前記割り込みインターフェイス回路に前記プロセッサのハードウェア割り込み入力ラインを割り込み可能状態にさせ、呼び出すべき無線通信機能を特定し前記割り込みルーチンに知らせることによって、前記ファームウェアモジュールの前記無線通信機能を呼び出す命令を含むソフトウェアアプリケーションを前記装置の前記メモリに読み込むこととを含む
ことを特徴とする。
【００２６】
前記ファームウェアモジュールと前記ソフトウェアアプリケーションは、任意の順番で、または、実質的に同時に前記装置に読み込まれてもよい。それでも、二つを同時に読み込むことは、ソフトウェアアプリケーションとライブラリがリンクされた単一のものを（例えば、単一のバイナリイメージファイルとして）読み込むこととは本質的に異なることを理解されたい。
【００２７】
前記ファームウェアモジュールは、所定のファームウェア用メモリアドレスに読み込まれることが好ましい。前記ソフトウェアアプリケーションは、所定のアプリケーション用メモリアドレスに読み込まれることが好ましい。
【００２８】
本発明のすべての態様において、前記ファームウェアモジュールは、コンパイル・リンクされたバイナリイメージであることが好ましい。同様に、前記ソフトウェアアプリケーションも、コンパイル・リンクされたバイナリイメージであることが好ましい。前記ファームウェアモジュールと前記ソフトウェアアプリケーションは、互いにリンクされてはいないことが好ましい。前記ファームウェアモジュールは、前記ソフトウェアアプリケーションに関連するメモリアドレス情報を何も含まないことが好ましい（下記に詳細が説明されるように、無線通信機能のパラメータを前記ファームウェアモジュールに渡す等の目的で、前記ソフトウェアアプリケーションにある一つ以上のコールバック機能のアドレスはおそらく例外となる）。前記ソフトウェアアプリケーションは、前記ファームウェアモジュールに関連するメモリアドレス情報を何も含まないことが好ましい。しかしながら、いくつかの実施形態では、前記ソフトウェアアプリケーションは、例えば、コールバック機能を登録したり機能に関するパラメータとしてデータを渡したりするために、前記ファームウェアモジュールにある一つ以上の機能のエントリポイントアドレスを含む可能性があるが、その場合であっても、前記ソフトウェアアプリケーションは、前記ファームウェアモジュールにある無線通信機能のアドレスを何も含まないことが好ましい。
【００２９】
前記プロセッサが複数の割込み優先順位をサポートしているときは、本発明の実施形態のさらなる利点が生じる。前記無線通信機能は割り込みを介して呼び出されるので、前記無線通信機能がその呼び出しの元となった機能よりも高い優先順位で実行される可能性がある。
【００３０】
前記プロセッサは種類を問わないが、いくつかの好ましい実施形態では、ＡＲＭ社によって設計されたプロセッサであり、ＡＲＭ  Ｃｏｒｔｅｘ−Ｍファミリー（Ｃｏｒｔｅｘ−Ｍ０等）に属するものである。前記割り込みインタフェース回路は、物理的および／または論理的に前記プロセッサとは別であることが好ましく、前記プロセッサによって使用されていない論理ゲートを含むことが好ましい。
【００３１】
前記割り込みインターフェース回路の前記入力回路は、前記プロセッサが所定のメモリアドレス、前記割り込みインターフェース回路と関係付けられたレジスタ等のレジスタ、または、ＲＡＭ内の所定位置に書き込みを行なうと信号を検出するように設定されることが好ましい。前記入力回路は、所定の位置におけるデータビットや他の値の内容が変わると信号を検出するように構成すればよい。前記プロセッサによる変更を検出するためには、その位置を監視したり周期的にポーリングしたりするように構成すればよい。
【００３２】
前記入力回路は、例えば、ＡＲＭのThum命令セット（ＡＲＭｖ７−Ｍ  Thum命令セット等）の命令のような、一つ以上の標準的なプロセッサ命令によって前記信号を生成することができるようなやり方で、前記信号を検出するように構成されることが好ましい。こうすれば、標準的なプロセッサコアを前記装置内で何ら変更せずに使用することができ、余分な技術的苦労を最小限にするには非常に望ましい。いくつかの好ましい実施形態では、ソフトウェアが前記装置のプロセッサに命令して、ある値を所定のメモリ位置に（ＳＴＯＲＥ命令やＭＯＶＥ命令を使用するなどして）書き込むことによって前記信号を生成することができる。前記ソフトウェアアプリケーションは、システムコールやスーパーバイザコールを何も含まなくても、前記ソフトウェアアプリケーションが実行中の優先順位よりも高い優先順位および／または特権レベルで無線通信機能を呼び出すことができる。
【００３３】
前記装置は、二つ以上など複数のプロセッサを含むことができる。いくつかの実施形態では、第一プロセッサ上で実行中のソフトウェアは、前記割込みインターフェース回路へ送る信号を生成し、前記割り込みインターフェース回路の前記出力回路は、前記第一プロセッサとは異なる第二プロセッサの前記ハードウェア割り込み入力ラインを割り込み可能状態にするように設定することができる。他の実施形態では、ただ一つのプロセッサしかない場合もある。
【００３４】
前記割り込みルーチンは、一つ以上の別の機能やサブルーチンを呼び出すことができる。いくつかの実施形態では、このような機能やサブルーチンは、前記割り込みルーチンの構成要素であるとみなされる場合があったり、別のものとみなされる場合があったりする。いくつかの実施形態では、前記割り込みルーチンは、以下に説明するように、コールバック機能を呼び出すなどして、前記ソフトウェアアプリケーションの命令を呼び出したり、それらの命令にジャンプすることができる。前記割り込みルーチンまたはその一部は、特定のメモリアドレスに配置され、前記ハードウェア割り込み入力ラインが割り込み可能状態になると前記プロセッサが前記割り込みルーチンに直接ジャンプするように、そのメモリアドレスを前記装置の割込みベクタテーブルに格納することができる。あるいは、前記割り込みルーチンは、例えば、ＲＯＭ内、または、ブートローダーや前記ファームウェアモジュールとは別の他のバイナリモジュール内の割り込み処理機能によって、間接的に呼び出すことができる。
【００３５】
前記ソフトウェアアプリケーションは、任意の適切なメカニズムを使用し、呼び出すべき前記無線通信機能を特定し前記割り込みルーチンに知らせることができる。前記ソフトウェアアプリケーションは、いくつかの実施形態では前記割込みインターフェース回路へ送る信号を生成する前に、他の実施形態では前記信号を生成した後に、前記無線通信機能を特定することができる。
【００３６】
前記ソフトウェアアプリケーションは、呼び出すべき前記無線通信機能を特定する機能特定情報を前記割込みルーチンに渡すことが好ましい。前記機能特定情報は、任意の適切な形をとることができ、例えば、所定の対応関係またはマッピングに応じて前記ファームウェアモジュール内の無線通信機能を一意に特定するニ進数、文字列、メモリアドレス、または他の値を含むことができる。前記ファームウェアモジュール内の複数の無線通信機能は、それぞれ異なる機能特定情報と関係付けられることが多い。前記アプリケーション開発者は、前記ソフトウェアアプリケーションを開発するときに使用する、無線通信機能と機能特定情報との関連性を（例えば、文書やヘッダーファイルで）提供される場合もある。
【００３７】
一連の実施形態では、前記ソフトウェアアプリケーションは、例えば、プロセッサレジスタや他のハードウェアレジスタ、または、（ＲＡＭ内などの）メモリアドレスといった、前記装置の共有メモリ域に前記機能特定情報を書き込むことによって、前記割り込みルーチンに前記機能特定情報を渡す。すると、前記割り込みルーチンは、前記共有メモリ域から前記機能特定情報を読み出し、前記機能特定情報と関係付けられている無線通信機能を呼び出すことができる。この関係付けは、（例えば、コンパイルされたswitch文として）前記割り込みルーチンにコンパイルするか、または、受信した機能特定情報と関係付けられた無線通信機能の前記アドレスを特定するために前記割り込みルーチンが読み込むことができる、参照テーブルのようなデータオブジェクトとして格納することができる。
【００３８】
さらに、共有メモリ域を利用すれば、前記ソフトウェアアプリケーションは、直接に、または前記割り込みルーチンを介して間接的に、特定された前記無線通信機能にパラメータを渡すことができる。こうして、前記ソフトウェアアプリケーションは、一つ以上のパラメータを一つ以上の共有メモリ域に書き込む命令を含み、前記割り込みルーチンや前記無線通信機能は、前記一つ以上のパラメータを前記一つ以上の共有メモリ域から読み出す命令を含むことができる。
【００３９】
このような各共有メモリ域のアドレスは、前記ファームウェアモジュールと前記ソフトウェアアプリケーションの両方にハードコードされてもよいし、前記ファームウェアモジュールと前記ソフトウェアアプリケーションのうちのいずれかに（例えば、前記ファームウェアモジュールにのみ）ハードコードされ、スタックを経由するか異なる共有メモリ域に格納することによって、他方に渡してもよい。例えば、両方の構成要素にハードコードされた単一の共有メモリ域を使用して、前記単一の共有メモリ域に複数の追加共有メモリ域のアドレスを書き込むことによって前記複数の追加共有メモリ域を転送することができる。こうすれば、前記ソフトウェアアプリケーションをサポートするために必要なメモリレイアウト上の制約を最小限にすることによって、装置メーカーが柔軟性を高めることができる。これは、メモリ域が前記ソフトウェアアプリケーションにハードコードされる場合、前記メモリ域を含んだヘッダファイルを前記アプリケーション開発者に提供することによって実現することができる。
【００４０】
別の一連の実施形態では、前記ソフトウェアアプリケーションは、前記機能特定情報をコールスタックで前記割り込みルーチンに渡す。前記ソフトウェアアプリケーションは、前記機能特定情報を前記スタックに預けると、前記割り込みルーチンが前記スタックから前記機能特定情報を読み出すことができる。前記割り込みルーチンは、前記ソフトウェアアプリケーションによって（つまり、前記ファームウェアモジュールやそれ以外のソフトウェア構成要素からではなく）生成された信号によってのみ呼び出し可能なので、前記割り込みルーチンに入る段階で前記コールスタックの状態が予知可能であることを保証する助けとなり、このおかげで、前記割り込みルーチンは前記機能特定情報が前記スタックのどこにあるのか事前に知ることができる。前記ソフトウェアアプリケーションは、前記無線通信機能用のパラメータを前記スタックに書き込むことによって前記割り込みルーチンに渡すこともできる。前記割り込みルーチンは、このようなパラメータを前記スタックから読み出し、前記無線通信機能に渡すように設定することができる。前記割り込みルーチンは、必要に応じて前記パラメータを再設定したり、さもなければ処理したりすることができる。前記無線通信機能を呼び出す前に、一部またはすべてのパラメータを前記スタックに戻すことができる。
【００４１】
この一連の実施形態は、前記ソフトウェアアプリケーションが、前記ソフトウェアアプリケーションと前記ファームウェアモジュールとでＲＡＭやプログラムメモリ域を共有する必要がなく（このことを除外してはいないが）、前記ファームウェアモジュール内の機能を呼び出すことができるので、特に有益である。
【００４２】
いくつかの実施形態では、前記ファームウェアモジュールは、前記ソフトウェアアプリケーションのコールバック機能のアドレスを含む場合がある。「コールバック」という用語は、ここでは、前記ソフトウェアアプリケーションが割り込みを介して前記ファームウェアモジュールに制御を渡した後に、前記ファームウェアモジュールが前記ソフトウェアアプリケーションから呼び出すことができる機能を記述するために使用され、前記機能へのポインタが前記ファームウェアモジュールに動的に渡されることは必須ではない。例えば、前記アドレスが前記アプリケーション開発者に与えられていて、（適切なリンカー命令を使用するなどして）前記ソフトウェアアプリケーションが前記装置に読み込まれると前記コールバック機能が所定のアドレスに配置されるように前記ソフトウェアアプリケーションをコンパイルおよび／またはリンクすることができる。あるいは、前記ソフトウェアアプリケーションは、前記コールバック機能の前記アドレスを前記ファームウェアモジュールに渡すことができる。これは、上述のように、前記アドレスを共有メモリ域に書き込むか前記スタックに渡すことによって行なうことができるし、または、前記ファームウェアモジュールがコールバック登録機能を所定アドレスに持っていて前記ソフトウェアアプリケーションが前記コールバック機能の前記アドレスを同機能に渡すこともできる。この場合、前記コールバック登録機能の前記アドレスは、例えば、前記ソフトウェアアプリケーションをリンクする際に使用されるスタブという形で、前記ソフトウェアアプリケーションの前記開発者に提供することができる。一つのコールバック登録機能の前記アドレスを前記アプリケーション開発者に提供することにより、ファームウェア開発者が後日に前記ファームウェアモジュール内の無線通信機能を自由に再配置することが可能になるので、すべての前記無線通信機能の前記アドレスを提供するよりも好ましいことがある。
【００４３】
前記割り込みルーチンは、自らに機能特定情報および／または無線通信機能のパラメータを提供する、ソフトウェアアプリケーション内の機能（コールバック機能など）を呼び出すように構成することができる。これは、前記割り込みルーチンが一つ以上のメモリアドレス（ポインタなど）を前記コールバック機能に渡し、前記コールバック機能が機能特定情報および／またはパラメータを前記メモリアドレスに書き込むことによって実現することができる。すると、前記割り込みルーチンは、前記アドレスにある該データをアクセスし前記機能特定情報および／またはパラメータを特定することができる。前記無線通信機能を呼び出す前に、一部またはすべてのパラメータを前記スタックに戻すこともできる。パラメータを取り出すためにコールバックを使用すると、パックされた構造を用いてメモリ域を各種タイプに変換する必要がなく、通常の「Ｃ」言語の関数プロトタイプでパラメータをフォーマットする手法を使うことができる。したがって、この手法を使えば、所定の共有メモリ域や前記スタックにパラメータを渡すことと比較して、コーディングをより簡単にすることができる。
【００４４】
機能を呼び出して機能から戻るという概念がどのように実行されるかは、前記プロセッサのアーキテクチャに依存することが理解されるであろう。前記プロセッサは、いくつかの実施形態では、特定の呼び出し命令および／または戻り命令をサポートすることができるし、他の実施形態では、異なる制御フロー操作および／またはスタック操作を使用してこれらの上位概念を実行することができる。
【００４５】
上記の態様のいずれかの好ましい実施形態では、前記ファームウェアモジュールは、前記ファームウェアモジュールによって前記ソフトウェアアプリケーションに提供されるすべての前記無線通信機能が、前記割込みインターフェース回路へ送る信号を生成することによって呼び出すことができるように設定されている。このように、ファームウェアの無線機能を呼び出す他のメカニズムが前記ファームウェアモジュールや前記装置によってサポートされる必要はないので、静的リンクや実行時リンクにかなり依存することを回避することができ、前記装置および前記ソフトウェアアプリケーションの開発を簡素化することができる。
【００４６】
前記ファームウェアモジュールは、必ずしも無線通信に関連しない、前記ソフトウェアアプリケーションが呼び出すことができる他の機能、例えば、暗号化アルゴリズムを提供してもよいことが理解されるであろう。前記装置は、そのようなすべての機能を前記ソフトウェアアプリケーションによって呼び出すのは、前記割り込みインターフェイス回路へ送る信号を生成することによって行われるように構成されることが好ましい。
【００４７】
前記装置の実施形態は、伝統的な、完全なオペレーティングシステムを含む必要はないので、前記アプリケーション開発者は、前記装置メーカーによって供給される専用オペレーティングシステムとどのようにインターフェイスをとるか学習する必要はなく、前記ソフトウェアアプリケーションを前記プロセッサアーキテクチャのネイティブアプリケーションとして自由に開発することができる。この点は、前記アプリケーション開発者にとって、特に前記プロセッサが当該技術分野でよく知られている場合、非常に魅力的な特徴である。
【００４８】
前記装置が前記ファームウェアモジュールに加えてハードウェア抽象化層を有する場合、前記ソフトウェアアプリケーションは、この層と直接インターフェースをとることができる。アプリケーション固有のドライバも前記装置に読み込むことができる。
【００４９】
前記装置を構成することには、前記ソフトウェアアプリケーションをコンパイルするときの前記無線通信機能特定情報と前記無線通信機能との対応関係を使用することを含めることができる。前記ソフトウェアアプリケーションをコンパイルしたり読み込んだりすることは、前記所定のソフトウェアアプリケーション用メモリアドレスを利用することができる。いくつかの実施形態では、前記装置を構成することには、例えばヘッダファイルとして、スーパーバイザーコール番号と無線通信機能との対応関係を受信すること、および／または、前記所定のソフトウェアアプリケーション用メモリアドレスを受信することを含めることができる。そして、そのような情報は、前記ソフトウェアアプリケーションをコンパイルするときに使用することができる。
【００５０】
前記プロセッサは、複数の割り込み優先度をサポートしていることが好ましい。いくつかの実施形態では、前記ファームウェアモジュールの一部の機能は比較的高い優先度が割り当てられ、他の機能は比較的低い優先度が割り当てられる。緊急度の高い無線通信動作に関連する機能には、比較的高い優先度が割り当てられることが好ましい。
【００５１】
好ましい実施形態では、前記ソフトウェアアプリケーションは、前記ファームウェアモジュールが、前記ソフトウェアアプリケーション内の機能をそれらがどこに配置されているのか事前に知らなくても呼び出すことができるベクタテーブルを含んでいる。前記ファームウェアモジュールは、割り込みを受信すると、前記ソフトウェアアプリケーション内の機能を起動するように構成されていることが好ましい。このような割り込みは、例えば、動作感知器のような周辺機器から、生じる可能性がある。前記ファームウェアモジュールは、前記装置が無線データパケットを受信すると、前記ソフトウェアアプリケーション内の機能を呼び出すように構成することができる。
【００５２】
前記ソフトウェアアプリケーションは、以下でより詳しく説明するように、前記ファームウェアモジュールによって転送される割り込みを処理するように構成されていることが好ましい。
【００５３】
前記ソフトウェアアプリケーションは、一部のイベント駆動型機能を比較的高い優先度で実行し、所定の他の機能を比較的低い優先度で実行することができる。前記ソフトウェアアプリケーションが使用する優先順位は、前記ファームウェアモジュールが使用する優先順位と交互配置されることが好ましい。最も高いファームウェア優先順位は、前記ファームウェアモジュールで実行される、緊急度の高い無線通信動作が前記ソフトウェアアプリケーションよりも常に優先されるように、最も高いソフトウェアアプリケーション優先順位よりも高いことが好ましい。こうすれば、前記ソフトウェアアプリケーションの不注意なプログラミングに対して保護することができる。
【００５４】
前記ファームウェアモジュールと前記ソフトウェアアプリケーションは、それぞれ割り込みベクタテーブルを有することができる。二つのテーブルは、割り込みベクタアドレスのオフセットが互いに同じものを使用することが好ましい。前記ファームウェアモジュールのベクタテーブルにある割り込みベクタアドレスのオフセットは（したがって、二者が同じオフセットを使用している場合、前記ソフトウェアアプリケーションのベクタテーブルも）、通常、前記プロセッサアーキテクチャによって固定されている。前記装置は、割り込みを処理する際に、前記ファームウェアモジュールのベクタテーブルを（すなわち、システム割り込みベクタテーブルとして）使用するように構成されていることが好ましい。
【００５５】
しかし、前記ファームウェアモジュールは、自ら処理するようにはプログラムされていないすべての割り込みが前記ソフトウェアアプリケーションに渡されるように構成されていることが好ましい。これは、前記ファームウェアモジュールが、自分が特定の割込みを処理するように構成されていないときは常に前記ソフトウェアアプリケーションのベクタテーブル内の対応するオフセットに含まれるアドレスに処理をブランチさせることによって、実行される。これは、前記ソフトウェアアプリケーションが所定のメモリアドレスに読み込まれるときに可能となるが、その理由は、このようにすれば、前記ソフトウェアアプリケーションが前記装置に読み込まれると、前記ファームウェアモジュールは、前記ソフトウェアアプリケーションのベクタテーブルがどこにあるのかを事前に知ることができるからである。
【００５６】
例えば、いくつかの実施形態では、リセット割り込み処理部アドレスは、コンパイラによって、常に、オフセット＝０に配置されている。したがって、前記ファームウェアモジュールのベクタテーブル内の前記ＲＥＳＥＴ処理部アドレスは、メモリ内でアドレス 0x0000 0000 + 0 = 0x0000 0000 となる。前記ソフトウェアアプリケーションのベクタテーブル内の前記ＲＥＳＥＴ処理部アドレスは、アドレス CLENR0 + 0 = CLENR0 に存在し、ここで、CLENR0は、前記ソフトウェアアプリケーションが配置されている基底メモリアドレスである。
【００５７】
この割り込み転送メカニズムがあると、前記ソフトウェアアプリケーションが、前記装置にファームウェアモジュールが存在しない場合とほぼ同じようにハードウェア割り込みを処理するようにプログラムすることができるので便利である。前記ファームウェアモジュールは、割り込みを受信する目的では、前記ソフトウェアアプリケーションの前記開発者、および、そのコンパイルに見えないようにすることができる。前記割り込み転送は、直接のハードウェア割り込みと比較して、約３０未満の命令または約３マイクロ秒未満の待ち時間しか追加しないように実行されることが好ましい。
【００５８】
いくつかの実施形態では、前記ファームウェアモジュールは、実質的に前記ファームウェアモジュールを無効にするメカニズムを備えている。このような無効化は、前記ファームウェアモジュールの呼び出しを介して（割り込みインターフェイス回路のメカニズムを使用するのが好ましい）行なうことができる。前記ファームウェアモジュールを無効にすると、前記ファームウェアモジュールは、前記ソフトウェアアプリケーションにリソースを戻すために、プロトコルスタックをリセットして、メモリ保護（存在する場合）を無効にすることができる。無効にした場合、前記ファームウェアモジュールは、（そうでなければ自らが処理したであろう）すべての割り込みを前記ソフトウェアアプリケーションに転送することが好ましい。
【００５９】
前記プロセッサは、一つの割り込み優先順位から別の優先順位へシームレスに移行するようサポートすることが好ましい。これは、テールチェインと呼ばれることがある。こうすれば、緊急度の高い無線通信機能を必要時に優先させることができるように、前記ソフトウェアアプリケーションと前記ファームウェアモジュールの間で（およびその逆に）制御を転送する洗練された手段が提供される。
【００６０】
前記装置は、メモリアクセス命令をインターセプトするように構成されたメモリ保護回路を備えていることが好ましい。この回路は、前記プロセッサと前記メモリとの間に配置することができる。これは、メモリアクセス命令の位置（すなわち、前記プロセッサが前記命令を読み出した位置）を使用して、アクセスを許可するかどうかを決定することができる。前記メモリ保護回路は、前記ソフトウェアアプリケーションが前記ファームウェアモジュールを読み出したり、および／または、上書きしたりするのを防止するように構成されていることが好ましい。
【００６１】
このようなメモリ保護があれば、前記ファームウェアモジュールの機密情報が前記ソフトウェアアプリケーションの前記開発者によって読み出されるのを保護するという利点を提供することができる。また、前記ソフトウェアアプリケーションのプログラミングエラーによる潜在的損傷を最小限に抑えるとともに、前記ソフトウェアアプリケーションにあるバグの検出および訂正を助けることができる。前記メモリ保護回路は、前記ファームウェアモジュールと関係付けられたＲＡＭが前記ソフトウェアアプリケーションによって読み出されたり、および／または、書き込まれたりするのを保護するように構成することができる。
【００６２】
前記プロセッサと、前記メモリと、前記無線通信回路とは、単一の半導体層、例えば、シリコンチップに集積されていることが好ましい。しかし、代わりに、多層モジュール内に集積されていてもよい。
【００６３】
前記メモリは、ＥＥＰＲＯＭやフラッシュメモリなどの不揮発性メモリであることが好ましい。前記ファームウェアモジュールと前記ソフトウェアアプリケーションを前記メモリから直接に実行することができるように、ランダムアクセス読み出しをサポートしていることが好ましい。
【００６４】
当業者は、前記装置が、通常は、ＲＡＭなどの揮発性メモリも含んでいることを理解するであろう。一つ以上の周辺機器を追加で備えることができる。電力およびクロック信号を受信する接続部を有することもできる。アンテナとの接続部を有することもできる。シリアル接続部のような一つ以上の入力インタフェースおよび／または出力インタフェースを有することもできる。
【００６５】
本明細書に記載の一つの態様又は実施形態の随意の、または、好ましい特徴は、適切である限り、他の任意の態様または実施形態にも適用することができる。
【図面の簡単な説明】
【００６６】
ほんの一例として、添付図面を参照しながら、本発明の特定の好ましい実施形態を説明することにする。
【図１】本発明を実施するマイクロコントローラの概略図である。
【図２】マイクロアーキテクチャ内の主要なソフトウェア構成要素を示す概略図である。
【図３】マイクロコントローラの模式的なメモリマップである。
【図４】異なるプロセッサ割り込み優先順位の象徴的な図である。
【図５】さまざまな割り込みのシナリオを示す象徴的な図である。
【図６】ソフトウェアアプリケーションがファームウェアモジュールのある機能を呼び出す場合を示すソースコード要素の象徴的な図である。
【図７】ソフトウェアアプリケーションが内部機能を呼び出すためにシステムコールを使用する場合を示すソースコード要素の象徴的な図である。
【図８】ソフトウェアアプリケーションがハードウェア割り込みを受信する場合を示すソースコード要素の象徴的な図である。
【図９】通信機能を呼び出すための別のメカニズムを示している。
【図１０】通信機能を呼び出すためのさらに別のメカニズムを示している。
【図１１】通信機能を呼び出すためのまたさらに別のメカニズムを示している。
【発明を実施するための形態】
【００６７】
図１は、無線オンチップとして知られることもあるＩＣマイクロコントローラ１を示しており、抵抗・コンデンサ発振器を有し、および／または、オフチップ水晶発振器（図示せず）からの入力を受信することができるクロック回路３と、電力管理回路５と、プロセッサ７（ＡＴＭ  Ｃｏｒｔｅｘ−Ｍ０など）と、割込みインターフェース回路８と、メモリ保護回路９と、ＲＡＭ１１と、不揮発性フラッシュメモリ１３と、一つ以上の周辺機器１５と、無線通信回路１７と、入出力回路１９とを備えている。
【００６８】
プロセッサ７と、ＲＡＭ１１と、フラッシュメモリ１３とは、接続線およびバス（図示せず）を使用するなど、従来のやり方で相互接続されている。メモリ保護回路９は、プロセッサ７からＲＡＭ１１およびフラッシュメモリ１３への命令をインターセプトするように置かれている。割り込みインタフェース回路８は、プロセッサ７の予備ハードウェア割り込み入力とメモリバスとに接続されている。
製品に設置する場合、マイクロコントローラ１は、電源、無線アンテナ、水晶発振器、コンデンサ、センサ、オーディオ／ビジュアル出力デバイス、等（図示せず）の多くの外付け構成要素に接続することができる。
【００６９】
図２は、ソフトウェアアーキテクチャの主要構成要素を示している。これらには、ＡＲＭ  Ｃｏｒｔｅｘマイクロコントローラソフトウェアインターフェイス規格などの随意のハードウェア抽象化層２１と、ファームウェアモジュール２３と、ドライバ２５と、ソフトウェアアプリケーション２７とが含まれる。ドライバ２５は、ソフトウェアアプリケーション２７専用とすることもできる。
【００７０】
ファームウェアモジュール２３は、多くの組込みソフトウェアブロックを含む、リンクされたバイナリアプリケーションである。無線プロトコルブロック３１は、ブルートゥース低エネルギーなどの一つ以上の無線プロトコルスタックを実行する。ライブラリ３５は、共有ハードウェアリソース管理と、乱数生成、割り込みや優先度の構成、（例えば、周辺機器の起動と停止を行なうための）電源管理、暗号化機能などの機能とを提供する。ファームウェアマネジャー３７は、ファームウェアモジュールの起動と停止、および無線プロトコルスタックの起動と停止をサポートする。
【００７１】
ファームウェアモジュール２３は、システムベクタテーブルを所有しており、すべてのリセット後のエントリポイントである。
【００７２】
ファームウェアモジュール２３用のアプリケーションプログラミングインタフェース（ＡＰＩ）２９は、ソフトウェアアプリケーション２７がファームウェアモジュール２３内の機能を呼び出すことを可能にするものであって、すべて割り込みインターフェイス回路８への信号を利用して実行される。各ファームウェア機能は、ユニークな機能番号と関係付けられている。このマッピング情報は、各機能を正常に呼び出すことができるようにソフトウェアアプリケーション２７の開発者に提供することができる。その内容は、ファームウェアモジュール２３とソフトウェアアプリケーション２７をそれぞれコンパイルするときに両者に組み込むことができる。 ＲＡＭ１１内の所定の共有アドレスは、ソフトウェアアプリケーション２７によって書き込むことができ、ファームウェアモジュール２３によって読み出すことができる。このアドレスを使えば、ソフトウェアアプリケーション２７は、ファームウェアモジュール２３に機能番号を渡すことができる。
【００７３】
ファームウェアモジュール２３は、ソフトウェア割り込みを利用してソフトウェアアプリケーション２７にイベントを伝達することができ、該ソフトウェア割り込みの内容は、ソフトウェアアプリケーション２７によって読み出される（ポーリングされる）までバッファリングされる。この読み出しは、（event_get()などの）ＡＰＩコールを介して行われる。
【００７４】
ソフトウェアアプリケーション２７は、マイクロコントローラ１のハードウェアを直接に、または、ファームウェアモジュール２３を利用してハードウェアを間接的に使用することができることに加えて、アプリケーション専用ドライバ２５を用いるなどによってハードウェア抽象化層２１を介してアクセスすることができる。
【００７５】
図３は、ＲＡＭ１１とフラッシュメモリ１３が、ファームウェアモジュール２３と（アプリケーション専用ドライバ２５を含む）ソフトウェアアプリケーション２７の間でどのように共有されるのかを示している。 ＡＲＭ  Ｃｏｒｔｅｘ−Ｍ０プロセッサ７を使用するとき、フラッシュメモリ１３は、ゼロ（0x0000 0000）から上方向にその容量である SizeOfProgMemまでアドレスを割り当てられ、ＲＡＭ１１は、0x2000 0000 から上方向に（0x2000 0000 + SizeOfRAM）までアドレスが割り当てられる。もちろん、他の実施形態では、異なるアドレス値を使用することができる。
【００７６】
フラッシュメモリ１３は、アドレスCLENR0（領域０のコード長）の両側に二つの異なる領域を備えている。ゼロとCLENR0の間にある領域０は、ファームウェアモジュール２３が読み込まれる場所であり、その割込みベクタテーブルは、アドレスのゼロに格納される。CLENR0から上方向に延びている領域１は、ソフトウェアアプリケーション２７が読み込まれる場所であり、アドレスCLENR0に、やはり割り込みベクタテーブルがあるが、その目的は以下で説明する。装置１が、設定情報やフラグを格納するなど別の目的で使用することができる別の不揮発性メモリ（図示せず）を有することができることは、理解されるであろう。
【００７７】
ＲＡＭ１１も同様に、基底アドレス0x2000 0000からRLENR0まで領域０と、RLENR0から上方向に拡がる領域１とを有する。 ＲＡＭ領域０は、ファームウェアモジュール２３用のデータストレージを提供し、ＲＡＭ領域１は、ソフトウェアアプリケーション２７用のデータストレージを提供する。呼び出しスタックは、ファームウェアモジュール２３とソフトウェアアプリケーション２７との間で共有され、例えば、0x2000 0000 + SizeOfRAMから下方向に拡大する。呼び出しスタックに割り当てられるメモリは、ソフトウェアアプリケーション２７とファームウェアモジュール２３の両方のニーズを満たすのに十分な大きさである必要がある。所定の共有メモリアドレスは、ＲＡＭ１１の領域１であってもよいし、ＲＡＭ１１内で領域０と領域１の外にある別の位置に配置することもできる。
【００７８】
ファームウェアモジュール２３のコールスタック使用要件は、装置１に関しては装置メーカーが公開することができる。そうすれば、ソフトウェアアプリケーション２７の開発者は、初期スタックポインタを定義し、ファームウェアモジュール２３および自分のソフトウェアアプリケーション２７の両者に十分なスタックメモリを予約する必要がある。ファームウェアモジュール２３は、リセット時にメインスタックポインタを初期化することになる。
【００７９】
メモリ保護回路９は、プロセッサ７からフラッシュメモリ１３およびＲＡＭ１１へのすべてのメモリアクセス要求（例えば、読み出し要求）をインターセプトするように設定されており、アクセス要求命令のソースを（例えば、要求が、ファームウェアモジュール２３からか、またはソフトウェアアプリケーション２７からか）決定する。また、さまざまなソースについてそれぞれのアクセス権を指定している（例えば、一つ以上の専用レジスタに格納されている）メモリ保護構成データにアクセスし、それに応じてアクセス要求を許可または拒否する。
【００８０】
本発明のいくつかの好ましい実施形態では、ソフトウェアアプリケーション２７は、フラッシュメモリ領域０とＲＡＭ領域０への読み出しアクセスおよび／または書き込みアクセスを拒否される。こうすることによって、ファームウェアモジュール２３の機密性を保護し、ソフトウェアアプリケーション２７がファームウェアモジュール２３に割り当てられたメモリ位置に不用意に、または、悪意を持って書き込みを行なうのを防止することができ、それにより堅牢性とセキュリティが向上する。ソフトウェアアプリケーション用フラッシュメモリ領域１も、例えば、外部デバッグインタフェースを経由したリードバックに対して保護するなどの目的で読み出しアクセスから保護することができる。  
【００８１】
このことは、ソフトウェアアプリケーション２７がＲＡＭ領域０への書き込みアクセス権を持っていないので、初期スタックポインタをこの領域に置くことはできないことを意味する。本発明の他の実施形態では、呼び出しスタックは二つの部分からなり、ファームウェアモジュール２３のコールスタックはＲＡＭ領域０に置き、ソフトウェアアプリケーション２７のコールスタックはＲＡＭ領域１に置くことができる。
【００８２】
割り込みインタフェース回路８は、プロセッサ７がアドレス指定可能な単一ビットレジスタ（図示せず）を備えている。このレジスタの変化（例えば、値の切り替え、または所定の値への変化）を検出すると、該回路８は、プロセッサ７へのハードウェア割り込みラインを割り込み可能状態にするように設定されている。
【００８３】
図４は、ＡＲＭ  Ｃｏｒｔｅｘ−Ｍ０プロセッサによって提供され、矢印の方向に優先度が高くなる、さまざまな割り込みレベル４１と、これらの優先順位が、ファームウェアモジュール２３およびソフトウェアアプリケーション２７の使用する割り込みレベル４３にどのようにマッピングされるかとを示している。
【００８４】
ソフトウェアアプリケーション２７のバックグラウンド実行状態であるメインの上には、次のように使用される四つの割り込み優先度として、優先度の昇順に、ソフトウェアアプリケーション低優先度と、ファームウェアモジュール低優先度と、ソフトウェアアプリケーション高優先度と、ファームウェアモジュール高優先度とが存在する。高優先度のソフトウェアアプリケーション割り込みは、低遅延が要求される、緊急度の高い割り込みに使用される。
【００８５】
図５（ａ）〜（ｃ）は、起こり得る優先順位変化のさまざまな例を示している。
【００８６】
図５（ａ）は、バックグラウンドで実行中のソフトウェアアプリケーション２７のメイン処理が、シリアルドライバなど低優先度ソフトウェアアプリケーションによって割り込まれる場合を示している。すると、ソフトウェアアプリケーション２７は、ファームウェアモジュール２３内の機能と関係付けられた機能番号を所定の共有メモリアドレスに書き込み、そして割り込みインタフェース回路８がプロセッサ７にハードウェア割り込みを通知するように、割り込みインタフェース回路８内のアドレス指定可能な単一ビットレジスタに書き込みを行なうことによって該機能を呼び出す。ファームウェアモジュール２３内の割り込み処理機能は、（この特定の割り込み処理機能に対して選択されたデフォルトの優先順位である）低優先度ファームウェアの優先順位で実行され、所定の共有メモリアドレスから機能番号を読み出し、指定された機能を（依然として低優先度ファームウェアの優先順位で）呼び出すことによって、割り込みに応答する。これが完了すると、アプリケーション低優先順位に実行が戻り、ソフトウェアアプリケーション２７に制御が戻される。最後に、ソフトウェアアプリケーション２７は動作を完了し、メインのバックグラウンド優先順位に実行が戻る。
【００８７】
図５（ｂ）は、ソフトウェアアプリケーション２７のメイン実行状態からファームウェアモジュール２３へのＡＰＩ呼び出しが行なわれる場合を示している。これは、ソフトウェアアプリケーション２７が割り込みインターフェイス回路８に通知して割り込みを発生させることによって行なわれる。この例では、ファームウェア低優先度でのＡＰＩ機能の実行は、やがて高優先度ソフトウェアアプリケーション例外によって割り込みを受ける。これは、例えば、センサ入力の処理を行なうことが考えられる。これによって、ファームウェアモジュール２３がセンサ入力からの割り込みをソフトウェアアプリケーション２７に転送するようになることもある。ソフトウェアアプリケーション２７がその高優先度の実行を終了すると、ファームウェアへのＡＰＩ呼び出しは、最終的にバックグラウンドのメイン処理に戻るまで、低優先度ファームウェアの優先順位で継続することができる。
【００８８】
図５（ｃ）は、バックグラウンドで実行中のソフトウェアアプリケーション２７のメイン処理がファームウェアモジュール２３による高優先度の割り込みを受けた場合を示している。これは、着信無線パケットのような、装置１が応答する必要がある、緊急を要する無線通信割り込みに起因する可能性がある。ファームウェアモジュール２３内の割り込みサービスルーチンは、割込みインターフェース回路８に通知し、（所定の共有メモリアドレスに機能番号を書き込み、割り込みインターフェイス回路８内のアドレス指定可能な単一ビットレジスタに書き込みを行なうことによって）低優先度のファームウェア割り込みを発生させ、特定の機能が必要であることを、より高い優先順位の無線プロトコルスタックに通知する。高優先度のルーチンが完了すると、プロセッサ７のテールチェイン機能によって、低優先度のルーチンが（すなわち、その間にバックグラウンドのメイン優先順位に戻ることなく）直ちに実行される。次に、低優先度のファームウェアルーチンが、割り込みを発生させて、無線データパケットが受信されたことを（割り込み転送を介して）ソフトウェアアプリケーション２７に通知する。この割り込みは、低優先度のファームウェアモジュールルーチンの完了後にチェインされる。この例では、ソフトウェアアプリケーション２７は、次に、図５（ａ）のように、割り込みインターフェイス回路８に通知することによってファームウェアモジュール２３へのＡＰＩ呼び出しを行なう。最後に、ソフトウェアアプリケーションの低優先度動作が完了し、メインの優先順位に実行が戻る。
【００８９】
図６〜図８は、ソフトウェアアプリケーション２７とファームウェアモジュール２３との間で制御を渡す別のやり方を示している。説明を分かりやすくするために、Ｃ言語のような擬似コードの抜粋を用いている。実際には、プロセッサ７によってフラッシュメモリ１３から機械コード命令が実行される。図中で番号の付いた矢印は、一連の実行手順を示している。 
【００９０】
図６は、ソフトウェアアプリケーション２７がＡＰＩ２９を介してファームウェアモジュール２３の「radio_transmit」機能を呼び出す場合を示している。ソフトウェアアプリケーション２７は、まず、radio_transmit機能（ID_RADIO_TRANSMIT）のユニークな機能特定情報をＲＡＭ１１内の共有メモリ位置（FUNCTION_TO_INVOKE）に書き込む。共有メモリ位置の特定情報とアドレスは、装置メーカーによってソフトウェアアプリケーション２７の開発者に供給されるファームウェアヘッダファイルを使用してインポートされる。次に、ソフトウェアアプリケーション２７は、アドレスINTERRUPT_INTERFACE_REGISTER（同様に、ヘッダファイルに定義してある）に書き込むことによって、割り込みインタフェース回路８内のレジスタのバイナリフラグを切り替える。
【００９１】
割り込みインタフェース回路８は、ハードウェア割り込みを割り込み可能状態にすると、プロセッサが、（システム割り込みベクタテーブルとして機能する）ファームウェアモジュール割り込みベクタテーブルを介して、当該割り込み処理ルーチンを呼び出す。割り込み処理ルーチンは、ソフトウェアアプリケーション２７によって呼び出された機能と関係付けられた特定情報を共有メモリ位置から読み出す。同様に、別の共有メモリ位置を用いて、ソフトウェアアプリケーション２７からの引数やパラメータを受信することもできる。あるいは、そのような引数は、ハードウェアのメモリレジスタを介して、または、コールスタックを介して渡すことができる。
【００９２】
割り込み処理ルーチンは、radio_transmitというファームウェア機能を呼び出す。代わりに、他の無線制御機能（例えば、無線でデータを送信する命令）やファームウェア管理機能（例えば、ファームウェアモジュールを無効にする機能）やライブラリ機能（例えば、乱数を生成する機能）のような他のファームウェア機能を呼び出すこともできる。機能が実行されると、割り込みが終了し、ソフトウェアアプリケーション２７に制御が戻る。レジスタ内やコールスタック上の戻り値をソフトウェアアプリケーション２７に利用可能とすることもできる。
【００９３】
図７は、ソフトウェアアプリケーション２７がハードウェア割り込みを介して自分の機能のいずれかを呼び出す場合を示している。実行優先順位を低優先度から高優先度に変更するために、このようなことをする場合がある。図６の状況と同様に、ソフトウェアアプリケーション２７は、割り込みインターフェイス回路８を用いてハードウェア割り込みを発生させ、ファームウェアモジュール２７内の割り込み処理ルーチンに実行が渡るようにする。ただし、この場合、命令で渡す機能特定情報は、ソフトウェアアプリケーションが自ら使用するために予約されている範囲内のものに限られる。このようにして、ファームウェアモジュール２３は、潜在的に前の動作とは異なる優先順位で、ソフトウェアアプリケーション２７内の処理ルーチン機能（app_systemcall_function（））に実行をブランチさせる。
【００９４】
図８は、（例えば、無線回路１７や周辺機器１５からの）異なるハードウェア割り込みをソフトウェアアプリケーション２７がどのように受信することができるのかを示している。割り込みを受信すると、ベクタテーブルによってファームウェアモジュール２３内の割り込み処理ルーチンに処理が渡る。これは、ファームウェアモジュール２３が有効になっているかどうか、および、ファームウェアモジュール２３が処理するように設定されている割り込みであるかどうかをチェックする。そうである場合、ファームウェアモジュール２３は、割り込みを処理する。そうでない場合、ここで示したように、ファームウェアモジュール２３は、ソフトウェアアプリケーション２７の割り込み処理ルーチンへ制御を渡す。ファームウェアモジュール２３は、（CLENR0にある）ソフトウェアアプリケーション用ベクタテーブルの位置が予め決められているので、このルーチンをどこで検索するか知っており、このベクタテーブル内のオフセットは、ファームウェアモジュール用ベクタテーブル内のオフセットと同じである。
【００９５】
ファームウェアモジュール２３は、自分が処理するように構成されている割り込みでない限り、ソフトウェアアプリケーション２７に割り込みを転送するようにデフォルトで設定されている。そして、ファームウェアモジュール２３が（例えば、ファームウェアマネジャー３７への適切なＡＰＩ呼び出しを介し）ソフトウェアアプリケーション２７によって無効にされている場合、ファームウェアモジュールは、すべての割り込みをソフトウェアアプリケーション２７に転送する。
【００９６】
図９は、ＲＡＭ内の共有メモリ位置の使用を必要としない、無線通信機能を呼び出すための別のメカニズムを示している。いくつかの実施形態は、図６を参照して説明したメカニズムの代わりに、または併用して、このメカニズムを使用することができる。ソフトウェアアプリケーション２７は、フラッシュメモリ１３の所定アドレスにおいてコールバック機能を含んでいる。ファームウェアモジュールをコンパイル・リンクした時点で所定アドレスが既知のものとなっているので、ファームウェアモジュール２３は、このコールバック機能にブランチすることができる。
【００９７】
ファームウェアモジュールの無線通信機能を呼び出すために、ソフトウェアアプリケーションは、まず、割り込みインタフェース回路８のアドレス指定可能な単一ビットレジスタに書き込みを行なうことで、割り込みを発生させる。すると、ファームウェアモジュール２３の割り込み処理ルーチンが、ソフトウェアアプリケーション２７のコールバック機能を呼び出し、functionID変数へのポインタと、パラメータのデータブロックまたはデータ構造へのポインタとを渡す。すると、コールバック機能は、所望の無線通信機能の特定情報を、functionIDポインタが指し示すメモリアドレスに書き込み、また、何かパラメータがあればParamsポインタが指し示すアドレスに書き込む。次に、ファームウェアモジュール２３の割り込み処理ルーチンに制御が戻り、該ルーチンは、機能特定情報を用いて、ファームウェアモジュール２３内のどの無線通信機能を呼び出すかどうかを決定する。該ルーチンは、必要に応じてパラメータを（Paramsの指し示すメモリアドレスからスタックに移動するなどして）解析し、その無線通信機能を呼び出す。
【００９８】
図１０は、いくつかの実施形態が、本明細書に記載した他のメカニズムと併用して、または代わりとして、使用することができる、さらに別のメカニズムを示している。これは、機能特定情報がポインタを使用して渡されないことを除いて、図９と同じであるが、その代わり、ソフトウェアアプリケーション２７によってコールスタックに転送される。
【００９９】
この例では、ソフトウェアアプリケーション２７は、まず、所望の無線通信機能の特定情報をスタックに書き込み、その後、割り込みインタフェース回路８のアドレス指定可能な単一ビットレジスタに書き込みを行なうことによって、割り込みを発生させる。ファームウェアモジュール２３の割り込み処理ルーチンは、コールスタックから機能特定情報を読み込む。次に、ソフトウェアアプリケーション２７のコールバック機能を呼び出し、パラメータのデータブロックへのポインタを渡す。コールバック機能は、何か無線通信機能用パラメータがあればポインタの指し示すアドレスに書き込む。すると、割り込み処理ルーチンは、示されたパラメータ付きでその無線通信機能を呼び出す。
【０１００】
図１１は、いくつかの実施形態が、本明細書に記載した他のメカニズムと併用して、または代わりとして、使用することができる、さらに別のメカニズムを示している。このメカニズムでは、共有ＲＡＭの位置も何らかのコールバック機能も必要としない。このメカニズムを使用する実施形態は、（ソフトウェアアプリケーションが読み込まれる基底アドレスはおそらく別として）潜在的に、ファームウェアモジュールとソフトウェアアプリケーションとの開発者同士で（ＲＡＭまたはフラッシュメモリの）メモリ位置を共有しなくても済むので、好ましい場合がある。
【０１０１】
ソフトウェアアプリケーション２７は、所望の無線通信機能の特定情報とその無線通信機能に送信される何らかのパラメータをコールスタックに転送する。次いで、割り込みインタフェース回路８のアドレス指定可能な単一ビットレジスタに書き込みを行なうことによって、割り込みを発生させる。すると、ファームウェアモジュール２３の割り込み処理ルーチンは、スタックから特定情報およびパラメータを読み出し、必要に応じてパラメータを処理すると（例えば、必要に応じてそれらを並べ替え、コールスタックに転送して戻す）、特定情報によって特定された無線通信機能を呼び出す。
【０１０２】
これらすべてのさまざまな手法で、ＩＣ無線通信装置を構成し、安全かつ便利に利用することができる。
【図１】
0006495290.tif 000002
【図２】
0006495290.tif 000003
【図３】
0006495290.tif 000004
【図４】
0006495290.tif 000005
【図５】
0006495290.tif 000006
【図６】
0006495290.tif 000007
【図７】
0006495290.tif 000008
【図８】
0006495290.tif 000009
【図９】
0006495290.tif 000010
【図１０】
0006495290.tif 000011
【図１１】
0006495290.tif 000012