- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PLD期末课程设计 NIOS II开发
第一章 简介
1.1硬件开发
NIOS II硬件开发主要是通过使用 Qsys 构建 NIOSII 软核,软核主要包括以下几个部分:
NIOS II Processor
PLL
clock
sysid
sdram controller
LCD
timer
ps2
seg7
led
key
jtag_uart
其中使用了DE2-115 SystemCD 中官方范例的 IP 和 altera university program 提供的 IP 。
1.2软件开发
NIOS II 的软件开发部分主要实现了以下几个功能:
点亮LED
KEY中断
定时器中断
七段数码管
LCD显示字符
PS2键盘
PS2鼠标
1.3基本系统搭建
DE2-115板子上提供的时钟只有50MHz,利用PLL产生三路时钟,clk0为100MHz提供给CPU和需要高速时钟的模块,如:SRAM、SDcard、Jtag_uart等;clk1为相移-65°的100MHz,提供给SDRAM;Mclk2为10MHz提供给那些不需要高速时钟的模块,如:key , led , lcd, timer ps2等。这样就可以根据系统的需要来选择不同的时钟。CPU选择NIOS II/f 型,储存单元选择SDRAM。
第二章 基本功能开发
2.1点亮LED
在Qsys中添加PIO模块,由于红色LED有18个,所以PIO模块中width选择18,direction选择output,其他不变,如下图所示。
编译、分配管脚等步骤后,在NIOS II IDE中system.h可以看到关于LED的相关宏定义。根据LED_BASE就可以读写相应寄存器,实现LED的打开和熄灭。利用PIO读写函数实现了下面几个函数,用来控制LED。
void led(int temp)//根据temp的每一个bit决定么个LED的状态。//如 temp = 5 即0101,则第1个LED和第三个LED点亮,其他熄灭 { IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp); }void led_on(int i) //将第i个LED点亮。{ int temp = IORD_ALTERA_AVALON_PIO_DATA(LEDR_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp|1i); }void led_off(int i) //将第i个LED点亮。{ int temp = IORD_ALTERA_AVALON_PIO_DATA(LEDR_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, temp(~(1i))); }void led_toggle(int i)//将第i个LED的状态去反。即由点亮变熄灭,由熄灭变点亮 { if(tag[i] == 0)//如果为熄灭 { tag[i]=1;//点亮 led_on(i); } else //如果为点亮 { tag[i]=0; //熄灭 led_off(i); }}
利用上述函数实现一个简单跑马灯,程序如下所示:
while (1){ for (int i = 0; i 8; i++) { usleep(100000); led_on(17 - i); usleep(100000); led_off(17 - i); }}
2.2 按键中断
在Qsys中添加PIO模块,由于按键有四个,所以width选择4,direction选择input,Edge Type选Falling,具体配置如下图所示。
key1按下时点亮LED8,key2按下时熄灭LED8,这样key1和key2就可以控制LED8的状态。Key3按下时使LED9的状态翻转,依次熄灭 、点亮。key4按下时,7段数码管0和1显示0,即清零。同时每个按键按下时,会在LCD上显示哪个按钮被按下。
按键中断初始化程序和中断服务程序如下所示:
/*
* 按键中断服务程序
*/
void key_isr(void* context, alt_u32 id)
{
volatile int *edge_capture_ptr = (volatilDe int*) context;
*edge_ca
您可能关注的文档
- 基于51单片机的交通灯的毕业论文.doc
- 基于51单片机的温度检测报警系统和万历系统的课程设计.doc
- 基于51单片机和若干传感器的智能开关窗系统___传感器导论课设报告.docx
- 基于.NET的个人博客网站设计和实现_文献综述(范文).doc
- 基于.NET电子相册的开发___毕业设计.doc
- 基于_EVA的G分公司业绩考核体系的研究论文.doc
- 基于_Multisim_的数字密码锁设计___eda课程设计报告.doc
- 基于ANDROID的小小手机商城___毕业论文.doc
- 基于B_S的Java在线学习网站___概要设计说明书.docx
- 基于BS方式运行的BBS留言系统的原理及其过程论文.doc
文档评论(0)