summaryrefslogtreecommitdiff
path: root/bsp/phytium/libraries/standalone/doc/reference/driver/fmio.md
blob: 02fd557322cdff0841771ac54a14406b2ceb1f55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# I2C 驱动程序

## 1. 概述

- E2000 的 MIO 接口可配置为 UART 或 I2C,具体时序特性要求需满足复用功能的时序特性要求。当需要使用对应的功能时,只需要软件进行相应配置.
- MIO 仅仅支持E2000系列芯片

## 2. 驱动功能

MIO 驱动程序管理MIO的功能复用,该驱动程序具备以下功能:

- 选择设置I2C模式或者串口模式
- 获取状态信息和版本信息

## 3. 使用方法

以下部分将指导您完成 MIO 驱动的硬件配置:

- 1. MIO驱动支持 E2000 Q D S,在E2000上完成测试
- 2. 本驱动仅仅作为IIC、串口的功能开启关闭使用,搭配串口驱动,与IIC驱动去使用,无法单独调用去实现具体功能

以下部分将指导您完成 MIO 驱动的软件配置:

- 1. 配置驱动程序,新建应用工程,传入设备ID参数,获取设备参数
- 2. 得到设备参数,操作设置配置项目
- 3. 进行I2C或者uart操作配置流程

## 5. API参考

### 5.1. 用户数据结构

- drivers/mio/fmio/fmio.h

```c

typedef struct
{
    FMioConfig config;  /* mio config */
    u32 is_ready;   /* mio initialize the complete flag */
}FMioCtrl;

```

```c

typedef struct
{
    u32     instance_id;        /*mio id*/
    uintptr func_base_addr; /*I2C or UART function address*/
    u32     irq_num;     /* Device intrrupt id */
    uintptr mio_base_addr;  /*MIO control address*/
    u32     version;            /*mio version*/
    u32     function_type;      /*mio function type*/
    u32     mio_status;         /*mio function type status*/
} FMioConfig;               /*mio configs*/

```
- MIO驱动实例

### 5.3 用户API接口

```c
const FMioConfig *FMioLookupConfig(u32 instance_id);
```
- 获取MIO驱动的默认配置参数

Note:
    
    - 用户需要修改配置参数时,可以通过修改返回的FMioConfig副本,作为FMioSelectFunc函数的入参,

Input:

    - u32 instance_id, 当前控制的MIO控制器实例号    

Return:

    - const FMioConfig *, 返回驱动默认参数, NULL表示失败


```c
FError FMioSelectFunc(uintptr addr, u32 mio_type);
```
- 设置MIO驱动的功能配置

Note:
    - 设置Mio功能

Input:
    - uintptr addr, 当前控制器的MIO基地址
    - u32 mio_type, 想要设置的MIO功能
Return:
    - @return {FError *} 返回错误码

```c
u32 FMioGetFunc(uintptr addr);
```
- 获取当前MIO的配置

Note:
    - 获取Mio功能

Input:
    - uintptr addr, 当前控制器的MIO基地址

Return:
    - @return {u32} 返回MIO的状态

```c
u32 FMioGetVersion(uintptr addr);
```
- 获取版本信息

Note:
    - 获取Mio版本

Input:
    - uintptr addr, 当前控制器的MIO基地址

Return:
    - @return {u32} 返回MIO的版本

```c
FError FMioFuncInit(FMioCtrl *instance_p, u32 mio_type)
```
- 初始化MIO

Note:
    - 初始化MIO的功能

Input:
    - FMioCtrl *instance_p, 当前控制器的结构体
    - u32 mio_type,需要配置的选项,串口还是IIC

Return:
    - @return {u32} 返回初始化的状态

```c
FError FMioFuncDeinit(FMioCtrl *instance_p)
```

- 去初始化MIO

Note:
    - 去初始化MIO的结构体,和相关寄存器

Input:
    - FMioCtrl *instance_p, 当前控制器的结构体

Return:
    - @return {u32} 返回去初始化的状态

```c
uintptr FMioFuncGetAddress(FMioCtrl *instance_p,u32 mio_type);
```
- 获取功能配置的基地址

Note:
    - 获取功能配置的基地址,如果当前配置和目标配置不一致,则失败

Input:
    - FMioCtrl *instance_p, 当前控制器的结构体
    - u32 mio_type, 目标配置的类型UART或者I2c

Return:
    - @return {uintptr} 返回基地址的值

```c
u32 FMioFuncGetIrqNum(FMioCtrl *instance_p,u32 mio_type);
```
- 获取功能的中断号

Note:
    - 获取功能配置的中断号,如果当前配置和目标配置不一致,则失败

Input:
    - FMioCtrl *instance_p, 当前控制器的结构体
    - u32 mio_type, 目标配置的类型UART或者I2c

Return:
    - @return {u32} 返回中断号