一. 简介
经过前面几篇文章的学习,已经完成了I2C驱动框架,字符设备驱动框架,编写了 读写 I2C设备中寄存器的数据的代码,文章如下:
I2C驱动实验:实现读/写I2C设备寄存器的函数-CSDN博客
本文在此基础上,实现 AP3216C设备的初始化,初始化过程中会复位,使能 ALS、PS、IR三个功能。会涉及向 AP3216C设备的寄存器写数据。
二. I2C驱动实验:读取AP3216C设备中寄存器的数据
1. 实现思路
(1) AP3216C设备的初始化工作,可以在字符设备驱动框架的 ap3216c_open函数中实现。
(2) 读取 AP3216C设备中寄存器的数据,可以在 字符设备驱动框架的 ap3216c_read函数中实现。
2. 读取AP3216C设备中寄存器的数据
打开 17_i2c工程代码,因为要操作 ap3216c设备中寄存器的地址,所以,可以在 ap3216c.h头文件中添加(可以从 I2C裸机实验中查找或者查看 AP3216C芯片的数据手册)。
ap3216c.h文件代码如下:
#ifndef AP3216C_H
#define AP3216C_H
/* AP3316C寄存器 */
#define AP3216C_SYSTEMCONG 0x00 /* 配置寄存器 */
#define AP3216C_INTSTATUS 0X01 /* 中断状态寄存器 */
#define AP3216C_INTCLEAR 0X02 /* 中断清除寄存器 */
#define AP3216C_IRDATALOW 0x0A /* IR数据低字节 */
#define AP3216C_IRDATAHIGH 0x0B /* IR数据高字节 */
#define AP3216C_ALSDATALOW 0x0C /* ALS数据低字节 */
#define AP3216C_ALSDATAHIGH 0X0D /* ALS数据高字节 */
#define AP3216C_PSDATALOW 0X0E /* PS数据低字节 */
#define AP3216C_PSDATAHIGH 0X0F /* PS数据高字节 */
#endif
添加初始化AP3216C设备,读取AP3216C设备中寄存器数据功能后,ap3216c.c文件代码如下:
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/i2c.h>
#include <linux/delay.h>
#include "ap3216c.h"
#define AP3216C_NANE "ap3216c"
#define AP3216C_CNT 1
//设备结构体
struct ap3216c_Dev{
dev_t devid; //设备号
int major; //主设备号
int minor; //次设备号
struct c