基于CPLD的系统中I2C总线的设计
[11-20 16:14:01] 来源:http://www.88dzw.com FPGA 阅读:8787次
文章摘要:实际的时钟频率决定cnt的值 COUNT<=COUNT+“0001” ——COUNT为数据移位个 数计数MSR为移位寄存器 MSR<=MSR6 downto 0&txtag txtag<=‘0' if COUNT=“1000” then my_states<=ack TACK<=‘1' ——TACK为应答标志位 else SDA<=MSR7 my_states<=shift TACK<=‘0' end if end if 图4 数据传输仿真波形 图5 SDA非应答时的仿真波形 2.2.3 数据输入 一般情况下,I2C总线传输的数据要由外部R
基于CPLD的系统中I2C总线的设计,标签:fpga是什么,fpga教程,http://www.88dzw.com实际的时钟频率决定cnt的值
COUNT<=COUNT+“0001” ——COUNT为数据移位个
数计数MSR为移位寄存器
MSR<=MSR6 downto 0&txtag
txtag<=‘0'
if COUNT=“1000” then
my_states<=ack
TACK<=‘1' ——TACK为应答标志位
else
SDA<=MSR7
my_states<=shift
TACK<=‘0'
end if
end if
图4 数据传输仿真波形 图5 SDA非应答时的仿真波形
2.2.3 数据输入
一般情况下,I2C总线传输的数据要由外部ROM或其它专门的数据存储区来存储,但在数据相对固定且数据量不是很大的情况下,可以将初始化的数据写在程序中,这样可减少频繁的数据交换,简化操作。AD9883的初始化数据就属于这种情况,可以通过检测应答信号来改变输入的值。程序如下:
PROCESSclk ——数据输入
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总线的功能。
《基于CPLD的系统中I2C总线的设计》相关文章
- › 基于CPCI总线的多网口卡设计
- › 一种基于CPLD的声发射信号传输系统设计
- › 基于CPLD的臭氧电源控制系统的软硬件设计
- › 基于CPLD/FPGA的CMI编码设计与实现
- › 基于CPLD的压电生物传感器检测电路设计
- › 基于CPLD的CCD信号发生器的研究
- 在百度中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在谷歌中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在soso中搜索相关文章:基于CPLD的系统中I2C总线的设计
- 在搜狗中搜索相关文章:基于CPLD的系统中I2C总线的设计