SOPC技术与应用实验指导_第1页
SOPC技术与应用实验指导_第2页
SOPC技术与应用实验指导_第3页
SOPC技术与应用实验指导_第4页
SOPC技术与应用实验指导_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SOPC技术原理及应用实验指导书适用专业: 电气、测控等 编写单位: 电气信息学院 编 写 人: 曹 林 审 核 人: 审 批 人: 批准时间: 年 月 日目 录 前言 MagicSOPC 创新教学实验开发平台3实验1 PIO 输出流水灯控制4实验2 PIO输出步进电机控制7实验3 PIO 输入读取开关信号12实验4 PIO 外部中断实验15前言 MagicSOPC 创新教学实验开发平台MagicSOPC 是基于Altera Nios II SOPC 系列的专业级创新教学实验开发平台;采用Altera 公司Cyclone II 系列150 万门的FPGA,先进的系统化、模块化设计;丰富的人机交

2、互方式,众多的高性能外设使得MagicSOPC 实验开发平台具有卓越的性能和无与伦比的灵活性;是SOPC、EDA、DSP 教学实验、电子设计创新实验室、现代嵌入式系统实验室、科研开发的上佳选择。实验开发平台采用核心板加主板的结构,提供多种人机交互方式,多种模块外设,如:矩阵键盘、按键、拔档开关、触摸屏输入;数码管显示、大屏幕TFT 彩色液晶显示屏;AC97音频模块;VGA、TV、PS/2、USB、IrDA、CAN、I2C、SPI、RS232、RS485、Modem、Ethernet、CF 卡、SD/MMC 卡、IDE 接口及高速AD/DA 模块等。开发工程师可在该实验平台上实现EDA、SOPC

3、、DSP 等各种设计并进行验证。核心板可灵活地用于二次开发。与一般的实验箱不同,MagicSOPC 主板的所有外设都不需要进行跳线设置,做实验时方便简单;此外每个外设的信号都设置了测试点,方便用户使用逻辑分析仪进行信号测量。一切为设计为用户考虑是本开发平台的出发点。考虑到核心板对用户的实用性,核心板除设计最小系统外,还设计有按键、LED 以及电源插座等,用户直接/或量身定制底板使用,这样核心板可用于用户自己的设计中,亦可用于电子设计大赛。本章首先简单介绍本实验开发平台的功能特点,然后详细分析PowerSOPC-2C35 核心板的硬件电路以及MagicSOPC 主机(底板)的硬件电路。读者只有熟

4、悉实验平台的电路原理后才能有效的有目的性的进行实验,遇到问题也能分析解决,同时也为读者以后设计自己的硬件电路提供参考。实验1 PIO 输出流水灯控制1 实验目的熟悉NiosII PIO 设备的访问方法。2 实验设备硬件: PC 机,MagicSOPC 教学实验开发平台,MagicSOPC_Demo Nios II 系统;软件: Nios II IDE 7.0。3 实验内容使用PIO 口控制8 个LED 进行流水灯显示。实验模板位于: 配套光盘MagicSOPCMagicSOPC_Software_Templateled_flow。4 实验预习要求预习SOPC 嵌入式系统基础教程4.1 节的内容

5、,熟悉PIO 外设的访问和控制。5 实验步骤(1) 启动Nios II IDE,新建一个空白CC+工程,并命名为led_flow。(2) 根据提供的参考程序在led_flow 工程文件夹中新建应用程序文件led_flow.c,如程序清单4.1 所示。(3) 在System Library 设置页中,将程序和数据区都指定为ddr_sdram。(4) 编译整个工程,查找语法错误。(5) 下载硬件配置文件(MagicSOPC_Demo)到FPGA。(6) 调试或全速运行整个程序,查看输出是否正确。6 实验参考程序PIO 输出控制实验的例程见程序清单 程序清单 流水灯实验/* * 文 件 名:led_

6、flow.c* 功 能:LED 显示控制。* 通过PIO 直接控制8 个LED 产生流水灯效果* 说 明:*/#include system.h#include altera_avalon_pio_regs.h#include alt_types.h/* 与硬件相关的宏定义,用户根据实际情况修改*/ LED_PIO_BASE 是用户添加并命名的外设基地址,在SYSTEM 中定义,用户需要根据不同的命名来修改此处#ifndef LED_PIO_BASE /这是LED_PIO 核的基地址#define LED_PIO_BASE 0xffffffff /users definition here#e

