实验:通过HAL_API访问JTAG_UART
实验:通过HAL_API访问JTAG_UART
Author:Chen Tuo
Copyright © Chen Tuo, 2008-2009. All rights reserved.
2008年3月1日创建
2009年3月29日修改
1. 实验目的
硬件抽象层HAL系统库是一个简化的运行环境,提供了一组标准的I/O系统访问函数,如open()、close()、read()、write()和lseek()等。本实验演示利用HAL API函数访问JTAG_UART设备的方法。
2. 实验设备
硬件:PC机,EP1C3或EP1C12核心板。
软件:Quartus II 9.0;Nios II IDE 9.0。
3. 实验内容
用HAL API函数从JTAG_UART中读入和输出字符。学习open()、close()、read()、write()和lseek()等函数的用法。
4. 实验预习要求
熟悉JTAG_UART外设的访问和控制机制。
5. 实验步骤
(1) 创建一个QuartusII项目JTAG_UART_HAL。
(2) 如下图,定制一个Nios II CPU,命名为myniosii。

存储器的使用:因为在进行C编译时不能选Small C library和Reduced device drivers优化,故onchip_mem不够用,我们使用sdram;我们只是做实验,所以未配置Flash。启动向量和异常向量配置如下:

(3) 在Quartus II中创建一个原理图,放置一个上面定制好的Nios II核myniosii,并如图设置引脚。编译、下载硬件配置到FPGA。

(4) 启动Nios II IDE,新建一个空白Nios II C/C++ Application项目,并命名为JTAG_UART_HAL。
(5) 在JTAG_UART_HAL 项目中添加一个C文件JTAG_UART_HAL.c。
(6) 因为我们有足够大的存储器,故不进行尺寸优化。
(7) 如图,在JTAG_UART_HAL_syslib项目Properties属性中指定标准I/O设备为jtag_uart。

(8) 编译、调试、运行。运行结果如下图。

6. 程序清单
通过HAL_API访问JTAG_UART实验程序
/*************************************************************
* 文件名:JTAG_UART_HAL.c
* 功 能:通过HAL API函数访问JTAG UART。读入一串字符再输出
* 说 明:在控制台Console窗口与设备进行交互
************************************************************/
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include "system.h"
#include "unistd.h"
int main(void){
int fd, count;
char * msg = "Please Enter 17 characters: \n";
char * info = " too! ";
char buf[100];
fd = open(JTAG_UART_NAME, O_RDWR, 0666); //以可读写方式打开设备文件
if(fd < 0){ //打开失败
printf("Some error occurred...\n");
return 1;
}
write(fd, msg, strlen(msg)); //输出信息
count = read(fd, buf, 17); //读入信息
write(fd, buf, count); //输出读入数据
write(fd, info, strlen(info));
close(fd); //关闭设备
return(0);
}
Nios II的HAL从宏观上把硬件抽象成3种类型:字符设备、块设备和网络设备。对于字符设备,HAL层提供标准的I/O接口函数来访问,如下图所示。

HAL层I/O系统与设备驱动程序
从图中可知,JTAG UART设备既可以通过ANSI C库函数访问,又可以通过HAL API函数访问。
7. 参考文献
[1] 周立功,等. SOPC嵌入式系统实验教程(一)[M]. 北京:北京航空航天大学出版社,2006.
[2] 李兰英,等. Nios II 嵌入式软核 SOPC设计原理及应用[M]. 北京:北京航空航天大学出版社,2006.
[3] http://www.altera.com.cn/.
浙公网安备 33010602011771号