实验:通过C函数库访问JTAG_UART
实验:通过C函数库访问JTAG_UART
Author:Chen Tuo
Copyright © Chen Tuo, 2008-2009. All rights reserved.
2008年3月1日创建
2009年3月29日修改
1. 实验目的
学习使用ANSI C标准函数库访问JTAG_UART方法。
2. 实验设备
硬件:PC机,EP1C3或EP1C12核心板。
软件:Quartus II 9.0;Nios II IDE 9.0。
3. 实验内容
用ANSI C标准库函数从JTAG_UART中读入字符。如果检测到符合要求的字符,则输出信息。学习printf()、scanf()、fopen()和fwrite()等函数的用法。
4. 实验预习要求
熟悉JTAG_UART外设的访问和控制机制。
5. 实验步骤
(1) 创建一个QuartusII项目JTAG_UART_C。
(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_C。
(5) 在JTAG_UART_C项目中添加一个C文件JTAG_UART_C.c。
(6) 因为我们有足够大的存储器,故不进行尺寸优化。
注意:如果要优化也不能选Small C library和Reduced device drivers优化,否则不支持fopen、getc等函数。
(7) 如图,在JTAG_UART_C_syslib项目Properties属性中指定标准I/O设备为jtag_uart。

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

6. 程序清单
通过C函数库访问JTAG_UART_C实验程序
/*************************************************************
* 文件名:JTAG_UART_C.c
* 功 能:通过ANSI C标准库访问JTAG UART。如果检测到字符“t”,则报告检测
* 到字符“t”;如果检测到字符“v”,则推出程序;其他字符忽略
* 说 明:在控制台Console窗口与设备进行交互
************************************************************/
#include <stdio.h>
#include <string.h>
#include "system.h"
int main(void){
char * msg = "Detected the character 't'. \n";
FILE * fp;
char prompt = 0;
printf("Please Enter some characters: \n");
fp = fopen(JTAG_UART_NAME, "r+"); //打开文件进行读写
if(fp) {
while(prompt != 'v'){
prompt = getc(fp);
if(prompt == 't') {
fwrite(msg, strlen(msg), 1, fp);
}
if(ferror(fp))
clearerr(fp);
}
fprintf(fp, "Closing the JTAG UART file handle.\n");
fclose(fp);
} else {
printf("Fail to open file...\n");
}
return(0);
}
在ANSI C库的支持下,用户既可以把JTAG UART设备当作标准I/O设备使用,也可以将其当作文件操作。其实质是通过ANSI C库函数调用JTAG UART设备驱动函数访问硬件设备。
Ferror(fp)函数检查JTAG UART连接是否出现错误,如果出现错误,C函数锁存该错误直到使用clearerr()函数将其清除。
7. 参考文献
[1] 周立功,等. SOPC嵌入式系统实验教程(一)[M]. 北京:北京航空航天大学出版社,2006.
[2] 李兰英,等. Nios II 嵌入式软核 SOPC设计原理及应用[M]. 北京:北京航空航天大学出版社,2006.
[3] http://www.altera.com.cn/.
浙公网安备 33010602011771号