添加 hw_reg_api.h 相关注释
This commit is contained in:
@@ -32,9 +32,9 @@ export dtest_only=1
|
|||||||
set -o errexit
|
set -o errexit
|
||||||
|
|
||||||
if [ "${CLEANUP_OPT}" == "1" ]; then
|
if [ "${CLEANUP_OPT}" == "1" ]; then
|
||||||
make -C .. clobber
|
make -j -C .. clobber
|
||||||
make -C .. dtest_clean
|
make -j -C .. dtest_clean
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build kl3 dtest
|
# build kl3 dtest
|
||||||
make -C .. dtest opt_build=1
|
make -j -C .. dtest opt_build=1
|
||||||
|
@@ -45,8 +45,13 @@ extern "C" {
|
|||||||
(dword) |= (((value) << name##_OFFSET) & name##_MASK); \
|
(dword) |= (((value) << name##_OFFSET) & name##_MASK); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
// 输出参数个数/2
|
||||||
#define __REG_N_FIELD__(...) __REG_N_FIELD_(__VA_ARGS__, __FIELD_RSEQ_N())
|
#define __REG_N_FIELD__(...) __REG_N_FIELD_(__VA_ARGS__, __FIELD_RSEQ_N())
|
||||||
|
|
||||||
|
// 输出第66个参数
|
||||||
#define __REG_N_FIELD_(...) __REG_FIELD_N(__VA_ARGS__)
|
#define __REG_N_FIELD_(...) __REG_FIELD_N(__VA_ARGS__)
|
||||||
|
|
||||||
|
// 输出第N个参数,至少需要66个参数
|
||||||
#define __REG_FIELD_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, \
|
#define __REG_FIELD_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, \
|
||||||
_13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, \
|
_13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, \
|
||||||
_24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, \
|
_24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, \
|
||||||
@@ -54,15 +59,21 @@ extern "C" {
|
|||||||
_46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, \
|
_46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, \
|
||||||
_57, _58, _59, _60, _61, _62, _63, _64, N, ...) \
|
_57, _58, _59, _60, _61, _62, _63, _64, N, ...) \
|
||||||
N
|
N
|
||||||
|
|
||||||
|
// 定义66个参数
|
||||||
#define __FIELD_RSEQ_N() \
|
#define __FIELD_RSEQ_N() \
|
||||||
32, 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, \
|
32, 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, \
|
||||||
23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, \
|
23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, \
|
||||||
15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, \
|
15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, \
|
||||||
5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0,
|
5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0,
|
||||||
|
|
||||||
|
// 连接字符
|
||||||
#define CONCATENATE(arg1, arg2) arg1##arg2
|
#define CONCATENATE(arg1, arg2) arg1##arg2
|
||||||
|
|
||||||
|
// 改写一个区域的值 需要结构体类型有 _b 变量
|
||||||
#define WR_FIELD_1(bitfield, val) __x._b.bitfield = val;
|
#define WR_FIELD_1(bitfield, val) __x._b.bitfield = val;
|
||||||
|
|
||||||
|
// 改写两个区域的值,以此类推
|
||||||
#define WR_FIELD_2(f, val, ...) \
|
#define WR_FIELD_2(f, val, ...) \
|
||||||
{ \
|
{ \
|
||||||
WR_FIELD_1(f, val); \
|
WR_FIELD_1(f, val); \
|
||||||
@@ -219,6 +230,7 @@ extern "C" {
|
|||||||
WR_FIELD_31(__VA_ARGS__); \
|
WR_FIELD_31(__VA_ARGS__); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 改写寄存器结构体的N个区域,用法为 WR_REG_FIELD_(改写区域个数,寄存器值,区域1名称,区域1值,区域2名称,区域2值,...)
|
||||||
#define WR_REG_FIELD_(N, reg, ...) \
|
#define WR_REG_FIELD_(N, reg, ...) \
|
||||||
({ \
|
({ \
|
||||||
typeof(reg) __x = reg; \
|
typeof(reg) __x = reg; \
|
||||||
@@ -226,12 +238,14 @@ extern "C" {
|
|||||||
reg = __x; \
|
reg = __x; \
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WR_REG_FIELD(reg, field1, val1, field2, val2, field3, val3, ...)
|
* WR_REG_FIELD(reg, field1, val1, field2, val2, field3, val3, ...)
|
||||||
*/
|
* 这个宏会根据参数个数自动推断需要改写的区域个数
|
||||||
|
*/
|
||||||
#define WR_REG_FIELD(reg, ...) \
|
#define WR_REG_FIELD(reg, ...) \
|
||||||
WR_REG_FIELD_(__REG_N_FIELD__(reg, __VA_ARGS__), reg, __VA_ARGS__)
|
WR_REG_FIELD_(__REG_N_FIELD__(reg, __VA_ARGS__), reg, __VA_ARGS__)
|
||||||
|
|
||||||
|
// 读取寄存器的指定区域
|
||||||
#define RE_REG_FIELD(reg, bitfield) \
|
#define RE_REG_FIELD(reg, bitfield) \
|
||||||
({ \
|
({ \
|
||||||
typeof(reg) __x = reg; \
|
typeof(reg) __x = reg; \
|
||||||
|
Reference in New Issue
Block a user