ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:284.30KB ,
资源ID:8241317      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8241317.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(六JTAG UART内核实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

六JTAG UART内核实验.docx

1、六JTAG UART内核实验2.2 JTAG UART内核实验1.实验目的(1)熟悉JTAG UART内核结构;(2)熟悉用C标准库函数访问JTAG UART;(3)熟悉用HAL API访问JTAG UART;2.实验现象 (1)简单应用实验:在信息栏打印“Hello from Nios II!”(2)C标准库实验:根据用户从Nios II IDE窗口“Console”栏输入04Nios II系统执行不同的操作,0-两个灯全灭,1-第一个灯亮,2-第二个灯亮,3-两个灯全亮,4-退出;若实验板上的第1个键按下,信息栏显示“Key1 was pressed”,第2个键按下,信息栏显示“Key2

2、was pressed”。(3)HAL API实验:根据用户从Nios II IDE窗口“Console”栏输入04Nios II系统执行不同的操作,0-两个灯全灭,1-第一个灯亮,2-第二个灯亮,3-两个灯全亮,4-退出。3.实验原理 实验原理如图2.2.1所示,Quartus II顶层原理图如图2.2.2所示。JTAG UART和Jtag Debug Module实际上是通过JTAG 集线器连到JTAG控制器上再与电脑相连。带Avalon接口的JTAG UART设备实现PC与Nios II系统间的串行通信。在许多设计中,JTAG UART常取代RS-232通信设备,用于字符的输入和输出。与

3、UART设备不同的是,JTAG UART是通过JTAG接口来传输数据的。用户可以通过HAL API和ANSI C标准库访问JTAG UART。图2.2.1由图2.2.1我们可以得到如表2.2.1所示的外设一览表:表2.1.1外设名称描述备注cpuNios II/e Debug Module=Level1sysid系统ID系统的唯一标识sdramCustom,Row=12,Column=8Data width=16,Banks=4flashCustom,Address width=21Data width=8三态桥Registeredled_pioPIO,2 bits,output only根据

4、用户输入显示keyPIO,2 bits,input only下降沿中断, 使能边沿捕获jtag_uart使用默认设置图2.2.24.实验内容(1)在Quartus II中建立一个工程;(2)使用SOPC Builder建立生成一个具有表2.2.2所示元件的Nios II硬件系统;(3)在Quartus II工程中添加PLL;(4)建立基于Nios II的硬件系统并编译生成配置文件*.sof;(5)在Nios II IDE中建立对应硬件系统的Nios II C/C+ Application,编写通过ANSI C标准库访问JTAG UART设备的程序并验证;(6)再建立一个Nios II C/C+

5、 Application,编写通过HAL API访问JTAG UART设备的程序并验证;5.实验步骤硬件系统的搭建不再详细介绍,整个系统如图2.2.3所示。JTAG UART内核的详细构造参考“附录四Volume 5 Embedded Peripherals”。图2.2.31)添加JTAG UART在可用元件列表里双击JTAG UART(图2.2.4),不更改弹出的设置对话框的参数(图2.2.5),因为默认参数可以使面积和速度实现相对均衡。图2.2.42)通过ANSI C标准库访问JTAG UART首先我们使用Nios II IDE提供的Hello World模板(图2.2.6)实现一个最简单

6、而又经常用到的JTAG UART应用。系统库属性中将stdout、stdin、stderr均选为jtag_uart(图2.2.7)。程序如下所示,运行结果如图2.2.8所示。图2.2.5/* * Hello World example. * * This example prints Hello from Nios II to the STDOUT stream. It runs on * the Nios II standard, full_featured, fast, and low_cost example * designs. It runs with or without the

7、MicroC/OS-II RTOS and requires a STDOUT * device in your systems hardware. * The memory footprint of this hosted application is 69 kbytes by default * using the standard reference design. * * For a reduced footprint version of this template, and an explanation of how * to reduce the memory footprint

8、 for a given application, see the * small_hello_world template. * */#include int main() printf(Hello from Nios II!n); return 0;图2.2.6图2.2.7图2.2.8下面所示程序将演示另一个稍为复杂的应用,程序注释得比较清楚,不再详细介绍,有关C标准库函数(fprintf(),fwrite(),getc()等)请读者自查阅相关书籍。运行结果如图2.2.9所示。/*版权声明* * 新疆大学信息科学与工程学院创新实验室 * 文件名: JTAG_CLib.c * 创建者: 吴占

9、敏 * 创建日期: 2010.4.30 * 校验者: * 校验日期: * 版本号: V1.0 * 功能描述: 使用C库函数访问JTAG UART设备。1、在IDE的Console栏打印 * 菜单信息,操作者通过电脑键盘输入04五个数字中的一个控制 * 实验板的LED灯开关状态;2、若有实验板上的按键按下,则在 * Console栏打印按键信息。 */#include #include #include system.h#include altera_avalon_pio_regs.h#include sys/alt_irq.h#include alt_types.h/* 名 称:KeyEdge

