《使用NiosⅡIDE对FLASH存储器编程的步骤启动NiosIIIDE》由会员分享,可在线阅读,更多相关《使用NiosⅡIDE对FLASH存储器编程的步骤启动NiosIIIDE(47页珍藏版)》请在金锄头文库上搜索。
1、SOPC技术 第5章 Nios II 系统的外围设备 NO .3. 1 4. 使用IDE Flash Programmer编程 完成所有的软/硬件开发工作后,可以使用 Nios IDE提供的Flash Programmer工具将程序下载 到FPGA平台上的FLASH存储器中。Flash Programmer是Nios IDE 6.0提供的新工具,它可以 将配置数据、Nios程序及其他数据文件下载到目标 板上的FLASH存储器中,这里所说的FLASH存储器 包括业界标准的CFI或CFI兼容的FLASH存储器,以 及Altera公司的EPCS系列串行配置器件。 IDE Flash Programm
2、er 通过2个过程将数据写入flash: (1)用Altera提供的“Flash编程设计”对FPGA进行配置; (2) IDE Flash Programmer将文件内容 “Flash编程设计” Flash Flash编 程设计 每个Flash编程设计应包含的元件: 使用IDE Flash Programmer编程,首先要保证在SOPC Builder中,在Target选项区中的Board的下拉列表框中选择 用户当前使用的目标板Flash 编程设计。 SmartSOPC_Board_1C6是现用核心板提供的目标板 Flash编程设计,可以对核心板上的NOR Flash(元件标号 U7)和EPC
3、S (元件标号U10)进行编程。 使用NiosIDE对FLASH存储器编程的步骤: (1)启动Nios II IDE。 (2) 建立软件工程,然后编译连接(Build Project) (3) 选中要进行编程的工程,然后选ToolsFlash Programmer菜单启动Flash Programmer对话框, 如图5.5.2。 (4) 单击Flash Programmer对话框左下角的New命令 按钮,建立一个新编程任务,可以修改这个新任 务的名称。 若选中program software project into flash memory project,可将工程的.elf文件写入Flas
4、h(EPCS)。 若选中program FPGA configuration data into hardware- image region of flash memory,可将FPGA的配置文件写 入Flash(EPCS)。 若选中Program file into a flash memory选项,可将二进 制文件写入Flash。需要选择要编程的二进制文件及要 编程的存储器(U7为Flash,U10为EPCS)。 (5) 在Main页面中可以选择所要编程的内容,包括工程名 称、FPGA配置文件的名称以及目标存储器。 图5.5.2 Flash Programmer对话框 (4) 在Targ
5、et Connection页面中选择与目标板相连的下载电 缆,如图5.5.3。 (5) 设置好这些内容之后,单击Apply按钮,然后单击 Program Flash按钮,Nios IDE重新编译工程并对FLASH存储 器进行编程。(若在SOPC Builder中没有指定目标板,则 Program Flash按钮将是灰色不能使用。) 从IDE的Console窗口可以看见编程过程。(见图5.5.4) 完成Flash编程后,需让系统重新上电,使FPGA使用EPCS 中配置数据重新配置FPGA, 程序才能正常运行。 图5.5.3 Flash Programmer 中目标连接设置 在console窗口显
6、示编程过程及编程结束标志 图5.5.4 通信接口 目前存在的所有计算机通信接口在嵌入式领域中都 有其广泛的应用,应用最为广泛的接口设备包括 RS-232接口(串口UART) USB接口(通用串行总线接口) IrDA(Infra Red Data Association红外线接口) SPI(串行外围设备接口)、 I2C、CAN总线接口、 蓝牙接口(Bluetooth) Ethernet(以太网接口)、 IEEE1394接口和通用可编程接口GPIO。 5.5 UART内核 UART(Universal Asynchronous Receiver/Transmitter通用异 步接收器/发生器)内核
7、带有Avalon接口,为嵌入式 系统和外部设备提供了串行字符流动通信方式,其 数据以RS-232协议的形式与外界进行交互。 提供可调整的波特率;可配置奇偶校验位、停止位 和数据位等。 UART内核的结构框图 UART内核寄存器映射 UART内核配置选项 1、波特率设置 2、数据位、停止位、奇偶校验位 3、流控制 4、Avalon流控制传输 软件编程 Altera提供的驱动程序执行HAL字符模式设备驱 动程序。HAL用户应通过熟悉的HAL API函数和 ANSI C标准库函数访问UART,而不是访问UART 寄存器。 altera_avalon_uart_regs.h 寄存器级访问头文件 alt
8、era_avalon_uart.h, altera_avalon_uart.c HAL系统库的UART内核设备驱动程序 实验4.10:ANSI C标准库来访问UART;如果检测到 字符t,则报告检测到字符t;如果检测到字符v, 则退出程序。 #include #include #include “system.h“ int main () char* msg = “Detected the character t.n“; FILE* fp; char prompt = 0; printf(“Please Enter some characters: n“); fp = fopen (UART_
9、NAME, “r+“); /打开文件进行读和写 if (fp) while (prompt != v) / 循环直至接收到 v prompt = getc(fp); / 从UART中获取字符 if (prompt = t) / 如果字符为 t 打印信息 fwrite (msg, strlen (msg), 1, fp); if (ferror(fp) / 检查错误是否在UART连接上出现 clearerr(fp); / 如果是,清除它 fprintf(fp, “Closing the UART file handle.n“); fclose (fp); else printf(“Fail to
10、 open file.n“); return 0; System.h 描述的UART设备 #define UART_NAME “/dev/uart“ #define UART_TYPE “altera_avalon_uart“ #define UART_BASE 0x00B00840 #define UART_IRQ 1 #define UART_BAUD 115200 #define UART_DATA_BITS 8 #define UART_FIXED_BAUD 0 #define UART_PARITY N #define UART_STOP_BITS 1 #define UART_US
11、E_CTS_RTS 0 #define UART_USE_EOP_REGISTER 0 #define UART_SIM_TRUE_BAUD 0 #define UART_SIM_CHAR_STREAM “ #define UART_FREQ 48000000 具有Avalon接口的JTAG UART核是实现在PC机和 FPGA上的SOPC Builder系统间进行串行通信的一种 实现方式 JTAG UART用来替代RS-232完成与PC主机的字符输 入/输出, NiosII 处理器通过读/写控制和数据寄存 器与JTAG UART核通信 5.6 JTAG-UART内核 对于NiosII 处理器
12、, HAL系统库中包含该设备 的驱动程序,允许使用ANSI C标准库stdio.h访 问JTAG UART核 对PC机, Altera提供JTAG终端软件来管理PC 机与目标系统的连接,对JTAG数据流解码和 在屏幕上显示字符 5.7 JTAG-UART内核 JTAG UART核方框图 缺省的深度值(64) IRQ门限值(8)是最 优的,不用改变 JTAG UART核配置 软件编程 HAL用户应通过HAL API 和ANSI C 标准库访问JTAG- UART,而不是访问JTAG-UART寄存器。 对JTAG UART核的操作与下列文件有关。 altera_avalon_jtag_uart_r
13、egs.h altera_avalon_jtag_uart.h altera_avalon_jtag_uart.c #include #include #include “system.h“ int main() char *msg=“Detected the character t.n”; FILE *fp; char prompt=0; printf(“Please Enter some characters: n“); fp=fopen(“/dev/jtag_uart”,”r+”); /为读写操作打开文件 If(fp) while(prompt!=v) /循环直到接收一个”v” prom
14、pt=getc(fp); /从JTAG UART中读取一个字符 if(prompt=t) /若字符是“t”,则输出信息 fwrite(msg,strlen(msg),1,fp); 例:使用标准库通过JTAG UART核读和发送一个消息 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; 5.7 定时器内核 定时器可作为系统的周期性时钟源(T
15、ick);可以 作为计数器测定事件发生的时间;作“看门狗”( Watchdog)。 定时器内核特性: 可控制定时器的启动、停止或复位 两种计数模式:单次减一和连续减一计数模式 计数器达到0时产生中断请求(IRQ) 可作为看门狗定时器 可选择输出周期性脉冲 可由软件使能或屏蔽定时器中断 定时器内核结构框图 定时器寄存器 1. 状态寄存器(status) 2. 控制寄存器(control) 3. periodl /按调用API函数规定定义的变量 static unsigned char led = 0xff; 功能:按调用规定系统时钟回调函数,在该 函数中实现用户功能 入口参数:context,系统传给回调函数的参数 出口参数:返回下一次的系统时钟服务的周期值 alt_u32 my_alarm_callback (void* context) if(led = 0xff) led = 0x00; else led = 0xff; IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led); /操作IO口 return alt_ticks_per_second(); 功能:初始化LED_PIO为输出,其余输入,屏 蔽中断,清边沿捕获寄存器 void InitPIO(void