//============================================================================ //函数名称:hw_send_signal //功能概要:根据需要产生开始或停止信号 。 //参数说明: MoudleNum:模块号 // Signal: 'S'(Start),产生开始信号 'O'(Over), 产生停止信号 //函数返回:无 //============================================================================ void hw_send_signal(uint8 Signal,int MoudleNum) { //获取i2c模块基址 I2C_MemMapPtr num = hw_i2c_get_base_address(MoudleNum); if(num == I2C0)//模块0 { if (Signal == 'S') { i2c0_Start(); //主机模式选择位MST由0变为1,可以产生开始信号 } else if (Signal == 'O') { i2c0_Stop();//主机模式选择位MST由1变为0,可以产生停止信号 } } else if(num == I2C1)//模块1 { if (Signal == 'S') { i2c1_Start(); //主机模式选择位MST由0变为1,可以产生开始信号 } else if (Signal == 'O') { i2c1_Stop();//主机模式选择位MST由1变为0,可以产生停止信号 } } }
void send_signal(uint8 Signal) { if (Signal == 'S') { i2c0_Start(); //主机模式选择位MST由0变为1,可以产生开始信号 } else if (Signal == 'O') { i2c0_Stop();//主机模式选择位MST由1变为0,可以产生停止信号 } }
/*! * Start I2C Transmision * @param SlaveID is the 7 bit Slave Address * @param Mode sets Read or Write Mode */ void IIC_StartTransmission (unsigned char SlaveID, unsigned char Mode) { /* shift ID in right possition */ SlaveID = (unsigned char) SlaveID << 1; /* Set R/W bit at end of Slave Address */ SlaveID |= (unsigned char)Mode; /* send start signal */ i2c0_Start(); /* send ID with W/R bit */ i2c0_write_byte(SlaveID); }
/* ********************************************************************************************************* * 函 数 名: i2c_CheckDevice * 功能说明: 检测I2C总线设备,CPU向发送设备地址,然后读取设备应答来判断该设备是否存在 * 形 参: _Address:设备的I2C总线地址 * 返 回 值: 返回值 0 表示正确, 返回1表示未探测到 ********************************************************************************************************* */ uint8_t i2c0_CheckDevice(uint8_t _Address) { uint8_t ucAck; if (I2C_SDA_READ() && I2C_SCL_READ()) { i2c0_Start(); /* 发送启动信号 */ /* 发送设备地址+读写控制bit(0 = w, 1 = r) bit7 先传 */ i2c0_SendByte(_Address | I2C0_WR); ucAck = i2c0_WaitAck(); /* 检测设备的ACK应答 */ i2c0_Stop(); /* 发送停止信号 */ return ucAck; } return 1; /* I2C总线异常 */ }