Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
840eaabd
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
840eaabd
编写于
8月 10, 2022
作者:
L
liyan
提交者:
Gitee
8月 10, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
资料规范性检查
Signed-off-by:
N
li-yan339
<
liyan339@h-partners.com
>
上级
88ad1f5c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
25 deletion
+36
-25
zh-cn/device-dev/driver/driver-platform-pin-develop.md
zh-cn/device-dev/driver/driver-platform-pin-develop.md
+36
-25
未找到文件。
zh-cn/device-dev/driver/driver-platform-pin-develop.md
浏览文件 @
840eaabd
...
...
@@ -61,12 +61,12 @@ struct PinCntlrMethod {
| 成员函数 | 入参 | 出参 | 返回值 | 功能 |
| ------------ | ------------------------------------------- | ------ | ---- | ---- |
| SetPinPull |
**cntlr**
:结构体指针,核心层Pin控制器
<br>
**index**
:uint32_t变量,管脚索引号
<br/>
**pullType**
:枚举常量,Pin管脚推拉方式 | 无 |HDF_STATUS相关状态|PIN设置管脚推拉方式|
| GetPinPull |
**cntlr**
:结构体指针,核心层Pin控制器
<br/>
**index**
:uint32_t变量,管脚索引号 |
**pullType**
:枚举常量指针,传出Pin管脚推拉方式 | HDF_STATUS相关状态 | PIN获取管脚推拉方式 |
| SetPinStrength |
**cntlr**
:结构体指针,核心层Pin控制器
<br/>
**index**
:uint32_t变量,管脚索引号
<br/>
**strength**
:uint32_t变量,Pin推拉强度 | 无 | HDF_STATUS相关状态 | PIN设置推拉强度 |
| GetPinStrength |
**cntlr**
:结构体指针,核心层Pin控制器
<br/>
**index**
:uint32_t变量,管脚索引号 |
**strength**
:uint32_t变量指针,传出Pin推拉强度 | HDF_STATUS相关状态 | PIN获取推拉强度 |
| SetPinFunc |
**cntlr**
:结构体指针,核心层Pin控制器
<br/>
**index**
:uint32_t变量,管脚索引号
<br/>
**funcName**
:char指针常量,传入Pin管脚功能 | 无 | HDF_STATUS相关状态 | PIN设置管脚功能 |
| GetPinFunc |
**cntlr**
:结构体指针,核心层Pin控制器
<br/>
**index**
:uint32_t变量,管脚索引号 |
**funcName**
:char双重指针常量,传出Pin管脚功能 | HDF_STATUS相关状态 | PIN获取管脚功能 |
| SetPinPull |
cntlr:结构体指针,核心层Pin控制器
<br>
index:uint32_t变量,管脚索引号
<br/>
pullType
:枚举常量,Pin管脚推拉方式 | 无 |HDF_STATUS相关状态|PIN设置管脚推拉方式|
| GetPinPull |
cntlr:结构体指针,核心层Pin控制器
<br/>
index:uint32_t变量,管脚索引号 | pullType
:枚举常量指针,传出Pin管脚推拉方式 | HDF_STATUS相关状态 | PIN获取管脚推拉方式 |
| SetPinStrength |
cntlr:结构体指针,核心层Pin控制器
<br/>
index:uint32_t变量,管脚索引号
<br/>
strength
:uint32_t变量,Pin推拉强度 | 无 | HDF_STATUS相关状态 | PIN设置推拉强度 |
| GetPinStrength |
cntlr:结构体指针,核心层Pin控制器
<br/>
index:uint32_t变量,管脚索引号 | strength
:uint32_t变量指针,传出Pin推拉强度 | HDF_STATUS相关状态 | PIN获取推拉强度 |
| SetPinFunc |
cntlr:结构体指针,核心层Pin控制器
<br/>
index:uint32_t变量,管脚索引号
<br/>
funcName
:char指针常量,传入Pin管脚功能 | 无 | HDF_STATUS相关状态 | PIN设置管脚功能 |
| GetPinFunc |
cntlr:结构体指针,核心层Pin控制器
<br/>
index:uint32_t变量,管脚索引号 | funcName
:char双重指针常量,传出Pin管脚功能 | HDF_STATUS相关状态 | PIN获取管脚功能 |
### 开发步骤
...
...
@@ -77,12 +77,14 @@ PIN模块适配包含以下四个步骤:
-
实例化核心层接口函数。
-
驱动调试。
1.
**实例化驱动入口:**
1.
实例化驱动入口:
-
实例化HdfDriverEntry结构体成员。
驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。
驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在hdf_device_desc.h中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。
-
调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。
一般在加载驱动时HDF会先调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。
```
c
...
...
@@ -93,11 +95,13 @@ PIN模块适配包含以下四个步骤:
.
Release
=
Hi35xxPinRelease
,
.
moduleName
=
"hi35xx_pin_driver"
,
// 【必要且与HCS文件中里面的moduleName匹配】
};
HDF_INIT
(
g_hi35xxPinDriverEntry
);
// 调用HDF_INIT将驱动入口注册到HDF框架中
HDF_INIT
(
g_hi35xxPinDriverEntry
);
// 调用HDF_INIT将驱动入口注册到HDF框架中
```
2.
**配置属性文件:**
2.
配置属性文件:
-
在vendor/hisilicon/hispark_taurus/hdf_config/device_info/device_info.hcs文件中添加deviceNode描述。
```
c
root
{
device_info
{
...
...
@@ -105,13 +109,13 @@ PIN模块适配包含以下四个步骤:
hostName
=
"platform_host"
;
priority
=
50
;
device_pin
::
device
{
device0
::
deviceNode
{
// 为每一个Pin控制器配置一个HDF设备节点,存在多个时须添加,否则不用
policy
=
0
;
// 2:用户态可见,1:内核态可见,0:不需要发布服务
device0
::
deviceNode
{
// 为每一个Pin控制器配置一个HDF设备节点,存在多个时须添加,否则不用
。
policy
=
0
;
// 2:用户态可见;1:内核态可见;0:不需要发布服务。
priority
=
10
;
// 驱动启动优先级
permission
=
0644
;
// 驱动创建设备节点权限
/* 【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致 */
/* 【必要】用于指定驱动名称,需要与期望的驱动Entry中的moduleName一致
。
*/
moduleName
=
"hi35xx_pin_driver"
;
/* 【必要】用于配置控制器私有数据,要与pin_config.hcs中对应控制器保持一致,具体的控制器信息在pin_config.hcs中 */
/* 【必要】用于配置控制器私有数据,要与pin_config.hcs中对应控制器保持一致,具体的控制器信息在pin_config.hcs中
。
*/
deviceMatchAttr
=
"hisilicon_hi35xx_pin_0"
;
}
device1
::
deviceNode
{
...
...
@@ -128,12 +132,13 @@ PIN模块适配包含以下四个步骤:
}
```
-
添加pin_config.hcs器件属性文件。
在device/soc/hisilicon/hi3516dv300/sdk_liteos/hdf_config/pin/pin_config.hcs目录下配置器件属性,其中配置参数如下:
```
c
root
{
platform
{
pin_config_hi35xx
{
template
pin_controller
{
// 【必要】模板配置,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省
template
pin_controller
{
// 【必要】模板配置,继承该模板的节点如果使用模板中的默认值,则节点字段可以缺省
。
number
=
0
;
// 【必要】controller编号
regStartBasePhy
=
0
;
// 【必要】寄存器物理基地址起始地址
regSize
=
0
;
// 【必要】寄存器位宽
...
...
@@ -163,16 +168,18 @@ PIN模块适配包含以下四个步骤:
F1
=
"SFC_CLK"
;
F2
=
"SFC_BOOT_MODE"
;
}
......
// 对应管脚控制器下的每个管脚,按实际添加
......
// 对应管脚控制器下的每个管脚,按实际添加
。
}
......
// 每个管脚控制器对应一个controller节点,如存在多个Pin控制器,请依次添加对应的controller节点
......
// 每个管脚控制器对应一个controller节点,如存在多个Pin控制器,请依次添加对应的controller节点
。
}
}
}
```
3.
**实例化PIN控制器对象:**
3.
实例化PIN控制器对象:
-
初始化PinCntlr成员。
在Hi35xxPinCntlrInit函数中对PinCntlr成员进行初始化操作。
```
c
...
...
@@ -208,7 +215,7 @@ PIN模块适配包含以下四个步骤:
uint32_t
pinCount
;
};
// PinCntlr是核心层控制器,其中的成员在
init函数中会被赋值
// PinCntlr是核心层控制器,其中的成员在
Init函数中会被赋值。
struct
PinCntlr
{
struct
IDeviceIoService
service
;
struct
HdfDeviceObject
*
device
;
...
...
@@ -253,7 +260,7 @@ PIN模块适配包含以下四个步骤:
HDF_LOGE
(
"%s: read pinCount failed"
,
__func__
);
return
ret
;
}
// 将读取的值赋值给管脚控制器的成员,完成管脚控制器初始化
// 将读取的值赋值给管脚控制器的成员,完成管脚控制器初始化
。
hi35xx
->
cntlr
.
pinCount
=
hi35xx
->
pinCount
;
hi35xx
->
cntlr
.
number
=
hi35xx
->
number
;
hi35xx
->
regBase
=
OsalIoRemap
(
hi35xx
->
regStartBasePhy
,
hi35xx
->
regSize
);
// 管脚控制器映射
...
...
@@ -284,10 +291,12 @@ PIN模块适配包含以下四个步骤:
-
Init函数
入参:
HdfDeviceObject这个是整个驱动对外暴露的接口参数,具备hcs配置文件的信息。
HdfDeviceObject这个是整个驱动对外暴露的接口参数,具备HCS配置文件的信息。
返回值:
HDF
\_
STATUS相关状态(下表为部分展示,如需使用其他状态,可见/drivers/framework/include/utils/hdf
\_
base.h中HDF
\_
STATUS 定义)。
HDF
\_
STATUS相关状态(下表为部分展示,如需使用其他状态,可见/drivers/framework/include/utils/hdf
\_
base.h中HDF
\_
STATUS定义)。
|
**状态(值)**
|
**问题描述**
|
| ---------------------- | -------------- |
...
...
@@ -299,6 +308,7 @@ PIN模块适配包含以下四个步骤:
| HDF_FAILURE | 初始化失败 |
函数说明:
初始化自定义结构体对象和PinCntlr成员,并通过调用核心层PinCntlrAdd函数挂载Pin控制器。
```
c
...
...
@@ -360,7 +370,7 @@ PIN模块适配包含以下四个步骤:
ret
=
Hi35xxPinCntlrInit
(
device
,
hi35xx
);
// 管脚控制器初始化
......
DEV_RES_NODE_FOR_EACH_CHILD_NODE
(
device
->
property
,
childNode
)
{
// 遍历管脚控制器的每个子节点
ret
=
Hi35xxPinParsePinNode
(
childNode
,
hi35xx
,
index
);
// 解析子节点
ret
=
Hi35xxPinParsePinNode
(
childNode
,
hi35xx
,
index
);
// 解析子节点
......
}
...
...
@@ -378,7 +388,7 @@ PIN模块适配包含以下四个步骤:
入参:
HdfDeviceObject是整个驱动对外暴露的接口参数,具备
hcs
配置文件的信息。
HdfDeviceObject是整个驱动对外暴露的接口参数,具备
HCS
配置文件的信息。
返回值:
...
...
@@ -424,5 +434,6 @@ PIN模块适配包含以下四个步骤:
}
}
```
4.
**驱动调试:**
4.
驱动调试:
【可选】针对新增驱动程序,建议验证驱动基本功能,例如挂载后的信息反馈,数据传输的成功与否等。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录