• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

IIC驱动可以共用吗

huihui163 2018-07-06 浏览量:2043
void IIC_Start(void)
{
	SDA_OUT();     //sdaÏßÊä³ö
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;//START:when CLK is highDATA change form high to low 
	delay_us(4);
	IIC_SCL=0;//ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý 
}	  
//²úÉúIICÍ£Ö¹ÐźÅ
void IIC_Stop(void)
{
	SDA_OUT();//sdaÏßÊä³ö
	IIC_SCL=0;
	IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL=1; 
	IIC_SDA=1;//·¢ËÍI2C×ÜÏß½áÊøÐźÅ
	delay_us(4);							   	
}
//µÈ´ýÓ¦´ðÐźŵ½À´
//·µ»ØÖµ£º1£¬½ÓÊÕÓ¦´ðʧ°Ü
//        0£¬½ÓÊÕÓ¦´ð³É¹¦
u8 IIC_Wait_Ack(void)
{
	u8 ucErrTime=0;
	SDA_IN();      //SDAÉèÖÃΪÊäÈë  
	IIC_SDA=1;delay_us(1);	   
	IIC_SCL=1;delay_us(1);	 
	while(READ_SDA)
	{
		ucErrTime++;
		if(ucErrTime>250)
		{
			IIC_Stop();
			return 1;
		}
	}
	IIC_SCL=0;//ʱÖÓÊä³ö0 	   
	return 0;  
} 
//²úÉúACKÓ¦´ð
void IIC_Ack(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=0;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}
//²»²úÉúACKÓ¦´ð		    
void IIC_NAck(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=1;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}					 				     
//IIC·¢ËÍÒ»¸ö×Ö½Ú
//·µ»Ø´Ó»úÓÐÎÞÓ¦´ð
//1£¬ÓÐÓ¦´ð
//0£¬ÎÞÓ¦´ð			  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
	SDA_OUT(); 	    
    IIC_SCL=0;//À­µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
    for(t=0;t<8;t++)
    {              
        //IIC_SDA=(txd&0x80)>>7;
		if((txd&0x80)>>7)
			IIC_SDA=1;
		else
			IIC_SDA=0;
		txd<<=1; 	  
		delay_us(2);   //¶ÔTEA5767ÕâÈý¸öÑÓʱ¶¼ÊDZØÐëµÄ
		IIC_SCL=1;
		delay_us(2); 
		IIC_SCL=0;	
		delay_us(2);
    }	 
} 	    
//¶Á1¸ö×Ö½Ú£¬ack=1ʱ£¬·¢ËÍACK£¬ack=0£¬·¢ËÍnACK   
u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char ireceive=0;
	SDA_IN();//SDAÉèÖÃΪÊäÈë
    for(i=0;i<8;i++ )
	{
        IIC_SCL=0; 
        delay_us(2);
		IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
		delay_us(1); 
    }					 
    if (!ack)
        IIC_NAck();//·¢ËÍnACK
    else
        IIC_Ack(); //·¢ËÍACK   
    return receive;
}
这是原子的,现在要通过IIC来配置视频转换芯片的寄存器,可以用吗
2 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • IO模拟的IIC驱动通用型是很强的,只要适配好IIC的时钟和数据引脚,以及代码中的延时,基本上所有芯片都可以用,不管有没有硬件IIC。只要有GPIO就可以。在实际应用中,还要考虑IIC从设备的时序,一般IIC设备都会有手册描述时序,如果通讯不上,查看时序是否符合IIC从设备要求即可。


    • 发布于 2018-07-06
    • 举报
    • 评论 0
    • 9
    • 0

其他答案 数量:19

  • 程序可以共用 但是要修改引脚配置跟延时函数 不同主频的延时不同
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 3
    • 0

  • 可以,不过建议查看一下芯片手册,看看是否符合最短的时序要求,一般是符合的。还有就是要修改芯片地址
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 3
    • 0

  • 器件地址只有不重复就可以公用,有相同地址的必须分开到不同的IIC通道中。
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 3
    • 0

  • IIC的时序肯定是能够通用的,只不过在配置的时候要根据你要配置的芯片,根据手册上的读写寄存器时序再写俩读写寄存器的子函数
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 3
    • 0

  • 理论上只要IIC协议的延时精确的话时可以通用的,但是不同的单片机的执行速度时不一样的,所以不同的单片机根据单片机的处理速度需要修改程序中的延时时间,其他的就是IIC得到引脚定义的问题,引脚定义也是需要修改的
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 3
    • 0

  • 当然是可以共用的,IIC是一种通讯协议,有标准的通讯速度,看下对应的芯片的通讯速度,符合要求即可。

    要注意IIC设备地址不一样,及通讯的寄存器地址,数据格式不一样,根据相应的芯片调整。底层驱动可以共用。

    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 2
    • 0

  • 这种是模拟I2C的,就是用两个普通IO来模拟I2C的SCL和SDA,这种程序在任何MCU上都是可以用的
    • 发布于2018-07-06
    • 举报
    • 评论 0
    • 2
    • 0

  • 保证时序不变(一般就是延时函数不变)就是跨平台都可以使用,不过特殊场合的IIC通信会有微调,只要稍改一下就可以用了。
    • 发布于2018-07-08
    • 举报
    • 评论 0
    • 2
    • 0

  • 可以的,I2C协议通用性很强,底层一般不需要修改
    • 发布于2018-07-09
    • 举报
    • 评论 0
    • 2
    • 0

  • 可以共用,只有地址ma6shi不一样的。
    • 发布于2018-07-09
    • 举报
    • 评论 0
    • 2
    • 0

  • 可以的,IIC的协议都是一样的,不同的寄存器的读写
    • 发布于2018-07-09
    • 举报
    • 评论 0
    • 2
    • 0

  • 可以,要看时序来操作
    • 发布于2018-07-09
    • 举报
    • 评论 0
    • 1
    • 0

  • 驱动时序是可以共用的,但是寄存器的读写指令不能通用
    • 发布于2018-07-20
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

IIC驱动可以共用吗