保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

应用McBSP实现I2C总线控制器


= 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,读仅在FR

AME2。如图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总线接口的受控器件都有唯一固定的地址,当主控器发送数据

《应用McBSP实现I2C总线控制器(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/152172.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。