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

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

?? i2c_mpu_blk.vhd

?? IIC的IP.這是經過驗證的源代碼
?? VHD
字號:
------------------------------------------------------------------------------
-- 
--  Name:  I2C_Mpu_Blk.vhd
-- 
--  Description:  Interface between the microprocessor and the I2C Master
--              Controller
-- 
--  $Revision: 1.0 $     
--  
--  Copyright 2004 Lattice Semiconductor Corporation.  All rights reserved.
--
------------------------------------------------------------------------------
-- Permission:
--
--   Lattice Semiconductor grants permission to use this code for use
--   in synthesis for any Lattice programmable logic product.  Other
--   use of this code, including the selling or duplication of any
--   portion is strictly prohibited.
--
-- Disclaimer:
--
--   This VHDL or Verilog source code is intended as a design reference
--   which illustrates how these types of functions can be implemented.
--   It is the user's responsibility to verify their design for
--   consistency and functionality through the use of formal
--   verification methods.  Lattice Semiconductor provides no warranty
--   regarding the use or functionality of this code.
------------------------------------------------------------------------------
--
--    Lattice Semiconductor Corporation
--    5555 NE Moore Court
--    Hillsboro, OR 97124
--    U.S.A
--
--    TEL: 1-800-Lattice (USA and Canada)
--    408-826-6000 (other locations)
--
--    web: http://www.latticesemi.com/
--    email: techsupport@latticesemi.com
-- 
------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity MPU_to_I2C is
  port(MPU_CLK            : in std_logic;                       -- Main Clock
       Rst_L              : in std_logic;                       -- Main Reset, active low
       CS_L               : in std_logic;                       -- Chip select, active low
       Addr_Bits          : in std_logic_vector(2 downto 0);    -- Address bits A0, A1, A2. Used for register sel
       RW_L               : in std_logic;                       -- Read/Write, write active low
       Read_Buffer        : in std_logic_vector(7 downto 0);    -- I2C Data Read in
       Status_Reg         : in std_logic_vector(4 downto 0);    -- Status part of Command_Status Reg Contains:
                                                                -- I2C_Bus_Busy, Abort_Ack, Lost_Arb, Error,Done
                                                                -- Does not include: Trans_Buf_Empty,
                                                                -- and Recieve_Buf_Full
       TBE_Set            : in std_logic;                       -- TBE_Set flag, set Trans_Buf_Empty to empty                                                                   
       RBF_Set            : in std_logic;                       -- RBF_Set flag, set Read_Buff_Full  to full                                                                    
       Iack_Clear         : in std_logic;                       -- Clears the Iack
       Go_Clear           : in std_logic;                       -- Clears Go Bit
       Low_Address_Reg    : out std_logic_vector(7 downto 0);   -- Low order Address bits for I2C Slave
       Upper_Address_Reg  : out std_logic_vector(2 downto 0);   -- High order Address bits for I2C Slave
       Byte_Count_Reg     : out std_logic_vector(7 downto 0);   -- I2C Transaction Byte Count
       Command_Reg        : out std_logic_vector(7 downto 0);   -- CMD part of Command_Status Reg Contains:
                                                                -- Go, Abort,Iack, I2C_Mode,
                                                                -- I2C_address Size, Trans_IE and Recieve_IE. 
       Trans_Buffer       : out std_logic_vector(7 downto 0);    -- Holds Data for I2C Write transaction
       Trans_Buffer_Empty : out std_logic;                      -- 0 indicates that the trans buffer is empty
       Read_Buffer_Full   : out std_logic;                      -- 0 indicates that the read buffer is not full
       Iack               : out std_logic;                      -- interrupt acknowledge
       DATA               : inout std_logic_vector(7 downto 0)); -- Data bus to/from attached device(NOTE: Data(7) is MSB                         
end MPU_to_I2C;

architecture MPU_to_I2C_Behave of MPU_to_I2C is
signal tbe            : std_logic;
signal rbf            : std_logic;
signal mcr            : std_logic_vector(2 downto 0);
signal write_pulse    : std_logic;
signal ns             : std_logic_vector(1 downto 0);
--internal registers necessary for feedback
signal transb         : std_logic_vector(7 downto 0);
signal laddr          : std_logic_vector(7 downto 0);
signal upaddr         : std_logic_vector(2 downto 0);
signal bcnt           : std_logic_vector(7 downto 0);
signal cmd            : std_logic_vector(7 downto 0);

constant write        : std_logic_vector(2 downto 0) := "000";
constant low_addr     : std_logic_vector(2 downto 0) := "001";
constant up_addr      : std_logic_vector(2 downto 0) := "010";
constant command      : std_logic_vector(2 downto 0) := "100";
constant byte_cnt     : std_logic_vector(2 downto 0) := "101";
constant iack_st      : std_logic_vector(2 downto 0) := "110";
signal count1          : std_logic_vector(3 downto 0) := "0000";
signal count2         : std_logic_vector(3 downto 0) := "0000";
signal temp_data      : std_logic_vector(7 downto 0);

begin

Trans_Buffer_Empty <= tbe;
Read_Buffer_Full   <= rbf;
DATA <= temp_data when CS_L = '0' and RW_L = '1' else "ZZZZZZZZ";  
Trans_Buffer      <= transb;
Low_Address_Reg   <= laddr;
Upper_Address_Reg <= upaddr;
Command_Reg       <= cmd;
Byte_Count_Reg    <= bcnt;

 tdata :process(Addr_Bits(2),Status_Reg,Read_Buffer,tbe,rbf)
 begin
 if(Addr_Bits(2) = '1') then
  temp_data <= Status_Reg & "0" & tbe & rbf;
 elsif(Addr_Bits(2) = '0') then
  temp_data <= Read_Buffer;
 end if;
 end process;


 MPU :process(MPU_CLK, RST_L, Addr_Bits, DATA, write_pulse,go_clear)
 begin
   if(Rst_L= '0')then
       upaddr     <= "000";
       transb     <= "00000000";
       laddr      <= "00000000";
       cmd        <= "00000000";
       bcnt       <= "00000000";

   elsif(rising_edge(MPU_CLK)) then
     if(write_pulse = '1') then  
       case Addr_Bits is
         when write =>
           transb <= Data;  
         when low_addr =>
           laddr  <= Data;
         when up_addr =>
           upaddr <= Data(2 downto 0);
         when command =>
           cmd    <= Data;
         when byte_cnt =>
           bcnt   <= Data;
         when iack_st =>
           transb <= transb;
           laddr  <= laddr;
           upaddr <= upaddr;
           cmd    <= cmd;
           bcnt   <= bcnt; 
         when others =>
           transb <= transb;
           laddr  <= laddr;
           upaddr <= upaddr;
           cmd    <= cmd;
           bcnt   <= bcnt; 
       end case;  

     elsif(go_clear = '1') then
       cmd(7) <= '0';
     end if;
   end if;  
 end process;  
 
 pulse_write:process(MPU_CLK,RST_L, CS_L, RW_L)

 constant idle  : std_logic_vector(1 downto 0) := "00";
 constant one   : std_logic_vector(1 downto 0) := "01";
 constant two   : std_logic_vector(1 downto 0) := "10"; 
 begin
   if(RST_L = '0') then
     write_pulse <= '0';
     ns          <=  idle;
   elsif(rising_edge(MPU_CLK)) then
     case ns is
       when idle =>
         write_pulse <= '0';
         if(RW_L = '0' and CS_L = '0') then
           ns <= one;
         else
           ns <= idle;      
         end if;
       when one =>
         write_pulse <= '1';
         if(RW_L = '0' and CS_L = '0') then
           ns <= two;
         else
           ns <= idle;
         end if;
       when two =>
         write_pulse <= '0';
         if(CS_L = '1') then
           ns <= idle;
         else
           ns <= two;
         end if;
       when others =>
         write_pulse <= '0';
         ns <= idle;
     end case;
   end if; 
 end process;     

 iack_set: process(Rst_L, MPU_CLK, Iack_Clear)
 begin
  if(Rst_L= '0')then
     Iack    <= '0';
  elsif(rising_edge(MPU_CLK)) then
     if(CS_L = '0' and RW_L = '0' and Addr_Bits = "110") then
       Iack  <= '1';--Data(0);
     elsif(Iack_Clear = '1') then
       Iack  <= '0';
     end if;   
  end if;
 end process;    

 trans_buf_empty: process(MPU_CLK, Rst_L, TBE_Set)
 begin
  if(Rst_L= '0')then
    tbe <= '0';
  elsif(rising_edge(MPU_CLK)) then
    if(CS_L = '0' and RW_L = '0' and Addr_Bits = "000") then
      tbe <= '0'; -- trans buffer has been written to and is now full
    elsif(TBE_Set = '1') then
      tbe <= '1'; -- trans buffer is empty
    end if;
  end if;   
 end process;

 read_buf_full: process(MPU_CLK, Rst_L, RBF_Set)--, CS_L, RW_L, Addr_Bits,SCL_EN2,SCLH_EN2)
 begin
  if(Rst_L= '0')then
    rbf <= '0'; 
  elsif(rising_edge(MPU_CLK)) then
    if(CS_L = '0' and RW_L = '1' and Addr_Bits = "000") then
      rbf <= '0';  -- read buffer has been read and is now empty
    elsif(RBF_Set = '1') then
      rbf <= '1'; -- read buffer is full
    end if;
  end if;   
 end process;

