嵌入式设计彩灯控制器的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南工程学院
课程设计
课程名称嵌入式系统
课题名称彩灯控制器的设计
专业电子科学与技术
班级1101班
学号201001180111
姓名李兴顶
指导教师龚志鹏
2014 年11 月24 日
湖南工程学院
课程设计任务书
课程名称嵌入式系统
课题彩灯控制器的设计
专业班级电子科学技术
学生姓名李兴顶
学号201001180111
指导老师龚志鹏
审批
任务书下达日期2014 年11 月24 日任务完成日期2014 年12 月 3 日
目录
1 设计思路 (1)
2 系统框图 (1)
3 NiosII软核配置 (2)
4 软件设计 (3)
4.1 工程创建 (3)
4.2 程序设计 (4)
4.3 控制流程图 (4)
4.4 软件调试 (5)
4.5程序下载 (5)
5 实物演示 (6)
6 总结 (7)
附录 (8)
参考文献 (10)
电气信息学院课程设计评分表 (11)
1 设计思路
完整的基于Nios的SOPC系统是一个软硬件复合的系统,在开发时可以分为硬件和软件两个部分。

本设计通过QuartusII软件内置的QSYS定制一个基于NIOS II软核的SOPC系统,加入必要的存储器及IO,然后编写动态扫描程序对PIO进行操作来完成彩灯动态显示的功能。

本系统的软件设计在基于Eclipse的Nios Ⅱ集成开发环境 (IDE)上进行开发,编写彩灯控制器程序,实现8个LED从左到右和从右到左亮灭的变换。

2 系统框图
图2 基于NiosII 软核的SOPC彩灯控制系统框图
3 NiosII软核配置
按照彩灯控制系统框图用SOPC Builder 定制Nios II 系统。

添加NiosII Processor。

Nios II 有三种标准:经济型、标准型、全功能型。

这里选择经济型。

分别添加片内RAM、片内ROM“。

添加IO 口,8 位输出,对应开发板上8 个LED;1位输入,对应开发板上的按键。

8位输出端口及1位输入端口分别添加到系统中,分别该名称位“LED_PIO”、“CONTROL”(软件开发编程时要与这里模块组件名称一致)。

图3-1 添加所需的组件
系统NiosII 所需组件添加完毕,自动分配基地址和中断。

图 3-2 自动生成NiosII核
4 软件设计
4.1 工程创建
通过“Nios II Softeare Build Tools for Eclipse”进行彩灯控制系统的软件设计。

新建一个“Nios II Application and BSP from Template”工程,选择刚刚生成Nois文件即可连接到CPU。

Project template选择“Hello World”。

图4-1-1 基于Eclipse的Nios Ⅱ工程创建
4.2 程序设计
程序中数据结构定义是与Nois软核定制的组件名一致的。

彩灯输出对应PIO组件的“LED_PIO”,连接开发板的led;输入控制对应PIO组件的“CONTROL”,连接开发板上的按键。

程序代码见附录。

4.3 控制流程图
图4.3 彩灯控制流程图
4.4 软件调试
图4-4-1 编译并修改程序中的错误4.5程序下载
图4-4-2 下载调试
5 实物演示
图 5-1 从右到左
6 总结
本次设计的是彩灯控制器的设计,这个课程设计的关键是CPU内核的配置以及io端口的管脚绑定,编程的方法有很多种,对于同一种功能的实现,每种方式之间各有优劣,本次设计采用了用C语言进行描述。

通过这次课程设计对SopC技术有了更进一步的熟悉,VHDL 语言和C语言等其他语言还是有很大的区别。

VHDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。

其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。

在实际操作中发现设计和课本上的知识有很大联系,但又高于课本,一个简单的原理要把它应用以及和其他功能综合起来就有些困难。

通过设计也巩固了我们的书本知识以及通过借阅书籍和上网查找资料,也丰富了自己对SOPC技术的了解,也进一步熟悉了Quartus 2 NiosⅡ等软件的应用。

在本次设计的过程中,由于自己对Quartus 2的掌握还有所欠缺。

在CPU的管脚老是绑定有误,要么就是程序运行有误。

在老师和同学们的帮助下,反复调试,最后还是成功了,但原理还不是很清楚。

同时,在课程设计过程中通过与同学的交流及上网查找相关资料,也了解了他们对于这门技术的看法和今后这门技术的发展方向。

总的来说,这次设计还是有所收获的。

附录
彩灯控制系统源代码:
#include "stdio.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
alt_u8 flag=0;
int main(void) __attribute__ ((weak, alias("alt_main")));
void isKeyPress()//判断是否有按键按下
{
if(0 == IORD_ALTERA_A V ALON_PIO_DATA(CONTROL_BASE)) {
usleep(1000);//消抖
if(0 ==
IORD_ALTERA_A V ALON_PIO_DATA(CONTROL_BASE))
{
if(3 == flag)
flag = 0;
else
flag++;
return;
}
}
}
void style1(alt_u8 temp)// 奇偶间隔闪亮
{
alt_u8 j=0;
for(j=0;j<1;j++)
{
isKeyPress();
if(0 == j)
{
temp = 0x55;
IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, temp);
usleep(100000);
}
else
{
temp = 0xaa;
IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, temp);
usleep(100000);
}
}
}
void style2(alt_u8 temp)// 彩灯右移循环点亮
{
alt_u8 a,b,j=0;
temp = 0xfe;
for(j=1;j<8;j++)
{
isKeyPress();// 判断是否有按键按下
a=temp>>j;
b=temp<<(8-j);
IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, a|b);
usleep(100000);
}
}
void style3(alt_u8 temp)// 逐个点亮
{
temp = 0xfe;
alt_u8 j=0;
for(j=1;j<8;j++)
{
isKeyPress();//判断是否有按键按下
IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, temp);
usleep(100000);
temp = temp << 1;
}
}
int alt_main(void)
{
alt_u8 led = 0;
while(1)
{
isKeyPress();//判断是否有按键按下
switch(flag)
{
case 1: style1(led); break;
case 2: style2(led); break;
case 3: style3(led); break;
default: led = ~led;
IOWR_ALTERA_A V ALON_PIO_DATA(LED_PIO_BASE, led);
usleep(100000);
break;
}
}
}
参考文献
1、《数字系统设计技术与SOPC技术》西安交通大学出版社
2、《SOPC技术与应用》机械工业出版社
3、《SOPC 技术实用教程》清华大学出版社
电气信息学院课程设计评分表
指导教师签名:________________
日期:________________
注:①表中标*号项目是硬件制作或软件编程类课题必填内容;
②此表装订在课程设计说明书的最后一页。

课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。

相关文档
最新文档