版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Sensor Hub设备驱动操作指南文档版本00B01发布日期2017-06-302017。保留一切权利。非经本公司形式。,任何和个人不得擅自摘抄、本文档内容的部分或全部,并不得以任何商标、海思和其他海思商标均为的商标。本文档提及的其他所有商标或商标,由各自的所有人拥有。注意您的产品、服务或特性等应受海思公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的或使用范围之内。除非合同另有约定,海思公司对本文档内容不做任何明示或默示的或保证。由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不任何明示或
2、暗示的担保。地址:市龙岗区坂田电气生产中心:518129http:/:客户服务:客户服务传真:客户服务邮箱:sup前言前言概述本文档主要是指导使用 Hi3559AV100ES Sensor Hub 子系统设备驱动模块的相关人员,通过一定的步骤和方法对和这些驱动模块相连的设备进行控制,主要包括操作准备、操作过程、操作中需要注意以及操作示例。文档中的路径除特殊说明外,默认指的是LiteOS 源代码根目录下的相对路径。对应的驱动库。应用通过config.mk 中的LITEOS LIBS 来 产品版本与本文档相对应的产品版本如下。读者对象本文档(本指南)主要适用于以下工程师:技术支持工程师开发工程师
3、修订修订累积了每次文档更新的说明。内容。版本的文档包含以前所有文档版本的更新i修订日期版本修订说明2017-06-3000B01第 1 次临时版本发布。产品名称产品版本Hi3559AV100ESSensor Hub操作指南设备驱动目录目录1 Sensor Hub 启动11.1LiteOS 编译11.2 系统引导1I2C 操作指南2功能介绍2模块编译2使用示例2模块初始化22通过调用驱动函数I C 设备22通过设备节点操作I C 设备42.4 s命令5API 参考6数据类型10SPI 操作指南12功能介绍12模块编译12使用示例12模块初始化12通过调用驱动函数通过设备节点操作SPI 设备12S
4、PI 设备143.4 s命令17ssp read 命令17ssp rwrite 命令17API 参考18数据类型19UART 操作指南20功能介绍20模块编译20使用示例20i目录4.4 S命令21API 参考22ioctl 配置说明234.5.2 举例24GPIO 操作指南25功能介绍25模块编译25使用示例25模块初始化255.3.2 通过文件系统GPIO255.4 API 参考26ii表目录表目录表 4-1 UART 配置说明24iii1 Sensor Hub 启动1 Sensor Hub 启动1.1LiteOS 编译Hi559AV100ES的 Sensor Hub 子系统默认运行Lit
5、eOS 系统。LiteOS 源代码位于开发包解压根目录下/osdrv/platform/liteos m7。用户可以通过以下步骤编译LiteOS:步骤 1.切换目录至LiteOS 源代码路径,并使用以下命令解压源码包:tar xf liteos.tgz步骤 2.切换目录至 liteos/目录下,输入“make”命令。步骤 3.切换目录至 s目录下的 s-结束le osdrv/目录下,直接输入“make”命令,编译完成后在该le/sin 即为 Sensor Hub 子系统的可执行镜像。1.2 系统引导引导 Hi559AV100ES 的 Sensor Hub 子系统运行体步骤如下:LiteOS 需
6、要在 uboot 中进行。具步骤 1. 确认单板环境运行在 A53 uboot 环境下。具体 uboot 编译与烧写可参考发布包 osdrv 目录下的 readme 文件。启动引导前需要配置 Sensor Hub 的 pll、时钟与 remap 等。用户可直接输入“config m7”命令配置必要的参数。如需要自定义更改 M7 启动前的参数,可以通过修改 uboot 中的“config m7”命令实现自定义的配置。“config m7”命令的操作通过 uboot 源码目录下 board/hisilicon/hi3559av100es/hi3559av100es.c 文件中 config m7
7、函数来实现。步骤 2. 配置好 M7 启动参数后,需要把 s的 ITCM 空间)。in 加载到 0 x19000000 地址中(即 Sensor Hub步骤 3. 加载成功后,可通过命令“go m7”启动 Sensor Hub 子系统的运行。至此,引导 Sensor Hub 子系统启动引导完成。-结束1Sensor Hub操作指南设备驱动2 I2C 操作指南2I2C 操作指南2.1 功能介绍22I C 模块的作用是完成 CPU 对 I C 总线上连接的从设备的读写。2.2 模块编译2源码路径为 drivers/i2c。用户需要对 I C 设备进行操作时,首先要在编译里指2定 I C 源码路径与
8、头文件路径。编译成功后,out/hi3559av100es/cortex-m7/lib/目录下会生成名为 libi2c.a 的库文件。时需要通过-li2c 参数指定该库文件。文档中的路径指的是LiteOS 源代码根目录或其相对路径。使用示例模块初始化2此操作示例介绍如何初始化 I C 驱动。步骤 1.驱动初始化,调用如下接口:i2c dev init();步骤 2.开发者需要根据设备硬件特性配置相关的管脚复用。具体请参考Hi3559AV100ES PINON中管脚复用寄存器页签。步骤 3.用户可根据需要调用模块的读写函数对设备进行-结束。参考 2.3.2 及 2.3.3。I2C 设备2.3.2
9、 通过调用驱动函数2步骤 1. 定义一个 I C 设备描述结构体。2Sensor Hub操作指南设备驱动2 I2C 操作指南structi2ccnt cnt;步骤 2.调用 cntach 把cnt 关系到对应的控制器上。函数原型:cntach(struct i2c cnt * cnt,adapter index)adapter index:被关联的i2c总线号的值,例如需要操作i2c0,则该值为0。2调用 I C 提供的标准读写函数对器件进行读写。步骤 3.读:reti2c transfer(struct i2c adapter *adapter, structi2c msg *msgs,co
10、unt);写:retcount);i2c master send(struct i2c cnt *cnt, constchar *buf,代码示例如下:22此代码为读写I C设备的示例程序,仅为客户调用 I C 驱动程序提供实际应用功能。设备提供参考,不nt obj; /i2c控制结构体struct i2c cnt i2c c#define SLAVEADDR 0 x34 /i2c设备地址REG ADDR 0 x300f /i2c设备寄存器地址#define SLAVE/*cnt 初始化 */i2c cnt init(void)ret0;struct i2c cnt * i2c cnt0&i2
11、c c ADDR 1;nt0, 0);ntobj;i2c cnt0-addrSLAVEretcntach(i2c cif(ret)dprf(Fail to attachcnt!n);return -1;return 0; U32 sle i2c write(void)ret;struct i2c cnt * i2c cnt0& i2c cnt obj;char buf40;i2c cnt init();buf0buf1buf2SLAVE REG ADDR & 0 xff; (SLAVE REG ADDR 8) & 0 xff;0 x03; /往i2c设备写入的值3Sensor Hub操作指南设
12、备驱动2 I2C 操作指南/调用I2C驱动标准写函数进行写操作reti2c master send(i2c cnt0,&buf,3);return ret; U32 sle i2c read(void)ret;structstruct structi2ci2c i2ccnt *i2c cnt0&i2ccntobj;rdwr ioctl data rdwr;msg msg2;unsigned char recvbuf4;memset(recvbuf, 0 x0 ,4);i2c cnt init();msg0.addr msg0.flags msg0.lenmsg0.bufSLAVE ADDR 0
13、;2;recvbuf;1;msg1.addr msg1.flags msg1.flags msg1.lenmsg1.bufSLAVE ADDR 0;| I2C M RD; 1;recvbuf;1;rdwr.msgsrdwr.nmsgs&msg0;2;recvbuf0recvbuf1SLAVE REG ADDR& 0 xff;(SLAVE REG ADDR 8) & 0 xff;i2c transfer(i2c cnt0-adapter, msg, rdwr.nmsgs);0 x%xn,recvbuf0); /buf0 保存着从i2c设备读写的值dprf(valreturn ret;-结束2.3
14、.3 通过设备节点操作I2C 设备2步骤 1. 打开 I C 总线对应的设备文件,获取文件描述符:fdopen(/dev/i2c-0,O RDWR);4Sensor Hub操作指南设备驱动2 I2C 操作指南如未完成设备文件的工作,可调用 i2c dev init()函数设备文件。步骤 2.通过 ioctl 设置设备地址、设备寄存器位宽和数据位宽:retioctl(fd, I2CSLAVE FORCE, device addr); REG, 0);DATA, 0);ioctl(fd, I2C 16BITioctl(fd, I2C 16BIT相关宏定义在 drivers/i2c/include/
15、 i2c.h 头文件中。步骤 3.使用以下函数进行数据读写:ioctl(fd, I2C RDWR, &rdwr);write(fd, buf, count);步骤 2 中,设置寄存器位宽和数据位宽时,ioctl 的第三个参数为 0 表示 8bit 位宽,为 1 表示 16bit 位宽。 步骤 3 中,使用 ioctl 进行读写的相关宏定义在 drivers/i2c/include/i2c dev.h 头文件中。 代码示例请参考文件:drivers/i2c/src/i2c s.c2此代码为示例程序,仅为客户通过文件系统I C用功能。设备操作提供参考,不提供实际应 用户调用 read、write
16、接口读写 i2c 操作时,buf 包含了寄存器地址与需要操作的数据字节, count 为寄存器地址所占字节数与需要操作数据字节数的总和。 -结束2.4 s命令i2c_read 命令2在控制台使用 i2c read 命令对 I C设备进行读操作:i2c read reg widthdata width addr width2例如读挂载在 I C 控制器 0 上的 IMX178 设备的 0 x3000 到 0 x3010 寄存器:i2c read 0 x0 0 x34 0 x3000 0 x3010 2 1 75Sensor Hub操作指南设备驱动2 I2C 操作指南2i2c num:I C 控制
17、器序号(对应Hi3559AV100ES ultra HD Mobile Camera SoC 用户指南中Sensor Hub 子系统的I C 控制器 0、1)。2device addr:reg addr:读设备地址。设备寄存器操作的开始地址。设备寄存器操作的结束地址。end reg addr:读 reg width:data width:设备的寄存器位宽(支持 8/16bit,2: 16bit/1:8bit)。设备的数据位宽(支持 8/16bit,2: 16bit/1:8bit)。设备地址位宽(支持 7/10 位位宽,7:7bit/10:10bit)。addr width: i2c_write
18、 命令2在控制台使用 i2c write 命令对 I C设备进行写操作:i2c write reg widthdata width addr width2例如向挂载在 I C 控制器 0 上的 IMX178 设备的 0 x300f 寄存器以 400K 速率写入数据0 x10:i2c write 0 x0 0 x34 0 x300f 0 x00 2 1 72i2c num:I C 控制器(对应Hi3559AV100ES ultra HD Mobile Camera SoC 用户指南中2Sensor Hub 子系统的I C 控制器 0、1)。device addr:reg addr:写设备地址。设
19、备寄存器操作的地址。设备寄存器操作的数据。2设备的寄存器位宽(I C 控制器支持 8/16bit)。2设备的数据位宽(I C 控制器支持 8/16bit)。设备地址位宽(支持 7/10 位位宽),7:7bit/10:10bit。reg value:写 reg width:data width:addr width: 2.5 API 参考该功能模块提供以下接口:i2ci2c i2c i2cdev init:用于初始化。2master recv:用于I C 数据的函数接口。2master send:用于写入 I C 数据的函数接口。2transfer:用于 I C 传输的函数接口。 cntach:
20、用于关联 cnt 与t deinit:用于去关联 cnt 与 adapter。 i2c_dev_init【描述】6Sensor Hub操作指南设备驱动2 I2C 操作指南2I C 设备初始化。【语法】i2c dev init(void);【参数】无【返回值】i2c_master_recv【描述】2用于I C 数据的函数接口。【语法】i2c mastercount);recv(conststructi2ccnt*cnt,char*buf,【参数】【返回值】i2c_master_send【描述】7返回值描述非负值读写长度负值读写失败参数名称描述输入/输出cnt2I C 设备描述
21、结构体输入buf数据保存 buffer输出count传输的字节数输入返回值描述0操作成功其它操作失败Sensor Hub操作指南设备驱动2 I2C 操作指南2用于写入 I C 数据的函数接口。【语法】i2c mastercount);send(conststructi2ccnt*cnt,char*buf,【参数】【返回值】i2c_transfer【描述】2用于写入 I C 数据的函数接口。【语法】i2c transfer(struct i2ccount);adapter *adapter, structi2c msg *msgs,【参数】【返回值】8参数名称描述输入/输出adapter2I C
22、 控制器adatper输入msgs待发送 msg 数组输入count需要被发送的 msg 个数输入返回值描述非负值读写长度负值读写失败参数名称描述输入/输出cnt2I C 设备描述结构体输入buf数据保存 buffer输入count传输的字节数输入Sensor Hub设备驱动操作指南2 I2C 操作指南cnt_attach【描述】用于关联 cnt 与adapter。【语法】cntach(structi2ccnt*cnt,adapterindex);【参数】【返回值】无cnt_deinit【描述】用于去关联 cnt 与adapter。【语法】cnt deinit(struct i2ccnt*cn
23、t);【参数】9参数名称描述输入/输出cntcnt 结构体输入返回值描述0操作成功其它操作失败参数名称描述输入/输出cntcnt 结构体输入adapter index关联的 host 序号输入返回值描述非负值被发送的 msg 个数负值读写失败Sensor Hub操作指南设备驱动2 I2C 操作指南【返回值】2.6 数据类型2i2c cnt:I C 从设备结构体。i2c_cnt【说明】2I C 从设备结构体。【定义】struct i2c cunsigned unsignednt short flags; short addr;char nameI2C NAME SIZE;struct struc
24、tstructi2c adapter *adapter; i2c driver *driver;device dev;irq;structlistheaddetected;【成员】10成员名称描述flags标志信息addr地址name名称adapter适配层结构体指针driver驱动层结构体指针dev设备结构体irq中断号返回值描述0操作成功其它操作失败Sensor Hub操作指南设备驱动2 I2C 操作指南11成员名称描述detected链表头Sensor Hub操作指南设备驱动3 SPI 操作指南3SPI 操作指南3.1 功能介绍SPI 模块的作用是SPI 总线上连接的从设备。3.2 模块
25、编译源码路径为 drivers/spi,要在编译里指定 SPI 源码路径与头文件路径,编译成功后,out/hi3559av100es/cortex-m7/lib/目录下会生成名为 libspi.a 的库文件,通过-lspi 参数指定该库文件。时需要文档中的路径指的是LiteOS 源代码根目录下的相对路径。使用示例模块初始化此操作示例介绍如何初始化 SPI 驱动。步骤 1.驱动初始化,调用如下接口:sev init();步骤 2.开发者需要根据设备硬件特性配置相关的管脚复用。具体请参考Hi3559AV100ES PINON中管脚复用寄存器页签。步骤 3.用户可根据需要调用模块的读写函数对设备进行
26、-结束。参考 3.3.2 及 3.3.3。3.3.2 通过调用驱动函数SPI 设备步骤 1. 定义一个 SPI 数据传输结构体:12Sensor Hub操作指南设备驱动3 SPI 操作指南structspi ioc transfertransfer1;步骤 2.初始化spi ioc transfer:transfer0.tx buftransfer0.rx buf(u(u32 t)buf;32 t)buf;transfer0.lenDEV WIDTH + REG WIDTH + DATA WIDTH;transfer0.cs change1;SPI NUM 为需要操作的 spi 总线号。cs
27、change 为是否在发送完成后失效片选,值为 1,则片选会在发送完成后失效设备,否则不失效。 步骤 3.调用 sev transfer 函数spi 设备:retvalsev set(bus num, csn, &transfer0);代码示例如下:此代码为读写SPI设备的示例程序,仅为客户调用 SPI 驱动程序提供实际应用功能。设备提供参考,不#define #define #define #define #define#defineDEV WIDTH 1REG WIDTH 2DATA WIDTH 1SPIS SPINUM 0EVICE ADDR 0 x82 REG ADDR 0 x0ssp
28、func read(unsigned char *data)unsigned char buf0 x10;struct spi ioc transfer transfer1;retval0;transfer0.tx buftransfer0.rx bufbuf;buf;transfer0.lenDEV WIDTH + REG WIDTH + DATA WIDTH;transfer0.cs change1;transfer0.speed20000;memset(buf, 0, sizeof(buf);/*请根据spi的发送方式配置是或低位配置读写位*/buf0buf1buf2(SEVICE AD
29、DR & 0 xff) | 0 x80 ; 0 x0;(SPI REG ADDR & 0 xff);13Sensor Hub操作指南设备驱动3 SPI 操作指南retval*data returnsev set(0,0,&transfer0);bufDEV WIDTH + REG WIDTH;retval ;ssp func write(void)unsigned char buf0 x10;struct spi ioc transfer transfer1;retval0;transfer0.tx buftransfer0.rx bufbuf;buf;transfer0.lenDEV WID
30、TH + REG WIDTH + DATA WIDTH;transfer0.cs change1;transfer0.speed20000;memset(buf, 0, sizeof(buf);/*请根据spi的发送方式配置是或低位配置读写位*/buf0buf1buf2(S0 x0; (SPIEVICE ADDR & 0 xff) &(0 x80);REG ADDR & 0 xff);/需要写入的数据ev set(0,0,&transfer0);buf3retval return0 x1;sretval;-结束3.3.3 通过设备节点操作SPI 设备步骤 1. 打开 SPI 总线对应的设备文件
31、,获取文件描述符:fdopen(/dev/sev0.0, O RDWR);如未完成设备文件的工作,可调用 sev init 函数设备文件。步骤 2. 通过 ioctl 设置 SPI 传输模式:valueSPI MODE 3 | SPI LSB;retioctl(fd, SPI IOC WR MODE, &value);SPI MODE 3 表示SPI 的时钟和相位都为 1 的模式。 SPI LSB表示SPI 传输时每个数据的格式为大端结束。14Sensor Hub操作指南设备驱动3 SPI 操作指南相关宏定义在 drivers/spi/include/sev.h 头文件。SPI 的时钟、相位、
32、大小端模式可参考Hi3559AV100ES ultra-HD Mobile Camera SoC用户指南。步骤 3.使用 ioctl 进行读写:retioctl(fd, SPI IOC MESSAGE, mesg);mesg 表示传输一帧消息的 struct spi ioc transfer 结构体数组首地址。 SPI IOC MESSAGE 表示全双工读写消息令。代码示例如下:此代码为示例程序,仅为客户通过文件系统能。SPI设备操作提供参考,不提供实际应用功EV ADDR 0 x02 /器件地址ev read(unsigned char reg#define S32 sstructaddr
33、, unsignedchar*data)file * fdNULL;ret0;unsigned char buf0 x10;struct spi ioc transfer transfer1;fdopen(/dev/sev0.0, O RDWR);if ( fddpr0 ) f(open /dev/sev0.0 fail! n);return -1;dprf(open sucs !n n);valueretSPI MODE 3ioctl(fd, SPI| SPI LSB;IOC WR MODE, &value);memset(transfer, 0,transfer0.tx buf trans
34、fer0.rx bufsizeof transfer);(u(u32 t)buf;32 t)buf;transfer0.lentransfer0.cs3;0;buf0buf1SEVADDR |0 x80;/dev addrreg addr & 0 xff ; /reg addr15Sensor Hub操作指南设备驱动3 SPI 操作指南buf2ret0;ioctl(fd, SPI IOC MESSAGE, transfer);if (ret 0)dprf(ioctl spi fail ! n);close(fd);return -1;* databuf2;close(fd);return0 ;
35、32 sev write(unsigned char reg addr , unsignedcharregval)structfile * fd;ret0;unsigned char buf0 x10;struct spi ioc transfer transfer1;fdopen(/dev/sev0.0, O RDWR);if ( fddpr0 ) f(open /dev/sev0.0fail! n);return -1;dprvalue retf(open suc SPI MODE 3ioctl(fd, SPIs !n n);| SPI LSB;IOC WR MODE, &value);m
36、emset(transfer, 0, transfer0.tx buftransfer0.rx bufsizeof transfer);(u(u32 t)buf;32 t)buf;transfer0.lentransfer0.cs3;0;buf0buf1buf2Sreg regEVADDR &(0 x80);/dev addraddr & 0 xff;val & 0 xff;/reg addrretioctl(fd, SPI IOC MESSAGE, transfer); if (ret 0)dprf(ioctl spi fail ! n);close(fd);return -1;16Sens
37、or Hub操作指南设备驱动3 SPI 操作指南close(fd); return 0;-结束3.4 s命令3.4.1 ssp_read 命令在控制台使用 spi read 命令对 SPI设备进行读操作:ssp read num reg dev width其中num reg 可以省略,缺省值是 1(表示读 1 个寄存器)。dev width reg width data width可以省略,缺省值都是 1(表示 1Byte)。例如读挂载在 SPI 控制器 0 片选 0 上设备地址为 0 x2 的设备的 0 x0 寄存器:ssp read 0 x0 0 x0 0 x2 0 x0 0 x10 0
38、x1 0 x1 0 x1spi num:SPI 控制器号(对应Hi3559AV100ES ultra HD Mobile Camera SoC 用户指南中Sensor Hub 子系统的SPI 控制器csn:片选号)。 dev addr:设备地址。设备寄存器开始地址。设备寄存器个数。设备地址位宽(支持 8 位)。设备寄存器地址位宽(支持 8 位)。设备的数据位宽(支持 8 位)。reg addr:num reg:读 dev width:reg width:data width: 此SPI 读写命令仅支持 sensor 的读写操作。3.4.2 ssp_rwrite 命令在控制台使用 spi wri
39、te 命令对 SPI设备进行写操作:ssp write dev widthreg width data width其中dev width reg width data width可以省略,缺省值都是 1(表示 1 Byte)。例如向挂载在 SPI 控制器 0 片选 0 上设备地址为 0 x2 的设备的 0 x0 寄存器写入数据 0 x65:ssp write 0 x0 0 x0 0 x2 0 x0 0 x65 0 x1 0 x1 0 x117Sensor Hub设备驱动操作指南3 SPI 操作指南spi num:SPI 控制器序号(对应Hi3559AV100ES ultra HD Mobile
40、 Camera SoC 用户指南 中Sensor Hub 子系统的SPI 控制器csn:片选号。)。dev addr:设备地址。设备寄存器地址。设备寄存器的数据。设备地址位宽(支持 8 位)。设备寄存器地址位宽(支持 8 位)。设备的数据位宽(支持 8 位)。reg addr: data:写dev width:reg width: data width:此SPI 读写命令仅支持 sensor 的读写操作。3.5 API 参考sev set:用于发起对 SPI 设备的读写操作。spi_dev_set【描述】用于发起对 SPI 设备的读写操作。【语法】hi s*transfer);ev set(h
41、ostno,csno,structspiioctransfer【需求】头文件:spi.h hisoc/spi.h库文件:libspi.a 【参数】【返回值】18参数名称描述输入/输出host no操作的控制器序号输入cs no片选输入transfer传输控制结构体指针。取值:用户定义并填充成员,参考 3.6 。输入Sensor Hub操作指南设备驱动3 SPI 操作指南【差异】3.6 数据类型spi ioc transfer:SPI 传输控制结构体。spi_ioc_transfer【说明】SPI 传输控制结构体。【定义】struct spi ioc const char char unsign
42、ed unsigned unsigned;transfer *tx buf;*rx buf; len;cs change;speed;【成员】19成员名称描述tx buf写缓冲区地址rx buf读缓冲区地址len读、写长度cs change片选改变标志speed速率类型差异Hi3559AV100ES-SensorHub2 个 SPI 控制器返回值描述非负值读写长度负值读写失败Sensor Hub操作指南设备驱动4 UART 操作指南4 UART 操作指南4.1 功能介绍UART 是一个异步串行的通口。UART 模块实现 Sensor Hub 与其连接的其它UART 设备(串行终端,MCU 等)
43、收发通信。4.2 模块编译源码路径为 drivers/uart。用户需要对 UART 设备进行操作时,首先要在编译里指定 UART 源码路径与头文件路径。编译成功后,out/hi3559av100es/cortex-m7/lib/目录下会生成名为 libuart.a 的库文件。时需要通过-luart 参数指定该库文件。4.3 使用示例步骤 1.在初始化函数中调用以下接口实现 UART 驱动:uart dev init();由于 s册。多用 UART0 作为通信交互与调试信息打印。应该完成以上 UART 驱动注如果启用 dma 方式接收数据,要进行 dmac 初始化,初始化函数中调用:hi dm
44、ac init();步骤 2.开发者根据设备硬件特性配置相关的管脚复用。具体请参考Hi3559AV100ES PINON中管脚复用寄存器页签。步骤 3.通过/dev/ uartdev-x 节点调用 open 打开指定 UART。步骤 4.打开 UART 后可调用 ioctl 配置。步骤 5.打开 UART 后可调用 read,write数据,与发送数据,可采用 select 阻塞 read。步骤 6.不使用 UART 时,调用 close 关闭。关闭后 UART 控制器不会再接收串口接收线上的数据。20Sensor Hub设备驱动操作指南4 UART 操作指南-结束4.4 S命令包括 uart
45、 read、uart write、uart config、uart close 分别对 UART关闭操作。、发送、配置和uart_read从 UART 接收缓存里指定长度数据。建立线程接收数据,格式:uart read 退出接收线程,停止数据,uart read -q num:UART 控制器号(对应 UART 控制器 0、1、2、3)。len:一次接收缓存的长度。 示例:uart read从 UART 2 中2100 100 个字节数据长度。uart_write通过 UART 控制器发送指定一段数据(字符)。格式:uart write num:UART 控制器号。buf:发送数据缓存,asc
46、ii 模式。 示例:uart wirte2abcdefghijklmnopqrstuvwxy 通过 UART 2 发送一段字符串。uart_config配置 UART 波特率、阻塞、DMA 接收、数据位等。格式:uart config num:UART 控制器号。cmd:命令号,0 x101配置通信波特率,具体配置可查看表 4 1 UART 配置说明。arg:命令号对应的参数,如配置波特率可为 2400、9600、115200 等。 示例:uart config20 x101 9600配置 UART2 波特率为 9600 uart_close关闭已打开的 UART 控制器,在调用 uart o
47、pen、uart write、uart cofing 时已对 UART打开。21Sensor Hub操作指南设备驱动4 UART 操作指南格式:uart closeUART 在关闭后,不会再接收数据。下次再次 read 或 write 时会重新打开,并配置成上一次关闭前串口的工作状态。4.5 API 参考 uartuart uartdev init:UART 设备初始化。suspend:UART 设备挂起。resume:UART 设备唤醒。 uart_dev_init【描述】UART 设备初始化。【语法】uart devinit(void);【参数】【返回值】uart_suspend【描述】U
48、ART 设备挂起。【语法】uart suspend(void*data);【参数】22返回值描述0操作成功其它操作失败参数名称描述输入/输出无无无Sensor Hub操作指南设备驱动4 UART 操作指南【返回值】uart_resume【描述】UART 设备唤醒。【语法】uart resume(void*data);【参数】【返回值】4.5.1 ioctl 配置说明打开 UART 后,通过 ioctl 配置 UART 波特率,dma 接收,阻塞置,采用默认值配置。例如,配置波特率为:,线控等。如不配retioctl(fd, CFG BAUDRATE, 9600);相关宏定义在drivers/u
49、art/include/uart.h 头文件中,配置说明请查看表 4 1 所示。23返回值描述0操作成功其它操作失败参数名称描述输入/输出data未使用(保留),传入 NULL 即可无返回值描述0操作成功其它操作失败参数名称描述输入/输出data未使用(保留),传入 NULL 即可无Sensor Hub操作指南设备驱动4 UART 操作指南表4-1 UART 配置说明4.5.2 举例例程请参考文件:./drivers/uart/src/uarts.c此例程为 s命令uart open、uart write、uart cofing 的具体实现。参考。24命令号命令码参数说明UART CFG BA
50、U DRATE0 x101波特率配置波特率,UART0 默认波特率为115200;UART1、UART2、UART3 为9600支持最大波特率为 921600。UART CFG DMA RX0 x1020、10:配置为中断接收方式;1:配置为 DMA 接收方式默认为中断方式UART CFG DMA TX0 x1030、1暂未支持UART CFG RD B LOCK0 x1040、10:配置为非阻塞方式 read;1:配置为事件阻塞方式 read默认为阻塞方式;UART CFG ATTR0 x105&uartr配置校验位,数据位,停止位,FIFO,CTS/RTS 等默认值为:无校验位,8 位数据
51、位,1 位停止位,禁能 CTS/RTS。参考头文件 struct uartrUART CFG PRIV ATE0 x110自定义驱动自定命令Sensor Hub操作指南设备驱动5 GPIO 操作指南5 GPIO 操作指南5.1 功能介绍GPIO 可配置为输入或者输出,可用于生成特定应用的输出信号或信号。特定应用的输入5.2 模块编译源码路径为 drivers/gpio,在编译里指定源码路径与头文件路径,编译成功后,out/hi3559av100es/cortex-m 7/lib/目录下会生成名为 libgpio.a 的库文件,lgpio 指定对应库文件。时通过-文档中的路径指的是LiteOS
52、源代码根目录下的相对路径。使用示例模块初始化在对 GPIO 操作之前需要调用初始化函数:gpio dev init();5.3.2 通过文件系统GPIO步骤 1. 打开 GPIO 总线对应的设备文件,获取文件描述符:fdopen(/dev/gpio, O RDWR);如未完成设备文件的工作,可调用 gpio dev init 函数设备文件。步骤 2. 定义 GPIO 状态结构体,并初始化:gpio groupbit info group bit info;25Sensor Hub操作指南设备驱动5 GPIO 操作指南groupgroupbit info.groupnumberbit info.
53、bitnumber 1;1;使用ioctl获得GPIO信息ioctl(fd, GPIO GET DIR, &group bit info);以上示例的作用是获得 GPIO 的输入输出状态。drivers/gpio/include/hi gpio.h 头文件。操作的宏定义在-结束5.4 API 参考该功能模块提供以下接口: gpiogpio gpio gpio gpio gpio gpio gpio gpio gpio gpiogpiochip init:GPIO 初始化接口。chip deinit:GPIO 去初始化接口。get direction:获取 GPIO 方向。direction i
54、nput:设置 GPIO 方向为输入。direction output:设置 GPIO 方向为输出。get value:获取 GPIO 值。 setirq set irqgetvalue:设置 GPIO 值。 register:GPIO 中断。 irq type:设置 GPIO 中断类型。enable:使能 GPIO 中断。irq sus:获取中断状态。 clear irq:清除 GPIO 寄存器中断状态。 gpio_chip_init【描述】GPIO 初始化接口。【语法】gpio chip init(struct gpio descriptor *gd);【参数】26参数名称描述输入/输出g
55、d全局变量,定义于 drivers/gpio/src/gpio dev.c 中输入Sensor Hub设备驱动操作指南5 GPIO 操作指南【注意】开发者可参考 drivers/gpio/src/gpio dev.c 中对该接口的调用。gpio_chip_deinit【描述】GPIO 去初始化接口。【语法】gpio chip deinit(struct gpio descriptor *gd);【参数】【注意】开发者可参考 drivers/gpio/src/gpio dev.c 中对该接口的调用。gpio_get_direction【描述】获取 GPIO 方向。【语法】gpio get direction(gpiogroupbitinfo*gpioinfo);【参数】gpio_direction_input【描述】设置 GPIO 方向为输入。【语法】27参数名称描述输入/输出gpio info操作的 GPIO 信息。作输入时必须初始化 groupnumber 与 bitnumber 成员获取的方向值将保存在 direction 成员中。输入参数名称描述输入/输出gd全局变量,定义于 drivers/gpio/s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 支气管扩张感染护理的未来发展趋势
- 新生儿早产护理知识普及
- 工程估计(下篇共上下2篇)
- 原液准备老成黄化操作工岗前环保竞赛考核试卷含答案
- 支气管扩张的呼吸功能锻炼
- 应对病痛:病人的心理调适技巧
- 药物检验员岗前基础常识考核试卷含答案
- 紫胶生产工诚信知识考核试卷含答案
- 信息通信网络终端维修员创新意识考核试卷含答案
- 碳二饱和气体回收装置操作工安全风险竞赛考核试卷含答案
- MSA测量系统表格GR-R
- 中国肿瘤整合诊疗指南(2025版)结直肠癌及肛管癌更新要点解读
- 2025年资格考试-注册可靠性工程师历年参考题库含答案解析(5套典型题)
- T-GDWHA 0020-2025 一体化泵闸设计制造安装及验收规范
- 企业科技项目管理办法
- 2025年安徽省高考生物试卷(含答案)
- 干细胞与健康讲座
- 安全员c1证考试试题及答案
- DB32/T 3958-2020化工企业安全生产信息化管理平台建设技术规范
- 陪玩俱乐部合同协议
- T-SMA 0049-2024 巩膜镜设计和验配要求
评论
0/150
提交评论