////////////////////////////////////////////////////////////////////////// /// 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); }