7、ndif#if LED_PIO_BASE = 0xffffffff#error No definition of LED_PIO core.n#endif/* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */const alt_u32 LED_TBL = 0x00, 0xFF, / 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, / 依次逐个点亮0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, / 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x

8、07, 0x03, 0x01, / 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, / 两个靠拢后分开0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 / 从两边叠加后递减;/* 名 称:main()* 功 能:控制LED 流水显示。*/int main (void) _attribute_ (weak, alias (alt_main); int alt_main (void)alt_u8 i;alt_u32 j;while (1)for (i=0; i42; i+) /* 流水灯花样显示

9、 */IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, LED_TBLi);j = 0; 136while (j BCCDDAAB)、单四拍(ABCDA)和单双八拍(AABBBCCCDDDAA)。实验模板位于:配套光盘MagicSOPCMagicSOPC_Software_TemplateStepMotor_test。4 实验预习要求(1) 预习SOPC 嵌入式系统基础教程4.1 节的内容,熟悉PIO 外设的访问和控制。(2) 预习本书第1 章关于步进电机部分的电路原理图。5 实验步骤(1) 启动Nios II IDE,新建一个空白CC+工程,并命名为Step

10、Motor_test。(2) 根据提供的参考程序在StepMoto_C 工程文件夹中新建应用程序文件StepMotor_test.c。(3) 在System Library 设置页中,将程序和数据区都指定为ddr_sdram。(4) 编译整个工程,查找语法错误。(5) 下载硬件配置文件(MagicSOPC_Demo)到FPGA。(6) 调试或全速运行整个程序,查看输出是否正确。(7) 分别使用MOTO_Mode1、MOTO_Mode2 和MOTO_Mode3 观察步进电机的运行状态。6 实验参考程序程序清单步进电机参考程序/* 文 件 名:StepMotor_test.c* 功 能:通过PIO

11、 控制步进电机* 说 明:将电源跳线JP4 短接。*/#include system.h#include altera_avalon_pio_regs.h#include alt_types.h#include priv/alt_busy_sleep.h#define MOTOA (10) / STEP_MOTOR_PIO0#define MOTOB (11) / STEP_MOTOR_PIO1#define MOTOC (12) / STEP_MOTOR_PIO2#define MOTOD (13) / STEP_MOTOR_PIO3#define MOTOCON 0x0f / MOTO 控

12、制字/* 与硬件相关的宏定义,用户根据实际情况修改*/ 用户添加并命名的外设基地址,在SYSTEM 中定义,用户需要根据不同的命名来修改此处#ifndef STEP_MOTOR_PIO_BASE /这是STEP MOTOR PIO 核的基地址#define STEP_MOTOR_PIO_BASE 0xffffffff /users definition here#endif#if STEP_MOTOR_PIO_BASE = 0xffffffff#error No definition of STEP_MOTOR_PIO core.n#endif#define PIOSET(PIN) IOWR_

