注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 结构与配置

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:emtronix 发表时间:2011/1/23 14:10:00  

 

 本栏论题: 英创工业主板EM9160的GPIO应用于I2C通讯  [3165]

    英创EM9160 ARM9工业主板具有丰富的GPIO资源,通过GPIO来实现SPI,I2C的数据传输,具有使用非常灵活的优点,同时最高波特率还可达到1Mbps以上。I2C在智能终端中的应用非常普遍,如I2C总线时钟芯片,I2C总线存贮器等。之前已对I2C总线操作铁电存贮器有过说明,相关文章请参考嵌入式技术天地“工控主板支持铁电存储器的简易方案”(http://www.emtronix.com/article/article2009328.html )。英创公司的EM9160工业主板的高性价比与高可靠性,使其在智能终端中的应用中越来越具优势。为了更进一步说明EM9160工业主板使用GPIO来摸拟I2C总线的应用,本文对具有自动温度补偿的实时钟RX8025的操作为例来说明。对于I2C总来来说,最重要的是同步时钟与数据之间的时间关系,为了便于用户直接使用,英创公司将GPIO摸拟I2C的操作过程进行了封装,提供最简洁的函数作为接口,被定义在I2C的头文件GPIO_I2C.h中,如下所示:
    // 初始化I2C总线,主要是设置所使用的GPIO的输出状态
   
    int I2C_Init ( );
   
   
   
    //通过I2C写数据
   
    //输入参数
   
    // uDevAddr I2C器件的物理地址
   
    // uRegIdx 要操作的I2C器件内部的寄存器地址
   
    // abyte 要写入到I2C的数据
   
    //返回值:>=0 操作成功
   
    // =-1 操作失败
   
    int I2C_ByteWrite(UCHAR uDevAddr, UCHAR uRegIdx, UCHAR abyte);
   
   
   
    //通过I2C读取数据
   
    //输入参数
   
    // uDevAddr I2C器件的物理地址
   
    // uRegIdx 要操作的I2C器件内部的寄存器地址
   
    // pBuf 所读取的数据的输出BUFF
   
    // DataLen 要读数据的个数
   
    //返回值:>=0 操作成功 即读取出来的有效数据
   
    // =-1 操作失败
   
    int I2C_ByteRead(UCHAR uDevAddr, UCHAR uRegIdx, UCHAR* pBuf, int DataLen);
   
   
    实现I2C通讯过程控制的源代码在GPIO_I2C.cpp中,同时在该文件中定义了I2C总线能够使用的引脚资源及I2C总线SCL、SDA所使用的信号定义:
   
    #define GPIO0 0x01
   
    #define GPIO1 0x02
   
    #define GPIO2 0x04
   
    #define GPIO3 0x08
   
    #define GPIO4 0x10
   
    #define GPIO5 0x20
   
    #define GPIO6 0x40
   
    #define GPIO7 0x80
   
    #define GPIO8 0x100
   
    #define GPIO9 0x200
   
    #define GPIO10 0x400
   
    #define GPIO11 0x800
   
    #define GPIO12 0x1000
   
    #define GPIO13 0x2000
   
    #define GPIO14 0x4000
   
    #define GPIO15 0x8000
   
   
    #define SCL GPIO6 // GPIO6 被定义为I2C时钟信号线
   
    #define SDA GPIO7 // GPIO7 被定义为I2C数据线
   
   
    在使用EM9160工业主板的GPIO来实现I2C总线通讯时,同步时钟能稳定地工作在250KHz。要注意I2C的两个信号线,分别为同步时钟信号线SCL与双向通讯数据线SDA,这两条信号线所使用的GPIO被定义在GPIO_I2C.CPP文件中,如上面所示。在使用时根据实际情况,只需重新定义SCL和SDA信号所使用的GPIO即可。下面是调用GPIO_I2C中的操作函数实现时实钟RX8025操作的调用方法:
   
    //时钟寄存器数据读取
   
    int RTC_ByteRead( unsigned char REG_Addr , unsigned char *pBuf , int iLen)
   
    {
   
    UCHAR cRByte;
   
    int i1 ;
   
   
    cRByte = REG_Addr<<4; //根据RX8025的要求,寄存器地址放在高4位
   
    i1 = I2C_ByteRead( RX8025_ADDR , cRByte , pBuf , iLen );
   
    return i1;
   
    }
   
    //时钟寄存器数据设置
   
    int RTC_ByteWrite( unsigned char REG_Addr, unsigned char Value )
   
    {
   
    UCHAR cRByte;
   
    int i1;
   
   
    cRByte = REG_Addr<<4;
   
    i1 = I2C_ByteWrite( RX8025_ADDR , cRByte , Value );
   
    if( i1 == -1 )
   
    return -1;
   
    return 1;
   
    }
   
    再次调用以上两个实时钟读写操作函数则可轻实现现对RX8025的操作,如下:
   
    //只读取控制寄存器2
   
    i1 = RTC_ByteRead ( Reg_Contor2 , &cTmp , 1 );
   
    //从秒地址开始将年、月、日、时、分、秒、星期的数据一次性读出
   
    i1 = RTC_ByteRead( Reg_Second , cTmp , 7 );
   
    //设置时间寄存器“年”为10年
   
    i1 = RTC_ByteWrite( Reg_Year , 0x10 );
   
   
    对于I2C总线协议,请参考相关的参考资料。英创公司提供的GPIO摸拟I2C总线的程序适用于英创公司所有的嵌入式主板,感兴趣的客户可向英创索要相关源代码。
   
   
   
   
   

以下是关于《英创工业主板EM9160的GPIO应用于I2C通讯》论题的回复(共1篇)

回复人:翟爽 

 回复时间:2011/9/10 11:06:00

支持(414) | 反对(347)

 

    很好

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