MCU GPIO模拟I2C
来源:互联网 发布:类似onedrive的软件 编辑:程序博客网 时间:2024/05/17 02:59
extern void MCU_DlyXus(INT32U nus);
//设置gpio方向:输入或者输出
static void GPIO_BitDir_IN()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = GP_GetPin(GPIO_I2C_DAT);
GPIO_Init(GP_GetPort(GPIO_I2C_DAT), &GPIO_InitStructure);
}
static void GPIO_BitDir_OUT()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = GP_GetPin(GPIO_I2C_DAT);
GPIO_Init(GP_GetPort(GPIO_I2C_DAT), &GPIO_InitStructure);
}
static void GPIO_Clk_BitDir_OUT()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = GP_GetPin(GPIO_I2C_CLK);
GPIO_Init(GP_GetPort(GPIO_I2C_CLK), &GPIO_InitStructure);
}
void I2C_Delay(void)
{
MCU_DlyXus(4);
}
void I2C_Start(void)
{
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
I2C_Delay();
return;
}
void I2C_Stop(void)
{
I2C_Delay();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
}
void I2C_ReadAck(void)
{
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO);
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
I2C_Delay();
}
BOOL I2C_WriteByte(INT8U cData)
{
INT8U i;
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
I2C_Delay();
for(i = 0; i < 8; i++)
{
if ((cData & 0x80) == 0x00)
{
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO) ;
}
else
{
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
}
cData <<= 1;
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
I2C_Delay();
}
I2C_Delay();
GPIO_BitDir_IN();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
i = GPIO_BitGet(GPIO_I2C_DAT);
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
I2C_Delay();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO);
GPIO_BitDir_OUT() ;
if (i == 0x00)
{
return TRUE;
}
return FALSE;
}
char I2C_ReadByte(void)
{
INT8U i,r;
GPIO_BitDir_IN();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
r = 0;
for (i = 0; i < 8; i++)
{
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
I2C_Delay();
r <<= 1;
if (GPIO_BitGet(GPIO_I2C_DAT) != 0x00)
{
r++;
}
I2C_Delay();
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_LO);
}
I2C_Delay();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_LO);
GPIO_BitDir_OUT() ;
I2C_Delay();
return(r);
}
void I2C_Initialize(void)
{
GPIO_Clk_BitDir_OUT();
GPIO_BitDir_OUT();
GPIO_BitSet(GPIO_I2C_DAT,IOHILO_HI);
GPIO_BitSet(GPIO_I2C_CLK,IOHILO_HI);
return;
}
0 0
- MCU GPIO模拟I2C
- MCU GPIO模拟spi
- 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
- 《Java课程实习》日志(周二)
- Spring MVC拦截器+注解方式实现防止表单重复提交
- 安装好ipvsadm后需要查看是否加载了ip_vs模块儿,没有需要手动加载。
- about pulltorefreshdemo
- 上课知识
- MCU GPIO模拟I2C
- uleb128、sleb128和uleb128p1编码格式介绍
- [leetcode] Surrounded Regions
- socket通信常用的函数
- 电影 杭州景点
- 文章标题
- 解读新GRE填空双空题的词项释义解析方法
- [leetcode][DP] Palindrome Partitioning II
- Java基础——GUI