首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   应用McBSP实现I2C总线控制器      ★★★ 【字体: 】  
应用McBSP实现I2C总线控制器
收集整理:佚名    来源:本站整理  时间:2009-01-10 23:47:35   点击数:[]    

[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.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线均为高电平)时,数据传送才能开始,此时总线上的任何器件均

[1] [2]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:采用USBN9602的数据采集系统设计

  • 下一篇文章:高集成度TYPEA读写器芯片MFRC500及其应用
  • 返回上一页】【打 印】【关闭窗口
    中查找“应用McBSP实现I2C总线控制器”更多相关内容 5VAR论文频道
    中查找“应用McBSP实现I2C总线控制器”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››应用McBSP实现I2C总线控制器
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .