贴片功率电感:安森美将在广州展展 应用于高能效电子产品的首要高性能硅方案供应商安森美半导体(ONSemiconductor,美国纳斯达克上市代号:ONNN)将于6月9日至12日在中国广州举办的广州国际照明展览会上展示公司宽广阵容的L
引言:
受其内部资源的限制,在很多应用中,单片机需要在片外扩展相关资源,如程序存储器,数据存储器,IO口,以及中断源等等。一般情况下51单片机地址线为16根(P0及P2),因此其地址空间为,也即64K。考虑到某些不需要高速度的应用场合,可以用单片机的一个八位IO口(如P0),多次输出地址,通过CPLD将这些地址位整合起来,并输出到相应的设备,这样,即可实现用单片机的一个八位IO口来实现多位地址的功能。
1. 51单片机扩展FLASH存储器
51单片机的系统扩展以单片机的P2口作为指令地址的高八位,P0口作为低八位地址并复用为数据线。下面以扩展ATMEL公司的AT29C020 flash芯片为例,该芯片地址线18根,容量为256K字节,其读写时序如图1:
如果采用上述常用接法,则用P0口通过74LS373接AT29C020地址低八位,同时P0接AT29C020的八位数据口,P2接高八位地址,而AT29C020的A16,A17两位地址位接P1.0,P1.1,从而由P1.0,P1.1与P0和P2口共同构成18位地址线
由接线图可知,对AT29C020进行读写操作时,需先将P1.0和P1.1置成相应电平,然后将低16位地址写入DPTR,再用指令 MOVX A, @DPTR或者MOVX @DPTR, A 来读或写AT29C020。
可见,为满足18位地址的AT29C020,单片机共用去了包括P0,P1,P2在内的18个IO口,同时考虑到P3口一般复用为其他功能,如果系统还需要进行其它的IO操作(比如将flash中的数据输出到LCD显示),硬件资源已经是捉襟见肘。并且随着存储器的容量进一步扩大,IO资源将更加紧张。所以在下文中,将讨论如何使用C绕行电感器PLD芯片来扩展单片机的寻址空间。
2. MAX7128S CPLD
CPLD属于ASIC,其内部有大量的门电路,通过软件编程可以实现这些门电路的不同连接关系,从而使CPLD对外完成不同的功能,而这些连接关系可以通过软件的改变而不断的改变。从功能上来看,CPLD可以完成任何数字器件的功能,上至高性能的CPU,下至简单的74电路。
目前,最大的两家PLD/FPGA厂商分别是ALTERA以及XILINX,其中Altera 公司的产品基本上都属于CPLD 结构。由于它的内部连线均采用连续式互联结构,MAX 系列是Altera 目前最为流行,使用最广泛的两个系列之一。本文所采用的MAX7128S芯片就是属于MAX7000S系列的一款CPLD芯片,它包含1800个可用门,96个宏单元。升压电感器
3. 相关硬件及接线示意图
本应用中单片机选用PHILIPS公司的P89C61X2,相关硬件连接示意图见图三
4.CPLD及单片机程序设计
在应用中,将CPLD的4,5,6,8,9,10,11,12,15,16,17,18,20,21,22,24,25,27脚配置成连接 AT29C020地址线,将46,48,49,50,51,52,54,55脚配置成接受单片机P0口地址数据的输入口,并将41,44脚配置成连接 FLASH芯片的WE,OE引脚。
4模压电感器.1 CPLD程序
本例中,采用硬件描述语言VHDL来编写CPLD程序,相关代码如下:
entity mcu_to_flash is
port ( clk : in std_logic;
add : in bit_vector (7 downto 0); --地址输入
flash_add : out bit_vector (17 downto 0); --地址输出(到flash)
oe : out std_logic; --到flash的oe
we : out std_logic ); --到flash的we
end mcu_flash;
architecture func1 of mcu_flash is
signal counter : integer range 0 to 10000; --定义一个计数器
signal add_reg : bit_vector (17 downto 0); --定义寄存器add_reg用于缓存地址
begin
process (clk)
begin
if (clk'event and clk='1') then
case add(7 downto 6) is
when "00" =>
add_reg (5 downto 0) <= add (5 downto 0); --地址0到5
counter <= 0;
when "01" =>
add_reg (11 downto 6) <= add (5 downto 0); --地址6-11
counter <= counter + 1;
if (counter = 5) then --恢复OE,WE到高电电感厂家平,为后面产生下降沿作准备
oe <= '1';
we <= '1';
end if;
when "10" =>
add_reg (17 downto 12) <= add (5 downto 0); --地址12-17
counter <= 0;
when "11" =>
flash_add <= add_reg; --输出地址
counter <= counter + 1;
if (counter = 5) then --产生OE,WE的下降沿
oe <= '0';
end if;
end case;
end if;
end process;
end func1;
从程序可见,本例中单片机需要写四次P0口进行一次读/写操作,且这四次写入P0的数据的高两位应该分别为 “00”;“01”;“10”;“11”,CPLD将该两位作为标志位判断其后六位分别是所需地址的哪几位,将前三次P0口数据的低六位“拼”成 FLASH的18位地址,并在第四次写P0口时将该地址输出到FLASH的工字电感相应地址位,同时由CPLD产生OE或者WE的下降沿信号,以满足FLASH的读/写时序要求。