S5PV210下gpio模拟i2c
来源:互联网 发布:微信一键转发源码 编辑:程序博客网 时间:2024/05/23 19:18
简单的示例,根据各自的情况修改~
#include <linux/module.h>#include <linux/kernel.h>#include <asm/io.h>#include <linux/delay.h>#include <linux/gpio.h>#define GPIO_W_ADDR 0x6a#define GPIO_R_ADDR (GPIO_W_ADDR | 0x1)#define GPIO_SDA S5PV210_GPH3(3) //随便写的gpio#define GPIO_SCL S5PV210_GPH3(4)#define GPIO_SDA_OUTP s3c_gpio_cfgpin(GPIO_SDA, S3C_GPIO_OUTPUT) //设定SDA输出#define GPIO_SDA_INP s3c_gpio_cfgpin(GPIO_SDA, S3C_GPIO_INPUT) //设定SDA输入#define GPIO_SCL_OUTP s3c_gpio_cfgpin(GPIO_SCL, S3C_GPIO_OUTPUT) //设定SCL输出#define GPIO_SDA_H gpio_set_value(GPIO_SDA, 1)#define GPIO_SDA_L gpio_set_value(GPIO_SDA, 0)#define GPIO_SCL_H gpio_set_value(GPIO_SCL, 1)#define GPIO_SCL_L gpio_set_value(GPIO_SCL, 0)/************************************ GPIO 初始化*************************************/void gpio_init(void){s3c_gpio_setpull(GPIO_SCL, S3C_GPIO_PULL_NONE);//disable pull up&downs3c_gpio_setpull(GPIO_SDA, S3C_GPIO_PULL_NONE);GPIO_SDA_OUTP;GPIO_SCL_OUTP;}/************************************ 总线初始化*************************************/void i2c_init(void){ GPIO_SCL_L; udelay(5); GPIO_SDA_H; udelay(5); GPIO_SCL_H; udelay(5);}/************************************ 接收ACK*************************************/void receive_ack(void){ unsigned long ack; GPIO_SDA_INP; // Function <- Input (SDA) GPIO_SCL_L; udelay(5); GPIO_SCL_H; udelay(5); ack = gpio_get_value(GPIO_SDA); GPIO_SCL_H; udelay(5); while(ack!=0) //接收到非应答信号,等待!这里最好不要写成死循环的形式,因为是示例,我就随意了! { GPIO_SCL_L; udelay(5); GPIO_SCL_H; udelay(5); ack = gpio_get_value(GPIO_SDA);printk("++++++++there is no ack +++++++++\n"); } GPIO_SCL_L; udelay(5); GPIO_SDA_OUTP; // Function <- Output (SDA)}/************************************ 起始信号*************************************/void i2c_start(void){ GPIO_SCL_L; udelay(5); GPIO_SDA_H; udelay(5); GPIO_SCL_H; udelay(5); GPIO_SDA_L; udelay(5);}/************************************ 停止信号*************************************/void i2c_stop(void){ GPIO_SCL_L; udelay(5); GPIO_SDA_L; udelay(5); GPIO_SCL_H; udelay(5); GPIO_SDA_H; udelay(5); }/************************************ 写一个字节*************************************/void i2c_byte_write(unsigned char dat){ unsigned long i; for(i = 8; i > 0; i--) { GPIO_SCL_L; //SCL拉低,使SDA变化有效 udelay(5); if((dat >> (i-1)) & 0x0001) GPIO_SDA_H; //SDA变化 else GPIO_SDA_L; udelay(5); GPIO_SCL_H; //SCL拉高, 从机读取SDA udelay(5); } GPIO_SCL_L; udelay(5); GPIO_SDA_H; //主机释放SDA,等待从机发送ACK或者NOACK udelay(5); receive_ack();}/************************************ 读一个字节*************************************/unsigned char i2c_byte_read(void){ unsigned long i, dat = 0; GPIO_SDA_H; //释放SDA udelay(5); GPIO_SDA_INP; // Function <- Input for(i = 0; i < 8; i++) { GPIO_SCL_H; //SCL拉高,等待从机发出SDA udelay(5); dat = (dat<<1)|(gpio_get_value(GPIO_SDA)); //读取从机发出的SDA udelay(5); GPIO_SCL_L; //SCL拉低,使从机改变或者SDA udelay(5); } GPIO_SCL_H; udelay(5); GPIO_SCL_L; udelay(5); GPIO_SCL_L; udelay(5); GPIO_SCL_H; udelay(5); GPIO_SDA_OUTP; // Function <- Output (SDA) return (unsigned char)dat;}
- S5PV210下gpio模拟i2c
- GPIO模拟I2C / I2C注意事项
- i2c 驱动gpio模拟i2c
- GPIO软件模拟I2C
- linux gpio模拟i2c
- linux gpio模拟i2c
- GPIO模拟I2C-1
- GPIO软件模拟I2C
- GPIO模拟I2C操作
- GPIO模拟I2C操作
- gpio模拟I2C
- GPIO 模拟 I2C
- GPIO 模拟 i2c
- MTK GPIO 模拟I2C
- GPIO模拟I2C
- Linux GPIO 模拟I2C
- MTK6592 GPIO模拟I2C
- gpio模拟I2C
- 快速排序 改进快排的方法
- 日语动词变形总结
- 中兴笔试题目
- java中集合杂记
- StringTokenizer类的使用
- S5PV210下gpio模拟i2c
- 排序算法目录
- 两种Ubuntu安装N卡官方驱动的方法
- hdu 4433 locker(DP,4级)
- 归并排序 笔试面试手写代码常考
- MAC下Parallel虚拟机Fedora 14的网络设置——“共享网络”设置
- 操作数据:SQL
- 关于重载、重写、重定义
- Spring如何装配Map