新闻中心

EEPW首页>嵌入式系统>设计应用> I2C总线驱动在嵌入式系统中的两种实现

I2C总线驱动在嵌入式系统中的两种实现

作者: 时间:2013-04-09 来源:网络 收藏

3.2 以GPIO端口模拟实现

此方法是直接用ARM S3C4510的GPIO(GeneralPurpose Input/Output)引脚模拟总线的时序来实现数据传输。S3C4510B提供了18个可编程的通用I/O端口,用户可将每个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄存器IOPMOD和IOPCON控制。

控制I/O口的特殊功能寄存器一共有3个:IOP-MOD,I0PCON和IOPDATA。I/O口模式寄存器(IOP-MOD)用于配置P17~P0的输入输出状态;I/O口控制寄存器IOPCON用于配置端口P8~P17的特殊功能,当这些端口用作特殊功能(如外部中断请求、外部中断请求应答、外部DMA请求或应答、定时器溢出)时,其工作模式由10PCON寄存器控制,而不再由IOPMOD寄存器;I/O口数据寄存器(IOPDATA)当配置为输入模式时,读取I/O口数据寄存器IOPDATA的每一位对应输入状态,当配置为输出模式时,写每一位对应输出状态。位[17:O]对应于18个I/0引脚P17~P0。

下面用GPIO的pin[O][1]脚进行模拟,其中低位为SDA,高位为SCL。首先给出一些便于操作的宏定义:


3.3 应用实例

为ARM外挂PCF8563实现实时时钟控制。PCF8563是PHILIPS公司生产的具有I2C接口的低功耗CM()S实时时钟/日历芯片。其最大总线速度为400kb/s,每次读写数据后,其内嵌的字地址寄存器器会自动产生增量。下面用模拟实现PCF8563的I2C实时时钟芯片的操作,有字节写/读两种状态,程序中从地址的读地址为0A3H,写地址为0A2H。

首先使能I2C总线,然后对I2C总线进行开始操作,就绪之后,依次写人器件地址(即0xA2),写入寄存器地址,再写人所设寄存器值。控制/状态寄存器1为0,控制/状态寄存器2为0,秒寄存器为30,分钟寄存器45,小时寄存器为17,日寄存器为20,星期寄存器为0,月/世纪寄存器为88,年寄存器为6(即2006年8月20日17点45分30秒)。当程序运行一段时间(15分钟)后,依次读取寄存器,得到时间为2006年8月20日18点OO分30秒。

4 总 结

本文给出了两种I2C驱动的实现方法。前者直接利用主机端自带的I2C总线控制器,通过配置一系列特殊寄存器实现I2C总线传输。这种方式适用于一些本身包含I2C总线控制器的芯片,实现起来简单方便。后者则适用于主机端没有I2C控制器的情况。此时主机端只要有GPIO端口,就可利用其实现同样的功能。在基于ARM加μClinux的嵌入式视频监控产品中,同时将这两种方法做了具体的运用。其一的示例就是通过模拟的I2C总线,挂接PCF8563实时时钟芯片,并取得很好的实时效果。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