end MPU_to_I2C_Behave;

--------------------------------- E O F --------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av一区二区| 视频一区二区三区在线| 欧美一区二区三区爱爱| 成人av小说网| 国产99久久久国产精品免费看| 久久99热99| 蜜桃传媒麻豆第一区在线观看| 五月天国产精品| 亚洲一级在线观看| 亚洲激情一二三区| 亚洲午夜av在线| 亚洲mv在线观看| 日韩福利视频网| 久久精品国产澳门| 国产馆精品极品| 成人黄色777网| 97久久超碰国产精品电影| 99re亚洲国产精品| 欧美在线影院一区二区| 欧美日韩国产三级| 日韩精品中午字幕| 国产欧美精品一区| 中文字幕佐山爱一区二区免费| 亚洲女厕所小便bbb| 亚洲一级二级在线| 久久99精品久久久久久久久久久久| 九色porny丨国产精品| 国产精品456露脸| 91在线视频网址| 欧美无乱码久久久免费午夜一区| 91麻豆精品国产91久久久久久 | 国产亚洲欧洲997久久综合| 精品成人一区二区三区四区| 欧美激情一区二区三区在线| 亚洲欧美日韩国产另类专区| 丝袜亚洲另类欧美| 成人午夜激情在线| 欧美视频第二页| 26uuu欧美| 一区二区在线观看免费| 激情综合网av| 日本丶国产丶欧美色综合| 欧美成人三级在线| 亚洲人成伊人成综合网小说| 日本欧美一区二区| 成人黄色一级视频| 欧美电影免费观看高清完整版 | 成人开心网精品视频| 欧美色视频在线观看| 久久老女人爱爱| 午夜激情一区二区三区| 国产精华液一区二区三区| 欧美系列一区二区| 国产精品福利电影一区二区三区四区| 蜜芽一区二区三区| 在线观看一区不卡| 国产精品传媒入口麻豆| 日本vs亚洲vs韩国一区三区二区| aaa欧美色吧激情视频| 欧美不卡一二三| 午夜影院久久久| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一区二区视频在线观看 | 欧美在线你懂得| 成人欧美一区二区三区| 成人手机电影网| 7777女厕盗摄久久久| 亚洲精品精品亚洲| av亚洲产国偷v产偷v自拍| 久久久噜噜噜久久中文字幕色伊伊| 午夜精品影院在线观看| 欧洲另类一二三四区| 中文字幕一区二区三区色视频| 国产伦精品一区二区三区在线观看 | 一区二区三区日韩在线观看| 成人一二三区视频| 国产三级精品在线| 福利视频网站一区二区三区| 久久综合av免费| 久久99国产精品久久99| 日韩你懂的电影在线观看| 日韩av中文字幕一区二区| 欧美妇女性影城| 视频一区二区中文字幕| 欧美一级生活片| 免费成人在线影院| 精品少妇一区二区三区 | 久久综合资源网| 九九九精品视频| 久久综合久久99| 久久99久久99精品免视看婷婷| 日韩一区二区三| 九一久久久久久| 国产欧美日韩综合精品一区二区| 国产一区中文字幕| 欧美韩日一区二区三区四区| 菠萝蜜视频在线观看一区| 中文字幕精品三区| 在线欧美一区二区| 强制捆绑调教一区二区| 2020国产精品| 91麻豆高清视频| 日韩av成人高清| 久久久久久免费毛片精品| a亚洲天堂av| 亚洲成在人线在线播放| 日韩视频国产视频| 成人精品视频一区| 亚洲福利视频导航| 亚洲欧美另类久久久精品| 欧美午夜一区二区三区免费大片| 免费视频最近日韩| 久久久99精品久久| 91美女视频网站| 精品影院一区二区久久久| 国产精品视频观看| 欧美日韩高清一区二区三区| 寂寞少妇一区二区三区| 亚洲日本欧美天堂| 日韩欧美一区在线| 色综合久久99| 日韩av成人高清| 日韩理论在线观看| 精品国产网站在线观看| 99久久精品免费| 麻豆成人av在线| 亚洲精选视频在线| 久久精品男人天堂av| 7777精品伊人久久久大香线蕉的| 国产91清纯白嫩初高中在线观看 | 色综合天天综合给合国产| 日韩国产欧美三级| 亚洲精品国产成人久久av盗摄| 久久综合九色综合欧美就去吻| 99久久精品情趣| 国产真实乱子伦精品视频| 亚洲免费在线视频| 久久免费视频色| 欧美一级专区免费大片| 97久久精品人人做人人爽| 国产真实精品久久二三区| 日韩电影在线观看网站| 亚洲成人免费视频| 亚洲一二三四在线观看| 综合av第一页| 国产精品乱码一区二区三区软件| 精品国一区二区三区| 欧美肥胖老妇做爰| 欧美欧美欧美欧美| 欧美日韩一区不卡| 欧美性一区二区| 欧美性一级生活| 欧美亚洲精品一区| 欧美在线一二三| 色丁香久综合在线久综合在线观看| 成人黄色电影在线| 91在线高清观看| 91女厕偷拍女厕偷拍高清| 波多野结衣中文字幕一区 | 亚洲色图视频网站| 国产精品九色蝌蚪自拍| 最近日韩中文字幕| 亚洲黄色av一区| 亚洲福利视频一区二区| 爽好多水快深点欧美视频| 蜜臀av在线播放一区二区三区 | 精品第一国产综合精品aⅴ| 2024国产精品| 国产欧美日韩另类一区| 久久久久久久久久久久电影| 国产日产欧美一区| 亚洲视频资源在线| 亚洲国产中文字幕| 美日韩一级片在线观看| 国产精品一区二区在线播放| 国产激情一区二区三区四区 | 一个色在线综合| 日韩黄色一级片| 国产精品一区三区| av欧美精品.com| 欧美无砖专区一中文字| 日韩免费一区二区| 综合激情成人伊人| 肉色丝袜一区二区| 国产麻豆视频一区| 日本高清视频一区二区| 日韩片之四级片| 国产精品女上位| 亚洲成人一区二区| 风流少妇一区二区| 欧美日韩国产综合一区二区| 久久先锋资源网| 亚洲女子a中天字幕| 日本aⅴ亚洲精品中文乱码| 懂色av一区二区夜夜嗨| 欧美亚洲国产怡红院影院| 日韩久久久久久| 亚洲成人激情社区| 高清不卡在线观看| 日韩一级二级三级精品视频|