WS63 SDK 文档
7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
chip_io.h
浏览该文件的文档.
1
/*
2
* Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2018-2020. All rights reserved.
3
* Description: connectivity register, memory io.
4
* Author:
5
* Create: 2018-10-15
6
*/
7
8
#ifndef CHIP_IO_H
9
#define CHIP_IO_H
10
11
#include <stdint.h>
12
#include <stddef.h>
13
#include <stdbool.h>
14
15
#ifdef __cplusplus
16
#if __cplusplus
17
extern
"C"
{
18
#endif
19
#endif
20
21
#ifdef WIN32
22
uint8_t
readb
(uint32_t addr);
23
#endif
24
#define ON (true)
25
#define OFF (false)
26
#define POS(x) (x)
27
28
#ifndef MAX
29
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
30
#endif
31
32
#ifndef MIN
33
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
34
#endif
35
36
#ifndef BIT
37
#define BIT(x) (1UL << (uint32_t)(x))
38
#endif
39
40
#ifndef UNUSED
41
#define UNUSED(var) do { (void)(var); } while (0)
42
#endif
43
44
/* Make true and false actual booleans, not ints, to avoid Lint moaning. GCC defines them as ints. */
45
#ifdef true
46
#undef true
47
#endif
48
49
#ifdef false
50
#undef false
51
#endif
52
53
#define true ((bool) 1)
54
#define false ((bool) 0)
55
57
typedef
enum
{
58
TURN_OFF
,
59
TURN_ON
60
}
switch_type_t
;
61
63
typedef
enum
{
64
POS_16
= 16,
65
POS_17
,
66
POS_18
,
67
POS_19
,
68
POS_20
,
69
POS_21
,
70
POS_22
,
71
POS_23
,
72
POS_24
,
73
POS_25
,
74
POS_26
,
75
POS_27
,
76
POS_28
,
77
POS_29
,
78
POS_30
,
79
POS_31
80
}
REG32_POS
;
81
83
typedef
enum
{
84
POS_0
,
85
POS_1
,
86
POS_2
,
87
POS_3
,
88
POS_4
,
89
POS_5
,
90
POS_6
,
91
POS_7
,
92
POS_8
,
93
POS_9
,
94
POS_10
,
95
POS_11
,
96
POS_12
,
97
POS_13
,
98
POS_14
,
99
POS_15
100
}
REG16_POS
;
101
102
#ifndef BIT_31
103
#define BIT_31 ((uint32_t)(1 << 31))
104
#define BIT_30 ((uint32_t)(1 << 30))
105
#define BIT_29 ((uint32_t)(1 << 29))
106
#define BIT_28 ((uint32_t)(1 << 28))
107
#define BIT_27 ((uint32_t)(1 << 27))
108
#define BIT_26 ((uint32_t)(1 << 26))
109
#define BIT_25 ((uint32_t)(1 << 25))
110
#define BIT_24 ((uint32_t)(1 << 24))
111
#define BIT_23 ((uint32_t)(1 << 23))
112
#define BIT_22 ((uint32_t)(1 << 22))
113
#define BIT_21 ((uint32_t)(1 << 21))
114
#define BIT_20 ((uint32_t)(1 << 20))
115
#define BIT_19 ((uint32_t)(1 << 19))
116
#define BIT_18 ((uint32_t)(1 << 18))
117
#define BIT_17 ((uint32_t)(1 << 17))
118
#define BIT_16 ((uint32_t)(1 << 16))
119
#define BIT_15 ((uint32_t)(1 << 15))
120
#define BIT_14 ((uint32_t)(1 << 14))
121
#define BIT_13 ((uint32_t)(1 << 13))
122
#define BIT_12 ((uint32_t)(1 << 12))
123
#define BIT_11 ((uint32_t)(1 << 11))
124
#define BIT_10 ((uint32_t)(1 << 10))
125
#define BIT_9 ((uint32_t)(1 << 9))
126
#define BIT_8 ((uint32_t)(1 << 8))
127
#define BIT_7 ((uint32_t)(1 << 7))
128
#define BIT_6 ((uint32_t)(1 << 6))
129
#define BIT_5 ((uint32_t)(1 << 5))
130
#define BIT_4 ((uint32_t)(1 << 4))
131
#define BIT_3 ((uint32_t)(1 << 3))
132
#define BIT_2 ((uint32_t)(1 << 2))
133
#define BIT_1 ((uint32_t)(1 << 1))
134
#define BIT_0 ((uint32_t)(1 << 0))
135
#endif
136
137
/*******************************内存操作宏定义 ****************************************/
138
/* liteos中有相同宏名定义,并且定义使用有差异,需要使用芯片定义宏,将其他已定义相同宏undef */
139
#ifdef writel
140
#undef writel
141
#endif
142
143
#ifdef writew
144
#undef writew
145
#endif
146
147
#ifdef writeb
148
#undef writeb
149
#endif
150
151
#ifndef UT_TEST
152
#define writel(addr, d) (*(volatile uint32_t*)(uintptr_t)(addr) = (uint32_t)(d))
153
#define writew(addr, d) (*(volatile uint16_t*)(uintptr_t)(addr) = (uint16_t)(d))
154
#else
155
#define writel(addr, d)
156
#define writew(addr, d)
157
#endif
158
#define writeb(addr, d) (*(volatile uint8_t*)(uintptr_t)(addr) = (uint8_t)(d))
159
160
#ifndef readl
161
#ifndef UT_TEST
162
#define readl(addr) (*(volatile uint32_t*)(uintptr_t)(addr))
163
#else
164
#define readl(addr) NULL
165
#endif
166
#endif
167
168
#ifndef readw
169
#define readw(addr) (*(volatile uint16_t*)(uintptr_t)(addr))
170
#endif
171
172
#ifndef readb
173
#define readb(addr) (*(volatile uint8_t*)(uintptr_t)(addr))
174
#endif
175
176
/******************************寄存器操作宏定义 ***************************************/
177
/********************分为base + offset 和直接给出地址两类*****************************/
178
#define reg(base, offset) (*(volatile uint32_t *)(uintptr_t)((uint32_t)(base) + (offset)))
179
#define regb(base, offset) (*(volatile uint8_t *)(uintptr_t)((uint32_t)(base) + (offset)))
180
#define regw(base, offset) (*(volatile uint16_t *)(uintptr_t)((uint32_t)(base) + (offset)))
181
182
#define reg32(register) (*(volatile uint32_t*)(uintptr_t)(register))
183
#define reg16(register) (*(volatile uint16_t*)(uintptr_t)(register))
184
#define reg8(register) (*(volatile uint8_t*)(uintptr_t)(register))
185
186
/**************************base+register offset*********************************************************/
187
#define reg_clrbit(base, offset, pos) ((reg(base, offset)) &= ~((uint32_t)(1) << (pos)))
188
#define regw_clrbit(base, offset, pos) ((regw(base, offset)) &= ~((uint16_t)(1) << (pos)))
189
#define regb_clrbit(base, offset, pos) ((regb(base, offset)) &= ~((uint8_t)(1) << (pos)))
190
191
#define reg_setbit(base, offset, pos) ((reg(base, offset)) |= ((uint32_t)(1) << (pos)))
192
#define regw_setbit(base, offset, pos) ((regw(base, offset)) |= (uint16_t)((uint32_t)(1) << (pos)))
193
#define regb_setbit(base, offset, pos) ((regb(base, offset)) |= ((uint8_t)(1) << (pos)))
194
195
/* 将var中[pos, pos + bits-1]比特清零, pos从0开始编号 e.g BDOM_CLR_BITS(var, 4, 2) 表示将Bit5~4清零 */
196
#define reg_clrbits(base, offset, pos, bits) (reg(base, offset) &= ~((((uint32_t)1 << (bits)) - 1) << (pos)))
197
#define regw_clrbits(base, offset, pos, bits) (regw(base, offset) &= ~((((uint16_t)1 << (bits)) - 1) << (pos)))
198
#define regb_clrbits(base, offset, pos, bits) (regb(base, offset) &= ~((((uint8_t)1 << (bits)) - 1) << (pos)))
199
200
201
/* 将var中[pos, pos + bits-1]比特设置为val, pos从0开始编号
202
e.g BDOM_SET_BITS(var, 4, 2, 2) 表示将Bit5~4设置为b'10 */
203
#define reg_setbits(b, r, pos, bits, val) (reg(b, r) = (reg(b, r) & (~((((uint32_t)1 << (bits)) - 1) << (pos)))) \
204
| ((uint32_t)((val) & (((uint32_t)1 << (bits)) - 1)) << (pos)))
205
#define regw_setbits(b, r, pos, bits, val) (regw(b, r) = (regw(b, r) & (~((((uint16_t)1 << (bits)) - 1) << (pos)))) \
206
| ((uint16_t)((val) & (((uint16_t)1 << (bits)) - 1)) << (pos)))
207
#define regb_setbits(b, r, pos, bits, val) (regb(b, r) = (regb(b, r) & (~((((uint8_t)1 << (bits)) - 1) << (pos)))) \
208
| ((uint8_t)((val) & (((uint8_t)1 << (bits)) - 1)) << (pos)))
209
/* 获取var中[pos, pos + bits-1]比特值, pos从0开始编号 */
210
#define reg_getbits(base, offset, pos, bits) ((reg(base, offset) >> (pos)) & (((uint32_t)1 << (bits)) - 1))
211
#define regw_getbits(base, offset, pos, bits) ((regw(base, offset) >> (pos)) & (((uint16_t)1 << (bits)) - 1))
212
#define regb_getbits(base, offset, pos, bits) ((regb(base, offset) >> (pos)) & (((uint8_t) 1<< (bits)) - 1))
213
214
#define reg_clrbitmsk(base, offset, msk) ((reg(base, offset)) &= ~(msk))
215
#define regw_clrbitmsk(base, offset, msk) ((regw(base, offset)) &= ~(msk))
216
#define regb_clrbitmsk(base, offset, msk) ((regb(base, offset)) &= ~(msk))
217
218
#define reg_setbitmsk(base, offset, msk) ((reg(base, offset)) |= (msk))
219
#define regw_setbitmsk(base, offset, msk) ((regw(base, offset)) |= (msk))
220
#define regb_setbitmsk(base, offset, msk) ((regb(base, offset)) |= (msk))
221
222
#define reg_read(base, offset, result) ((result) = reg(base, offset))
223
#define reg_readw(base, offset, result) ((result) = regw(base, offset))
224
#define reg_readb(base, offset, result) ((result) = regb(base, offset))
225
226
#define reg_write(base, offset, data) (reg(base, offset) = (data))
227
#define reg_writew(base, offset, data) (regw(base, offset) = (data))
228
#define reg_writeb(base, offset, data) (regb(base, offset) = (data))
229
230
/**************************only register*************************************************************/
231
#define reg32_clrbit(register, pos) (reg32(register) &= ~((uint32_t)((1U) << (uint32_t)(pos))))
232
#ifndef UT_TEST
233
#define reg16_clrbit(register, pos) (reg16(register) &= ~((uint16_t)((1U) << (uint16_t)(pos))))
234
#else
235
#define reg16_clrbit(register, pos)
236
#endif
237
#define reg8_clrbit(register, pos) (reg8(register) &= ~((uint8_t)((1U) << (pos))))
238
239
#define reg32_setbit(register, pos) (reg32(register) |= ((uint32_t)((1U) << (uint32_t)(pos))))
240
#ifndef UT_TEST
241
#define reg16_setbit(register, pos) (reg16(register) |= ((uint16_t)((1U) << (uint16_t)(pos))))
242
#else
243
#define reg16_setbit(register, pos)
244
#endif
245
#define reg8_setbit(register, pos) (reg8(register) |= ((uint8_t)((1U) << (pos))))
246
247
/* 读取寄存器指定位的值,pos从0开始编号 */
248
#ifndef UT_TEST
249
#define reg32_getbit(register, pos) ((reg32(register) >> (pos)) & ((uint32_t)(1U)))
250
#define reg16_getbit(register, pos) ((reg16(register) >> (pos)) & ((uint16_t)(1U)))
251
#else
252
#define reg32_getbit(register, pos) NULL
253
#define reg16_getbit(register, pos) NULL
254
#endif
255
#define reg8_getbit(register, pos) ((reg8(register) >> (pos)) & ((uint8_t)(1U)))
256
257
/* 将var中[pos, pos + bits-1]比特清零, pos从0开始编号 e.g BDOM_CLR_BITS(var, 4, 2) 表示将Bit5~4清零 */
258
#define reg32_clrbits(register, pos, bits) (reg32(register) &= ~((((uint32_t)1 << (bits)) - 1) << (pos)))
259
#define reg16_clrbits(register, pos, bits) (reg16(register) &= \
260
~(uint16_t)((((uint32_t)1 << (bits)) - 1) << (pos)))
261
#define reg8_clrbits(register, pos, bits) (reg8(register) &= \
262
~(uint8_t)((((uint32_t)1 << (bits)) - 1) << (pos)))
263
264
/* 将var中[pos, pos + bits-1]比特设置为val, pos从0开始编号 e.g BDOM_SET_BITS(var, 4, 2, 2) 表示将Bit5~4设置为b'10 */
265
#define reg32_setbits(r, p, b, v) (reg32(r) = (reg32(r) & \
266
(~((((uint32_t)1 << (uint32_t)(b)) - 1) << (uint32_t)(p)))) \
267
| ((uint32_t)((uint32_t)(v) & \
268
(((uint32_t)1 << (uint32_t)(b)) - 1)) << (uint32_t)(p)))
269
270
#define reg16_setbits(r, p, b, v) (reg16(r) = (reg16(r) & \
271
(uint16_t)(~((((uint32_t)1 << (uint16_t)(b)) - 1) << (uint16_t)(p)))) \
272
| (uint16_t)((uint32_t)((uint16_t)(v) & \
273
(((uint32_t)1 << (uint16_t)(b)) - 1)) << (uint16_t)(p)))
274
275
#define reg8_setbits(r, p, b, v) (reg8(r) = (reg8(r) & (~((((uint8_t)1 << (b)) - 1) << (p)))) \
276
| ((uint8_t)((v) & (((uint8_t)1 << (b)) - 1)) << (p)))
277
278
/* 获取var中[pos, pos + bits-1]比特值, pos从0开始编号 */
279
#define reg32_getbits(register, pos, bits) ((reg32(register) >> (pos)) & (((uint32_t)1 << (bits)) - 1))
280
#define reg16_getbits(register, pos, bits) ((reg16(register) >> (pos)) & \
281
((uint16_t)((uint32_t)1 << (bits)) - 1))
282
#define reg8_getbits(register, pos, bits) ((reg8(register) >> (pos)) & (((uint8_t)1 << (bits)) - 1))
283
284
#define reg32_clrbitmsk(register, msk) ((reg32(register)) &= ~(msk))
285
#define reg16_clrbitmsk(register, msk) ((reg16(register)) &= ~(msk))
286
#define reg8_clrbitmsk(register, msk) ((reg8(register)) &= ~(msk))
287
288
#define reg32_setbitmsk(register, msk) ((reg32(register)) |= (msk))
289
#define reg16_setbitmsk(register, msk) ((reg16(register)) |= (msk))
290
#define reg8_setbitmsk(register, msk) ((reg8(register)) |= (msk))
291
292
#define reg32_read(register, result) ((result) = reg32(register))
293
#define reg16_read(register, result) ((result) = reg16(register))
294
#define reg8_read(register, result) ((result) = reg8(register))
295
296
#define reg32_write(register, data) (reg32(register) = (data))
297
#define reg16_write(register, data) (reg16(register) = (data))
298
#define reg8_write(register, data) (reg8(register) = (data))
299
300
#define p8(addr) (*((volatile uint8_t*)(addr)))
301
#define p16(addr) (*((volatile uint16_t*)(addr)))
302
#define p32(addr) (*((volatile uint32_t*)(addr)))
303
304
#define point8_setbit(point, pos) (p8(point) |= (uint8_t)((1U) << (pos)))
305
#define point16_setbit(point, pos) (p16(point) |= (uint16_t)((1U) << (pos)))
306
#define point32_setbit(point, pos) (p32(point) |= (uint32_t)((1U) << (pos)))
307
308
#define point8_setbits(p, pos, b, v) (p8(p) = (uint8_t)(p8(p) & (~((((uint8_t)1 << (b)) - 1) << (pos)))) \
309
| ((uint8_t)((v) & (((uint8_t)1 << (b)) - 1)) << (pos)))
310
311
#define point16_setbits(p, pos, b, v) (p16(p) = (uint16_t)(p16(p) & \
312
(~((((uint16_t)1 << (uint16_t)(b)) - 1) << (uint16_t)(pos)))) \
313
| ((uint16_t)((uint16_t)(v) & \
314
(((uint16_t)1 << (uint16_t)(b)) - 1)) << (uint16_t)(pos)))
315
316
#define point32_setbits(p, pos, b, v) (p32(p) = (uint32_t)(p32(p) & (~((((uint32_t)1 << (b)) - 1) << (pos)))) \
317
| ((uint32_t)((v) & (((uint32_t)1 << (b)) - 1)) << (pos)))
318
319
#define point8_clrbit(point, pos) (p8(point) &= ~(uint8_t)((1U) << (pos)))
320
#define point16_clrbit(point, pos) (p16(point) &= ~(uint16_t)((1U) << (pos)))
321
#define point32_clrbit(point, pos) (p32(point) &= ~(uint32_t)((1U) << (pos)))
322
323
#define point8_clrbits(point, pos, bits) (p8(point) &= ~((((uint8_t)1 << (bits)) - 1) << (pos)))
324
#define point16_clrbits(point, pos, bits) (p16(point) &= ~((((uint16_t)1 << (bits)) - 1) << (pos)))
325
#define point32_clrbits(point, pos, bits) (p32(point) &= ~((((uint32_t)1 << (bits)) - 1) << (pos)))
326
327
#ifdef __cplusplus
328
#if __cplusplus
329
}
330
#endif
331
#endif
332
#endif
readb
#define readb(addr)
Definition
chip_io.h:173
REG16_POS
REG16_POS
Definition
chip_io.h:83
POS_6
@ POS_6
Definition
chip_io.h:90
POS_4
@ POS_4
Definition
chip_io.h:88
POS_1
@ POS_1
Definition
chip_io.h:85
POS_9
@ POS_9
Definition
chip_io.h:93
POS_8
@ POS_8
Definition
chip_io.h:92
POS_5
@ POS_5
Definition
chip_io.h:89
POS_14
@ POS_14
Definition
chip_io.h:98
POS_13
@ POS_13
Definition
chip_io.h:97
POS_11
@ POS_11
Definition
chip_io.h:95
POS_3
@ POS_3
Definition
chip_io.h:87
POS_10
@ POS_10
Definition
chip_io.h:94
POS_15
@ POS_15
Definition
chip_io.h:99
POS_12
@ POS_12
Definition
chip_io.h:96
POS_2
@ POS_2
Definition
chip_io.h:86
POS_0
@ POS_0
Definition
chip_io.h:84
POS_7
@ POS_7
Definition
chip_io.h:91
switch_type_t
switch_type_t
Definition
chip_io.h:57
TURN_OFF
@ TURN_OFF
Definition
chip_io.h:58
TURN_ON
@ TURN_ON
Definition
chip_io.h:59
REG32_POS
REG32_POS
Definition
chip_io.h:63
POS_31
@ POS_31
Definition
chip_io.h:79
POS_22
@ POS_22
Definition
chip_io.h:70
POS_26
@ POS_26
Definition
chip_io.h:74
POS_28
@ POS_28
Definition
chip_io.h:76
POS_20
@ POS_20
Definition
chip_io.h:68
POS_25
@ POS_25
Definition
chip_io.h:73
POS_29
@ POS_29
Definition
chip_io.h:77
POS_19
@ POS_19
Definition
chip_io.h:67
POS_30
@ POS_30
Definition
chip_io.h:78
POS_17
@ POS_17
Definition
chip_io.h:65
POS_27
@ POS_27
Definition
chip_io.h:75
POS_24
@ POS_24
Definition
chip_io.h:72
POS_23
@ POS_23
Definition
chip_io.h:71
POS_21
@ POS_21
Definition
chip_io.h:69
POS_16
@ POS_16
Definition
chip_io.h:64
POS_18
@ POS_18
Definition
chip_io.h:66
src
middleware
utils
common_headers
chip_io.h
由
William Goodspeed
维护 | E-mail: gongzl@stu.hebust.edu.cn | Wechat: a23333344 | ALSO CHECKOUT
WS63FLASH
!
生成于 2025年 一月 4日 星期六 17:47:12 , 为 WS63 SDK 文档使用
1.9.8