查看: 143|回复: 1

[原创] 【FPGA学习】完成了第一个软核实验

[复制链接]

4

主题

0

好友

253

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    郁闷
    2016-5-25 12:31
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2016-8-15 11:49:55 |显示全部楼层
    接上一篇
    将程序改成如下所示(即光盘里面的例程文件)


    //---------------------------------------------------------------------------
    //-- 文件名        :        hello_world.c
    //-- 描述                :        使用按键中断控制LED亮灭
    //-- 修订历史        :        2014-1-1
    //-- 作者                :        Zircon Opto-Electronic Technology CO.,Ltd.
    //---------------------------------------------------------------------------
    #include  <stdio.h>                                        //标准的输入输出头文件
    #include  "system.h"                                //系统头文件
    #include  "altera_avalon_pio_regs.h"//pio寄存器头文件
    #include  "alt_types.h"                                //数据类型头文件
    #include  "sys/alt_irq.h"                        //中断头文件

    alt_u8  LED_Toggle = 0;                                //LED状态切换全局变量

    //---------------------------------------------------------------------------
    //-- 名称                :        KeyDown_interrupts()
    //-- 功能                :        中断服务子程序
    //-- 输入参数        :        context:一般用于传递中断状态寄存器的值;id:中断号,这里都未使用
    //-- 输出参数        :        无
    //---------------------------------------------------------------------------
    static void KeyDown_interrupts(void* context, alt_u32 id)
    {
            /* 更改LED的显示状态 */
            LED_Toggle = ~LED_Toggle;
            /* 清中断捕获寄存器 */
            IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x1);
    }

    //---------------------------------------------------------------------------
    //-- 名称                :        Init_Interrupt()
    //-- 功能                :        中断初始化
    //-- 输入参数        :        无
    //-- 输出参数        :        无
    //---------------------------------------------------------------------------
    void  Init_Interrupt(void)
    {
            /* 开KEY的中断 */
            IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x1);
            /* 清边沿捕获寄存器 */
            IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x1);
            /* 注册中断服务子程序 */
            alt_irq_register(PIO_KEY_IRQ, NULL, KeyDown_interrupts);
    }

    //---------------------------------------------------------------------------
    //-- 名称                :        main()
    //-- 功能                :        程序入口
    //-- 输入参数        :        无
    //-- 输出参数        :        无
    //---------------------------------------------------------------------------
    int  main(void)
    {
            printf("Code Running...");
            Init_Interrupt();

            while(1)
            {
                    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, LED_Toggle);
            }

            return(0);
    }





    然后这里面要改几个参数
    1、引脚的名字要改,至于改的名字可以再system.h里面查出来
    2、新版的quartus II要加上一句
    #include  <priv/alt_legacy_irq.h>
    进行编译,确认无误
    然后先将硬件描述的部分先下载到开发板上面,再在eclipse中右键工程名——Run As——Run configuration,然后在弹出的对话框中选择target connection选项卡,找到硬件之后将下方的忽略系统的ID勾选上,然后进行运行
    最终运行结果如下
    26.gif

    然后再来介绍一下如何固化到开发板上面,不过这个过程尝试过不能在quartus II 15.0下运行。会报错找不到下载器。。。。
    1、在之前的Qsys中将ROM的部分改成ECPS,然后将片上的ROM去掉,连上中断、时钟、两个存储空间的线,中断连上,优先级为默认,锁定ECPS flash的地址起始位0x00000000,然后让系统重新分配地址
    2、将CPU的复位后开始执行的位置改成ECPS
    3、在verilog中将ECPS的部分加上,包括连线等
    4、在管脚分配中加上ECPS部分
    5、重新编译下载工程
    6、更新eclipse中的BSP部分
    7、编译,将生成的文件下载到开发板的flash中
    回复

    使用道具 举报

    9

    主题

    10

    好友

    1370

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    昨天 08:15
  • 签到天数: 140 天

    [LV.7]常住居民III

    发表于 2016-8-17 08:31:43 |显示全部楼层
    顶一顶哦!!!
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-6 04:40 , Processed in 0.075059 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部