10、_Isr()* 功 能:下降沿触发中断服务子程序*/ void KeyEdge_Isr(void* context,alt_u32 id) /清边沿捕获寄存器 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0); /两个键共用一个中断,所以应把按键的状态读回以判断是哪一个键触发的中断 alt_u8 key_state = 0; key_state = IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE); key_state &= 0x03; switch(key_state) case 0x01:/第1个按键 /重要说明:为了验证方便

11、在中断服务子程序里使用了printf()函数, /实际应用时不建议在中断服务子程序里使用C标准库函数 printf(key1 was pressed.n); break; case 0x02:/第2个按键 printf(key2 was pressed.n); break; default:break; /* 名 称:PIO_Init()* 功 能:PIO口初始化,注册中断服务*/ void PIO_Init(void) /中断使能 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0xff); /清边沿捕获寄存器 IOWR_ALTERA_AVALON_PIO_

12、EDGE_CAP(KEY_BASE,0); /LED初始化,全灭 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,3); alt_irq_register(KEY_IRQ, NULL, KeyEdge_Isr);/* 名 称:main()* 功 能:使用C库函数访问JTAG UART设备。*/int main() char prompt = 0;/实时存储输入信息 FILE* fp;/文件指针,指向JTAG UART char* msg = Please Enter Your Choice:n; PIO_Init(); /以文件读写方式打开JTAG UART设

13、备 fp = fopen(JTAG_UART_NAME,r+); if(fp) /打印菜单信息 fprintf(fp,Menu:n); fprintf(fp,0:All LED Offn); fprintf(fp,1:LED1 Onn); fprintf(fp,2:LED2 Onn); fprintf(fp,3:All LED Onn); fprintf(fp,4:Exitn); /该句fprintf(fp,Please Enter Your Choice:n); /=printf(Please Enter Your Choice:n); fwrite(msg,strlen(msg),1,fp

14、); while(prompt != 4)/若输入4表示结束操作 prompt = getc(fp);/通过JTAG UART读取一个字符 switch(prompt) case 0:/两个LED均灭 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x03); break; case 1:/第1个LED亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x01); break; case 2:/第2个LED亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x02); break; ca

15、se 3:/两个LED均亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x00); break; default:break; if(ferror(fp) /检查错误是否与文件指针一起出现,若是,则清除 clearerr(fp); fprintf(fp,Exit.n); fclose(fp); else printf(Open JTAG UART failed.n); return 0;图2.2.93)使用HAL API访问JTAG UART 详细程序如下所示,通过HAL API访问JTAG UART主要用到了几个具有UNIX风格的IO操作函数(writ

16、e(),open(),read()等),有关这几个函数的详细使用方法请参考“附录五NiosII software developer”。运行结果如图2.2.10所示。/*版权声明* * 新疆大学信息科学与工程学院创新实验室 * 文件名: JTAG_API.c * 创建者: 吴占敏 * 创建日期: 2010.5.1 * 校验者: * 校验日期: * 版本号: V1.0 * 功能描述: 使用HAL API访问JTAG UART设备。在IDE的Console栏打印 * 菜单信息,操作者通过电脑键盘输入04五个数字中的一个控制 * 实验板的LED灯开关状态。 */#include #include #

17、include #include system.h#include unistd.h#include altera_avalon_pio_regs.h /* 名 称:main()* 功 能:使用HAL API访问JTAG UART设备。*/int main(void) int fd; int count; char *menu = Menu:n; char *choice0 = 0:All LED Offn; char *choice1 = 1:LED1 Onn; char *choice2 = 2:LED2 Onn; char *choice3 = 3:All LED Onn; char *

18、choice4 = 4:Exitn; char *msg = Please Enter Your Choice:n; char *buf; fd = open(JTAG_UART_NAME, O_RDWR); /以可读写方式打开设备文件 if (fd 0) /打开失败 printf(Open JTAG UART failed.n); return 1; /打印菜单信息 write(fd,menu,strlen(menu); write(fd,choice0,strlen(choice0); write(fd,choice1,strlen(choice1); write(fd,choice2,s

19、trlen(choice2); write(fd,choice3,strlen(choice3); write(fd,choice4,strlen(choice4); write(fd,msg,strlen(msg); while(*buf != 4) count = read(fd,buf,1); /读入数据,读者可以观察一下count的值 write(fd,buf,count); /输出读入数据 switch(*buf) case 0:/两个LED均灭 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x03); break; case 1:/第1个LED亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x01); break; case 2:/第2个LED亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x02); break; case 3:/两个LED均亮 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x00); break; default:break; printf(nExit.); close(fd);/关闭设备 return 0; 图2.2.10

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1