summaryrefslogtreecommitdiff
path: root/bsp/phytium/libraries/standalone/doc/reference/driver/fwdt.md
blob: c24f78e30300b7ece334bd69e5416df612541ae6 (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
# WDT 驱动程序

## 1. 概述

- WDT(watchdog timer)看门狗定时器是一种监控系统运行状况的手段,软件需在运行过程中定时向看门狗发送喂狗信号。

- 若看门狗定时器在一段时间内没有收到来自软件的喂狗信号,则认为系统故障,会强制系统复位。

- WDT 驱动支持的平台包括 FT2000/4、D2000、E2000。

## 2. 功能

WDT 驱动程序主要完成WDT模块的初始化、超时时间设置和超时中断函数,该驱动程序具备以下功能:

- 模块初始化
- 超时时间设置
- 超时中断函数设置

相关源文件为:
```
fwdt
    ├── fwdt.c
    ├── fwdt.h
    ├── fwdt_g.c
    ├── fwdt_hw.c
    ├── fwdt_hw.h
    ├── fwdt_intr.c
    └── fwdt_sinit.c
```

## 3. 配置方法

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

- 配置驱动程序,新建应用工程,使能WDT驱动模块
- 设置配置参数
- 设置超时时间
- 设置超时中断函数喂狗

## 4. 应用示例


### [wdt_test](../../../baremetal/example/peripheral/timer/wdt_test/README.md)


## 5. API参考


### 5.1. 用户数据结构

- drivers/wdt/fwdt/fwdt.h

- wdt实例配置

```c
typedef struct
{
    u32 instance_id;/* wdt id */
    uintptr refresh_base_addr;/* wdt refresh base addr */
    uintptr control_base_addr;/* wdt control base addr */
    u32 irq_num;    /* wdt ir num */
    u32 irq_prority;/* wdt irq priority */
    const char *instance_name;/* instance name */
}FWdtConfig;/* wdt config */
```

### 5.2  错误码定义

- FWDT_SUCCESS : success
- FWDT_ERR_INVAL_PARM : invalid input parameters
- FWDT_NOT_READY : driver not ready
- FWDT_NOT_SUPPORT : not support operation
- FWDT_TIMEOUT : wait timeout

### 5.3. 用户API接口

- 获取wdt驱动的默认配置参数

```c
const FWdtConfig *FWdtLookupConfig(u32 instance_id);
```

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

    Input:

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

    Return:

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


- 设置wdt超时时间

```c
u32 FWdtSetTimeout(FWdtCtrl *pCtrl, u32 timeout);
```

    Note:

    - 此函数会根据传入的超时时间初始化WDT寄存器;
    - WDT两次超时后,才执行系统复位操作;例如希望WDT 6s后复位,则应设置timeout=3;

    Input:

    - FWdtCtrl *pCtrl, WDT驱动实例数据 
    
    - u32 timeout, 设置的WDT超时时间,最大不超过89

    Return:

    - u32, 参考5.2章错误码定义


- WDT喂狗函数

```c
u32 FWdtRefresh(FWdtCtrl *pCtrl);
```

    Note:

    - 此函数会刷新wdt寄存器,重新开始计时

    Input:

    - FWdtCtrl *pCtrl, WDT驱动实例数据 

    Return:

    - u32, 参考5.2章错误码定义

- WDT使能函数

```c
u32 FWdtStart(FWdtCtrl *pCtrl);
```

    Note:

    - 此函数会使能wdt

    Input:

    - FWdtCtrl *pCtrl, WDT驱动实例数据 

    Return:

    - u32, 参考5.2章错误码定义

    
- WDT停止函数

```c
u32 FWdtStop(FWdtCtrl *pCtrl);
```

    Note:

    - 此函数会停止wdt

    Input:

    - FWdtCtrl *pCtrl, WDT驱动实例数据 

    Return:

    - u32, 参考5.2章错误码定义