13、ALTERA_AVALON_PIO_DATA( (STEP_MOTOR_PIO_BASE),(PIN) / 方便修改置位端口void InitPIO(void);void MOTO_Mode1(alt_u32 time); / A-B-C-Dvoid MOTO_Mode2(alt_u32 time); / AB-BC-CD-DA-ABvoid MOTO_Mode3(alt_u32 time); / A-AB-B-BC-C-CD-D-DA-A/* 名 称:main()* 功 能:控制步进电机运行。*/int main (void) _attribute_ (weak, alias (alt_ma

14、in); int alt_main (void)InitPIO();/MOTO_Mode1(); / A-B-C-D/MOTO_Mode2(); / AB-BC-CD-DA-ABMOTO_Mode3(15000); / A-AB-B-BC-C-CD-D-DA-Areturn(0);/* 名 称:InitPIO()* 功 能:初始化步进电机对应的控制端口为输出,* 入口参数:无* 出口参数:无*/void InitPIO(void)/* LED 和步进电机对应的控制端口为输出 */IOWR_ALTERA_AVALON_PIO_DIRECTION(STEP_MOTOR_PIO_BASE, MOTO

15、CON);/* 禁止所有PIO 中断 */IOWR_ALTERA_AVALON_PIO_IRQ_MASK(STEP_MOTOR_PIO_BASE, 0x00);/* 清边沿捕获寄存器 */IOWR_ALTERA_AVALON_PIO_EDGE_CAP(STEP_MOTOR_PIO_BASE, 0x00);/* 名 称:MOTO_Mode1()* 功 能:单四拍步进电机控制程序* 入口参数:alt_u32 time 延时参数,值越大,延时越久* 出口参数:无*/void MOTO_Mode1(alt_u32 time) / A-B-C-Dwhile(1)/* A */PIOSET(MOTOA);

16、alt_busy_sleep(time);/* B */PIOSET(MOTOB);alt_busy_sleep(time);/* C */PIOSET(MOTOC);alt_busy_sleep(time);/* D */PIOSET(MOTOD);alt_busy_sleep(time);/* 名 称:MOTO_Mode2()* 功 能:双四拍步进电机控制程序* 入口参数:alt_u32 time 延时参数,值越大,延时越久* 出口参数:无*/void MOTO_Mode2(alt_u32 time) / AB-BC-CD-DA-ABwhile(1) /* AB */PIOSET(MOTO

17、A|MOTOB);alt_busy_sleep(time);/* BC */PIOSET(MOTOB|MOTOC);alt_busy_sleep(time);/* CD */PIOSET(MOTOC|MOTOD);alt_busy_sleep(time);/* DA */PIOSET(MOTOD|MOTOA);alt_busy_sleep(time);/* 名 称:MOTO_Mode3()* 功 能:单双八拍步进电机控制程序* 入口参数:alt_u32 time 延时参数,值越大,延时越久* 出口参数:无*/void MOTO_Mode3(alt_u32 time) / A-AB-B-BC-C

18、-CD-D-DA-Awhile(1)/* A */PIOSET(MOTOA);alt_busy_sleep(time);/* AB */PIOSET(MOTOA|MOTOB);alt_busy_sleep(time);/* B */PIOSET(MOTOB);alt_busy_sleep(time);/* BC */PIOSET(MOTOB|MOTOC);alt_busy_sleep(time);/* C */PIOSET(MOTOC);alt_busy_sleep(time);/* CD */PIOSET(MOTOC|MOTOD);alt_busy_sleep(time); /* D */P

19、IOSET(MOTOD);alt_busy_sleep(time);/* DA */PIOSET(MOTOD|MOTOA);alt_busy_sleep(time);7 日积月累(1) 步进电机的工作原理是什么?步进电机是一种能将电脉冲信号转换成机械角位移或线位移的执行元件。它实际上是一种单相或多相同步电机。电脉冲信号通过环形脉冲分配器使励磁绕组按照顺序轮流接通直流电源。由于励磁绕组在空间中按一定的规律排列,直流电源接通后就会在空间形成阶跃变化的旋转磁场,使转子转过一定角度(称为步距角)。 在正常情况下,电机转过的总角度与输入的脉冲数成正比,电机的转速与输入脉冲频率也成正比,电机的运动方向由脉

20、冲相序控制。(2) 步进电机的用途是什么? 步进电机广泛应用于生产实践的各个领域,在数控机床制造领域中尤为突出。早期的步进电机输出转矩比较小,无法满足实际需要,在使用中与液压扭矩放大器一同组成液压脉冲马达。随着技术的发展,步进电机已经能够单独在系统上使用,成为不可替代的执行元件。例如,在数控铣床驱动电机的应用中,步进电机可以同时完成两个工作: 传递转矩和传递信息。步进电机还可以用作自动送料机的马达、通用软盘驱动器的马达和打印机的马达等。(3) 什么是步进电机的“失步”? 步进电机的启动频率一般为几百Hz 到几千Hz,最高运行频率可以达到几万Hz。以超过最高启动频率的频率启动将出现“失步”失去同

21、步现象或根本转不起来。高速旋转的步进电机在达到终点时立即停发脉冲,因惯性会令电机冲过头,也会出现失步现象。所以,实验中的控制脉冲频率必须在步进电机正常运行频率之内。(4) 位访问小技巧:宏定义“ #defineMOTOA(10)/STEP_MOTOR_PIO 0 ” 表示MOTOA 是STEP_MOTOR_PIO 内核的第0 号引脚,即STEP_MOTOR_PIO 0,所以宏定义中移位数为0,其余类同。宏定义“#defineMOTOCON0x0f”是与输出相关的引脚的掩码值,这样定义可以增加程序的可读性。该值在预处理阶段会被计算出来。实验3 PIO 输入读取开关信号1 实验目的熟悉通过Nios

22、 II PIO 设备读取外部数字量的方法。2 实验设备硬件: PC 机,MagicSOPC 教学实验开发平台,MagicSOPC Nios II 系统;软件: Nios II IDE 7.0。3 实验内容读取按键值,然后将读到的值输出到LED。实验模板位于: 配套光盘MagicSOPCMagicSOPC_Software_TemplateReadPin_C。4 实验预习要求预习SOPC 嵌入式系统基础教程4.1 节的内容,熟悉PIO 外设的访问和控制。5 实验步骤(1) 启动Nios II IDE,新建一个空白CC+工程,并命名为ReadPin_C。(2) 根据提供的参考程序在ReadPin_

23、C 工程文件夹中新建应用程序文件ReadPin.c。(3) 在System Library 设置页中,将程序和数据区指定为ddr_sdram。(4) 编译整个工程,查找语法错误。(5) 下载硬件配置文件(MagicSOPC_Demo)到FPGA。(6) 单步运行程序,先按下KEY,观察PIO 数据寄存器的值,然后释放KEY,再观察PIO 数据寄存器的值。(7) 全速运行程序,按下按键,控制LED。6 实验参考程序程序清单 /* 文 件 名:ReadPin.c* 功 能:读取I/O 引脚值,并输出控制LED。* 使用I/O 口输入方式对按键进行扫描,对LED 进行控制。* 说 明:按下KEY 观

24、察LED 效果。*/#include system.h#include altera_avalon_pio_regs.h#include alt_types.h#include priv/alt_busy_sleep.h#define LEDCON 0xff / 低电平亮#define KEYCON 0xff / 按下为低电平/* 与硬件相关的宏定义,用户根据实际情况修改*/ 用户添加并命名的外设基地址,在SYSTEM 中定义,用户需要根据不同的命名来修改此处#ifndef KEY_PIO_BASE /这是KEY_PIO 核的基地址#define KEY_PIO_BASE 0xffffffff

25、 /users definition here#endif#if KEY_PIO_BASE = 0xffffffff #error No definition of KEY_PIO core.n#endif#ifndef LED_PIO_BASE /这是LED_PIO 核的基地址#define LED_PIO_BASE 0xfffffffe /users definition here#endif#if LED_PIO_BASE = 0xfffffffe#error No definition of LED_PIO core.n#endif/* 名 称:InitPIO()* 功 能:初始化LE

26、D 为输出,KEY 为输入,屏蔽中断,清边沿捕获寄存器* 入口参数:无* 出口参数:无*/void InitPIO(void)/* LED 为输出,KEY 为输入 */IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE, LEDCON);IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE, KEYCON);/* 禁止KEY PIO 中断 */IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0x00);/* 清清边沿捕获寄存器 */IOWR_ALTERA_AVALON_PI

