基于CPLD的系统中I2C总线的设计
[11-20 16:14:01] 来源:http://www.88dzw.com FPGA 阅读:8787次
文章摘要:可见该I2C总线模型如下:单主操作,只实现简单的写和读操作(亦可只有写操作,只是硬件调试的时候会麻烦些),写地址连续,没有竞争和仲裁,是很简单的I2C总线系统。由此设计了如图3所示的IP核。其中,RESET为复位信号,CLK为系统时钟。 为了软件仿真方便,把双向数据线SDA用分离的两条线模拟:SDA为数据输出,SDAACK为SDA的应答信号。软件仿真成功后,只要把SDA设置为双向,稍微修改一下程序就可以向CPLD器件下载,进行实际应用。 对AD9883内部地址连续的寄存器进行初始化,I2C总线上传输的时序信号依次为:开始信号(S);从器件地址和写操作位(SLAW);内部寄存器基地址(Base
基于CPLD的系统中I2C总线的设计,标签:fpga是什么,fpga教程,http://www.88dzw.com可见该I2C总线模型如下:单主操作,只实现简单的写和读操作(亦可只有写操作,只是硬件调试的时候会麻烦些),写地址连续,没有竞争和仲裁,是很简单的I2C总线系统。由此设计了如图3所示的IP核。其中,RESET为复位信号,CLK为系统时钟。
为了软件仿真方便,把双向数据线SDA用分离的两条线模拟:SDA为数据输出,SDAACK为SDA的应答信号。软件仿真成功后,只要把SDA设置为双向,稍微修改一下程序就可以向CPLD器件下载,进行实际应用。
对AD9883内部地址连续的寄存器进行初始化,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 startshiftack
signal my_states states
下面给出部分进程的源代码以供参考。
2.2.1开始信号的产生
PROCESSclk
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
等所有的初始化数据传输完毕后即产生停止信号,过程与上面相类似,在此省略。
2.2.2 数据转换过程
数据转换过程采用移位传输,传输8位之后即进入应答状态。
when shift=>
if cnt=“010000” then ——cnt为clk脉冲计数,由
《基于CPLD的系统中I2C总线的设计》相关文章
- › 基于CPCI总线的多网口卡设计
- › 一种基于CPLD的声发射信号传输系统设计
- › 基于CPLD的臭氧电源控制系统的软硬件设计
- › 基于CPLD/FPGA的CMI编码设计与实现
- › 基于CPLD的压电生物传感器检测电路设计
- › 基于CPLD的CCD信号发生器的研究
- 在百度中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在谷歌中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在soso中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在搜狗中搜索相关文章:基于CPLD的系统中I2C总线的设计