デバイスレジスタアクセス¶
メモリマップされたデバイスレジスタ(I/O)に対して、指定した幅でアクセスするための ヘルパー関数です。ビット単位のセット/クリアやビットフィールドの読み書き、 非キャッシュ領域に対するメモリ操作も提供します。
注釈
これらの関数で渡すアドレスは、I/Oリソースマネージャ 等で 割り付けられた仮想アドレスを使用してください。
API¶
これらのAPIを使用するには、solid_io.h をインクルードしてください。
#include "solid_io.h"
SOLID_IO_IN8 / IN16 / IN32 / IN64¶
-
uint8_t SOLID_IO_IN8(SOLID_ADDRESS addr)¶
-
uint16_t SOLID_IO_IN16(SOLID_ADDRESS addr)¶
-
uint32_t SOLID_IO_IN32(SOLID_ADDRESS addr)¶
-
uint64_t SOLID_IO_IN64(SOLID_ADDRESS addr)¶
指定したアドレスのデバイスレジスタから、8/16/32/64bit幅で値を読み出します。
- パラメータ:
addr -- 読み出すデバイスレジスタのアドレス
- 戻り値:
読み出した値
SOLID_IO_OUT8 / OUT16 / OUT32 / OUT64¶
-
void SOLID_IO_OUT8(SOLID_ADDRESS addr, uint8_t val)¶
-
void SOLID_IO_OUT16(SOLID_ADDRESS addr, uint16_t val)¶
-
void SOLID_IO_OUT32(SOLID_ADDRESS addr, uint32_t val)¶
-
void SOLID_IO_OUT64(SOLID_ADDRESS addr, uint64_t val)¶
指定したアドレスのデバイスレジスタに、8/16/32/64bit幅で値を書き込みます。
- パラメータ:
addr -- 書き込むデバイスレジスタのアドレス
val -- 書き込む値
SOLID_IO_AND8 / AND16 / AND32 / AND64¶
-
void SOLID_IO_AND8(SOLID_ADDRESS addr, uint8_t bits)¶
-
void SOLID_IO_AND16(SOLID_ADDRESS addr, uint16_t bits)¶
-
void SOLID_IO_AND32(SOLID_ADDRESS addr, uint32_t bits)¶
-
void SOLID_IO_AND64(SOLID_ADDRESS addr, uint64_t bits)¶
指定したアドレスのデバイスレジスタの値と
bitsのビットANDを取り、書き戻します。- パラメータ:
addr -- 対象デバイスレジスタのアドレス
bits -- ANDするビットマスク
SOLID_IO_OR8 / OR16 / OR32 / OR64¶
-
void SOLID_IO_OR8(SOLID_ADDRESS addr, uint8_t bits)¶
-
void SOLID_IO_OR16(SOLID_ADDRESS addr, uint16_t bits)¶
-
void SOLID_IO_OR32(SOLID_ADDRESS addr, uint32_t bits)¶
-
void SOLID_IO_OR64(SOLID_ADDRESS addr, uint64_t bits)¶
指定したアドレスのデバイスレジスタの値と
bitsのビットORを取り、書き戻します。- パラメータ:
addr -- 対象デバイスレジスタのアドレス
bits -- ORするビットマスク
SOLID_IO_CLR8 / CLR16 / CLR32 / CLR64¶
-
void SOLID_IO_CLR8(SOLID_ADDRESS addr, uint8_t bits)¶
-
void SOLID_IO_CLR16(SOLID_ADDRESS addr, uint16_t bits)¶
-
void SOLID_IO_CLR32(SOLID_ADDRESS addr, uint32_t bits)¶
-
void SOLID_IO_CLR64(SOLID_ADDRESS addr, uint64_t bits)¶
指定したアドレスのデバイスレジスタについて、
bitsで指定したビットをクリア(0に)します。- パラメータ:
addr -- 対象デバイスレジスタのアドレス
bits -- クリアするビットマスク
SOLID_IO_GETPART32¶
-
uint32_t SOLID_IO_GETPART32(SOLID_ADDRESS addr, int offset, int width)¶
32bitデバイスレジスタから、指定したビットフィールドを読み出します。
- パラメータ:
addr -- 対象デバイスレジスタのアドレス
offset -- フィールドの開始ビット位置
width -- フィールドのビット幅
- 戻り値:
読み出したフィールド値(右詰め)
SOLID_IO_SETPART32¶
-
void SOLID_IO_SETPART32(SOLID_ADDRESS addr, uint32_t val, int offset, int width)¶
32bitデバイスレジスタの指定したビットフィールドのみを書き換えます。
- パラメータ:
addr -- 対象デバイスレジスタのアドレス
val -- 設定する値(右詰め)
offset -- フィールドの開始ビット位置
width -- フィールドのビット幅
memset_uncached¶
-
void *memset_uncached(void *m, int c, size_t n)¶
非キャッシュ領域に対して
memset()相当の処理を行います。- パラメータ:
m -- 書き込む領域の先頭アドレス
c -- 設定する値
n -- 書き込むサイズ(byte)
- 戻り値:
m
memcpy_to_uncached¶
-
void *memcpy_to_uncached(void *dst, const void *src, size_t len)¶
非キャッシュ領域への
memcpy()相当の処理を行います。- パラメータ:
dst -- コピー先(非キャッシュ領域)の先頭アドレス
src -- コピー元の先頭アドレス
len -- コピーするサイズ(byte)
- 戻り値:
dst
memcpy_from_uncached¶
-
void *memcpy_from_uncached(void *dst, const void *src, size_t len)¶
非キャッシュ領域からの
memcpy()相当の処理を行います。- パラメータ:
dst -- コピー先の先頭アドレス
src -- コピー元(非キャッシュ領域)の先頭アドレス
len -- コピーするサイズ(byte)
- 戻り値:
dst