5147|2

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51FPGA通信..的程序谁能帮我注释一下,,看不懂...跟贴在后面 [复制链接]

//单片机程序:
#include
#include
#include
void outportb(unsigned char port, unsigned char nVal);
unsigned char inportb(unsigned char port);
unsigned char swap(unsigned char nVal);


main()
{
while(1)
{
   unsigned char idata temp;
temp = inportb(0);  //读入拨码开关的值
outportb(2,temp ); //传送拨码开码值给cpld
}

}


void outportb(unsigned char nPort, unsigned char nVal)
{
unsigned char xdata *exAddress;
  exAddress=0xff00+nPort;
*exAddress = nVal;
}
unsigned char inportb(unsigned char nPort)
{
   unsigned char nVal;
   unsigned char xdata *exAddress;
   exAddress=0xff00+nPort;
   nVal = *exAddress;
   return nVal;
}
**************************************************************************************************
--作为单片机和CPLD的简单示例,演示如何采用地址数据总线方式和CPLD通讯
--单片机读取拨码开关值,并将其开关状态用写入cpld
--cpld的led显示
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MCU IS
   PORT (
   
      rst                     : IN std_logic;
      clk                     : IN std_logic;
      
--********单片机接口信号********--
      data                    : INOUT std_logic_vector(7 DOWNTO 0);   --数据地址总线,
                                                                    --即单片机的P0端口  
      mcu_ale                 : IN  std_logic;    -- mcu的ALE 地址锁存信号
      mcu_nrd                 : IN  std_logic;    -- mcu的rd
      mcu_nwr                 : IN  std_logic;    -- mcu的wr
--*******外围控制器件接口*******--
      dial                    : IN  std_logic_vector(7 downto 0);
      ledout                  : OUT std_logic_vector(7 downto 0)
  --    EN                      : buffer std_logic_vector(1 downto 0);
  --    segdata                 : OUT std_logic_vector(7 downto 0)
      );  
END MCU;

ARCHITECTURE arch OF MCU IS
attribute clock_buffer  : string;
attribute   clock_buffer  of  mcu_ale :signal is "ibuf";      
attribute   clock_buffer  of   mcu_nwr  :signal is "ibuf";
SIGNAL LA: std_logic_vector(1 DOWNTO 0); --低位地址锁存信号
SIGNAL state : std_logic_vector(4 DOWNTO 0);
SIGNAL DIN : std_logic_vector(7 DOWNTO 0);--总线输入
SIGNAL DOUT : std_logic_vector(7 DOWNTO 0);--总线输出
SIGNAL REG2 : std_logic_vector(7 DOWNTO 0);--led灯状态寄存器

BEGIN


process(mcu_ale)
begin

  if(mcu_ale='1')THEN
  LA<=DIN(1 DOWNTO 0);
  END IF;
END PROCESS;

ledout <=reg2;
DOUT<= dial WHEN LA ="00" ELSE                  
       "11111111";
DIN    <= DATA;
DATA   <= DOUT WHEN mcu_nrd ='0' AND mcu_ale='0' ELSE "ZZZZZZZZ";
READ :PROCESS(mcu_nwr,rst)
      BEGIN
            IF rst='0' THEN
            REG2<="00000000";        
            
            ELSIF mcu_nwr'EVENT AND mcu_nwr='0' THEN
            CASE LA IS  --- Address input
              WHEN "10"=>
                REG2 <= DIN;   
              WHEN OTHERS =>
            END CASE;
            END IF;
      END PROCESS READ;
END arch;
//搞不清楚,,单片机的读写过程,,我的理解是从P0读入开关状态,,送往P2口..然后FPGA接收,显示LED,,可是VHDL代码中怎么会有,ALE,WR,RD,这些信号?好象又用串口....
拜托高手指点!!!
跟贴在后面
此帖出自FPGA/CPLD论坛

最新回复

通过总线和通过IO还有区别的呢  详情 回复 发表于 2008-8-12 15:33
点赞 关注
 

回复
举报

228

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

HDL程序要配合电路图才能完整地理解

假如从Px口直接读开关,直接控制LED的话,就没FPGA什么事了。 现在这里的代码用了读写等总线控制信号,说明FPGA是通过总线跟CPU连接的,而不是通过I/O口。
此帖出自FPGA/CPLD论坛
 
 

回复

22

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
通过总线和通过IO还有区别的呢
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表