27、O_EDGE_CAP(KEY_PIO_BASE, 0x00);/* 名 称:main()* 功 能:读取KEY 的值,并输出控制LED。*/int main (void) _attribute_ (weak, alias (alt_main);int alt_main (void)volatile alt_u32 key_state,led_state; / 暂存PIO 引脚状态InitPIO();while(1)key_state = IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE)&KEYCON;led_state = key_state;IOWR_ALT

28、ERA_AVALON_PIO_DATA(LED_PIO_BASE, led_state);return(0); 7 日积月累在Debug 程序的过程中,可以在变量观察窗口选中memory 选项卡,然后在Address 文本框里输入KEY_PIO 的基地址(在system.h 中获得),这时在memory 窗口即可看到PIO 内核寄存器在地址空间的映像,如图 4.3 所示。显示的默认形式是1 byte 模式,用户可以通过右键快捷菜单把显示形式改为4 bytes 模式,以方便观察。图 4.3 PIO 内核寄存器映像实验4 PIO 外部中断实验1 实验目的(1) 熟悉中断服务程序的编写和注册(Reg

29、ister)方法。(2) 熟悉中断服务程序的调式方法。(3) 熟悉Nios II 处理外部中断的方式。2 实验设备硬件: PC 机,MagicSOPC 教学实验开发平台,MagicSOPC Nios II 系统;软件: Nios II IDE 7.0。3 实验内容外部中断信号由按键提供,然后将中断事件反映到对应的LED。实验模板位于:配套光盘MagicSOPCMagicSOPC_Software_Template ExtInt_test。4 实验预习要求(1) 预习SOPC 嵌入式系统基础教程4.1 节的内容,熟悉PIO 外设的访问和控制。(2) 预习SOPC 嵌入式系统基础教程第3、第6 章

