电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 解决方案 | 技术参数
设计应用
电路图 | 技术资料 | 芯片资料 | 技术论坛
  现在位置: 首页 > 设计应用 > 接口/总线/驱动 > 详细信息
接口/总线/驱动:应用McBSP实现I2C总线控制器
来源:   时间: 2007-4-28 4:58:04    

作者Email: dick_ligg@sohu.com

摘 要:提出了在TMS320C6000系列DSP上应用McBSP实现I2C总线接口协议的方法,使DSP可以接入其他需要I2C总线配置的智能器件,系统结构简单,硬件设计容易,资源消耗小。

关键字:I2C总线 GPIO McBSP DSP

1 引 言

TI公司的TMS320C6000[1,2]系列是高性能的DSP,可广泛的用于XDSL、无线基站、数字图像处理等方面。在进行数字图像处理时,通常需要视频解码器诸如SAA7111A之类的模拟视频前端,而大多数的视频解码器进行初始化通常是通过两线的I2C总线接口,但是现在的DSP和MCU大部分都没有I2C总线接口,在这种情况下我们可以应用两个通用的IO线,通过软件的方法来模拟I2C总线的协议,继而完成I2C总线的接口。在TMS320C6000中通常都有两个或两个以上的多通道缓冲串行接口McBSP,McBSP不仅可以配制成串行接口还可以独立的配制成通用的输入(GPI)、输出(GPO)和输入输出端口(GPIO)。

I2C[3]串行总线是用双向数据线(SDA)和串行时钟线(SCL)两根信号线,在连接到该总线的器件之间传送信息。总线上的每个器件均可设置一个唯一地址,然后根据所设的功能进行信息的发送或接收。除了作为发送器和接收器以外,在执行数据传输时,总线的器件还可以设定为主控器和受控器。通常由主控器启动总线上的数据传输,并产生数据传输所需的时钟信号。而被其寻址的其它器件均为受控器,这意味着总线上可连接多个有控制总线的器件。

I2C总线上的数据传输率为100kbit/s,快速方式下可达400kbit/s。连接到总线上的器件数仅受400pF的总线电容的限制。同时,为了避免总线信号的混乱,要求连接到总线上的各器件输出端必须是集电极开路或漏极开路,以便产生“线与”功能。I2C总线上的SDA和SCL线都是双向传输线,它们可通过一个电阻连接到正电源端,当总线处于空闲状态时,两条线均为高电平。

2 硬件设计

I2C总线的硬件设计非常方便,只需要将SDA 和SCL连接即可,在I2C总线上只允许有一个主控器,其余的都是受控器。当节点的个数大于了400pF的限制时,可以通过总线驱动器如82B715来进行总线扩展。连接见图1

3 软件设计

3.1 McBSP的配置

I2C总线应用McBSP的两个管脚,首先禁用McBSP功能以便将McBSP的管脚配制成GPI、GPO、GPIO。本文应用McBSP0的CLKX0作为I2C总线的SCL,FSX0作为I2C总线的SDA,McBSP的DX,DR,通常不能配置成I2C的SDA,因为SDA是双向的,而DX,DR只能配制成单一的输入或输出。

配置代码如下:

