linux下的键盘控制芯片CH455驱动io模拟IIC(基于AM335x)

本文介绍了如何在Linux环境下,使用CH455芯片驱动3*2矩阵键盘,通过IO模拟IIC通信并结合中断实现与芯片的交互。详细阐述了芯片的使用框架和电路设计,并提供了驱动代码及测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:liufei191010@126.com】 

由于项目需要一款小的3*2的矩阵键盘,所以选用一款数码管驱动及键盘控制芯片 CH455 ,该芯片其实实际能支持到最大7*8的矩阵键盘以及4个数码管,在这里我们只是用到了他的键盘驱动功能,该芯片的使用框架图如下:

在项目实际应用中,芯片的实际电路设计原理如下:

在驱动软件的设计上,我们采用io模拟iic通信,外加中断的方式搞定该芯片。通过芯片的datasheet,我们可以清除的看到该芯片的通信时序如下:

根据以上的时序,我们在linux下实现该芯片的驱动,代码如下:

//ch455.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/platform_device.h>
#include <linux/poll.h>
#include <linux/leds.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/types.h>
#include <mach/gpio.h>
#include <plat/mux.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>

typedef unsigned char   UINT8;
typedef unsigned short  UINT16;	

#define  STATUS_SUCCESS	0
#define  STATUS_FAILURE -1

// 读取按键代码命令
#define CH455_GET_KEY	0x0700					// 获取按键,返回按键代码
// CH455接口定义
#define		CH455_I2C_ADDR		0x40			// CH455的地址
#define		CH455_I2C_MASK		0x3E			// CH455的高字节命令掩码

static struct class *ch455iic_class;
static struct device	*ch455iic_class_dev;
static int major;
static unsigned char TxBuf[24] = {0};
static unsigned char RxBuf[24] = {0};

//iic
#define SCL            GPIO_TO_PIN(1,14)
#define SCL_OUT        gpio_direction_output(SCL, 1)
#define SCL_L          gpio_set_value(SCL, 0)
#define SCL_H          gpio_set_value(SCL, 1)

#define SDA            GPIO_TO_PIN(2,1)
//#define SDA          GPIO_TO_PIN(2,13)
#define SDA_OUT        gpio_direction_output(SDA, 1)
#define SDA_IN         gpio_direction_input(SDA)
#define CH455_SDA_IN   gpio_get_value(SDA)
#define SDA_L  		   gpio_set_value(SDA, 0)
#def
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值