IIC驱动可以共用吗

关注

单片机 STM32 huihui163    2018-07-06   |   浏览量 306  
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来配置视频转换芯片的寄存器,可以用吗

最佳答案

  • 袁建明 发表于2018-07-06 云汉达人

    IO模拟的IIC驱动通用型是很强的,只要适配好IIC的时钟和数据引脚,以及代码中的延时,基本上所有芯片都可以用,不管有没有硬件IIC。只要有GPIO就可以。在实际应用中,还要考虑IIC从设备的时序,一般IIC设备都会有手册描述时序,如果通讯不上,查看时序是否符合IIC从设备要求即可。


    回答点赞:   e426e7b5528e31c 进阶小菜鸟 yhj416606438 王栋春 放电 请输入用户名 捷波 举报 评论 7

其他答案

  • ━╋う酔意流年☆═━ヾ 发表于 2018-07-06

    可以用的。移植的时候引脚配置对应配置对了就行。

    回答点赞:   e426e7b5528e31c 进阶小菜鸟 王栋春 请输入用户名 捷波 举报 评论 4

  • 花生大事 发表于 2018-07-06

    可以,引脚对应好就可以了。

    回答点赞:   进阶小菜鸟 王栋春 请输入用户名 举报 评论 3

  • lichangle 发表于 2018-07-06

    程序可以共用 但是要修改引脚配置跟延时函数 不同主频的延时不同

    回答点赞:   进阶小菜鸟 hangtao 王栋春 举报 评论 3

  • day_day 发表于 2018-07-06

    可以,不过建议查看一下芯片手册,看看是否符合最短的时序要求,一般是符合的。还有就是要修改芯片地址

    回答点赞:   进阶小菜鸟 王栋春 请输入用户名 举报 评论 3

  • apleilx 发表于 2018-07-06

    器件地址只有不重复就可以公用,有相同地址的必须分开到不同的IIC通道中。

    回答点赞:   进阶小菜鸟 王栋春 请输入用户名 举报 评论 3

  • fighter-12315 发表于 2018-07-06

    IIC的时序肯定是能够通用的,只不过在配置的时候要根据你要配置的芯片,根据手册上的读写寄存器时序再写俩读写寄存器的子函数

    回答点赞:   进阶小菜鸟 王栋春 请输入用户名 举报 评论 3

  • hehung 发表于 2018-07-06

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

    回答点赞:   进阶小菜鸟 王栋春 请输入用户名 举报 评论 3

  • 赤心木zqw 发表于 2018-07-06

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

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

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • 6d38f182c018e11e 发表于 2018-07-06

    可以共用的

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • qi123456 发表于 2018-07-06

    可以共用的

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • chen0000009 发表于 2018-07-06

    这种是模拟I2C的,就是用两个普通IO来模拟I2C的SCL和SDA,这种程序在任何MCU上都是可以用的

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • hayden 发表于 2018-07-08

    保证时序不变(一般就是延时函数不变)就是跨平台都可以使用,不过特殊场合的IIC通信会有微调,只要稍改一下就可以用了。

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • yhj416606438 发表于 2018-07-09

    可以的,I2C协议通用性很强,底层一般不需要修改

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • 7943603 发表于 2018-07-09

    可以共用,只有地址ma6shi不一样的。

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • 莱克迷KW 发表于 2018-07-09

    可以的,IIC的协议都是一样的,不同的寄存器的读写

    回答点赞:   进阶小菜鸟 王栋春 举报 评论 2

  • 原董 发表于 2018-07-09

    可以,要看时序来操作

    回答点赞:   进阶小菜鸟 举报 评论 1

  • e426e7b5528e31c9 发表于 2018-07-10

    有谁搞过硬件IIC吗?

    举报 评论 0

  • 勇哥来巡山 发表于 2018-07-18

    可以共用的,只要地址区分开就可以正常通讯

    举报 评论 0

  • 菜鸟冷虎 发表于 2018-07-20

    驱动时序是可以共用的,但是寄存器的读写指令不能通用

    举报 评论 0

我来回答

试用推荐

深创客NBiot物联网低功耗开发板STM32L476

产品总数:5个  申请人数:122

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: Linux 系统 灵动微MCU 电源技术

完成答题
赶快去开启您的宝箱吧
回答问题攒积分送开发板