1 |
2 |
tobil |
-- *****************************************************************************************
|
2 |
|
|
-- AVR constants and type declarations
|
3 |
|
|
-- Version 1.0A(Special version for the JTAG OCD)
|
4 |
|
|
-- Modified 05.05.2004
|
5 |
|
|
-- Designed by Ruslan Lepetenok
|
6 |
|
|
-- *****************************************************************************************
|
7 |
|
|
|
8 |
|
|
library IEEE;
|
9 |
|
|
use IEEE.std_logic_1164.all;
|
10 |
|
|
use IEEE.std_logic_arith.all;
|
11 |
|
|
|
12 |
|
|
use WORK.SynthCtrlPack.all;
|
13 |
|
|
|
14 |
|
|
package AVRuCPackage is
|
15 |
|
|
-- Old package
|
16 |
|
|
type ext_mux_din_type is array(0 to CExtMuxInSize-1) of std_logic_vector(7 downto 0);
|
17 |
|
|
subtype ext_mux_en_type is std_logic_vector(0 to CExtMuxInSize-1);
|
18 |
|
|
-- End of old package
|
19 |
|
|
|
20 |
|
|
constant IOAdrWidth : positive := 6;
|
21 |
|
|
|
22 |
|
|
type AVRIOAdr_Type is array(0 to 63) of std_logic_vector(IOAdrWidth-1 downto 0);
|
23 |
|
|
constant CAVRIOAdr : AVRIOAdr_Type :=("000000","000001","000010","000011",
|
24 |
|
|
"000100","000101","000110","000111",
|
25 |
|
|
"001000","001001","001010","001011",
|
26 |
|
|
"001100","001101","001110","001111",
|
27 |
|
|
"010000","010001","010010","010011",
|
28 |
|
|
"010100","010101","010110","010111",
|
29 |
|
|
"011000","011001","011010","011011",
|
30 |
|
|
"011100","011101","011110","011111",
|
31 |
|
|
"100000","100001","100010","100011",
|
32 |
|
|
"100100","100101","100110","100111",
|
33 |
|
|
"101000","101001","101010","101011",
|
34 |
|
|
"101100","101101","101110","101111",
|
35 |
|
|
"110000","110001","110010","110011",
|
36 |
|
|
"110100","110101","110110","110111",
|
37 |
|
|
"111000","111001","111010","111011",
|
38 |
|
|
"111100","111101","111110","111111");
|
39 |
|
|
|
40 |
|
|
-- I/O port addresses
|
41 |
|
|
|
42 |
|
|
-- I/O register file
|
43 |
|
|
constant RAMPZ_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#3B#);
|
44 |
|
|
constant SPL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#3D#);
|
45 |
|
|
constant SPH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#3E#);
|
46 |
|
|
constant SREG_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(63); --16#3F#);
|
47 |
|
|
-- End of I/O register file
|
48 |
|
|
|
49 |
|
|
-- UART
|
50 |
|
|
constant UDR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0C#);
|
51 |
|
|
constant UBRR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#09#);
|
52 |
|
|
constant USR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0B#);
|
53 |
|
|
constant UCR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0A#);
|
54 |
|
|
-- End of UART
|
55 |
|
|
|
56 |
|
|
-- Timer/Counter
|
57 |
|
|
constant TCCR0_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#33#);
|
58 |
|
|
constant TCCR1A_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2F#);
|
59 |
|
|
constant TCCR1B_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2E#);
|
60 |
|
|
constant TCCR2_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#25#);
|
61 |
|
|
constant ASSR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#30#);
|
62 |
|
|
constant TIMSK_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#37#);
|
63 |
|
|
constant TIFR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#36#);
|
64 |
|
|
constant TCNT0_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#32#);
|
65 |
|
|
constant TCNT2_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#24#);
|
66 |
|
|
constant OCR0_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#31#);
|
67 |
|
|
constant OCR2_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#23#);
|
68 |
|
|
constant TCNT1H_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2D#);
|
69 |
|
|
constant TCNT1L_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2C#);
|
70 |
|
|
constant OCR1AH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2B#);
|
71 |
|
|
constant OCR1AL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#2A#);
|
72 |
|
|
constant OCR1BH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#29#);
|
73 |
|
|
constant OCR1BL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#28#);
|
74 |
|
|
constant ICR1AH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#27#);
|
75 |
|
|
constant ICR1AL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#26#);
|
76 |
|
|
-- End of Timer/Counter
|
77 |
|
|
|
78 |
|
|
-- Service module
|
79 |
|
|
constant MCUCR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#35#);
|
80 |
|
|
constant EIMSK_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#39#);
|
81 |
|
|
constant EIFR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#38#);
|
82 |
|
|
constant EICR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#3A#);
|
83 |
|
|
constant MCUSR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#34#);
|
84 |
|
|
constant XDIV_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#3C#);
|
85 |
|
|
-- End of service module
|
86 |
|
|
|
87 |
|
|
-- EEPROM
|
88 |
|
|
constant EEARH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1F#);
|
89 |
|
|
constant EEARL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1E#);
|
90 |
|
|
constant EEDR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1D#);
|
91 |
|
|
constant EECR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1C#);
|
92 |
|
|
-- End of EEPROM
|
93 |
|
|
|
94 |
|
|
-- SPI
|
95 |
|
|
constant SPDR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0F#);
|
96 |
|
|
constant SPSR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0E#);
|
97 |
|
|
constant SPCR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#0D#);
|
98 |
|
|
-- End of SPI
|
99 |
|
|
|
100 |
|
|
-- PORTA addresses
|
101 |
|
|
constant PORTA_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1B#);
|
102 |
|
|
constant DDRA_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#1A#);
|
103 |
|
|
constant PINA_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#19#);
|
104 |
|
|
|
105 |
|
|
-- PORTB addresses
|
106 |
|
|
constant PORTB_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#18#);
|
107 |
|
|
constant DDRB_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#17#);
|
108 |
|
|
constant PINB_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#16#);
|
109 |
|
|
|
110 |
|
|
-- PORTC addresses
|
111 |
|
|
constant PORTC_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#15#);
|
112 |
|
|
|
113 |
|
|
-- PORTD addresses
|
114 |
|
|
constant PORTD_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#12#);
|
115 |
|
|
constant DDRD_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#11#);
|
116 |
|
|
constant PIND_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#10#);
|
117 |
|
|
|
118 |
|
|
-- PORTE addresses
|
119 |
|
|
constant PORTE_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#03#);
|
120 |
|
|
constant DDRE_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#02#);
|
121 |
|
|
constant PINE_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#01#);
|
122 |
|
|
|
123 |
|
|
-- PORTF addresses
|
124 |
|
|
constant PINF_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#00#);
|
125 |
|
|
|
126 |
|
|
-- ******************** Parallel port address table **************************************
|
127 |
|
|
constant CMaxNumOfPPort : positive := 2;
|
128 |
|
|
|
129 |
|
|
type PPortAdrTbl_Type is record Port_Adr : std_logic_vector(IOAdrWidth-1 downto 0);
|
130 |
|
|
DDR_Adr : std_logic_vector(IOAdrWidth-1 downto 0);
|
131 |
|
|
Pin_Adr : std_logic_vector(IOAdrWidth-1 downto 0);
|
132 |
|
|
end record;
|
133 |
|
|
|
134 |
|
|
type PPortAdrTblArray_Type is array (0 to CMaxNumOfPPort-1) of PPortAdrTbl_Type;
|
135 |
|
|
|
136 |
|
|
--constant PPortAdrArray : PPortAdrTblArray_Type := ((PORTA_Address,DDRA_Address,PINA_Address), -- PORTA
|
137 |
|
|
-- (PORTB_Address,DDRB_Address,PINB_Address)); -- PORTB
|
138 |
|
|
|
139 |
|
|
-- ***************************************************************************************
|
140 |
|
|
|
141 |
|
|
-- Analog to digital converter
|
142 |
|
|
constant ADCL_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#04#);
|
143 |
|
|
constant ADCH_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#05#);
|
144 |
|
|
constant ADCSR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#06#);
|
145 |
|
|
constant ADMUX_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#07#);
|
146 |
|
|
|
147 |
|
|
-- Analog comparator
|
148 |
|
|
constant ACSR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#08#);
|
149 |
|
|
|
150 |
|
|
-- Watchdog
|
151 |
|
|
constant WDTCR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#21#);
|
152 |
|
|
|
153 |
|
|
-- JTAG OCDR (ATmega128)
|
154 |
|
|
constant OCDR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#22#);
|
155 |
|
|
|
156 |
|
|
-- JTAG OCDR (ATmega16)
|
157 |
|
|
--constant OCDR_Address : std_logic_vector(IOAdrWidth-1 downto 0) := CAVRIOAdr(16#31#);
|
158 |
|
|
|
159 |
|
|
-- ***************************************************************************************
|
160 |
|
|
|
161 |
|
|
-- Function declaration
|
162 |
|
|
function LOG2(Number : positive) return natural;
|
163 |
|
|
|
164 |
|
|
end AVRuCPackage;
|
165 |
|
|
|
166 |
|
|
package body AVRuCPackage is
|
167 |
|
|
|
168 |
|
|
-- Functions
|
169 |
|
|
function LOG2(Number : positive) return natural is
|
170 |
|
|
variable Temp : positive;
|
171 |
|
|
begin
|
172 |
|
|
Temp := 1;
|
173 |
|
|
if Number=1 then
|
174 |
|
|
return 0;
|
175 |
|
|
else
|
176 |
|
|
for i in 1 to integer'high loop
|
177 |
|
|
Temp := 2*Temp;
|
178 |
|
|
if Temp>=Number then
|
179 |
|
|
return i;
|
180 |
|
|
end if;
|
181 |
|
|
end loop;
|
182 |
|
|
end if;
|
183 |
|
|
end LOG2;
|
184 |
|
|
-- End of functions
|
185 |
|
|
|
186 |
|
|
end AVRuCPackage;
|