You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

150 lines
3.0 KiB

//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_siic2.h"
TS_siic ts_siic2;
/*------------------------------------------------
端口定义
在I2C总线传输数据过程中,每传输一个字节,
都要跟一个应答状态位。接收器接收数据的情况
可以通过应答位来告知发送器。应答位的时钟脉冲
仍由主机产生,而应答位的数据状态则遵循“谁
接收谁产生”的原则,即总是由接收器产生应答位,
在响应的时钟脉冲期间接收器必须将SDA 线拉
低,使它在这个时钟脉冲的高电平期间保持稳定的低电平(见图9) ,
当然必须考虑建立和保持时间
(详细请查阅表6) 。主机向从机发送数据时,
应答位由从机产生;主机从从机接收数据时,应答位
由主机产生。
I2C总线标准规定: 应答位为0表示接收器应答 (ACK) ,
常常简记为A; 为1则表示非应答 (NACK) ,
常简记为NA。发送器发送LSB之后,应当释放SDA线(拉高SDA) ,
以等待接收器产生应答位。
如果接收器在接收完最后一个字节的数据,
或者不能再接收更多的数据时,应当产生非应答信
号来通知发送器。发送器如果发现接收器产生了非应答状态,
则应当终止发送。
void (*pf_SDA_out)(vType x);
void (*pf_SDA_set)(vType x);
vType (*pf_SDA_get)(void);
void (*pf_SCL_out)(vType x);
void (*pf_SCL_set)(vType x);
/// void (*pf_init)(void);
void (*pf_close)(void);
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_siic2_SDA_out(vType v )
{
if(v)
{
L0_SDA2_OUT();
}else
{
L0_SDA2_IN();
}
}
void L0_siic2_SDA(vType v)
{
if(v)
{
L0_SDA2_ON();
}else
{
L0_SDA2_OFF();
}
}
vType L0_siic2_SDA_get(void)
{
if( 0!= L0_SDA2_AT())
{
return 1;
}else
{
return 0;
}
}
void L0_siic2_SCL_out(vType v)
{
if(v)
{
L0_SCL2_OUT();
}else
{
L0_SCL2_IN();
}
}
void L0_siic2_SCL(vType v)
{
if(v)
{
L0_SCL2_ON();
}else
{
L0_SCL2_OFF();
}
Lc_delay_us(D_SIIC2_DELAY);
}
void L0_siic2_close(void)
{
///管教设置为高阻态
}
void L1_siic2_INIT(void)
{
ts_siic2.pf_SDA_out = L0_siic2_SDA_out;
ts_siic2.pf_SDA_set = L0_siic2_SDA;
ts_siic2.pf_SDA_get = L0_siic2_SDA_get;
ts_siic2.pf_SCL_out = L0_siic2_SCL_out;
ts_siic2.pf_SCL_set = L0_siic2_SCL;
ts_siic2.pf_close = L0_siic2_close;
L0_iicx_SendData(&ts_siic2,0xaa);
ts_siic2.sal = D_iic2_addr;
}