McBSP0_SPCR=0x00000000;//McBSP0 发送和接收复位
McBSP0_PCR=0x00003F00;// McBSP0的所有的管脚都配置为GPIO,CLKX0和FSX0为输出
对于主机来说SCL总是输出,所以它的方向是保持不变的,SCL应该输出0,1作为接口的时钟,为了实现此功能我们定义一个宏(MACROS):SET_SCLHI( ) SET_SCLLO( )
#define Set_SCLHi( ) McBSP0_SPSA = PCR; McBSP0_SPSA = 0x00000002
#define Set_SCLLo( ) McBSP0_SPSA = PCR; McBSP0_SPSA &= 0Xfffffffd
I2C总线的数据线SDA当写的时候是输入,读的时候是输出。为了改变SDA的方向可以定义Set_SDADirOut( ) Set_SDADirIn( )
#define Set_SDADirOut( ) McBSP0_SPSA = PCR; McBSP0_SPSA = 0x00000800
#define Set_SDADirIn( ) McBSP0_SPSA = PCR; McBSP0_SPSA &= 0xFFFFF7FF
SDA应该依照数据位的0,1来变化,为了输出1,0定义Set_SDAHi( ) Set_SDALo( )
#define Set_SDAHi( ) McBSP0_SPSA = PCR; McBSP0_SPSA = 0x00000008
#define Set_SDALo( ) McBSP0_SPSA = PCR; McBSP0_SPSA &= 0xFFFFFFF7
定义好之后可以模拟I2C总线的协议进行传送,例如在SAA7111A上的I2C总线接口是用来对SAA7111A进行初始化用的,SCL的频率可以从0到400KHZ,为了控制SCL的频率可以应用DSP的TIMER0来控制。
当CPU为100MHZ时:
TCR = 0x00000010; // 停止 TIMER0 and TDDR=0
PRD = 6249; // TIMER0 rate = CPU-Frequency/(PDR+1) = 100MHz/6250 = 16kHz
...
TCR &= 0xFFFFFFEF; // 开始 TIMER0

3.2 I2C总线协议编程

3.2.1 I2C总线协议读写数据流的编程

为了进行I2C总线的通讯,我们选用每位数据流4帧(FRAMES),以便延迟和噪声干扰最小,4帧每位的数据流保证了SDA不会变化在SCL的边沿处,仅仅允许数据变化在FRAME0,读仅在FRAME2。如图2所示

I2C总线的写程序如下

void I2CWrite(unsigned int WriteBit)
{Set_SDADirOut( ); // 设置SDA为输出
switch(FrameCount)
{
case(0): // 起始帧
Set_SCLLo( ); // SCL 为 0
if (WriteBit == 0) // SDA = WriteBit
Set_SDALo( );
else
Set_SDAHi( );
break;
case(3): // 第4帧
Set_SCLLo( ); //
break;
default: // 在第2,3帧
Set_SCLHi( ); // SCL 为 1
}
FrameCount += 1; // 帧计数
if (FrameCount > 3)
{
FrameCount = 0;
BitIndex = (BitIndex >> 1); } // 准备下一个发送位
}
I2C总线的读程序与写程序很类似,只需要改变SDA为输入即可。

3.2.2 I2C总线的开始位和停止位的编程

I2C总线的开始位和停止位有3帧产生,在I2C总线传输过程中,仅当总线空闲(SCL线和SDA线均为高电平)时,数据传送才能开始,此时总线上的任何器件均可以控制总线。其中当SCL线为高电平且SDA线由高变低时为开始条件;而当SCL线为高电平且SDA线由低变高时为结束条件。如图3所示


开始位:
void I2CSTA ( )
{ // I2C 开始位
Set_SDADirOut ( );//定义SDA为输出
switch ( FrameCount )
{
case (1): // 第2帧
Set_SCLHi ( );
Set_SDALo( );
break;
case (2): // 第三帧
Set_SCLLo ( );
Set_SDALo( );
break;
default: // 第一帧
Set_SCLHi ( );
Set_SDAHi ( );
}
FrameCount += 1; // 帧计数
if ( FrameCount > 2 )
{
FrameCount = 0;
BitIndex = 0x0080; } // 定义的低8位
}
停止位的编程方法只需要按照上面所说的将SCL线为高电平且SDA线由低变高即可。
3.2.3 I2C总线的数据格式

起始位 受控器件地址 读写控制位0/1 应答位 数据 应答位 … 停止位

