小舍YZ 发表于 2017-2-21 14:09:34

SOC操作步骤

        QSYS操作步骤(流水灯例子):
1.        创建Quartus II工程,加入开发板(或硬件)的TCL资源文件
2.        启动Qsys
3.        进入Qsys后,加入:Nios II,On-chip Memory,PIO(用于LED驱动),System ID,Timer
4.        在Qsys中连接它们(按照同步电路和加速器原则连接时钟驱动,复位驱动和中断)
5.        在Qsys的Memory中设置复位向量和异常向量所在存储器
6.        在Qsys中的所有组件分配地址,建议采用自动分配方式(【System】-【Assign Base Addresses】)
7.        为Qsys中的PIO生成输出端口(Export中设置)
8.        保存Qsys工程,同时为之命名
9.        生成Qsys工程(在Generation标签页中点击【Generate】)
10.        将生成的Qsys集成到Quartus II中,既可以使用例化,也可以用符号(框图原理图):在Quartus中加入已经生成的.qsys文件
11.        分配管脚,执行时序约束,全编译,下板
12.        启动Eclipse(下拉菜单【Tools】-【Nios II SBT for Eclipse】),工作区建议选择工程文件夹根目录,建议用工程文件夹名作为工作区命名
13.        在Eclipse中生成BSP工程:SBP工程名建议用工程名加上“_BSP”,装入正确的SOPC信息文件,点击【Finish】。成功生成后,在工程浏览器(Project Explorer)中应该看到
14.        在Eclipse中生成APP工程:APP工程名建议用工程名加上“_APP”,指出正确的BSP位置。点击【Finish】。成功生成后,在工程浏览器(Project Explorer)中应该看到
15.        右键点击APP工程,弹出菜单中选择New,新建一个源文件,源文件模板建议采用C模板。为源文件起名,注意加上扩展名:“.c”。点击【Finish】,等待刷Makefile。
16.        测试所生成的APP-BSP是否正确:写一个空的C主程序。建立工程:右键点击APP,在弹出的菜单中选择【Build Project】。注意第一次时间比较长。等待刷Makefile。
17.        写APP程序,右键弹出菜单选择【Build Project】
18.        如果无错误,则可以直接在SBT中运行所编制的C程序:(确认开发板已经下载,电源开着):右键点击APP工程,在弹出菜单中选择【Run As】-【Nios II Hardware】,等待下载启动过程。注意如果JTAG未能够检测到正确的ID和时间戳,则会弹出【Run Configurations ...】窗口,让使用者自己刷连接。
19.        观察硬件(开发板),所编写的C程序应该已经运行(灯在闪烁)

小舍YZ 发表于 2017-2-21 14:10:40

        Qsys的维护步骤(QuartusII中没有新的全编译,仅软件修改):
1.        启动Eclipse后,按照正常过程BuildAPP工程和Run(或Debug)

        Qsys的维护步骤(QuartusII中修改了硬件和固件,进行了新的全编译,软件修改或升级):
1.        启动Eclipse后,右键点击APP工程,在弹出菜单中选择【Clean Project】,等刷Makefiles
2.        右键点击BSP工程,在弹出菜单中选择【Clean Project】,等刷Makefiles
3.        再次右键点击BSP工程,在弹出菜单中选择【Nios II】-【Generate BSP】,等待刷Makefiles
4.        再次右键点击APP工程,在弹出菜单中选择【Build Project】,重新建立即可

星宇 发表于 2017-2-21 14:25:36

谢谢楼主分享

大鹏 发表于 2017-2-21 14:27:47

谢谢分享,不错的资料!

小舍YZ 发表于 2017-2-21 17:00:04

        将SBT软件中的存储器初始化到QuartusII中的步骤
1.        在Eclipse中,右键点击APP工程,在弹出菜单中选择【Make Target】-【Build】
2.        在弹出的“Make Targets”窗口中,选择“mem_init_generte”,点击【Build】。则Eclipse将会在software文件夹中生成qip文件
3.        回到QuartusII中,将qip加入到当前工程中
4.        在QuartusII中全编译,下载后的网表中将包括程序的初始化,即编程下载后,目标开发板就开始运行程序。

小舍YZ 发表于 2017-2-21 17:00:27

        SOC中的中断服务程序ISR执行步骤
主要的三任务:分别为
1.        编写中断服务程序
2.        在主程序中为中断服务程序注册(给出中断服务程序入口,中断号)
3.        设置中断服务程序与主程序的通信

小舍YZ 发表于 2017-2-21 17:01:08

具体步骤(以定时器中断服务为例):
1.        在进入Eclipse,生成APP以及一个空的主程序后,编写一个定时器的中断服务程序
2.        编写中断服务程序入口,Altera的SOC建议采用如下形式(SBT自动选择注册程序):
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
                alt_ic_isr_register(PIO_KEY_IRQ_INTERRUPT_CONTROLLER_ID, PIO_KEY_IRQ,
                                handle_keys_interrupts, edge_capture_keys_ptr, 0x0);
#else
                alt_irq_register(PIO_KEY_IRQ, edge_capture_keys_ptr,
                                handle_keys_interrupts);
#endif

小舍YZ 发表于 2017-2-21 17:01:26

3.        中断服务程序中,必须具备如下语句:
3.1        如果中断设备有沿捕获,则要写沿捕获寄存器的信息(指针)
其例子为:
volatile int* edge_capture_ptr = (volatile int*) context;
        *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE);
3.2        中断设备沿捕获寄存器的沿标志清除,例如:
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0);
3.3        建议的一次读中断设备的伪操作,用于延迟中断服务程序的退出,例如:
IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE);

小舍YZ 发表于 2017-2-21 17:01:40

4.        中断注册可以放在需要启动中断的主程序中,建议的中断注册形式为:
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
        alt_ic_isr_register(PIO_KEY_IRQ_INTERRUPT_CONTROLLER_ID, PIO_KEY_IRQ,
                                handle_keys_interrupts, edge_capture_keys_ptr, 0x0);
#else
        alt_irq_register(PIO_KEY_IRQ, edge_capture_keys_ptr,
                                handle_keys_interrupts);
#endif

小舍YZ 发表于 2017-2-21 17:02:08

5.        启动中断之前,必须启动中断设备,包括中断设备的开中断和沿捕获寄存器复位,例如:
///////////////PIO开中断//////////////////
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x3);
///////////////PIO的捕获寄存器复位//////////////////
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x0);

页: [1] 2 3 4
查看完整版本: SOC操作步骤