30、关于中断的相关内容,熟悉NiosII 系统的中断操作。5 实验原理关于中断处理的内容读者可以参考SOPC 嵌入式系统基础教程第2 章。当跳转到异常处理地址后,处理器开始执行一段由HAL 插入的代码,并判断中断源和中断优先级,然后再转跳到用户的中断服务子程序 (ISR) 中。即异常发生后,异常处理除ISR 外的所有工作都由HAL 系统库代码替用户完成。图 4.4 异常处理过程和中断服务程序为了将中断服务子程序的信息告知HAL 层,用户需要完成ISR 的登记工作。向HAL登记ISR 的工作可以分为以下两步:为了将中断服务子程序的信息告知HAL 层,用户需要完成ISR 的登记工作。具体分为以下两步:

31、(1) 参照void isr_name(void *context, alt_u32 id)函数原形编写ISR(中断服务程序),其中:isr_name 是用户给ISR 取的函数名;void * context 是指向传递给ISR 的信息(通常是寄存器信息)的全局变量的指针;id 是硬件中断号,在system.h 中声明,比如UART_IRQ。(2) 调用alt_irq_register(alt_u32 id,void* context,void (*isr)(void*, alt_u32)函数向HAL登记ISR。其中:id 是硬件中断号;void * context 是指向传递给ISR 的信息

32、(通常是寄存器信息)的全局变量的指针;void (*isr)(void*, alt_u32)是指向ISR 的函数指针。6 实验步骤(1) 启动Nios II IDE,新建一个空白CC+工程,并命名为ExtInt_test。(2) 根据提供的参考程序在ExtInt_test 工程文件夹中新建应用程序文件ExtInt_test.c,如程序清单 所示。(3) 在System Library 设置页中,将程序和数据区都指定为ddr_sdram。(4) 编译整个工程,查找语法错误。(5) 下载硬件配置文件(MagicSOPC_Demo)到FPGA。(6) 在中断服务程序处设下断点,全速运行程序,然后按下

33、KEY,单步调试中断服务程序,并观察中断处理过程。(7) 全速运行程序,按下KEY1-8 并观察LED1-8 的变化。7 实验参考程序外部中断参考程序如程序清单所示。 /* 文 件 名:ExtInt_test.c* 功 能:使用外部按键中断进行LED 的控制,每当有一次按键中断时,即取反相应的LED, * 说 明:按下KEY 观察相应的LED 的状态。*/#include #include system.h#include altera_avalon_pio_regs.h#include alt_types.h#include sys/alt_irq.h #include priv/alt_b

34、usy_sleep.h#define LEDCON 0xff /#define KEYCON 0xff /* 与硬件相关的宏定义,用户根据实际情况修改*/ 用户添加并命名的外设基地址,在SYSTEM 中定义,用户需要根据不同的命名来修改此处#ifndef KEY_PIO_BASE /这是KEY_PIO 核的基地址#define KEY_PIO_BASE 0xffffffff /users definition here#endif#if KEY_PIO_BASE = 0xffffffff#error No definition of KEY_PIO core.n#endif#ifndef KE

35、Y_PIO_IRQ /这是KEY_PIO 核的中断号#define KEY_PIO_IRQ 0xffff /users definition here#endif#if KEY_PIO_IRQ = 0xffff#error No definition of KEY_PIO_IRQ.n#endif#ifndef LED_PIO_BASE /这是LED_PIO 核的基地址#define LED_PIO_BASE 0xfffffffe /users definition here#endif#if LED_PIO_BASE = 0xfffffffe#error No definition of LE

36、D_PIO core.n#endifvolatile alt_u32 done = 0; / 信号量:通知外部中断事件发生/* * 名 称:KeyDown_interrupts()* 功 能:键按下事件中断服务子程序,当键按下时,通过done 标志* 告知外界* 入口参数:context,一般用于传递中断状态寄存器的值,这里未使用* id,中断号,这里未使用* 出口参数:无*/static void KeyDown_interrupts(void* context, alt_u32 id)/* 清中断捕获寄存器 */IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO

37、_BASE, 0);/* 通知外部有中断事件发生 */done+;/* 名 称:InitPIO()* 功 能:初始化LED_PIO 为输出,KEY 为输入,开中断,清边沿捕获寄存器* 入口参数:无* 出口参数:无*/void InitPIO(void)/* 初始化LED_PIO 为输出,KEY 为输入 */IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE, LEDCON);IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE, 0x00);/* 开KEY 的中断 */IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, KEYCON);/* 清边沿捕获寄存器 */IOWR_ALTERA_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论