系统的外围设备 预览_第1页
系统的外围设备 预览_第2页
系统的外围设备 预览_第3页
系统的外围设备 预览_第4页
系统的外围设备 预览_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SOPC技术2019年5月24感谢你的观看1第5章

Nios

II

系统的外围设备.3.1IDE提供flash

programmer功能,以帮助用户对flash进行管理和编程4.使用IDE

Flash

Programmer编程2019年5月24感谢你的观看2完成所有的软/硬件开发工作后,可以使用NiosⅡIDE提供的Flash

Programmer工具将程序下载到FPGA平台上的FLASH存储器中。FlashProgrammer是NiosⅡIDE

6.0提供的新工具,它可以将配置数据、NiosⅡ程序及其他数据文件下载到目标板上的FLASH存储器中,这里所说的FLASH存储器包括业界标准的CFI或CFI兼容的FLASH存储器,以及Altera公司的EPCS系列串行配置器件。IDE

Flash

Programmer通过2个过程将数据写入flash:(1)用Altera提供的“Flash编程设计”对FPGA进行配置;(2)IDE

Flash

Programmer将文件内容→“Flash编程设计”→

Flash2019年5月24感谢你的观看3Flash编程设计每个Flash编程设计应包含的元件:2019年5月24感谢你的观看4SOPC

Builder使用“目标板flash编程设计”就象用外设元件一样,不同的是外设原件描述的是系统和外设的连接关系,而前者描述系统和电路板之间的关系。前者提供了对flash进行编程所需的全部信息,包括flash的容量、引脚连接等。创建“目标板flash编程设计”方法见5.12使用IDE

Flash

Programmer编程,首先要保证在SOPC

Builder中,在Target选项区中的Board的下拉列表框中选择用户当前使用的目标板Flash编程设计。SmartSOPC_Board_1C6是现用核心板提供的目标板

Flash编程设计,可以对核心板上的NOR

Flash(元件标号U7)和EPCS(元件标号U10)进行编程。2019年5月24感谢你的观看5使用NiosⅡIDE对FLASH存储器编程的步骤:启动Nios

II

IDE。建立软件工程,然后编译连接(Build

Project)选中要进行编程的工程,然后选Tools>FlashProgrammer菜单启动FlashProgrammer对话框,如图5.5.2。

单击FlashProgrammer对话框左下角的New命令按钮,建立一个新编程任务,可以修改这个新任务的名称。(1)2019年5月24感谢你的观看6

若选中program

software

project

into

flashmemory

project,可将工程的.elf文件写入

Flash(EPCS)。

若选中program

FPGA

configuration

data

intohardware-image

region

of

flash

memory,可将

FPGA的配置文件写入Flash(EPCS)。

若选中Program

file

intoaflash

memory选项将二进制文件写入Flash。需要选择要编程的二进制文件及要编程的存储器(U7为Flash,U10为EPCS)。2019年5月24感谢你的观看7(5)在Main页面中可以选择所要编程的内容,包括工程名称、FPGA配置文件的名称以及目标存储器。注意:如果在SOPC

Builder中没有指定目标板(smartSOPC_Board_1C6),programflash按钮将是灰色不能使用。在Project中填入要下载软件的工程名,如hello_led_0;在NiosⅡELF

Executable中填入.elf文件名,如hello_led_.elf;在FPGAConfiguration中填入要下载的硬件配置程序文件,如SmallCore.sof。这样对各个选项按照当前软、硬件配置设置好后,点击ProgramFlash就可将软、硬件程序下载到Flash目标板上的Flash中(如图5.46所示)。再次复位开发板时,开发板就直接在user模式下运行,即导入的是用户设计的软、硬件程序。图5.5.2

Flash

Programmer对话框2019年5月24感谢你的观看8完成Flash编程后,由于当前的EPCS中的配置上烧写Flash的配置,所以写入Flash的用户程序并不会马上运行。需让系统重新上电,(使FPGA使用EPCS中配置数据重新配置FPGA?),程序才能正常运行。在Target

Connection页面中选择与目标板相连的下载缆,如图5.5.3。设置好这些内容之后,单击Apply按钮,然后单击

Program

Flash按钮,NiosⅡIDE重新编译工程并对FLASH存储进行编程。(若在SOPC

Builder中没有指定目标板,则PrograFlash按钮将是灰色不能使用。)从IDE的Console窗口可以看见编程过程。(见图5.5.4)完成Flash编程后,需让系统重新上电,使FPGA使用EPCS中配置数据重新配置FPGA,程序才能正常运行。2019年5月24感谢你的观看9图5.5.3

Flash

Programmer中目标连接设置2019年5月24感谢你的观看10在console窗口显示编程过程及编程结束标志2019年5月24感谢你的观看11图5.5.4通信接口目前存在的所有计算机通信接口在嵌入式领域中都有其广泛的应用,应用最为广泛的接口设备包括RS-232接口(串口UART)USB接口(通用串行总线接口)IrDA(Infra

Red

Data

Association-红外线)SPI(串行外围设备接口)、I2C、CAN总线接口、·

2019年蓝5月24牙接口(Bluet感o谢o你的t观h看)12UART是字符型外设,SOPC

Builder提供了UART内核5.5

UART内核2019年5月24感谢你的观看13

UART(Universal

Asynchronous

Receiver/Transmitter异步接收器/发生器)内核带有Avalon接口,为嵌入式系统和外部设备提供了串行字符流

动通信方式,其数据以RS-232协议的形式与外界进行交互。

提供可调整的波特率;可配置奇偶校验位、停止位和数据位等。NiosII处理器通过访问寄存器来控制内核内核提供一个高电平有效中断请求输出,接收和发送时请求一个中断。7,8或9位的txdata保持寄存器和发送移位寄存器内部波特率时钟通过时钟分频器产生,divisor用来产生波特率时钟Status每个单独的位反映UART内核的特定状态,control包含控制uart内核操作的位UART内核的结构框图2019年5月24感谢你的观看14寄存器映射只是对编写内核的驱动程序才有用UART内核寄存器映射2019年5月24感谢你的观看15流控制:选中时,UART硬件包括CTS/RTS端口,Avalon主控器可检测CTS和发送RTS流控制信号选UART内核配置项1、波特率设置2、数据位、停止位、奇偶校验位3、流控制4、Avalon流控制传输2019年5月24感谢你的观看16软件编程2019年5月24感谢你的观看17

Altera提供的驱动程序执行HAL字符模式设备驱动程序。HAL用户应通过熟悉的HAL

API函数和ANSI

C标准库函数访问UART,

而不是访问UART寄存器。altera_avalon_uart_regs.h寄存器级访问头文件altera_avalon_uart.h,

altera_avalon_uart.c

HAL系统库的UART内 核设备驱动程序实验4.10:ANSI

C标准库来访问UART;如果检测到

字符’t’,则报告检测到字符’t’;如果检测到字符’v’,则退出程序。2019年5月24感谢你的观看18#include<stdio.h>#include<string.h>#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_NAME,"r+");

//打开文件进行读和写if

(fp)2019年5月24感谢你的观看19//循环直至接收到"v"//从UART中获取字符{

while

(prompt

!=

"v"){prompt

=

getc(fp);if

(prompt

==

"t"){

//如果字符为"t"打印信息fwrite

(msg,

strlen

(msg),

1,

fp);}if

(ferror(fp))clearerr(fp);//检查错误是否在UART连接上出现//如果是,清除它}fprintf(fp,

"Closing

the

UART

file

handle.\n");fclose

(fp);}else{

printf("Fail

to

open

file...\n");

}return

0;

}System.h描述的UART设备2019年5月24感谢你的观看20#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_USE_CTS_RTS

0#define

UART_USE_EOP_REGISTER

0#define

UART_SIM_TRUE_BAUD

0#define

UART_SIM_CHAR_STREAM

""#define

UART_FREQ

480000002019年5月24感谢你的观看21

具有Avalon接口的JTAG

UART核是实现在PC机和FPGA上的SOPC

Builder系统间进行串行通信的一种实现方式

JTAG

UART用来替代RS-232完成与PC主机的字符输入/输出,NiosII处理器通过读/写控制和数据寄存器与JTAG

UART核通信2019年5月24感谢你的观看225.6

JTAG-UART内核

对于NiosII处理器,HAL系统库中包含该设备的驱动程序,允许使用ANSI

C标准库stdio.h访问JTAG

UART核

对PC机,Altera提供JTAG终端软件来管理PC机与目标系统的连接,对JTAG数据流解码和在屏幕上显示字符2019年5月24感谢你的观看235.7

JTAG-UART内核JTAG

UART核方框图2019年5月24感谢你的观看24较大的值消耗更多的片内存储器资源缺省的深度值(64)IRQ门限值(8)是最优的,不用改变JTAG

UART核配置2019年5月24感谢你的观看25软件编程2019年5月24感谢你的观看26

HAL用户应通过HAL

API

和ANSI

C标准库访问JTAG-UART,而不是访问JTAG-UART寄存器。

对JTAG

UART核的操作与下列文件有关。

altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c#include

<stdio.h>#include

<string.h>#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”{

prompt=getc(fp);

//从JTAG

UART中读取一个字符if(prompt==‘t’)

//若字符是“t”,则输出信息{

fwrite(msg,strlen(msg),1,fp);

}2019年5月24感谢你的观看27例:使用标准库通过JTAG

UART核读和发送一个消息if(ferror(fp))

//检查是否有错误产生clearerr(fp);

}

//若有则清除fprintf(fp,”Closing

the

JTAG

UART

filehandle.\n”);fclose(fp);

}else{

printf("Fail

to

open

file...\n");

}return

0;}2019年5月24感谢你的观看285.7

定时器内核2019年5月24感谢你的观看29√可选择输出周期性脉冲定时器可作为系统的周期性时钟源(Tick);可以作为计数器测定事件发生的时间;作