I2C总线数据传输格式[3]如图4。其中第一部分为数据传输起始信号,即由此开始进行数据传送;第二部分为受控器地址,用来选择向哪个受控器传送数据;第三部分为读/写控制位,用于指示受控器的工作方式,0表示写,1表示读;第四部分是被主控器选中的受控器向主控器回传的确认信号;第五部分是所传送的数据,每传送一个字节数据,都要求有一个应答位;第六部分是数据传输的结束信号。每个具有I2C总线接口的受控器件都有唯一固定的地址,当主控器发送数据时,I2C总线上挂接的受控器件都会将主控器发出的、位于起始信号后的8位地址信息与自己的地址进行比较,如果两者相同,则认为该受控器件被选中,然后按照读/写位规定的工作方式接收或发送数据。可以应用上面的程序来按照I2C总线的数据格式进行数据传送。

4 结论

应用DSP的McBSP来设计I2C总线接口,硬件接口简单,调试方便,并且可以节省硬件的花费,此方法已经应用在基于DSP的图像匹配机中,方法可行,并运行可靠。



相关信息
发表评论
打印本页 关闭本页
基于TMS320C60000 DSP的视频解码器设计及其硬件实现方案
    摘要:一种基于TMS320C6000   DPS芯片的视频解码器的设计。该解码器能脱离计算机而独立运行,且能高效实时地实现视频解码功能。因系统需要软件和硬件协同工作,故硬件实现分两步进行,以确保软件的可靠性。  关键词:DSP   视频 解码器 PLD   图像的编/解码系统有两种基本的实现方法,一种是基于微机实现,图像处理系统通过PCI总线以插卡形式集成在微机系统中,数据通过PCI总...
>>详细内容
基于TMS320C60000 DSP的视频解码器设计及其硬件实现方案
    摘要:一种基于TMS320C6000   DPS芯片的视频解码器的设计。该解码器能脱离计算机而独立运行,且能高效实时地实现视频解码功能。因系统需要软件和硬件协同工作,故硬件实现分两步进行,以确保软件的可靠性。  关键词:DSP   视频 解码器 PLD   图像的编/解码系统有两种基本的实现方法,一种是基于微机实现,图像处理系统通过PCI总线以插卡形式集成在微机系统中,数据通过PCI总...
>>详细内容
TMS320C6000系列带中断向量表的二次Bootloader的设计与实现
  引 言 随着DSP(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的Boot-loader通过Flash存储器来引导DSP程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。 系统上电后,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储...
>>详细内容
TMS320C6000系列DSP的Flash启动设计
  引 言 随着近年来数字信号处理器(DSP)技术的迅猛发展,其越来越广泛地应用于国民经济的各个领域中。其中,TI公司推出的TMS320C6000系列DSP器件更是在许多需要进行大量数字信号处理运算并兼顾高实时性要求的场合得以应用。TMS320C6000系列DSP的系统设计过程中,DSP器件的启动加载设计是较难解决的问题之一。 C6000系列DSP的启动加载方式包括不加载、主机加载和EMIF加载3种。 3种加载方...
>>详细内容
TMS320C6000系列DSP维特比译码程序优化设计
  卷积码因为其编码器简单、编码增益高以及具有很强的纠正随机错误的能力,在通信系统中得到了广泛的应用。基于最大似然准则的维特比算法(VA)是在加性高斯白噪声(AWGN)信道下性能最佳的卷积码译码算法,也是常用的一种算法。 一般来说,实现软判决维特比译码可以有三种方案供选择:专用集成电路(ASIC)芯片、可编程逻辑阵列(FPGA)芯片以及数字信号处理器(DSP)芯片。参考文献[3]对这...
>>详细内容
TMS320C6000系列DSP的软件优化技术
  1 DSP系统的软件优化流程 DSP系统的软件优化流程如图1所示。整个工作流程分为3个阶段: 第1阶段,直接根据需要用高级C语言实现DSP功能,测试代码的正确性。然后,移植到C6X平台,利用C6X开发环境Profile测试程序的运行时间。若不满足要求,则进入下一阶段。 第2阶段,利用C6X提供的优化方式和其他各种优化技巧,如使用不同的编译器选项使能软件流水,循环展开,字存...
>>详细内容
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com