Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

8.9.2. デバイスドライバーのソースコード

ヘッダーファイルに加えて、コンポーネント・ドライバーは、BSP に組み込むソースコードを提供する必要がある場合があります。このソースコードはハードウェア・コンポーネントに固有で、1 つまたは複数の C ファイル (またはアセンブリー言語ファイル) に存在します。

デバイスドライバーを記述する際、ソースコード内に HAL I/O マクロを提供してください。HAL はアセンブリー命令をロードおよび格納するために展開する C 言語マクロ IORD および IOWR を提供しています。これらのマクロは、HAL デバイスドライバーがデバイスレジスターにアクセスするために提供されています。
注: これらの命令はデータキャッシュをバイパスすることはできません。デバイスレジスターをペリフェラル領域内に配置する必要があります。

一般的に、プログラムは system.h で定義された値を BASE および REGNUM パラメーターとして渡します。これらのマクロは、<Intel Quartus installation directory>/ip/altera/soft_processor/intel_niosv_common/HAL/inc/io.h で定義されています。

表 37.  HAL I/O マクロ
マクロ 使用方法
IORD(BASE, REGNUM) ベースアドレス BASE を持つデバイスのオフセット REGNUM にあるレジスターの値を読み取ります。レジスターはバスのアドレス幅によってオフセットされていると想定されます。
IOWR(BASE, REGNUM, DATA) ベースアドレス BASE を持つデバイスのオフセット REGNUM にある値 DATA をレジスターに書き込みます。レジスターはバスのアドレス幅によってオフセットされていると想定されます。
IORD_32DIRECT(BASE, OFFSET) アドレス BASE+OFFSET の位置で 32 ビットの読み取りアクセスを行います。
IORD_16DIRECT(BASE, OFFSET) アドレス BASE+OFFSET の位置で 16 ビットの読み取りアクセスを行います。
IORD_8DIRECT(BASE, OFFSET) アドレス BASE+OFFSET の位置で 8 ビットの読み取りアクセスを行います。
IOWR_32DIRECT(BASE, OFFSET, DATA) アドレス BASE+OFFSET の位置で値 DATA を書き込むために 32 ビットの書き込みアクセスを行います。
IOWR_16DIRECT(BASE, OFFSET, DATA) アドレス BASE+OFFSET の位置で値 DATA を書き込むために 16 ビットの書き込みアクセスを行います。
IOWR_8DIRECT(BASE, OFFSET, DATA) アドレス BASE+OFFSET の位置で値 DATA を書き込むために 8 ビットの書き込みアクセスを行います。