电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章FPGA基于CPLD的系统中I2C总线的设计

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

11-20 16:14:01 | http://www.5idzw.com | FPGA | 人气:787
标签:fpga是什么,fpga教程,fpga培训,http://www.5idzw.com 基于CPLD的系统中I2C总线的设计,http://www.5idzw.com
end if

等所有的初始化数据传输完毕后即产生停止信号,过程与上面相类似,在此省略。

2.2.2 数据转换过程

数据转换过程采用移位传输,传输8位之后即进入应答状态。

when shift=>

if cnt=“010000” then ——cnt为clk脉冲计数,由

实际的时钟频率决定cnt的值

COUNT<=COUNT+“0001” ——COUNT为数据移位个

数计数MSR为移位寄存器

MSR<=MSR6 downto 0&txtag

txtag<=‘0'

if COUNT=“1000” then

my_states<=ack

TACK<=‘1' ——TACK为应答标志位

else

SDA<=MSR7

my_states<=shift

TACK<=‘0'

end if

end if

图4 数据传输仿真波形 图5 SDA非应答时的仿真波形

2.2.3 数据输入

一般情况下,I2C总线传输的数据要由外部ROM或其它专门的数据存储区来存储,但在数据相对固定且数据量不是很大的情况下,可以将初始化的数据写在程序中,这样可减少频繁的数据交换,简化操作。AD9883的初始化数据就属于这种情况,可以通过检测应答信号来改变输入的值。程序如下:

PROCESSclk ——数据输入

if clk'event and clk=‘1' then

CASE ackint IS ——ackint为应答计数,每应答

一次,输入改变一次

when “00000”=> DATAIN<=“10000000”

when “00001”=> DATAIN<=“01010010”

when “00010”=> DATAIN<=“11010000”

……

when “10010”=> DATAIN<=“00000000”

when “10011”=> DATAIN<=“00000000”

when others=> DATAIN<=“ZZZZZZZZ”

END CASE

end if

2.3 仿真结果

把自主开发的IP核置于MAX+PLUS II 10.0开发环境下,选用EPM3128ATC100-10器件,经过编译、调试与仿真,证明该程序符合设计要求。图4是模拟产生开始信号并传输两组二进制数据“10011001”和“10101010”(十进制表示为153和170)的仿真波形。图5是传输数据“10011001”后没有应答时的仿真结果,此时总线处于暂停状态。

仿真完成后,通过编程电缆将pof文件下载到实际电路的EPM3128ATC100-10中,然后对AD9883进行初始化,结果工作正常,这进一步验证了采用该自主开发的IP核完全可满足I2C总线的时序要求,能实现I2C总线的功能。

上一页  [1] [2] 

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