ST9+系列单片机I2C总线驱动程序实现

2006-05-07 15:49:41来源: 互联网

总线技术是新一代单片机技术发展的一个显著特点,其中Philips公司推出的I2C总线最为著名。ST9+系列是意法半导体公司的单片机产品,能够很好地支持I2C总线协议。本文以ST9+单片机为例阐述I2C总线协议,并给出在ST9+单片机上实现I2C总线驱动程序的流程和方法。

串行扩展总线技术是新一代单片机技术发展的一个显著特点,其中Philips公司推出的 I2C总线最为著名。I2C总线最显著的特点是规范的完整性、结构的独立性和用户使用时的简单化。 I2C总线有严格的规范,如接口的电气特性、信号时序、信号传输的定义、总线状态设置、总线管理规则及总线状态处理等。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。

  目前I2C总线技术已为许多著名公司所采用,并广泛应用于视频、音频系统中。推广I2C总线技术将有助于提高我国单片机应用开发水平。意法半导体公司(SGS-THOMSON)是全球十大半导体制造商之一,其领先单片机产品ST9+系列是目前功能比较全面且支持通信协议较多的一款产品,支持包括I2C、USB在内的多种通信协议。本文以ST9+系列单片机中的ST92163为例,阐述其对I2C总线的支持方式,并给出在ST92163单片机上实现I2C总线协议的程序流程和方法。

1 ST9+系列单片机结构及其对I2C总线的支持

1.1 ST9+系列单片机的结构和特点

  ST92163单片机是ST9+系列单片机中的典型产品,如图1所示。本文以该款单片机为例介绍ST9+系列产品。该产品为8位/16位兼容单片机,片内含20 KB的ROM和2 KB的RAM,主频24 MHz,拥有256个寄存器,最大内存寻址4 MB,支持I2C、SPI以及USB在内的多种串行通信协议,在视频、音频等方面具有广泛的应用。其256个寄存器分为224个通用寄存器、16个系统寄存器和16个页寄存器。其中16个页寄存器对应64页,可通过改变当前页来切换不同功能的16个页寄存器。

1.2 ST9+系列单片机对I2C总线的支持

  ST9+支持2种模式的I2C总线,包括100 kHz的标准I2C模式和400 kHz的快速I2C模式。同时ST9+系列单片机也支持7位和10位2种长度的地址码,并采用DMA的方式使对单片机处理时间的占用降到最小。除此之外,ST9+为支持I2C总线协议还具备以下特征:内部并行总线与I2C串行总线的转换、总线上多主器件的支持和接收或者发送标志产生、发送或接收数据完毕标志产生、发送过程中错误检测以及支持错误发生后产生中断等。

  针对主器件模式,ST9+系列单片机还增加了总线时钟产生、总线忙标志产生、开始位标志检测、总线仲裁丢失标志产生以及开始和结束标志产生等特征。而针对从设备,ST9+也有相关特征支持,包括有停止位标志检测、设备地址编程、发送错误检测、数据发送或接收完毕标志产生和开始或结束错位检测等特征。

  ST9+系列单片机中实现I2C总线协议的寄存器共有16个,如图2所示。其中初始化寄存器6个,包括I2C自地址寄存器I2COAR1和I2COAR2、地址调用寄存器I2CADR、时钟控制寄存器I2CCCR和I2CECCR以及控制寄存器I2CCR;数据发送和接收寄存器4个,包括数据寄存器I2CDR、控制寄存器I2CCR、状态寄存器I2CSR1和I2CSR2;I2C相关中断和DMA寄存器7个,包括中断状态寄存器I2CISR、中断掩码寄存器I2CIMR、中断向量寄存器I2CIVR、接收DMA地址指针寄存器I2CRDAP、接收DMA事务计数寄存器I2CRDC、发送DMA地址指针寄存器I2CTDAP以及发送DMA事务计数寄存器I2CTDA。这16个寄存器均为页寄存器,并放在同一页中。

  以上寄存器中,数据寄存器I2CDR、控制寄存器I2CCR、状态寄存器I2CSR1和I2CSR2是最基本的4个寄存器,通过这4个寄存器的设置可以实现基本的发送和接收数据的功能。这4个寄存器的具体情况如图3、4、5所示。

  PE为外设使能位,ENGC为从设备模式使能位,START为开始标志使能位,ACK为响应使能位,STOP为结束标志使能位,ITE为中断使能位。

  EVF为事件标志位,ADD10为10位长度地址位,TRA为区别发送或接收状态位,BUSY为总线忙标志位,BTF为数据传输结束标志位,ADSL为从设备地址匹配标志位,M/SL为区别主从设备位,SB为开始标志位。

ADDTX为地址应答标志位,AF为应答失败标志位,STOPF为从设备检测到停止标志位,ARLO为总线仲裁丢失标志位,BERR为总线忙错误标志位,GCAL为普通地址调用匹配标志位。

    I2C数据寄存器I2CDR为存放待发数据或接收到数据的缓冲区,在下一个要发送或者接收的字节数据到来之前必须清空。

2 程序实现

2.1 编译工具

  ST9+系列单片机I2C总线协议驱动程序采用ANSI C语言编写,使用GNU组织的GCC编译器编译、链接生成所需要的十六进制文件。

  GCC编译器是自由软件组织发布的多平台支持的C语言编译器,ST9+系列单片机编程使用的GCC9版本,包括了用于C语言编译的CC9、用于汇编语言编译的GAS9、用于链接的LD9和宏汇编解释器TR9等模块。图 6 为GCC9编译、链接流程图。

2.2 程序设计及流程

  为了实现简单的数据发送和接收功能,定义以下几个函数:对I2C主要寄存器初始化的I2C_INIT函数、发送数据的I2C_TX函数、接收数据的I2C_RX函数、发送从设备地址的I2C_SEND_DEVICEID函数以及开始标志I2C_START函数和结束标志I2C_STOP函数。

  I2C_INIT函数中主要完成I2C控制寄存器I2CCR的设置。I2C数据寄存器I2CDR的清空以及I2C时钟寄存器I2CCCR的I2C工作频率设置等工作,以选择所需要的I2C工作模式。I2C_START函数中主要完成对I2C控制寄存器I2CCR的START位的置位,并等待I2C状态寄存器I2CSR1的START标志位被系统置位。I2C_STOP函数中主要完成对I2C控制寄存器I2CCR的STOP位的置位,以允许当数据发送完毕后系统对I2C状态寄存器I2CSR1的STOP标志位置位。I2C_TX函数则是把需要发送的数据放入I2C数据寄存器I2CDR中发送,并在系统对I2C状态寄存器I2CSR1的BTF标志位置位后退出此函数。同理,I2C_RX函数则从I2C数据寄存器I2CDR中取出通过I2C总线接收到的数据,在系统对I2C状态寄存器I2CSR1的BTF标志位置位后退出此函数。I2C_SEND_DEVICEID函数目的在于发送从设备地址,并决定是接收数据还是发送数据。

    图7为I2C发送、接收程序流程图。

3 结 论

  ST9+系列单片机能够很好地支持I2C总线协议,可以实现I2C总线协议规定的全部功能和要求,并且在其上实现I2C总线协议驱动程序简单、直观和高效。在使用了大量I2C器件的单片机系统中,可以选用意法半导体公司的ST9+系列单片机作为其核心器件。

关键字:系列  单片机  实现

编辑: 引用地址:http://www.eeworld.com.cn/gykz/qrsxt/200605/4067.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
系列
单片机
实现

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved