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.
145 lines
2.6 KiB
145 lines
2.6 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_siic3.h"
|
|
|
|
TS_siic ts_siic3;
|
|
|
|
|
|
/*------------------------------------------------
|
|
端口定义
|
|
在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_siic3_SDA_out(vType v )
|
|
{
|
|
if(v)
|
|
{
|
|
L0_SDA3_OUT();
|
|
}else
|
|
{
|
|
L0_SDA3_IN();
|
|
}
|
|
}
|
|
void L0_siic3_SDA(vType v)
|
|
{
|
|
if(v)
|
|
{
|
|
L0_SDA3_ON();
|
|
}else
|
|
{
|
|
L0_SDA3_OFF();
|
|
}
|
|
}
|
|
|
|
vType L0_siic3_SDA_get(void)
|
|
{
|
|
|
|
if( 0!= L0_SDA3_AT())
|
|
{
|
|
return 1;
|
|
}else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
void L0_siic3_SCL_out(vType v)
|
|
{
|
|
if(v)
|
|
{
|
|
L0_SCL3_OUT();
|
|
}else
|
|
{
|
|
L0_SCL3_IN();
|
|
}
|
|
|
|
}
|
|
|
|
void L0_siic3_SCL(vType v)
|
|
{
|
|
if(v)
|
|
{
|
|
L0_SCL3_ON();
|
|
}else
|
|
{
|
|
L0_SCL3_OFF();
|
|
}
|
|
Lc_delay_us(D_SIIC3_DELAY);
|
|
|
|
}
|
|
|
|
|
|
|
|
void L0_siic3_close(void)
|
|
{
|
|
///管教设置为高阻态
|
|
}
|
|
|
|
|
|
|
|
void L1_siic3_INIT(void)
|
|
{
|
|
ts_siic3.pf_SDA_out = L0_siic3_SDA_out;
|
|
ts_siic3.pf_SDA_set = L0_siic3_SDA;
|
|
ts_siic3.pf_SDA_get = L0_siic3_SDA_get;
|
|
ts_siic3.pf_SCL_out = L0_siic3_SCL_out;
|
|
ts_siic3.pf_SCL_set = L0_siic3_SCL;
|
|
ts_siic3.pf_close = L0_siic3_close;
|
|
|
|
/// ts_siic3.sal = D_iic3_addr;
|
|
/// L0_iicx_SendData(&ts_siic3,0xaa);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|