首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用s5pc100的GPIO模拟IIC

用s5pc100的GPIO模拟IIC

关于IIC的介绍,读者可以参看fs2410裸奔之IIC一文,这里重点介绍如何用GPIO模拟IIC。

先来看看LM75硬件的上的连线:



其中I2C_SDA0是数据线,I2C_SCL0是时钟线,它们分别接到s5pc100的GPD3和GPD4,如下图所示



在模拟IIC的时候,用GPD3引脚发送数据或读取数据,用GPD4引脚提供时钟信号即可。

        由于s5pc100的GPD这一组的引脚很多,不好单独对其中的某一个引脚操作,为了能单独对其中的某一个管脚单独操作,这里使用了C语言的位域。
       

                                typedef struct       
                        {       

                                                                        uint8 GPDDAT_0:1;               
       

                                                                uint8 GPDDAT_1:1;               
       

                                                                uint8 GPDDAT_2:1;               
       

                                                                uint8 GPDDAT_3:1;               
       

                                                                uint8 GPDDAT_4:1;               
       

                                                                uint8 GPDDAT_5:1;               
       

                                                                uint8 GPDDAT_6:1;               
       

                                                                uint8 GPDDAT_7:1;               
       

                               
       
                        }gpddat_t;       
                       
       
                        #define        GPD_DAT (* (volatile gpddat_t *)0xE0300084)       
                       
       
                        #define SDA GPD_DAT.GPDDAT_3       
                        #define SCL GPD_DAT.GPDDAT_4       
       

        (1)产生IIC起始信号
       

        SCL 为高电平时,SDA由高电平向低电平跳变,开始传送数据
       

                        /*IIC START:SCL = 1,SDA = 1->0*/       
                        void iic_start()       
                        {       

                                                        SDA = HIGH;               
       
                                                SCL  = HIGH;               
       
                                                delay(50);               
       
                                               
               

       
                                                //高到低的跳变产生start信号                
       
                                                SDA = LOW;               
       
                                                delay(50);               
       
                                               
//在SCL高时,SDA必须保持稳定,SCL低时,SDA可以任意改变
               

       
                                                //此处将SCL拉低的目的是,接下来就要发送数据了               
       
                                                SCL = LOW;               
       
                                                delay(50);               
       
                       
       

                                 return;       
                        }       



        (2)产生IIC停止信号

        SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据

                        /*IIC STOP:SCL = 1,SDA = 0->1*/       
                        void iic_stop()       
                        {       

                                                        SDA = LOW;               
       

                                                SCL = LOW;               
       

                                                delay(50);               
       

                                               
               
       

                                                SCL = HIGH;               
       

                                                delay(50);               
       

                                                        //SCL为高电平时,SDA从低电平跳变到高电平               
       

                                                        //,产生停止信号               
       

                                                SDA = HIGH;               
       

                                                delay(50);               
       

                                               
               
       

                                                return;               
       

                        }       
继承事业,薪火相传
返回列表