WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
hal_i2c_v150_regs_op.h
浏览该文件的文档.
1
10#ifndef HAL_I2C_V150_REGS_OP_H
11#define HAL_I2C_V150_REGS_OP_H
12
13#include <stdint.h>
14#include <stdbool.h>
15#include "soc_osal.h"
17#include "i2c_porting.h"
18
19#ifdef __cplusplus
20#if __cplusplus
21extern "C" {
22#endif /* __cplusplus */
23#endif /* __cplusplus */
24
31/* 操作类型定义 */
32#define I2C_OP_START (1 << 3)
33#define I2C_OP_READ (1 << 2)
34#define I2C_OP_WRITE (1 << 1)
35#define I2C_OP_STOP (1 << 0)
36
37/*
38 * 中断类型与状态定义
39 * I2C中断状态/中断清除/中断屏蔽寄存器的比特位不对齐, 通过掩码将其对齐为中断类型, 方便统一处理;
40 * 注意, 以下定义的"中断类型"为代码逻辑中计算使用的中断类型值, 与寄存器真实值不同。
41 */
42/* 中断类型 */
43#define I2C_INT_TYPE_DONE (uint32_t)(1 << 0)
44#define I2C_INT_TYPE_ARB_LOSS (uint32_t)(1 << 1)
45#define I2C_INT_TYPE_ACK_ERR (uint32_t)(1 << 2)
46#define I2C_INT_TYPE_RX (uint32_t)(1 << 3)
47#define I2C_INT_TYPE_TX (uint32_t)(1 << 4)
48#define I2C_INT_TYPE_STOP (uint32_t)(1 << 5)
49#define I2C_INT_TYPE_START (uint32_t)(1 << 6)
50#define I2C_INT_TYPE_RXTIDE (uint32_t)(1 << 7)
51#define I2C_INT_TYPE_TXTIDE (uint32_t)(1 << 8)
52#define I2C_INT_TYPE_TXFIFO_OVER (uint32_t)(1 << 9)
53
54/* 中断有效类型掩码 */
55#define I2C_INT_TYPE_MASK 0x3FF
56
57/* I2C_CTRL寄存器 中断屏蔽状态掩码 */
58#define I2C_CTRL_INT_MASK 0x167F
59#define I2C_CTRL_INT_MASK_L 0x007F
60#define I2C_CTRL_INT_MASK_L_OFFSET 0
61#define I2C_CTRL_INT_MASK_M 0x0600
62#define I2C_CTRL_INT_MASK_M_OFFSET 2
63#define I2C_CTRL_INT_MASK_H 0x1000
64#define I2C_CTRL_INT_MASK_H_OFFSET 3
65
66/* I2C_ICR寄存器 中断清除状态掩码 */
67#define I2C_ICR_INT_MASK 0x03FF
68
69/* I2C_SR寄存器 中断上报状态掩码 */
70#define I2C_SR_INT_MASK 0x077F
71#define I2C_SR_INT_MASK_L 0x007F
72#define I2C_SR_INT_MASK_L_OFFSET 0
73#define I2C_SR_INT_MASK_H 0x0700
74#define I2C_SR_INT_MASK_H_OFFSET 1
75
76/* 毛刺过滤标准值, 默认使用逻辑配置参数0x8 */
77#define I2C_FTRPER_STANDARD_VAL 0x8
78
90
92
104static inline uint32_t hal_i2c_v150_int_type_to_ctrl(uint32_t int_type)
105{
109}
110
122static inline uint32_t hal_i2c_v150_ctrl_to_int_type(uint32_t int_bits)
123{
124 return (((int_bits & I2C_CTRL_INT_MASK_L) >> I2C_CTRL_INT_MASK_L_OFFSET) |
127}
128
140static inline uint32_t hal_i2c_v150_int_type_to_icr(uint32_t int_type)
141{
142 return (int_type & I2C_ICR_INT_MASK);
143}
144
156static inline uint32_t hal_i2c_v150_icr_to_int_type(uint32_t reg_icr)
157{
158 return (reg_icr & I2C_ICR_INT_MASK);
159}
160
172static inline uint32_t hal_i2c_v150_int_type_to_sr(uint32_t int_type)
173{
176}
177
189static inline uint32_t hal_i2c_v150_sr_to_int_type(uint32_t reg_sr)
190{
191 return (((reg_sr & I2C_SR_INT_MASK_L) >> I2C_SR_INT_MASK_L_OFFSET) |
193}
194
204static inline void hal_i2c_v150_set_i2c_enable(i2c_bus_t bus)
205{
206 i2c_ctrl_data_t i2c_ctrl;
207 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
208 i2c_ctrl.b.i2c_en = I2C_BIT_TRUE;
209 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
210}
211
221static inline void hal_i2c_v150_set_i2c_disable(i2c_bus_t bus)
222{
223 i2c_ctrl_data_t i2c_ctrl;
224 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
225 i2c_ctrl.b.i2c_en = I2C_BIT_FALSE;
226 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
227}
228
238static inline void hal_i2c_v150_set_fifo_enable(i2c_bus_t bus)
239{
240 i2c_ctrl_data_t i2c_ctrl;
241 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
242 i2c_ctrl.b.mode_ctrl = I2C_BIT_TRUE;
243 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
244}
245
255static inline void hal_i2c_v150_set_fifo_disable(i2c_bus_t bus)
256{
257 i2c_ctrl_data_t i2c_ctrl;
258 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
259 i2c_ctrl.b.mode_ctrl = I2C_BIT_FALSE;
260 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
261}
262
272static inline void hal_i2c_v150_mask_main_int(i2c_bus_t bus)
273{
274 i2c_ctrl_data_t i2c_ctrl;
275 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
276 i2c_ctrl.b.int_mask = I2C_BIT_FALSE;
277 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
278}
279
289static inline void hal_i2c_v150_unmask_main_int(i2c_bus_t bus)
290{
291 i2c_ctrl_data_t i2c_ctrl;
292 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
293 i2c_ctrl.b.int_mask = I2C_BIT_TRUE;
294 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
295}
296
308static inline void hal_i2c_v150_mask_int(i2c_bus_t bus, uint32_t int_type)
309{
310 i2c_ctrl_data_t i2c_ctrl;
311 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
312 i2c_ctrl.d32 &= ~(hal_i2c_v150_int_type_to_ctrl(int_type));
313 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
314}
315
327static inline void hal_i2c_v150_unmask_int(i2c_bus_t bus, uint32_t int_type)
328{
329 i2c_ctrl_data_t i2c_ctrl;
330 i2c_ctrl.d32 = g_i2c_regs[bus]->i2c_ctrl;
331 i2c_ctrl.d32 |= hal_i2c_v150_int_type_to_ctrl(int_type);
332 g_i2c_regs[bus]->i2c_ctrl = i2c_ctrl.d32;
333}
334
344static inline void hal_i2c_v150_mask_all_int(i2c_bus_t bus)
345{
346 hal_i2c_v150_mask_int(bus, I2C_INT_TYPE_DONE | I2C_INT_TYPE_ARB_LOSS | I2C_INT_TYPE_ACK_ERR |
349}
350
360static inline void hal_i2c_v150_unmask_all_int(i2c_bus_t bus)
361{
362 hal_i2c_v150_unmask_int(bus, I2C_INT_TYPE_DONE | I2C_INT_TYPE_ARB_LOSS | I2C_INT_TYPE_ACK_ERR |
365}
366
376static inline void hal_i2c_v150_enable_ack(i2c_bus_t bus)
377{
378 i2c_com_data_t i2c_com = {0};
379 i2c_com.b.op_ack = I2C_BIT_FALSE;
380 g_i2c_regs[bus]->i2c_com = i2c_com.d32;
381}
382
392static inline void hal_i2c_v150_disable_ack(i2c_bus_t bus)
393{
394 i2c_com_data_t i2c_com = {0};
395 i2c_com.b.op_ack = I2C_BIT_TRUE;
396 g_i2c_regs[bus]->i2c_com = i2c_com.d32;
397}
398
410static inline void hal_i2c_v150_set_command(i2c_bus_t bus, uint32_t command_type)
411{
412 i2c_com_data_t i2c_com;
413 i2c_com.d32 = g_i2c_regs[bus]->i2c_com;
414 i2c_com.b.op_stop = I2C_BIT_FALSE;
415 i2c_com.b.op_we = I2C_BIT_FALSE;
416 i2c_com.b.op_rd = I2C_BIT_FALSE;
417 i2c_com.b.op_start = I2C_BIT_FALSE;
418 i2c_com.d32 |= command_type;
419 g_i2c_regs[bus]->i2c_com = i2c_com.d32;
420}
421
433static inline void hal_i2c_v150_clear_int(i2c_bus_t bus, uint32_t int_type)
434{
435 i2c_icr_data_t i2c_icr;
436 i2c_icr.d32 = hal_i2c_v150_int_type_to_icr(int_type);
437 g_i2c_regs[bus]->i2c_icr = i2c_icr.d32;
438}
439
449static inline void hal_i2c_v150_clear_all_int(i2c_bus_t bus)
450{
451 hal_i2c_v150_clear_int(bus, I2C_INT_TYPE_DONE | I2C_INT_TYPE_ARB_LOSS | I2C_INT_TYPE_ACK_ERR |
454}
455
467static inline uint32_t hal_i2c_v150_get_int_state(i2c_bus_t bus)
468{
469 i2c_sr_data_t i2c_sr;
470 i2c_sr.d32 = g_i2c_regs[bus]->i2c_sr;
471 return hal_i2c_v150_sr_to_int_type(i2c_sr.d32);
472}
473
485static inline uint8_t hal_i2c_v150_is_bus_busy(i2c_bus_t bus)
486{
487 i2c_sr_data_t i2c_sr;
488 i2c_sr.d32 = g_i2c_regs[bus]->i2c_sr;
489 return i2c_sr.b.bus_busy;
490}
491
503static inline void hal_i2c_v150_set_scl_h(i2c_bus_t bus, uint16_t val)
504{
505 i2c_scl_h_data_t i2c_scl_h = {0};
506 i2c_scl_h.b.scl_h = val;
507 g_i2c_regs[bus]->i2c_scl_h = i2c_scl_h.d32;
508}
509
521static inline void hal_i2c_v150_set_scl_l(i2c_bus_t bus, uint16_t val)
522{
523 i2c_scl_l_data_t i2c_scl_l = {0};
524 i2c_scl_l.b.scl_l = val;
525 g_i2c_regs[bus]->i2c_scl_l = i2c_scl_l.d32;
526}
527
539static inline void hal_i2c_v150_set_tx_data(i2c_bus_t bus, uint8_t data)
540{
541 i2c_txr_data_t i2c_txr = {0};
542 i2c_txr.b.i2c_txr = data;
543 g_i2c_regs[bus]->i2c_txr = i2c_txr.d32;
544}
545
557static inline uint8_t hal_i2c_v150_get_rx_data(i2c_bus_t bus)
558{
559 i2c_rxr_data_t i2c_rxr;
560 i2c_rxr.d32 = g_i2c_regs[bus]->i2c_rxr;
561 return i2c_rxr.b.i2c_rxr;
562}
563
576static inline void hal_i2c_v150_set_ftrper(i2c_bus_t bus, uint8_t ftrper)
577{
578 i2c_ftrper_data_t i2c_ftrper = {0};
579 i2c_ftrper.b.ftrper = ftrper;
580 g_i2c_regs[bus]->i2c_ftrper = i2c_ftrper.d32;
581}
582
595static inline uint8_t hal_i2c_v150_get_ftrper(i2c_bus_t bus)
596{
597 i2c_ftrper_data_t i2c_ftrper;
598 i2c_ftrper.d32 = g_i2c_regs[bus]->i2c_ftrper;
599 return i2c_ftrper.b.ftrper;
600}
601
612
623
634
639#ifdef __cplusplus
640#if __cplusplus
641}
642#endif /* __cplusplus */
643#endif /* __cplusplus */
644
645#endif
i2c_bus_t
I2C bus.
Definition platform_core.h:212
#define I2C_CTRL_INT_MASK_M
Definition hal_i2c_v150_regs_op.h:61
#define I2C_CTRL_INT_MASK_H_OFFSET
Definition hal_i2c_v150_regs_op.h:64
#define I2C_SR_INT_MASK_L_OFFSET
Definition hal_i2c_v150_regs_op.h:72
#define I2C_INT_TYPE_ARB_LOSS
Definition hal_i2c_v150_regs_op.h:44
i2c_regs_t * g_i2c_regs[I2C_BUS_MAX_NUM]
Definition hal_i2c_v150_regs_op.c:15
#define I2C_INT_TYPE_RX
Definition hal_i2c_v150_regs_op.h:46
void hal_i2c_v150_regs_deinit(i2c_bus_t bus)
去初始化I2C寄存器基地址。
Definition hal_i2c_v150_regs_op.c:27
#define I2C_SR_INT_MASK_H
Definition hal_i2c_v150_regs_op.h:73
enum i2c_con_reg_config i2c_bit_config_t
I2C寄存器比特位定义。
#define I2C_ICR_INT_MASK
Definition hal_i2c_v150_regs_op.h:67
#define I2C_INT_TYPE_RXTIDE
Definition hal_i2c_v150_regs_op.h:50
#define I2C_CTRL_INT_MASK_L
Definition hal_i2c_v150_regs_op.h:59
#define I2C_INT_TYPE_TXTIDE
Definition hal_i2c_v150_regs_op.h:51
void hal_i2c_v150_reset_all_regs(i2c_bus_t bus)
设置所有可写寄存器恢复初始状态。
Definition hal_i2c_v150_regs_op.c:32
#define I2C_INT_TYPE_STOP
Definition hal_i2c_v150_regs_op.h:48
#define I2C_INT_TYPE_TXFIFO_OVER
Definition hal_i2c_v150_regs_op.h:52
#define I2C_INT_TYPE_DONE
Definition hal_i2c_v150_regs_op.h:43
#define I2C_SR_INT_MASK_H_OFFSET
Definition hal_i2c_v150_regs_op.h:74
i2c_con_reg_config
I2C寄存器比特位定义。
Definition hal_i2c_v150_regs_op.h:86
#define I2C_INT_TYPE_START
Definition hal_i2c_v150_regs_op.h:49
#define I2C_INT_TYPE_ACK_ERR
Definition hal_i2c_v150_regs_op.h:45
#define I2C_INT_TYPE_TX
Definition hal_i2c_v150_regs_op.h:47
#define I2C_CTRL_INT_MASK_L_OFFSET
Definition hal_i2c_v150_regs_op.h:60
#define I2C_SR_INT_MASK_L
Definition hal_i2c_v150_regs_op.h:71
#define I2C_CTRL_INT_MASK_M_OFFSET
Definition hal_i2c_v150_regs_op.h:62
void hal_i2c_v150_regs_init(i2c_bus_t bus)
初始化I2C寄存器基地址。
Definition hal_i2c_v150_regs_op.c:22
#define I2C_CTRL_INT_MASK_H
Definition hal_i2c_v150_regs_op.h:63
@ I2C_BIT_TRUE
Definition hal_i2c_v150_regs_op.h:88
@ I2C_BIT_FALSE
Definition hal_i2c_v150_regs_op.h:87
#define I2C_BUS_MAX_NUM
Definition i2c_porting.h:22
I2C相关寄存器。
Definition hal_i2c_v150_regs_def.h:511
volatile uint32_t i2c_scl_l
Definition hal_i2c_v150_regs_def.h:517
volatile uint32_t i2c_sr
Definition hal_i2c_v150_regs_def.h:515
volatile uint32_t i2c_com
Definition hal_i2c_v150_regs_def.h:513
volatile uint32_t i2c_ftrper
Definition hal_i2c_v150_regs_def.h:525
volatile uint32_t i2c_rxr
Definition hal_i2c_v150_regs_def.h:519
volatile uint32_t i2c_txr
Definition hal_i2c_v150_regs_def.h:518
volatile uint32_t i2c_icr
Definition hal_i2c_v150_regs_def.h:514
volatile uint32_t i2c_ctrl
Definition hal_i2c_v150_regs_def.h:512
volatile uint32_t i2c_scl_h
Definition hal_i2c_v150_regs_def.h:516
Definition hal_uart_v151_regs_def.h:38
I2C_COM 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C模块的命令寄存器, 用于配置I2C模块工作时命令。 在系统初始化时配置或配置前,...
Definition hal_i2c_v150_regs_def.h:125
uint32_t op_rd
Definition hal_i2c_v150_regs_def.h:136
struct i2c_com_data::@100 b
uint32_t d32
Definition hal_i2c_v150_regs_def.h:126
uint32_t op_we
Definition hal_i2c_v150_regs_def.h:132
uint32_t op_ack
Definition hal_i2c_v150_regs_def.h:144
uint32_t op_start
Definition hal_i2c_v150_regs_def.h:140
uint32_t op_stop
Definition hal_i2c_v150_regs_def.h:128
I2C_CTRL 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C控制寄存器, 用于配置I2C使能和中断屏蔽。
Definition hal_i2c_v150_regs_def.h:53
uint32_t i2c_en
Definition hal_i2c_v150_regs_def.h:88
uint32_t d32
Definition hal_i2c_v150_regs_def.h:54
struct i2c_ctrl_data::@99 b
uint32_t int_mask
Definition hal_i2c_v150_regs_def.h:84
uint32_t mode_ctrl
Definition hal_i2c_v150_regs_def.h:100
I2C_FTRPER 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 毛刺过滤寄存器。 scl为高时,判断sda电平持续时间,单位为ic_clk的时钟个数,持续时间大于该值才认...
Definition hal_i2c_v150_regs_def.h:495
uint32_t ftrper
Definition hal_i2c_v150_regs_def.h:498
struct i2c_ftrper_data::@136 b
uint32_t d32
Definition hal_i2c_v150_regs_def.h:496
I2C_ICR 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C模块的中断清除寄存器。 新中断到来时, I2C模块会自动将I2C_ICR相应位清0。
Definition hal_i2c_v150_regs_def.h:164
uint32_t d32
Definition hal_i2c_v150_regs_def.h:165
I2C_RXR 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C接收数据寄存器, 用于主机接收从机数据。 不使用FIFO模式下, I2C_RXR数据在I2C_SR bit...
Definition hal_i2c_v150_regs_def.h:357
uint32_t i2c_rxr
Definition hal_i2c_v150_regs_def.h:360
struct i2c_rxr_data::@130 b
uint32_t d32
Definition hal_i2c_v150_regs_def.h:358
I2C_SCL_H 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C总线SCL信号高电平周期数寄存器, 用于配置I2C模块工作时SCL高电平周期数。 在系统初始化时配置或...
Definition hal_i2c_v150_regs_def.h:289
uint32_t d32
Definition hal_i2c_v150_regs_def.h:290
uint32_t scl_h
Definition hal_i2c_v150_regs_def.h:292
struct i2c_scl_h_data::@122 b
I2C_SCL_L 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C总线SCL信号低电平周期数寄存器, 用于配置I2C模块工作时SCL低电平周期数。 在系统初始化时配置或...
Definition hal_i2c_v150_regs_def.h:310
struct i2c_scl_l_data::@126 b
uint32_t scl_l
Definition hal_i2c_v150_regs_def.h:313
uint32_t d32
Definition hal_i2c_v150_regs_def.h:311
I2C_SR 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C模块状态寄存器, 用于读取I2C模块工作状态。 I2C_SR bit[1]表示I2C总线仲裁失败,...
Definition hal_i2c_v150_regs_def.h:226
struct i2c_sr_data::@108 b
uint32_t d32
Definition hal_i2c_v150_regs_def.h:227
uint32_t bus_busy
Definition hal_i2c_v150_regs_def.h:257
I2C_TXR 寄存器联合体定义, 通过d32成员读取寄存器值, 通过b成员设置比特位。 I2C发送数据寄存器, 用于配置I2C模块工作时发送数据。 不使用FIFO模式下,...
Definition hal_i2c_v150_regs_def.h:334
struct i2c_txr_data::@129 b
uint32_t d32
Definition hal_i2c_v150_regs_def.h:335
uint32_t i2c_txr
Definition hal_i2c_v150_regs_def.h:337