📄 i2c.vhd
字号:
IF (phase3 = '1') THEN
sda_buf <= '1';
link <= '1';
inner_state <= third;
END IF;
WHEN third =>
IF (phase3 = '1') THEN
sda_buf <= '0';
link <= '1';
inner_state <= fourth;
END IF;
WHEN fourth =>
IF (phase3 = '1') THEN
sda_buf <= '0';
link <= '1';
inner_state <= fifth;
END IF;
WHEN fifth =>
IF (phase3 = '1') THEN
sda_buf <= '0';
link <= '1';
inner_state <= sixth;
END IF;
WHEN sixth =>
IF (phase3 = '1') THEN
sda_buf <= '0';
link <= '1';
inner_state <= seventh;
END IF;
WHEN seventh =>
IF (phase3 = '1') THEN
sda_buf <= '0';
link <= '1';
inner_state <= eighth;
END IF;
WHEN eighth =>
IF (phase3 = '1') THEN
link <= '0';
inner_state <= ack;
END IF;
WHEN ack =>
IF (phase0 = '1') THEN
sda_buf <= sda;
END IF;
IF (phase1 = '1') THEN
IF (sda_buf = '1') THEN
main_state <= "00";
END IF;
END IF;
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(7);
inner_state <= first;
i2c_state <= sendaddr;
END IF;
WHEN OTHERS =>
NULL;
END CASE;
WHEN sendaddr => --送相应字节的地址
CASE inner_state IS
WHEN first =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(6);
inner_state <= second;
END IF;
WHEN second =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(5);
inner_state <= third;
END IF;
WHEN third =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(4);
inner_state <= fourth;
END IF;
WHEN fourth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(3);
inner_state <= fifth;
END IF;
WHEN fifth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(2);
inner_state <= sixth;
END IF;
WHEN sixth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(1);
inner_state <= seventh;
END IF;
WHEN seventh =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= addr(0);
inner_state <= eighth;
END IF;
WHEN eighth =>
IF (phase3 = '1') THEN
link <= '0';
inner_state <= ack;
END IF;
WHEN ack =>
IF (phase0 = '1') THEN
sda_buf <= sda;
END IF;
IF (phase1 = '1') THEN
IF (sda_buf = '1') THEN
main_state <= "00";
END IF;
END IF;
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(7);
inner_state <= first;
i2c_state <= write_data;
END IF;
WHEN OTHERS =>
NULL;
END CASE;
WHEN write_data => ---写入数据
CASE inner_state IS
WHEN first =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(6);
inner_state <= second;
END IF;
WHEN second =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(5);
inner_state <= third;
END IF;
WHEN third =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(4);
inner_state <= fourth;
END IF;
WHEN fourth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(3);
inner_state <= fifth;
END IF;
WHEN fifth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(2);
inner_state <= sixth;
END IF;
WHEN sixth =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(1);
inner_state <= seventh;
END IF;
WHEN seventh =>
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= writeData_reg(0);
inner_state <= eighth;
END IF;
WHEN eighth =>
IF (phase3 = '1') THEN
link <= '0';
inner_state <= ack;
END IF;
WHEN ack =>
IF (phase0 = '1') THEN
sda_buf <= sda;
END IF;
IF (phase1 = '1') THEN
IF (sda_buf = '1') THEN
main_state <= "00";
END IF;
ELSE
IF (phase3 = '1') THEN
link <= '1';
sda_buf <= '0';
inner_state <= stop;
END IF;
END IF;
WHEN stop =>
IF (phase1 = '1') THEN
sda_buf <= '1';
END IF;
IF (phase3 = '1') THEN
main_state <= "00";
END IF;
WHEN OTHERS =>
NULL;
END CASE;
WHEN OTHERS =>
main_state <= "00";
END CASE;
WHEN "10" => --读EEPROM
IF (phase0 = '1') THEN
scl_xhdl1 <= '1';
ELSE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -