亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c_master.vhd

?? I2C program (Inter IC bus)
?? VHD
字號:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity I2C_Master is
    Port ( clk  : in std_logic;
           rst  : in std_logic;
           sda  : inout std_logic;
           scl  : inout std_logic;
           temp_scl  : out std_logic;
           temp_sda  : out std_logic;
           busy : out bit;
           cmd  : in std_logic_vector(1 downto 0);
           add  : in std_logic_vector(7 downto 0);
           data : out std_logic_vector(7 downto 0));
end I2C_Master;

architecture Behavioral of I2C_Master is

type state_type is (			-- state definitions
				s_rst,s_init_rtc_rd,s_init_rtc_wr,		-- reset state
				s_idl,s_start,s_stop,s_write,s_read,s_writebyte,s_readbyte);--,s_write_rtc);
signal state: state_type; -- pointer to the state declaration

signal state_reg : integer range 0 to 6; -- State register is used to indicate State Status ie. Idl,Writebyte & Readbyte
signal opg_reg   : integer range 0 to 6; -- operation reg is to assign diff call's in Writebyte & Readbyt 
signal cmd_reg   : integer range 0 to 10;
--signal write_rtc_reg   : integer range 0 to 10;

signal s_clk : std_logic; 
signal wr_ack : std_logic; 
signal count: std_logic_vector(20 downto 0);	  -- count is used to reduce the system frequency

signal temp_data,temp_add,temp : std_logic_vector(7 downto 0);	  -- temp_data & temp_add is used to pass data & address to RTC
--signal temp_cmd : std_logic_vector(1 downto 0);	  -- temp_cmd is used to pass Command to RTC

signal delay_cnt: integer range 0 to 50;
signal i: integer range 0 to 10;
signal ack : bit; 

begin
temp_scl <= scl;
temp_sda <= sda;
P1:	process(rst,clk)	--clk divider process
	begin
		if (rst = '1') then
			count <= (others => '0'); 
			s_clk<='0';
		elsif (clk'event and clk = '1') then
			--p_scl <= scl;
			--	if(scl = '0')then
			--	temp_scl <= '0';
			--	else
			--	temp_scl <= '1';
			--	end if;
			if (count = "000000000000110100000") then     -- counter has been set to divide the frequency by 65K
				count <= (others => '0');
				s_clk <= '1';
			else
				count <= count + '1';
				s_clk <='0';
			end if;
		end if;
end process;

P2:	process(rst,s_clk)	
	begin
		if(rst = '1')then
			state <= s_rst;
			scl <= 'Z';								    
			sda <= 'Z';
			cmd_reg <= 0;
			delay_cnt <= 0;
			i <= 0;
			state_reg <= 0;
			opg_reg <= 0;
			--write_rtc_reg <= 0;
			delay_cnt <= 0;
			busy <= '0';
			data <= (others => '0');
			temp_data <= (others => '0');
			temp_add  <= (others => '0');
		elsif s_clk'event and s_clk = '1' then
			case state is
				when s_rst =>
					sda <= '0';
					scl <= '0';
					wr_ack <= '1';
					cmd_reg <= 0;
					delay_cnt <= 0;
					i <= 0;
					state_reg <= 0;
					opg_reg <= 0;
					--write_rtc_reg <= 0;
					busy <= '0';
					temp_data <= (others => '0');
					temp_add  <= (others => '0');
					--data <= (others => '1');
					state <= s_init_rtc_rd;
					--state <= s_idl;
 				when s_init_rtc_rd =>
 					sda <= 'Z';
					scl <= 'Z';
					delay_cnt <= 0;
					wr_ack <= '1';
					i <= 0;
					cmd_reg <= 0;
					state_reg <= 5;
					opg_reg <= 0;
					--temp_data <= X"04";
					--temp_data <= data;
					--data <= "00000100";
					temp <= temp_data and "00111000";
					temp_add  <= "00000000";
					busy <= '1';
					state <= s_readbyte;
 				when s_init_rtc_wr =>
 					sda <= 'Z';
					scl <= 'Z';
					delay_cnt <= 0;
					wr_ack <= '1';
					i <= 0;
					cmd_reg <= 0;
					state_reg <= 4;
					opg_reg <= 0;
					--temp_data <= X"04";
					--temp_data <="00000100";
					--data <= "00000100";
					temp <= temp_data and "00111000";
					temp_add  <= "00000000";
					busy <= '1';
					state <= s_writebyte;

				when s_idl=>
					sda <= 'Z';
					scl <= 'Z';
					delay_cnt <= 0;
					wr_ack <= '0';
					i <= 0;
					cmd_reg <= 0;
					state_reg <= 1;
					opg_reg <= 0;
					--write_rtc_reg <= 0;
					if(cmd = "01")then				 ------ Call to RTC_Writebyte
						--temp_data <= data;
						temp_data <= "00100010";
						--temp <= data;
						temp <= "00100101";
						temp_add  <= add;
						busy <= '1';
						state <= s_writebyte;
					elsif(cmd = "10")then				 ------ Call to RTC_Readbyte
						temp_data <= (others => '0');
						--data <= X"00";
						data <= "00000000";
						temp_add  <= add;
						busy <= '1';
						state <= s_readbyte;
					elsif(cmd = "11")then
						temp_data <= (others => '0');
						temp_add  <= (others => '0');
						busy <= '1';
						state <= s_rst;
					else				
						temp_data <= (others => '0');
						temp_add  <= (others => '0');
						busy <= '0';
						state <= s_idl;
					end if;

				when s_start =>
					busy <= '1';
					i <= 0;
					if(cmd_reg = 0)then
						sda <= 'Z';
						scl <= 'Z';
						state <= s_start;
						if(delay_cnt >= 40)then
							delay_cnt <= 0;
							cmd_reg <= cmd_reg + 1;
						else
							delay_cnt <= delay_cnt + 1;
							cmd_reg <= cmd_reg;
						end if;
					 elsif(cmd_reg = 1)then
						sda <= '0';
						scl <= 'Z';
						state <= s_start;
						if(delay_cnt >= 40)then
							delay_cnt <= 0;
							cmd_reg <= cmd_reg + 1;
						else
							delay_cnt <= delay_cnt + 1;
							cmd_reg <= cmd_reg;
						end if;
					 elsif(cmd_reg = 2)then
						sda <= '0';
						scl <= '0';
						state <= s_start;
						if(delay_cnt >= 40)then
							delay_cnt <= 0;
							cmd_reg <= cmd_reg + 1;
						else
							delay_cnt <= delay_cnt + 1;
							cmd_reg <= cmd_reg;
						end if;
					 else
						sda <= '0';
						scl <= '0';
						cmd_reg <= 0;
						if(state_reg = 2) then
							state <= s_writebyte;
						elsif(state_reg = 3) then
							state <= s_readbyte;
						else
							state <= s_idl;
						end if;
					 end if;
									
				when s_stop =>
					if(cmd_reg = 0)then
						busy <= '1';
						sda <= '0';
						scl <= '0';
						state <= s_stop;
						if(delay_cnt >= 40) then
							delay_cnt <= 0;
							cmd_reg <= cmd_reg + 1;
						else
							delay_cnt <= delay_cnt + 1;
							cmd_reg <= cmd_reg;
						end if;
					 elsif(cmd_reg = 1)	then
						busy <= '1';
						sda <= '0';
						scl <= 'Z';
						state <= s_stop;
						if(delay_cnt >= 40) then
							delay_cnt <= 0;
							cmd_reg <= cmd_reg + 1;
						else
							delay_cnt <= delay_cnt + 1;
							cmd_reg <= cmd_reg;
						end if;
					 else 				--if(cmd_reg = 2)
						busy <= '0';
						sda <= 'Z';
						scl <= 'Z';
						if(cmd = "00")then
							cmd_reg <= 0;
							state <= s_idl;
						else
							state <= s_stop;
							cmd_reg <= cmd_reg;
						end if;
					 end if;
									
				when s_write =>
					busy <= '1';
					case cmd_reg is
						when 0 =>
							i <= 0;
							cmd_reg <= cmd_reg + 1;
							state <= s_write;
						when 1 =>
--							sda <= temp_data(7 - i);	
							if(temp_data(7 - i) = '1')THEN
								sda <= 'Z';
							else
								sda <= '0';
							end if; 
							if(delay_cnt >= 40) then
								delay_cnt <= 0;
								cmd_reg <= cmd_reg + 1;
						  		state <= s_write;
							else
								delay_cnt <= delay_cnt + 1;
								cmd_reg <= cmd_reg;
							end if;
						when 2 =>
							sda <= sda;
							scl <= 'Z';
							if(delay_cnt >= 40) then
								delay_cnt <= 0;
								cmd_reg <= cmd_reg + 1;
						  		state <= s_write;
							else
								delay_cnt <= delay_cnt + 1;
								cmd_reg <= cmd_reg;
							end if;
						when others =>
							scl <= '0';
							if(delay_cnt >= 40) then
								delay_cnt <= 0;
								if(i < 7)then
									sda <= sda;
									cmd_reg <= 1;
									i <= i + 1;
						  			state <= s_write;
								elsif(i = 7)then
									sda <= wr_ack;		  ------------- pass ack or nack
									cmd_reg <= 2;
									i <= i + 1;
						  			state <= s_write;
								else
									sda <= '0';
									cmd_reg <= 0;
									i <= 0;
									if(state_reg = 2) then
										state <= s_writebyte;
									elsif(state_reg = 3) then
										state <= s_readbyte;
									else
										state <= s_idl;
									end if;
--									end if;
							    end if;
							else
								delay_cnt <= delay_cnt + 1;
								cmd_reg <= cmd_reg;
							end if;
						end case;

				when s_read =>
						busy <= '1';
						  case cmd_reg is
							when 0 =>
								i <= 0;
								temp_data <= (others => '0');
								sda <= 'Z';
								scl <= '0';
								if(delay_cnt >= 40)then
									delay_cnt <= 0;
									cmd_reg <= cmd_reg + 1;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
								end if;
						  		state <= s_read;
							when 1 =>
								sda <= 'Z';
								scl <= 'Z';
								if(delay_cnt >= 40)then
									delay_cnt <= 0;
									cmd_reg <= cmd_reg + 1;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
								end if;
						  		state <= s_read;
							when 2 =>
--							when 1 =>
								scl <= 'Z';
--								sda <= 'Z';
								if(sda = '1')	then
--								temp_data(7 - i) <= sda;
								temp_data(7 - i) <= '1';
								else
								temp_data(7 - i) <= '0';
								end if;
								cmd_reg <= cmd_reg + 1;
						  		state <= s_read;
--									data <= temp_data;
							when 3 =>
--							when 2 =>
								scl <= '0';
								temp_data <= temp_data;
								if(i < 7)then
									if(delay_cnt >= 40)then
										delay_cnt <= 0;
										cmd_reg <= 1;
										i <= i + 1;
									else
										delay_cnt <= delay_cnt + 1;
										cmd_reg <= cmd_reg;
										i <= i;
									end if;
						  			state <= s_read;
								else
									i <= 0;
									data <= temp_data;
						  			state <= s_read;
									if(ack = '1')then
										cmd_reg <= 5;
									else
										cmd_reg <= 6;
									end if;
							    end if;

							when 5 =>
								sda <= '0';
								if(delay_cnt >= 40)then
									delay_cnt <= 0;
									cmd_reg <= 7;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
								end if;
						  		state <= s_read;
							when 6 =>
								sda <= 'Z';
								if(delay_cnt >= 40) then
									delay_cnt <= 0;
									cmd_reg <= 7;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
								end if;
						  		state <= s_read;
							when 7 =>
								scl <= 'Z';
								if(delay_cnt >= 40) then
									delay_cnt <= 0;
									cmd_reg <= cmd_reg + 1;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
								end if;
						  		state <= s_read;
							when 8 =>
								scl <= '0';
								if(delay_cnt >= 40) then
									delay_cnt <= 0;
									cmd_reg <= 0;
									if(state_reg = 2) then
										state <= s_writebyte;
									elsif(state_reg = 3) then
										state <= s_readbyte;
									else
										state <= s_idl;
									end if;
								else
									delay_cnt <= delay_cnt + 1;
									cmd_reg <= cmd_reg;
						  			state <= s_read;
								end if;

							when others =>
										null;
							end case;

				when s_writebyte =>
					busy <= '1';
					delay_cnt <= 0;
					i <= 0;
					cmd_reg <= 0;
					state_reg <= 2;
					case opg_reg is
						when 0 =>
							  opg_reg <= opg_reg + 1; 
							  state <= s_start;
						when 1 =>
							  --temp_data <= X"D0";
							  temp_data <= "11010000";
								wr_ack <= 'Z';
							  opg_reg <= opg_reg + 1; 
							  state <= s_write;
						when 2 =>
							  temp_data <= temp_add;
								wr_ack <= 'Z';
							  opg_reg <= opg_reg + 1; 
							  state <= s_write;
						when 3 =>
							  temp_data <= temp;
								wr_ack <= 'Z';
							  opg_reg <= opg_reg + 1; 
							  state <= s_write;
						when others =>
							  state <= s_stop;
					end case;

				when s_readbyte =>
					busy <= '1';
					delay_cnt <= 0;
					i <= 0;
					cmd_reg <= 0;
					state_reg <= 3;
					case opg_reg is
						when 0 =>
							  opg_reg <= opg_reg + 1; 
							  state <= s_start;
						when 1 =>
							  --temp_data <= X"D0";
							  temp_data <= "11010000";
								wr_ack <= 'Z';
							  opg_reg <= opg_reg + 1; 
							  state <= s_write;
						when 2 =>
							  temp_data <= add;
							  opg_reg <= opg_reg + 1; 
								wr_ack <= 'Z';
							  state <= s_write;
						when 3 =>
							  opg_reg <= opg_reg + 1; 
								wr_ack <= 'Z';
							  state <= s_start;
						when 4 =>
							  --temp_data <= X"D1";
							  temp_data <= "11010001";
								wr_ack <= 'Z';
							  opg_reg <= opg_reg + 1; 
							  state <= s_write;
						when 5 =>
							  ack <= '0';	
							  temp_data <= (others => '0');
							  opg_reg <= opg_reg + 1; 
							  state <= s_read;
						when others =>
							  data <= temp_data;
							  if(state_reg = 5)then
								state <= s_init_rtc_wr;
							  else
								state <= s_stop;
							  end if;
					end case;
				  end case;
		end if;
	end process;
end Behavioral;								   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品裸体写真集在线观看| 国产婷婷一区二区| 精品国产sm最大网站免费看| 国产精品国产三级国产有无不卡 | 亚洲精品一二三| 久久机这里只有精品| 色综合天天性综合| 国产亚洲成av人在线观看导航| 亚洲在线视频网站| 成人福利视频网站| 精品福利二区三区| 午夜精品爽啪视频| 色老综合老女人久久久| 国产亚洲精品资源在线26u| 日本伊人精品一区二区三区观看方式| 99精品黄色片免费大全| 国产欧美日韩在线观看| 日本aⅴ精品一区二区三区| 在线视频综合导航| 自拍视频在线观看一区二区| 国产99久久精品| www久久久久| 欧美a级理论片| 777xxx欧美| 日韩二区三区四区| 欧美区在线观看| 亚洲夂夂婷婷色拍ww47| 91色在线porny| 专区另类欧美日韩| 97国产一区二区| 自拍偷拍欧美激情| 色悠久久久久综合欧美99| 中文字幕在线不卡| 精品国产一区二区三区久久影院 | av不卡在线观看| 久久精品视频一区二区三区| 另类调教123区| 精品少妇一区二区三区日产乱码| 日韩av高清在线观看| 欧美另类高清zo欧美| 天天综合网 天天综合色| 91精品久久久久久久91蜜桃| 日韩va亚洲va欧美va久久| 欧美一区二区三区在线| 久久精品国产精品青草| 精品国产乱码久久久久久图片 | 91久久精品一区二区| 亚洲欧美偷拍卡通变态| 色婷婷精品大视频在线蜜桃视频| 亚洲精品欧美二区三区中文字幕| 99国产精品国产精品毛片| 一区二区三区蜜桃| 777a∨成人精品桃花网| 久久精品国产精品青草| 国产欧美精品一区| 91黄色免费观看| 日韩av一级电影| 国产视频一区在线观看| av在线免费不卡| 亚洲chinese男男1069| 精品欧美一区二区久久| 成人免费毛片a| 亚洲国产精品一区二区久久| 91麻豆精品国产自产在线观看一区 | 国产一区二区0| 一本色道**综合亚洲精品蜜桃冫| 欧美日韩一区二区三区四区 | 欧美电影影音先锋| 久久er精品视频| 日韩一区在线播放| 日韩一区二区精品葵司在线| 欧美人妖巨大在线| 国产伦精一区二区三区| 伊人夜夜躁av伊人久久| 精品久久久久久久人人人人传媒| 不卡高清视频专区| 美国一区二区三区在线播放| 国产精品精品国产色婷婷| 6080午夜不卡| 99热精品一区二区| 精品在线视频一区| 一区二区三区久久| 国产日韩欧美亚洲| 欧美精品一级二级三级| 成人激情午夜影院| 美女视频黄免费的久久 | 国产精品午夜电影| 欧美老女人第四色| 99视频国产精品| 久久99九九99精品| 亚洲一区国产视频| 国产精品久久久久三级| 精品欧美一区二区三区精品久久| 欧美亚洲动漫精品| jizz一区二区| 国产一区二区福利视频| 97精品国产露脸对白| 蜜臀av性久久久久蜜臀av麻豆| 亚洲女女做受ⅹxx高潮| 国产欧美精品一区二区色综合| 欧美一区2区视频在线观看| 在线观看一区二区视频| 99re66热这里只有精品3直播| 激情综合一区二区三区| 奇米影视一区二区三区| 午夜久久久影院| 亚洲国产精品久久久男人的天堂| ...av二区三区久久精品| 国产欧美一区二区在线| 久久久高清一区二区三区| 日韩一卡二卡三卡国产欧美| 欧美精品第1页| 欧美日韩国产经典色站一区二区三区| 97久久精品人人做人人爽50路| 国产99久久久国产精品免费看| 国内精品视频666| 国产一区二区不卡在线| 国产福利一区二区三区| 国产高清精品网站| 成人av免费在线播放| 成人高清视频免费观看| 成人国产精品免费观看| 95精品视频在线| 91福利在线导航| 欧美视频一区二区三区四区| 欧美日韩在线一区二区| 欧美日韩高清一区二区三区| 欧美精品一卡两卡| 日韩美女在线视频| 久久综合九色综合欧美98| 2022国产精品视频| 国内精品不卡在线| 国产精品一级黄| 99免费精品视频| 91丝袜国产在线播放| 日本高清不卡视频| 4438x亚洲最大成人网| 精品国产露脸精彩对白| 国产精品午夜免费| 亚洲大尺度视频在线观看| 蜜臀久久99精品久久久画质超高清| 久久精品国产一区二区| 东方欧美亚洲色图在线| 在线欧美日韩精品| 91精品国产综合久久久久久漫画| 精品剧情在线观看| 国产精品久久久久影院亚瑟| 亚洲成在人线免费| 毛片av中文字幕一区二区| 成人性生交大片| 欧美精品久久久久久久多人混战 | 亚洲国产精品ⅴa在线观看| **网站欧美大片在线观看| 婷婷六月综合亚洲| 国产成人在线影院| 成人免费一区二区三区视频| 日韩中文字幕区一区有砖一区 | 欧美成人艳星乳罩| 国产精品不卡在线| 久久机这里只有精品| 91免费观看视频在线| 日韩视频一区二区在线观看| 亚洲欧洲韩国日本视频| 玖玖九九国产精品| 色综合天天综合在线视频| 日韩欧美国产一区在线观看| 国产精品久久久久精k8| 免费亚洲电影在线| 91一区二区在线| 久久蜜桃一区二区| 天堂成人国产精品一区| av一本久道久久综合久久鬼色| 欧美一三区三区四区免费在线看 | 欧美区在线观看| 国产精品久久久久aaaa樱花| 美女视频黄 久久| 欧美色图天堂网| 国产精品久久久久久久久免费相片 | gogo大胆日本视频一区| 精品国一区二区三区| 亚洲成av人片| 91国在线观看| 国产精品人人做人人爽人人添| 美女视频黄 久久| 91精品国产综合久久久久| 亚洲精品第1页| 97久久超碰国产精品| 国产精品天美传媒| 国产成人在线免费观看| 精品国产一区二区在线观看| 日韩不卡免费视频| 欧美日韩国产欧美日美国产精品| 中文字幕亚洲综合久久菠萝蜜| 国产资源在线一区| 亚洲九九爱视频| 91蜜桃传媒精品久久久一区二区| 国产免费观看久久| 不卡的看片网站| 国产精品久久久久久户外露出| 国产成a人亚洲精品|