主机和从机应答位及代码实现:
在时钟高电平期间判断sda的输入0:应答,1:非应答,硬件上SCL和SDA的上拉,如若总线上没有设备,或者没有主机的点名要的设备,这时检测到的就是高电平。
主机检测应答位代码:
whenx"11"=>-- waiting for acknowledge
sda_link<='0';
if(div_cnt =freq_3) then isAck <= sda; end if;--读入应答位
if(div_cnt = 10#0#) then rscl <='0';
elsif div_cnt = freq_2 then rscl<='1'; end if;
if(div_cnt = freq -1) then div_cnt<=(others =>'0');
i<=i+1;
else div_cnt <= div_cnt+1;
end if;