“看门狗”(Watchdog)。定时器内核特性:√可控制定时器的启动、停止或复位√两种计数模式:单次减一和连续减一计数模式√计数器达到0时产生中断请求(IRQ)√可作为看门狗定时器定时器计数值由periodl和periodh装入;当前计数值由snapl和snaph读出;可输出IRQ、看门狗复位信号、输出周期脉冲到片外定时器内核结构框图2019年5月24感谢你的观看30寄存器映射只对开发驱动程序的人员有用。如果使用HAL系统库提供的标准的特性,程序开发人员可以不必通过寄存器来直接访问定时器,应该使用HAL

API访问定时器。定时器寄存器2019年5月24感谢你的观看311.状态寄存器(status)2019年5月24感谢你的观看322.控制寄存器(control)2019年5月24感谢你的观看333.periodl

&

periodh寄存器2019年5月24感谢你的观看34periodl和periodh寄存器一起存储超时周期的计数值。当对此寄存器进行写操作或内部计数器减到0时,保存在periodl

&和periodh中的值会装载到内部计数器中。4.snapl

&

snaph寄存器2019年5月24感谢你的观看35可通过对snapl&

snaph寄存器的写操作来获取32位内部计数器的当前值。5.中断操作只要内部计数器减到0且控制寄存器的ITO位设为1,定时器内核就会产生IRQ.用户可用以下任一方式应答IRQ:√清除状态寄存器的TO位,等待下一个超时事件的发生;√通过将控制寄存器的ITO位清零来禁止中断。可使用配置向导指定其硬件特性定时器内核(interval

timer)配置项Timeout

Period:设置

periodl和periodh寄存器的初始值,此值可根据系统输入时钟频率和initial

period中的设置计算获得。2019年5月24感谢你的观看36定时器内核配置选项Preset

Configurations:提供的预定义硬件配置:Simple

periodic

interruptFull-featuredWatchdog2019年5月24感谢你的观看37当前前器器可可通通时时器器

Writeable

period:主控制器可通过写

periodl和periodh改变向下计数周期

Readable

snapshot:主控制器可读向下计数的值

Start/stop

control

bits:主控制过写控制寄存器的START和STOP位来启动后停止定时器。

Timeout

pulse:当定时器计数到0将输出持续一个周期的高电平。

System

reset

on

timeout:配置定用于看门狗。当使能以下各项时:2019年5月24感谢你的观看38定时器提供了硬件的寄存器级访问和HAL层的API函数:

altera_avalon_time_regs.h:定义内核的寄存器映射并提供硬件设备访问宏定义;altera_avalon_timer.h、altera_avalon_tim、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c实现了HAL系统库的定时器设备驱动程序(在components/altera_avalon_timer中)2019年5月24感谢你的观看39软件设计软件设计2019年5月24感谢你的观看40

HAL

API提供如下两种定时器设备的驱动程序:系统时钟定时器---该驱动程序支持报警(alarm)。时间戳定时器-----该驱动程序支持高精度的时测量。

HAL特定的访问定时器设备的API函数在

components/altera_hal/HAL/inc/sys/alt_al和sys/alt_timestamp.h中定义。【实验4.5】利用系统时钟服务产生1s的周期性事件,并借此控制LED闪烁2019年5月24感谢你的观看41#include

<stdio.h>

#include"system.h"息//包含基本的硬件描述#include

"altera_avalon_pio_regs.h"//包含基本的IO寄存器信息#include

"alt_types.h"//Altera定义的数据类型#include

"sys/alt_alarm.h"//系统时钟服务头文件#ifndef

LED_PIO_BASE //这是LED_PIO核的基地址#define

LED_PIO_BASE

0xffffffff

//user"s

definition

here#endif#if

LED_PIO_BASE

==

0xffffffff#error

"No

definition

of

LED_PIO

core...\n"#endif#define

LEDCON

0xffstatic

alt_alarm

alarm; //按调用API函数规定定义的变量static

unsigned

char

led

=

0xff;2019年5月24感谢你的观看42功能:按调用规定系统时钟回调函数,在该函数中实现用户功能2019年5月24感谢你的观看43入口参数: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为输出,其余输入,屏蔽中断,清边沿捕获寄存器2019年5月24感谢你的观看44void

InitPIO(void){/*

LED_PIO为输出,其余输入*/IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE,LEDCON);/*禁止所有PIO中断*/IOWR_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE,0x00);/*清清边沿捕获寄存器*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE,0x00);}函函数数原原型型::int

alt_alarm_start(alt_alarm

*

alarm,alt_u32

nticks,alt_u32(*callback)(void

*

context),void

*context),功功能能::启启动动系系统统时时钟钟服服务务(altera_hal/HAL/inc/sys/alt_alarm.h中中有有其其说说明明,,altera_hal/HAL/src/里里有有alt_alarm_start.c)

Alarm:一一个个指指向向alt_alarm结结构构体体系系类类型型的的指指针针变变量量。。Nticks:每每隔隔nticks执执行行一一次次回回调调函函数数。。

Callback:用用户户回回调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论