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

基于CPLD的系统中I2C总线的设计


总线模型如下:单主操作,只实现简单的写和读操作(亦可只有写操作,只是硬件调试的时候会麻烦些),写地址连续,没有竞争和仲裁,是很简单的I2C总线系统。由此设计了如图3所示的IP核。其中,RESET为复位信号,CLK为系统时钟。

为了软件仿真方便,把双向数据线SDA用分离的两条线模拟:SDA为数据输出,SDAACK为SDA的应答信号。软件仿真成功后,只要把SDA设置为双向,稍微修改一下程序就可以向CPLD器件下载,进行实际应用。

对AD

9883内部地址连续的寄存器进行初始化,I2C总线上传输的时序信号依次为:开始信号(S);从器件地址和写操作位(SLAW);内部寄存器基地址(Base Address);写入基地址的数据(Data0);写入下一地址(Base Address+1)的数据(Data1);写入地址(Base Address+2)的数据(Data2);……;写入地址(Base Address+18)的数据(Data18);停止信号(P)。

针对AD9883,如果电路中的A0引脚?55#?接电源,则SLAW=“10011001”;Base Address=“00000001”,Data0~Data18是依据实际需要写入的初始化数据。

2.2 IP核程序的编写

整个程序用VHDL语言编制,SCL输出时钟的设计是基于CLK输入时钟的64分频的。程序由三个状态组成:开始(START)、转换(SHIFT)和应答(ACK)。状态定义如下:

type states is ?start?shift?ack??

signal my_states ?states?

下面给出部分进程的源代码以供参考。

2.2.1开始信号的产生

PROCESS?clk?

if clk’event and clk=‘1’ then

TWCR<=DATAIN?

SCL<=‘1’?

else

TWCR<=?others=>‘0’??

end if?

if TWCR=“10000000” then ——比较寄存器TWCR的开始

值设置(由用户决定)

STRB<=‘1’?

end if?

if STRB=‘1’ then ——开始条件

INT<=INT+“000001”? ——INT为时钟脉冲计数

if INT<=“011000” then ——产生SDA的下降沿

SDA<=‘1’?

else

SDA<=‘0’?

end if?

if INT>=“011110” then ——STRB归0,保证只产生

一次开始信号

STRB <=‘0’?

INT<=“000000”?

end if?

end if?

等所

《基于CPLD的系统中I2C总线的设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/161189.html

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