⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irda.vhd

📁 几个SPI
💻 VHD
字号:
---------------------------------------------------------------------------------------------------
--*************************************************************************************************
--  CreateDate  :  2007-07-24 
--  ModifData   :  2007-07-24 
--  Description :  irDA Receive ( Asynchronous, Data bits: 48 ) 
--				   Remoter of Midea Air condition : R51F 
--  Author      :  Explorer01 
--  Version     :  V1.0  
--*************************************************************************************************
---------------------------------------------------------------------------------------------------

-- VHDL library Declarations 
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Entity Declarations 
ENTITY irDA IS
	PORT 
	(
		RXD:	IN STD_LOGIC; 
		TXD:	OUT STD_LOGIC;
		
		RESET:	IN STD_LOGIC;
		CLK:	IN STD_LOGIC; 	-- Period : 26uS( 37.9KHz )
		
		EOC:	OUT STD_LOGIC;
		
		DATA1:	OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
		DATA2:	OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
		DATA3:	OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
	);
END irDA;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Architecture of Entity Declarations 
ARCHITECTURE Behavioral OF irDA IS
	SIGNAL DataIN  : STD_LOGIC; 
	SIGNAL CountCLK: STD_LOGIC_VECTOR(1 DOWNTO 0); 
	----------------------------
	SIGNAL spdata:  STD_LOGIC_VECTOR(47 DOWNTO 0);
	SIGNAL cnt48:   INTEGER RANGE 0 TO 63;	-- 49BITS 
	
	SIGNAL Count : STD_LOGIC_VECTOR(7 DOWNTO 0); -- 256 
	SIGNAL CountT: STD_LOGIC_VECTOR(7 DOWNTO 0); -- 256 
BEGIN
--	
--	The wave of R51F 
--	____			____________	________	____
--		|			|			|	|		|	|	|
--		|			|			|	|		|	|	|
--		|			|			|	|		|	|	|	....
--		|			|			|	|		|	|	|
--		|___________|			|___|		|___|	|___
--	
--		|			|			|	|		|	|	|	
--(uS)	|   4400    |    4400	|600|  1560 |600|480|	
--		|			|			|	|		|	|	|	
--	
--		|						|			|		|
--		|		Start			|	 "1"	|  "0"	|
--		|						|			|		|
--	
--	Code : 48Bits 
--	
--	
--	
	-------------------------------------------------
	-- Optimize : RXD Filter  
	PROCESS( RESET, CLK, CountCLK, RXD )
	BEGIN
		IF( RESET='0' ) THEN 
			DataIN 	 <= '1';
			CountCLK <= (OTHERS=>'0');
		ELSIF( RXD='0' ) THEN 
			IF( CLK'EVENT AND CLK='1' ) THEN 
				IF( CountCLK<"11" ) THEN CountCLK <= CountCLK + 1; 
				ELSE 					 CountCLK <= "11"; DataIN <= '0';
				END IF; 
				
			END IF; 
		ELSE 
			DataIN <= '1';
			CountCLK <= (OTHERS=>'0');
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-- Bits Control 
	PROCESS( RESET, CLK, DataIN, Count, CountT, cnt48 )
	BEGIN
		
		IF( DataIN='1' ) THEN 
			CountT <= (OTHERS=>'0');
		ELSE 
			IF( CLK'EVENT AND CLK='1' ) THEN CountT <= CountT + 1; 
			END IF; 
		END IF; 
		
		-----------------------------------------------
		-- Stop 
		IF( RESET = '0' OR CountT=B"0000_0101" ) THEN 
			Count <= (OTHERS=>'0');
		ELSIF( DataIN='1' ) THEN 
			IF( CLK'EVENT AND CLK='1' ) THEN 
				IF( Count<B"1111_0000" ) THEN Count <= Count + 1; 		-- 240 
				ELSE 						  Count <= B"1111_1000"; 	-- 248 
				END IF; 
				
				IF( Count=B"1110_1010" ) THEN EOC <= '1';
				ELSE 						  EOC <= '0';
				END IF; 
			END IF; 
		END IF; 
		
		-----------------------------------------------
		-- Receive information 
		IF( RESET = '0' ) THEN 
			spdata <= (OTHERS=>'0');
			cnt48  <= 47; 
		ELSIF( DataIN'EVENT AND DataIN='0' ) THEN 
		--	IF( (Count="00000000") OR (Count>"10100000") ) THEN -- Start 160 
			IF( Count>B"1010_0000" ) THEN -- Start 160 
				cnt48 <= 47; 
			ELSE 
				IF   ( Count>B"0011_0010" ) THEN spdata(cnt48) <= '1';	-- 50 '1' 
				ELSIF( Count>B"0000_1100" ) THEN spdata(cnt48) <= '0';	-- 12  '0' 
				END IF; 
				cnt48 <= cnt48 - 1; 
			END IF; 
		END IF; 
	END PROCESS; 
	
	-------------------------------------------------
	-------------------------------------------------
	
	DATA3 <= spdata( 47 DOWNTO 40 );
	DATA2 <= spdata( 31 DOWNTO 24 );
	DATA1 <= spdata( 15 DOWNTO 8  );
	
END Behavioral;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -