NIOS实现电子钟课件_第1页
NIOS实现电子钟课件_第2页
NIOS实现电子钟课件_第3页
NIOS实现电子钟课件_第4页
NIOS实现电子钟课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

实验十四 基于SOPC的电子钟《计算机EDA设计》实验教程7/20/20231内容概要实验目的实验要求实验原理预习要求实验内容实验报告

7/20/20232实验目的掌握SOPCBuilder和NiosⅡIDE软件的基本使用方法掌握SOPC系统的开发流程,熟悉基于SOPC,设计和实现电子钟的全过程7/20/20233实验要求 利用NiosⅡ软核处理器,以Altera公司的NiosⅡCyclone开发板为硬件平台,设计一个电子钟系统功能在液晶屏上显示时间、日期、状态提示利用4个按键对时间(小时和分钟)、日期(年月日)进行设置(包括退出设置)7/20/20234硬件规划 根据系统要实现的功能和开发板配置,系统需使用的外围器件包括:LCD:电子钟显示屏幕按钮:电子钟设置功能键Flash存储器:存储硬件和程序SRAM存储器:程序运行时将其导入SRAM7/20/20235根据用到的外设和器件特性,在SOPCBuilder中要添加的组件包括:NiosⅡ32bitsCPU定时器按键PIOLCDDisplay外部RAM总线(Avalon三态桥)外部RAM接口外部Flash接口EPCSSerialFlashController重新配置请求PIOJTAGUARTInterface

7/20/20236端口定义表序号名称输入/输出描述1clkIn时钟输入,50MHz2reset_nIn复位输入3in_port_to_the_button_[3..0]In4个按键输入4be_n_to_the_ext_ram[3..0]Out字节选择5ext_ram_bus_address[22..0]OutSRAM地址6ext_ram_bus_data[31..0]InoutSRAM数据7read_n_to_the_ext_flashOutFLASH输出使能8read_n_to_the_ext_ramOutSRAM输出使能9select_n_to_the_ext_flashOutFLASH片选信号10select_n_to_the_ext_ramOutSRAM片选信号7/20/20237端口定义表(续)序号名称输入/输出描述11write_n_to_the_ext_flashOutFLASH写信号12write_n_to_the_ext_ramOutSRAM写信号13LCD_E_from_the_lcd_displayOutLCD使能信号14LCD_RW_from_the_lcd_displayOutLCD读写信号15LCD_RS_from_the_lcd_displayOutLCD端口寻址信号16LCD_data_to_and_from_the_lcd_display[7..0]InoutLCD数据17bidir_port_to_and_from_the_reconfig_request_pioInout重新配置请求7/20/20238软件规划 软件功能包括显示、设置和算法三大部分:显示部分设置部分时间算法部分7/20/20239软件规划-显示部分显示时间(小时:分钟:秒)显示日期(年-月-日)显示状态提示(如BeijingTime、Sethour等等)注意将初始时间设为0:0:0,初始日期设为2000-1-1

7/20/202310软件规划-设置部分功能:设置小时、分钟、年份、月份、日期和退出设置。对开发板上4个功能键的分配如下:主菜单SW0:设置选择键,可依次选择设置小时、分钟、年份、月份、日期SW1:显示日期键SW2:显示时间键子菜单(进入到对某个对象设置后的按键功能)SW1:对象数字增加SW2:对象数字减少SW3:退出,返回主菜单7/20/202311软件规划-时间算法部分

功能:时间累加;确定每个月的最大天数,使年、月、日能够正确累加。

只有显示和响应按键部分涉及硬件,其它子程序可以在进行硬件设计的同时开始编写。7/20/202312电子钟主程序流程图7/20/202313按键处理子程序介绍按键处理子程序handle_button_press(FILE*lcd)是一个主要的子程序。它首先采用多分支if…elseif…else形式,根据flag的取值,执行不同的程序块。在每一个条件下(如flag=0,flag=1,……,flag=5),又采用开关(switch)分支结构,根据edge_capture的值判断应执行哪个程序段。7/20/202314flag=0flag=1flag=2flag=3flag=4flag=5进入主菜单进入小时设置子菜单进入分钟设置子菜单进入年份设置子菜单进入月份设置子菜单进入日期设置子菜单哪个按键被按下SW0SW1SW2SW3edge_capture取值(十六进制)0X10x20x40x8表14-2根据flag的取值,执行不同的程序块

表14-3按下不同的按键,edge_capture取值不同7/20/202315预习要求熟悉QuartusⅡ软件的使用方法;按照课件的内容,熟悉SOPCBuilder的使用方法;按照课件的内容,熟悉NiosⅡIDE的使用方法,重点体会工程的Debug技巧;在网上下载QuartusⅡHandbook,阅读其中的Volume4和Volume5章节;复习C语言;阅读实验指导书,完成大部分软件代码的设计7/20/202316实验步骤一.硬件部分设计

传统:CPU不可更改,外围设备变动受CPU限制,一般嵌入式开发是软件设计和PCB设计NiosII可灵活定制,根据系统设计要求,通过SOPCBuilder裁减得到SOPC 系统,开发流程包括硬件系统和软件开发。硬件流程:使用SOPCBuilder和QuartusⅡ,快速定制合适的CPU和外设软件设计:使用汇编或C,C++语言7/20/202317本SOPC系统大致分为三个部分

