?? i2c在cpld上的模擬實現(xiàn)源程序.c
字號:
//I2C在CPLD上的模擬實現(xiàn)源程序
type clock_type is (s0,s1,s2,s3);
signal state0:clock_type;
signal state1:state_type;
case state is
when s0=>
da<=''1'';
scl<=''1'';
state<=s1;
when s1=>
da<=''1'';
scl<=''1'';
state<=s2;
when s2=>
da<=''0'';
scl<=''1'';
state<=s3;
when s3=>
da<=''0'';
scl<=''0'';
state<=s0;
state1<=s_byte;
when others=>
state<=s0;
end case;
//下面是利用case…when語句編寫的移位及輸入、輸出字節(jié)模塊。
inoutdata:block
signal code:std_logic_vector(2 downto 0);
begin
process(read,endata,cl) //cl與scl同步
begin
code<=read & endata & flag;
if cl''event and cl=''1''then
case code is
when "010" "011" => //從MCU讀入一個要發(fā)送的數(shù)據(jù)
datain<=data;
when "001"=> //8位左移寄存器,將要輸出的位存于data7
data7<=datain(7);
datain(0)<=''1'';
for i in 1 to 7 loop
datain(i)<=datain(i-1);
end loop;
when "101"=> //將向MCU發(fā)送的數(shù)據(jù)暫存于dataout
dataout<=data1;
when "100"=> //8位右移寄存器,data0為從SDA接收的值
data1(0)<=data0;
for i in 1 to 7 loop
data1(i)<=data1(i-1);
end loop;
when others=>
null;
end case;
end if;
end process;
end block inoutdata;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -