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
17extern "C" {
18#endif
19#endif
20
21#ifdef WIN32
22uint8_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
61
81
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
#define readb(addr)
Definition chip_io.h:173
REG16_POS
Definition chip_io.h:83
@ POS_6
Definition chip_io.h:90
@ POS_4
Definition chip_io.h:88
@ POS_1
Definition chip_io.h:85
@ POS_9
Definition chip_io.h:93
@ POS_8
Definition chip_io.h:92
@ POS_5
Definition chip_io.h:89
@ POS_14
Definition chip_io.h:98
@ POS_13
Definition chip_io.h:97
@ POS_11
Definition chip_io.h:95
@ POS_3
Definition chip_io.h:87
@ POS_10
Definition chip_io.h:94
@ POS_15
Definition chip_io.h:99
@ POS_12
Definition chip_io.h:96
@ POS_2
Definition chip_io.h:86
@ POS_0
Definition chip_io.h:84
@ POS_7
Definition chip_io.h:91
switch_type_t
Definition chip_io.h:57
@ TURN_OFF
Definition chip_io.h:58
@ TURN_ON
Definition chip_io.h:59
REG32_POS
Definition chip_io.h:63
@ POS_31
Definition chip_io.h:79
@ POS_22
Definition chip_io.h:70
@ POS_26
Definition chip_io.h:74
@ POS_28
Definition chip_io.h:76
@ POS_20
Definition chip_io.h:68
@ POS_25
Definition chip_io.h:73
@ POS_29
Definition chip_io.h:77
@ POS_19
Definition chip_io.h:67
@ POS_30
Definition chip_io.h:78
@ POS_17
Definition chip_io.h:65
@ POS_27
Definition chip_io.h:75
@ POS_24
Definition chip_io.h:72
@ POS_23
Definition chip_io.h:71
@ POS_21
Definition chip_io.h:69
@ POS_16
Definition chip_io.h:64
@ POS_18
Definition chip_io.h:66