FPGA部分NiosⅡCPU核JTAG_UART通信模块内部定时器Avalon总线控制器PIO外围接口模块LCD液晶显示器接口模块存储器部分SRAMFlashMemory外围元件部分控制键LCD液晶显示器等7/20/202318NiosⅡ硬件开发的具体流程根据硬件系统组成规划确定NiosⅡ系统模块必须具备的所有输入、输出引脚按下面步骤进行硬件设计创建QutuarsⅡ工程创建NiosⅡ嵌入式系统模块生成NiosⅡ硬件系统编译QuartusⅡ的工程设计文件下载硬件设计到FPGA中7/20/2023191.创建QutuarsⅡ工程

启动QuartusⅡ5.0创建工程quartus_nios2_project取名为quartus_nios2_project.qpf,选择元件为Cyclone库的EP1C20F400C7新建设计文件quartus_nios2_project.bdf在设计文件中依次添加如下图所示的一些引脚7/20/2023207/20/2023212.创建NiosⅡ嵌入式系统模块

启动SOPCBuilder添加CPU和外围组件指定基地址在SOPCBuilder的模块表中点击ext_flash,并修改其Base为0x0,此时会在信息栏出现基地址冲突错误。选中ext_flash那一行,执行Module->LockBaseAddress菜单命令,会在ext_flash的基地址旁边出现一个锁子的图标。执行System->AutoAssignBaseAddress菜单命令。使SOPCBuilder给其它没有锁定的地址重新分配地址,则之前出现的那些错误信息都消失了。系统设置生成NiosⅡ系统模块7/20/2023223.生成NiosⅡ硬件系统

双击BDF文件空白处,出现Symbol对话框,选择Project->first_nios2_system;点击OK按钮,将其添加到BDF文件中;将first_nio2_system模块与输入输出引脚相连,指定目标器件,并进行引脚锁定,完成系统的硬件设计;保存BDF文件。7/20/2023234.编译QuartusⅡ的工程设计文件

在QuartusⅡ5.0中执行“Processing->StartCompilation”命令,进行全编译7/20/2023245.配置FPGA在QuartusⅡ5.0中执行“Tools>Programmer”命令,将quartus_nios2_project.sof下载到目标芯片上。注意:在将程序下载到FPGA中之前,首先要先将SOF文件下载到FPGA中!7/20/202325二.软件设计部分在资源管理器自己的QuartusⅡ工程目录下创建一个文件夹启动NiosⅡIDE5.0创建一个NiosⅡIDE工程设计源代码编译工程将程序下载到FPGA中在线运行7/20/202326设计关键技术1-关键变量说明staticalt_u8hour; //小时staticalt_u8minute; //分钟staticalt_u8second; //秒staticalt_u16year; //年份staticalt_u8month; //月份staticalt_u8day; //日期staticalt_u8max_day; //当前月份最后一天时间变量staticintflag; //设置按键标志变量staticintbegin; //是否开始计时标志变量volatileintedge_capture;//按键响应变量,针对ButtonPIO,被volatile修饰,代表了某个被按下的键7/20/202327设计关键技术2-volatile程序中采用volatile修饰edge_capture,这是操作系统内核编程经常用到的一个修饰关键字。如果将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。一般说来,volatile用在如下的几个地方:中断服务程序中修改的供其它程序检测的变量需要加volatile;多任务环境下各任务间共享的标志应该加volatile;存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义。7/20/202328设计关键技术3-操作lcd系统中使用了Altera提供的一个极其简易的lcd——Optrex16207,在官方文档AlteraEmbeddedPeripherals中,能找到所提供的应用程序的操作接口。已给的lcd驱动,支持应用程序以文件读写的方式控制这个字符类设备(文件读写只对字符类设备有效)7/20/202329设计关键技术4——lcd命令一览摘自Altera官方文档:7/20/202330设计关键技术5-中断编程(1)ButtonPIO以中断的形式与应用程序通信,该设备的初始化程序比较特殊,也是整个软件设计的一个难点。这里给出按键初始化程序片断:

//在设备初始化时,要进行中断设置、中断处理子程序注册等操作

staticvoidinit_button_pio(){ //强制类型转化,获取指向中断寄存器的指针,保存中断的返回值

void*edge_capture_ptr=(void*)&edge_capture; //中断的初始配置IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf); //往中断寄存器里写0,重置IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0); //注册一个中断处理子程序handle_button_interrupts() alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts);7/20/202331设计关键技术5-中断编程(2)//按键中断处理子程序 staticvoidhandle_button_interrupts(void*context,alt_u32id) { volatileint*edge_capture_ptr=(volatileint*)context; //通过读寄存器,获取中断的返回值,保存到edge_capture_ptr指向 的存储空间中 *edge_capture_ptr= IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PI O_BASE); //往中断寄存器里写0,重置,即允许了下一次,同时结束本次中断处理 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PI O_BASE,0); }7/20/202332附录:time.c源码(函数声明)共21个子函数static

voidinit_button_pio(); //按键初始化函数static

voidhandle_button_interrupts(void*context,alt_u32id);//按键中断例程static

void

lcd_init(FILE*lcd); //lcd初始化函数static

voidinitial_time(); //时间初始化函数static

voidlast_day(); //该函数获取每个月的最后一天static

voiddisplay_day(FILE*lcd); //lcd上显示日期函数static

voiddisplay_time(FILE*lcd); //lcd上显示时间函数static

void

handle_button_press(FILE*lcd); //按键处理函数static

void

timer_set(FILE*lcd); //选择设置对象函数static

voidclear(FILE*lcd); //lcd清屏函数static

voidexit_set(); //退出设置函数7/20/202333附录:time.c源码(函数声明)static

void

温馨提示

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

评论

0/150

提交评论