片上系统课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
片上电子信息系统
课程设计指导书
一、课程设计目的和要求
设计一个片上电子信息系统,培养工程实践创新能力。在相关课程知识的拓宽、提高和综合应用的基础,强化培养理论联系实际能力、系统设计能力、实际动手能力。
二、课程设计方式
学生在教师指导下按照设计题目和任务,认真分析、查找资料,按照各阶段基本要求,按时完成各项内容。
十四周:星期二、三下午3:00。。。星期四、五下午9:00
十五周:暂定上午
三、课程设计任务
任务一
在开发板FPGA内部实现一个Microblaze软核,通过对其外设GPIO编程使开发板上的6盏LED灯闪烁。
头文件
#include "xparameters.h"
#include "xgpio_l.h"
参考函数
1.XGpio_mSetDataDirection(BaseAddress, Channel, DirectionMask)
此函数用于设置GPIO的方向。
参数说明:
BaseAddress:GPIO的基地址,可从xparameters.h头文件获得,下同。Channel:GPIO通道(1或者2)选择,针对本实验,此参数固定为1,下同。DirectionMask:GPIO输入输出选择,1选择输入,0选择输出。
无返回值
2.XGpio_mSetDataReg(BaseAddress, Channel, Data)
此函数用于往GPIO置数,GPIO会输出用户设置的数据。
参数说明:
BaseAddress:GPIO的基地址
Channel:GPIO通道(1或者2)选择
Data:写入寄存器的数据
无返回值
任务二
PC机通过串口RS232控制6盏LED灯,如果上位机发送‘1’(char),则LED亮,并且FPGA通过串口给PC机发送字符串“LED ON!”,否则LED灭,FPGA通过串口向PC 机发送字符串“LED OFF!”。//串口助手
头文件
#include "xparameters.h"
#include "xuartlite_l.h"
#include "xgpio_l.h"
参考函数
1.XGpio_mSetDataDirection(BaseAddress, Channel, DirectionMask)
参数说明:
BaseAddress:GPIO的基地址
Channel:GPIO通道(1或者2)选择
DirectionMask:GPIO输入输出选择,‘1’选择输入,‘0’选择输出
无返回值
2.XGpio_mSetDataReg (BaseAddress, Channel, Data)
参数说明:
BaseAddress:GPIO的基地址
Channel:GPIO通道(1或者2)选择
Data:写入寄存器的数据
无返回值
3.XUartLite_SendByte(BaseAddress, Data)
此函数作用是往串口发送数据。
参数说明:
BaseAddress:Uart Lite的基地址
Data:uart发送的8bits数据
无返回值
4.XUartLite_RecvByte(BaseAddress)
此函数作用是从串口接受数据。
参数说明:
BaseAddress:Uart Lite的基地址
返回值:8bits uart接收的数据
任务三
上位机通过串口向FPGA发送不多于4个字符(char)的10进制数,各个数据之间以空格键分隔,以回车键结束。然后在Microblaze内部进行最简单的FIR滤波,将数据与其前一个数据相加,即y(n) = x(n) + x(n-1),然后以字符型的10进制数输出,数据之间依然以空格分隔。
头文件
#include "xbasic_types.h"
#include "xparameters.h"
#include "xstatus.h"
#include "xuartlite.h"
#include "xuartlite_l.h"
函数说明
1.XUartLite_SendByte(BaseAddress, Data)
参数说明:
BaseAddress:Uart Lite的基地址
Data:uart发送的8bits数据
无返回值
2.XUartLite_RecvByte(BaseAddress)
参数说明:
BaseAddress:Uart Lite的基地址
返回值:8bits uart接收的数据
任务四(选作)
在程序的主循环中使LED灯闪烁。同时监听串口中断,如果串口上有接收数据,则把数据转发回PC机串口。需要使用Microblaze中断方式。
头文件
#include "xparameters.h"
#include "xintc.h" // interrupt controller
#include "xuartlite_l.h" // uart
#include "xgpio_l.h" // gpio
函数说明
1 microblaze_enable_interrupts();
使能microblaze全局中断,在程序开头调用。
2 XIntc_RegisterHandler(XPAR_OPB_INTC_0_BASEADDR, \
XPAR_OPB_INTC_0_UART0_INTERRUPT_INTR, \
(XInterruptHandler)uart0_int_handler, \
(void *)XPAR_UART0_BASEADDR);
注册中断处理函数。XPAR_OPB_INTC_0_BASEADDR为OPB_INTC的地址,XPAR_OPB_INTC_0_UART0_INTERRUPT_INTR为中断屏蔽位,uart0_int_handler为中断函
数名,XPAR_UART0_BASEADDR为中断源外设地址。这些宏可从xparameters.h
头文件获得,下同。
3 XIntc_mMasterEnable(XPAR_OPB_INTC_0_BASEADDR);
使能INTC (中断控制器)。参数为OPB_INTC的地址。
4XIntc_mEnableIntr(XPAR_OPB_INTC_0_BASEADDR, \
XPAR_UART0_INTERRUPT_MASK) ;
INTC 中断允许位设置。参数分别为OPB_INTC的地址和中断掩码。
5 XUartLite_mEnableIntr(XPAR_UART0_BASEADDR);
UART本身中断允许。参数为UART地址。
6XUartLite_mIsReceiveEmpty(XPAR_UART0_BASEADDR)
判断UART的数据是否读空。参数为UART地址。返回值1表示已经读空。
提示:
Microblaze会自动完成保护现场、返回时恢复现场等处理,我们主要把精力放在中断处理程序(ISR)的编写即可。
整个流程可以简单归纳为:
1 中断使能
2 注册ISR
3 开中断
可以参考两个文档:Microblaze中断管理.pdf和opb_intc参考.pdf,其中opb_intc 是microblaze中管理中断的外设。