NiosII系统的外围设备课件_第1页
NiosII系统的外围设备课件_第2页
NiosII系统的外围设备课件_第3页
NiosII系统的外围设备课件_第4页
NiosII系统的外围设备课件_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

SOPC技术第5章

NiosII系统的外围设备NO.3.11谢谢观赏2019-8-26SOPC技术第5章NiosII系统的外围设备NO.34.使用IDEFlashProgrammer编程完成所有的软/硬件开发工作后,可以使用NiosⅡ IDE提供的FlashProgrammer工具将程序下载到FPGA平台上的FLASH存储器中。FlashProgrammer是NiosⅡIDE6.0提供的新工具,它可以将配置数据、NiosⅡ程序及其他数据文件下载到目标板上的FLASH存储器中,这里所说的FLASH存储器包括业界标准的CFI或CFI兼容的FLASH存储器,以及Altera公司的EPCS系列串行配置器件。2谢谢观赏2019-8-264.使用IDEFlashProgrammer编程完IDEFlashProgrammer通过2个过程将数据写入flash:(1)用Altera提供的“Flash编程设计”对FPGA进行配置;(2)IDEFlashProgrammer将文件内容→“Flash编程设计”→FlashFlash编程设计3谢谢观赏2019-8-26IDEFlashProgrammer通过2个过程将数据每个Flash编程设计应包含的元件:4谢谢观赏2019-8-26每个Flash编程设计应包含的元件:4谢谢观赏2019-8-使用IDEFlashProgrammer编程,首先要保证在SOPCBuilder中,在Target选项区中的Board的下拉列表框中选择用户当前使用的目标板Flash编程设计。SmartSOPC_Board_1C6是现用核心板提供的目标板Flash编程设计,可以对核心板上的NORFlash(元件标号U7)和EPCS(元件标号U10)进行编程。5谢谢观赏2019-8-26使用IDEFlashProgrammer编使用NiosⅡIDE对FLASH存储器编程的步骤:

启动NiosIIIDE。建立软件工程,然后编译连接(BuildProject)选中要进行编程的工程,然后选Tools>FlashProgrammer菜单启动FlashProgrammer对话框,如图5.5.2。单击FlashProgrammer对话框左下角的New命令按钮,建立一个新编程任务,可以修改这个新任务的名称。

6谢谢观赏2019-8-26使用NiosⅡIDE对FLASH存储器编程的步骤:6谢谢若选中programsoftwareprojectintoflashmemoryproject,可将工程的.elf文件写入Flash(EPCS)。若选中programFPGAconfigurationdataintohardware-imageregionofflashmemory,可将FPGA的配置文件写入Flash(EPCS)。若选中Programfileintoaflashmemory选项,可将二进制文件写入Flash。需要选择要编程的二进制文件及要编程的存储器(U7为Flash,U10为EPCS)。

(5)在Main页面中可以选择所要编程的内容,包括工程名称、FPGA配置文件的名称以及目标存储器。

7谢谢观赏2019-8-26若选中programsoftwareprojectin图5.5.2FlashProgrammer对话框8谢谢观赏2019-8-26图5.5.2FlashProgrammer对话框8谢

(4)在TargetConnection页面中选择与目标板相连的下载电缆,如图5.5.3。(5)设置好这些内容之后,单击Apply按钮,然后单击ProgramFlash按钮,NiosⅡ IDE重新编译工程并对FLASH存储器进行编程。(若在SOPCBuilder中没有指定目标板,则ProgramFlash按钮将是灰色不能使用。)从IDE的Console窗口可以看见编程过程。(见图5.5.4)完成Flash编程后,需让系统重新上电,使FPGA使用EPCS中配置数据重新配置FPGA,程序才能正常运行。9谢谢观赏2019-8-26(4)在TargetConnection页面中选择与图5.5.3FlashProgrammer中目标连接设置10谢谢观赏2019-8-26图5.5.3FlashProgrammer中目标连接设在console窗口显示编程过程及编程结束标志图5.5.411谢谢观赏2019-8-26在console窗口显示编程过程及编程结束标志图5.5.41通信接口目前存在的所有计算机通信接口在嵌入式领域中都有其广泛的应用,应用最为广泛的接口设备包括

RS-232接口(串口UART)

USB接口(通用串行总线接口)

IrDA(InfraRedDataAssociation-红外线接口)

SPI(串行外围设备接口)、

I2C、CAN总线接口、蓝牙接口(Bluetooth)

Ethernet(以太网接口)、

IEEE1394接口和通用可编程接口GPIO。12谢谢观赏2019-8-26通信接口目前存在的所有计算机通信接口在5.5UART内核UART(UniversalAsynchronousReceiver/Transmitter通用异步接收器/发生器)内核带有Avalon接口,为嵌入式系统和外部设备提供了串行字符流动通信方式,其数据以RS-232协议的形式与外界进行交互。提供可调整的波特率;可配置奇偶校验位、停止位和数据位等。13谢谢观赏2019-8-265.5UART内核UART(UniversalAsyncUART内核的结构框图14谢谢观赏2019-8-26UART内核的结构框图14谢谢观赏2019-8-26UART内核寄存器映射15谢谢观赏2019-8-26UART内核寄存器映射15谢谢观赏2019-8-26UART内核配置选项1、波特率设置2、数据位、停止位、奇偶校验位3、流控制4、Avalon流控制传输16谢谢观赏2019-8-26UART内核配置选项1、波特率设置16谢谢观赏2019-8-软件编程Altera提供的驱动程序执行HAL字符模式设备驱动程序。HAL用户应通过熟悉的HALAPI函数和ANSIC标准库函数访问UART,而不是访问UART寄存器。altera_avalon_uart_regs.h寄存器级访问头文件altera_avalon_uart.h,altera_avalon_uart.cHAL系统库的UART内核设备驱动程序17谢谢观赏2019-8-26软件编程Altera提供的驱动程序执行HAL字符模式设备驱动实验4.10:ANSIC标准库来访问UART;如果检测到字符’t’,则报告检测到字符’t’;如果检测到字符’v’,则退出程序。#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg="Detectedthecharacter't'.\n";FILE*fp;charprompt=0;

printf("PleaseEntersomecharacters:\n");fp=fopen(UART_NAME,"r+");//打开文件进行读和写18谢谢观赏2019-8-26实验4.10:ANSIC标准库来访问UART;如果检测到字

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,"ClosingtheUARTfilehandle.\n");fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}19谢谢观赏2019-8-26if(fp)19谢谢观赏2019-8-26System.h描述的UART设备#defineUART_NAME"/dev/uart"#defineUART_TYPE"altera_avalon_uart"#defineUART_BASE0x00B00840#defineUART_IRQ1#defineUART_BAUD115200#defineUART_DATA_BITS8#defineUART_FIXED_BAUD0#defineUART_PARITY'N'#defineUART_STOP_BITS1#defineUART_USE_CTS_RTS0#defineUART_USE_EOP_REGISTER0#defineUART_SIM_TRUE_BAUD0#defineUART_SIM_CHAR_STREAM""#defineUART_FREQ4800000020谢谢观赏2019-8-26System.h描述的UART设备#defineUART21谢谢观赏2019-8-2621谢谢观赏2019-8-26具有Avalon接口的JTAGUART核是实现在PC机和FPGA上的SOPCBuilder系统间进行串行通信的一种实现方式JTAGUART用来替代RS-232完成与PC主机的字符输入/输出,NiosII处理器通过读/写控制和数据寄存器与JTAGUART核通信5.6JTAG-UART内核22谢谢观赏2019-8-26具有Avalon接口的JTAGUART核是实现在PC机和F对于NiosII处理器,HAL系统库中包含该设备的驱动程序,允许使用ANSIC标准库stdio.h访问JTAGUART核对PC机,Altera提供JTAG终端软件来管理PC机与目标系统的连接,对JTAG数据流解码和在屏幕上显示字符5.7JTAG-UART内核23谢谢观赏2019-8-26对于NiosII处理器,HAL系统库中包含该设备的驱动程JTAGUART核方框图24谢谢观赏2019-8-26JTAGUART核方框图24谢谢观赏2019-8-26缺省的深度值(64)IRQ门限值(8)是最优的,不用改变JTAGUART核配置25谢谢观赏2019-8-26缺省的深度值(64)IRQ门限值(8)是最优的,不用改变JT软件编程HAL用户应通过HALAPI

和ANSIC标准库访问JTAG-UART,而不是访问JTAG-UART寄存器。对JTAGUART核的操作与下列文件有关。

altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c26谢谢观赏2019-8-26软件编程HAL用户应通过HALAPI和ANSIC标准#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg=“Detectedthecharacter’t’.\n”;FILE*fp;charprompt=0;printf("PleaseEntersomecharacters:\n");fp=fopen(“/dev/jtag_uart”,”r+”);//为读写操作打开文件If(fp){while(prompt!=‘v’)//循环直到接收一个”v”

{prompt=getc(fp);//从JTAGUART中读取一个字符if(prompt==‘t’)//若字符是“t”,则输出信息{fwrite(msg,strlen(msg),1,fp);}例:使用标准库通过JTAGUART核读和发送一个消息27谢谢观赏2019-8-26#include<stdio.h>例:使用标准库通过JTAif(ferror(fp))//检查是否有错误产生clearerr(fp);}//若有则清除fprintf(fp,”ClosingtheJTAGUARTfilehandle.\n”);fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}28谢谢观赏2019-8-26if(ferror(fp))//检查是否有错误产生25.7定时器内核定时器可作为系统的周期性时钟源(Tick);可以作为计数器测定事件发生的时间;作“看门狗”(Watchdog)。定时器内核特性:可控制定时器的启动、停止或复位两种计数模式:单次减一和连续减一计数模式计数器达到0时产生中断请求(IRQ)可作为看门狗定时器可选择输出周期性脉冲可由软件使能或屏蔽定时器中断29谢谢观赏2019-8-265.7定时器内核定时器可作为系统的周期性时钟源(Tick)定时器内核结构框图30谢谢观赏2019-8-26定时器内核结构框图30谢谢观赏2019-8-26定时器寄存器31谢谢观赏2019-8-26定时器寄存器31谢谢观赏2019-8-261.状态寄存器(status)32谢谢观赏2019-8-261.状态寄存器(status)32谢谢观赏2019-8-22.控制寄存器(control)33谢谢观赏2019-8-262.控制寄存器(control)33谢谢观赏2019-8-3.periodl&periodh寄存器periodl和periodh寄存器一起存储超时周期的计数值。当对此寄存器进行写操作或内部计数器减到0时,保存在periodl&和periodh中的值会装载到内部计数器中。34谢谢观赏2019-8-263.periodl&periodh寄存器4.snapl&snaph寄存器可通过对snapl&snaph寄存器的写操作来获取32位内部计数器的当前值。5.中断操作只要内部计数器减到0且控制寄存器的ITO位设为1,定时器内核就会产生IRQ.用户可用以下任一方式应答IRQ:

清除状态寄存器的TO位,等待下一个超时事件的发生;通过将控制寄存器的ITO位清零来禁止中断。35谢谢观赏2019-8-264.snapl&snaph寄存器可通过对定时器内核(intervaltimer)配置选项TimeoutPeriod:

设置periodl和periodh寄存器的初始值,此值可根据系统输入时钟频率和initialperiod中的设置计算获得。36谢谢观赏2019-8-26定时器内核(intervaltimer)配置选项Timeo定时器内核配置选项PresetConfigurations:

提供的预定义硬件配置:Simpleperiodicinterrupt

Full-featured

Watchdog37谢谢观赏2019-8-26定时器内核配置选项PresetConfigurationsWriteableperiod:主控制器可通过写periodl和periodh改变向下计数周期Readablesnapshot:主控制器可读当前向下计数的值Start/stopcontrolbits:主控制器可通过写控制寄存器的START和STOP位来启动后停止定时器。Timeoutpulse:当定时器计数到0时将输出持续一个周期的高电平。Systemresetontimeout:配置定时器用于看门狗。当使能以下各项时:38谢谢观赏2019-8-26Writeableperiod:主控制器可通过写perio定时器提供了硬件的寄存器级访问和HAL层的API函数:altera_avalon_time_regs.h:定义内核的寄存器映射并提供硬件设备访问宏定义;

altera_avalon_timer.h、altera_avalon_timer_sc.c、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c实现了HAL系统库的定时器设备驱动程序(在components/altera_avalon_timer中)软件设计39谢谢观赏2019-8-26定时器提供了硬件的寄存器级访问和HAL层的API函数:软件设计HALAPI提供如下两种定时器设备的驱动程序:系统时钟定时器---该驱动程序支持报警(alarms)。时间戳定时器-----该驱动程序支持高精度的时间测量。HAL特定的访问定时器设备的API函数在components/altera_hal/HAL/inc/sys/alt_alarm.h和sys/alt_timestamp.h中定义。40谢谢观赏2019-8-26软件设计HALAPI提供如下两种定时器设备的驱动程序:40【实验4.5】利用系统时钟服务产生1s的周期性事件,并借此控制LED闪烁#include<stdio.h>#include"system.h"//包含基本的硬件描述信息#include"altera_avalon_pio_regs.h"//包含基本的IO寄存器信息#include"alt_types.h"//Altera定义的数据类型#include"sys/alt_alarm.h"

//系统时钟服务头文件41谢谢观赏2019-8-26【实验4.5】利用系统时钟服务产生1s的周期性事件,并借此控#ifndefLED_PIO_BASE//这是LED_PIO核的基地址#defineLED_PIO_BASE0xffffffff//user'sdefinitionhere#endif#ifLED_PIO_BASE==0xffffffff#error"NodefinitionofLED_PIOcore...\n"#endif#defineLEDCON0xffstaticalt_alarmalarm;//按调用API函数规定定义的变量staticunsignedcharled=0xff;42谢谢观赏2019-8-26#ifndefLED_PIO_BASE

功能:按调用规定系统时钟回调函数,在该函数中实现用户功能入口参数:context,系统传给回调函数的参数出口参数:返回下一次的系统时钟服务的周期值alt_u32my_alarm_callback(void*context){if(led==0xff){led=0x00;}else{led=0xff;}IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);//操作IO口

returnalt_ticks_per_second();}43谢谢观赏2019-8-26功能:按调用规定系统时钟回调函数,在该函数中实现用户功能入功能:初始化LED_PIO为输出,其余输入,屏蔽中断,清边沿捕获寄存器voidInitPIO(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);}44谢谢观赏2019-8-26功能:初始化LED_PIO为输出,其余输入,屏蔽中断,清边沿

intmain(){InitPIO();IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0xff);//灭LED

printf("testalarm...\n");//打印提示信息

printf("alt_ticks_per_second()is%ld",alt_ticks_per_second());if(alt_alarm_start(&alarm,alt_ticks_per_second()//启动系统时钟

,my_alarm_callback,NULL)<0){printf("Nosystemclockavailable\n");}while(1);//等待时钟事件发生

return0;}45谢谢观赏2019-8-26intmain()45谢谢观赏2019-8-265.8SystemID内核SOPCBuilder生成NiosII系统时,将为每个NiosII系统生成一个标识符,供编译器和用户辨别所运行的程序是否与目标系统匹配。当程序运行在与之不匹配的系统上时会产生不可预测的结果。系统ID内核寄存器包括ID寄存器(SOPCBuilder系统ID)和timestamp寄存器(SOPCBuilder生成时间)在下载程序运行或调试之前,NiosIIIDE会检查硬件中的系统ID内核是否匹配所期望的软件系统ID,如不匹配,则终止下载。46谢谢观赏2019-8-265.8SystemID内核SOPCBuilderSOPC技术第5章

NiosII系统的外围设备NO.3.147谢谢观赏2019-8-26SOPC技术第5章NiosII系统的外围设备NO.34.使用IDEFlashProgrammer编程完成所有的软/硬件开发工作后,可以使用NiosⅡ IDE提供的FlashProgrammer工具将程序下载到FPGA平台上的FLASH存储器中。FlashProgrammer是NiosⅡIDE6.0提供的新工具,它可以将配置数据、NiosⅡ程序及其他数据文件下载到目标板上的FLASH存储器中,这里所说的FLASH存储器包括业界标准的CFI或CFI兼容的FLASH存储器,以及Altera公司的EPCS系列串行配置器件。48谢谢观赏2019-8-264.使用IDEFlashProgrammer编程完IDEFlashProgrammer通过2个过程将数据写入flash:(1)用Altera提供的“Flash编程设计”对FPGA进行配置;(2)IDEFlashProgrammer将文件内容→“Flash编程设计”→FlashFlash编程设计49谢谢观赏2019-8-26IDEFlashProgrammer通过2个过程将数据每个Flash编程设计应包含的元件:50谢谢观赏2019-8-26每个Flash编程设计应包含的元件:4谢谢观赏2019-8-使用IDEFlashProgrammer编程,首先要保证在SOPCBuilder中,在Target选项区中的Board的下拉列表框中选择用户当前使用的目标板Flash编程设计。SmartSOPC_Board_1C6是现用核心板提供的目标板Flash编程设计,可以对核心板上的NORFlash(元件标号U7)和EPCS(元件标号U10)进行编程。51谢谢观赏2019-8-26使用IDEFlashProgrammer编使用NiosⅡIDE对FLASH存储器编程的步骤:

启动NiosIIIDE。建立软件工程,然后编译连接(BuildProject)选中要进行编程的工程,然后选Tools>FlashProgrammer菜单启动FlashProgrammer对话框,如图5.5.2。单击FlashProgrammer对话框左下角的New命令按钮,建立一个新编程任务,可以修改这个新任务的名称。

52谢谢观赏2019-8-26使用NiosⅡIDE对FLASH存储器编程的步骤:6谢谢若选中programsoftwareprojectintoflashmemoryproject,可将工程的.elf文件写入Flash(EPCS)。若选中programFPGAconfigurationdataintohardware-imageregionofflashmemory,可将FPGA的配置文件写入Flash(EPCS)。若选中Programfileintoaflashmemory选项,可将二进制文件写入Flash。需要选择要编程的二进制文件及要编程的存储器(U7为Flash,U10为EPCS)。

(5)在Main页面中可以选择所要编程的内容,包括工程名称、FPGA配置文件的名称以及目标存储器。

53谢谢观赏2019-8-26若选中programsoftwareprojectin图5.5.2FlashProgrammer对话框54谢谢观赏2019-8-26图5.5.2FlashProgrammer对话框8谢

(4)在TargetConnection页面中选择与目标板相连的下载电缆,如图5.5.3。(5)设置好这些内容之后,单击Apply按钮,然后单击ProgramFlash按钮,NiosⅡ IDE重新编译工程并对FLASH存储器进行编程。(若在SOPCBuilder中没有指定目标板,则ProgramFlash按钮将是灰色不能使用。)从IDE的Console窗口可以看见编程过程。(见图5.5.4)完成Flash编程后,需让系统重新上电,使FPGA使用EPCS中配置数据重新配置FPGA,程序才能正常运行。55谢谢观赏2019-8-26(4)在TargetConnection页面中选择与图5.5.3FlashProgrammer中目标连接设置56谢谢观赏2019-8-26图5.5.3FlashProgrammer中目标连接设在console窗口显示编程过程及编程结束标志图5.5.457谢谢观赏2019-8-26在console窗口显示编程过程及编程结束标志图5.5.41通信接口目前存在的所有计算机通信接口在嵌入式领域中都有其广泛的应用,应用最为广泛的接口设备包括

RS-232接口(串口UART)

USB接口(通用串行总线接口)

IrDA(InfraRedDataAssociation-红外线接口)

SPI(串行外围设备接口)、

I2C、CAN总线接口、蓝牙接口(Bluetooth)

Ethernet(以太网接口)、

IEEE1394接口和通用可编程接口GPIO。58谢谢观赏2019-8-26通信接口目前存在的所有计算机通信接口在5.5UART内核UART(UniversalAsynchronousReceiver/Transmitter通用异步接收器/发生器)内核带有Avalon接口,为嵌入式系统和外部设备提供了串行字符流动通信方式,其数据以RS-232协议的形式与外界进行交互。提供可调整的波特率;可配置奇偶校验位、停止位和数据位等。59谢谢观赏2019-8-265.5UART内核UART(UniversalAsyncUART内核的结构框图60谢谢观赏2019-8-26UART内核的结构框图14谢谢观赏2019-8-26UART内核寄存器映射61谢谢观赏2019-8-26UART内核寄存器映射15谢谢观赏2019-8-26UART内核配置选项1、波特率设置2、数据位、停止位、奇偶校验位3、流控制4、Avalon流控制传输62谢谢观赏2019-8-26UART内核配置选项1、波特率设置16谢谢观赏2019-8-软件编程Altera提供的驱动程序执行HAL字符模式设备驱动程序。HAL用户应通过熟悉的HALAPI函数和ANSIC标准库函数访问UART,而不是访问UART寄存器。altera_avalon_uart_regs.h寄存器级访问头文件altera_avalon_uart.h,altera_avalon_uart.cHAL系统库的UART内核设备驱动程序63谢谢观赏2019-8-26软件编程Altera提供的驱动程序执行HAL字符模式设备驱动实验4.10:ANSIC标准库来访问UART;如果检测到字符’t’,则报告检测到字符’t’;如果检测到字符’v’,则退出程序。#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg="Detectedthecharacter't'.\n";FILE*fp;charprompt=0;

printf("PleaseEntersomecharacters:\n");fp=fopen(UART_NAME,"r+");//打开文件进行读和写64谢谢观赏2019-8-26实验4.10:ANSIC标准库来访问UART;如果检测到字

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,"ClosingtheUARTfilehandle.\n");fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}65谢谢观赏2019-8-26if(fp)19谢谢观赏2019-8-26System.h描述的UART设备#defineUART_NAME"/dev/uart"#defineUART_TYPE"altera_avalon_uart"#defineUART_BASE0x00B00840#defineUART_IRQ1#defineUART_BAUD115200#defineUART_DATA_BITS8#defineUART_FIXED_BAUD0#defineUART_PARITY'N'#defineUART_STOP_BITS1#defineUART_USE_CTS_RTS0#defineUART_USE_EOP_REGISTER0#defineUART_SIM_TRUE_BAUD0#defineUART_SIM_CHAR_STREAM""#defineUART_FREQ4800000066谢谢观赏2019-8-26System.h描述的UART设备#defineUART67谢谢观赏2019-8-2621谢谢观赏2019-8-26具有Avalon接口的JTAGUART核是实现在PC机和FPGA上的SOPCBuilder系统间进行串行通信的一种实现方式JTAGUART用来替代RS-232完成与PC主机的字符输入/输出,NiosII处理器通过读/写控制和数据寄存器与JTAGUART核通信5.6JTAG-UART内核68谢谢观赏2019-8-26具有Avalon接口的JTAGUART核是实现在PC机和F对于NiosII处理器,HAL系统库中包含该设备的驱动程序,允许使用ANSIC标准库stdio.h访问JTAGUART核对PC机,Altera提供JTAG终端软件来管理PC机与目标系统的连接,对JTAG数据流解码和在屏幕上显示字符5.7JTAG-UART内核69谢谢观赏2019-8-26对于NiosII处理器,HAL系统库中包含该设备的驱动程JTAGUART核方框图70谢谢观赏2019-8-26JTAGUART核方框图24谢谢观赏2019-8-26缺省的深度值(64)IRQ门限值(8)是最优的,不用改变JTAGUART核配置71谢谢观赏2019-8-26缺省的深度值(64)IRQ门限值(8)是最优的,不用改变JT软件编程HAL用户应通过HALAPI

和ANSIC标准库访问JTAG-UART,而不是访问JTAG-UART寄存器。对JTAGUART核的操作与下列文件有关。

altera_avalon_jtag_uart_regs.haltera_avalon_jtag_uart.haltera_avalon_jtag_uart.c72谢谢观赏2019-8-26软件编程HAL用户应通过HALAPI和ANSIC标准#include<stdio.h>#include<string.h>#include"system.h"intmain(){char*msg=“Detectedthecharacter’t’.\n”;FILE*fp;charprompt=0;printf("PleaseEntersomecharacters:\n");fp=fopen(“/dev/jtag_uart”,”r+”);//为读写操作打开文件If(fp){while(prompt!=‘v’)//循环直到接收一个”v”

{prompt=getc(fp);//从JTAGUART中读取一个字符if(prompt==‘t’)//若字符是“t”,则输出信息{fwrite(msg,strlen(msg),1,fp);}例:使用标准库通过JTAGUART核读和发送一个消息73谢谢观赏2019-8-26#include<stdio.h>例:使用标准库通过JTAif(ferror(fp))//检查是否有错误产生clearerr(fp);}//若有则清除fprintf(fp,”ClosingtheJTAGUARTfilehandle.\n”);fclose(fp);}else{printf("Failtoopenfile...\n");}return0;}74谢谢观赏2019-8-26if(ferror(fp))//检查是否有错误产生25.7定时器内核定时器可作为系统的周期性时钟源(Tick);可以作为计数器测定事件发生的时间;作“看门狗”(Watchdog)。定时器内核特性:可控制定时器的启动、停止或复位两种计数模式:单次减一和连续减一计数模式计数器达到0时产生中断请求(IRQ)可作为看门狗定时器可选择输出周期性脉冲可由软件使能或屏蔽定时器中断75谢谢观赏2019-8-265.7定时器内核定时器可作为系统的周期性时钟源(Tick)定时器内核结构框图76谢谢观赏2019-8-26定时器内核结构框图30谢谢观赏2019-8-26定时器寄存器77谢谢观赏2019-8-26定时器寄存器31谢谢观赏2019-8-261.状态寄存器(status)78谢谢观赏2019-8-261.状态寄存器(status)32谢谢观赏2019-8-22.控制寄存器(control)79谢谢观赏2019-8-262.控制寄存器(control)33谢谢观赏2019-8-3.periodl&periodh寄存器periodl和periodh寄存器一起存储超时周期的计数值。当对此寄存器进行写操作或内部计数器减到0时,保存在periodl&和periodh中的值会装载到内部计数器中。80谢谢观赏2019-8-263.periodl&periodh寄存器4.snapl&snaph寄存器可通过对snapl&snaph寄存器的写操作来获取32位内部计数器的当前值。5.中断操作只要内部计数器减到0且控制寄存器的ITO位设为1,定时器内核就会产生IRQ.用户可用以下任一方式应答IRQ:

清除状态寄存器的TO位,等待下一个超时事件的发生;通过将控制寄存器的ITO位清零来禁止中断。81谢谢观赏2019-8-264.snapl&snaph寄存器可通过对定时器内核(intervaltimer)配置选项TimeoutPeriod:

设置periodl和periodh寄存器的初始值,此值可根据系统输入时钟频率和initialperiod中的设置计算获得。82谢谢观赏2019-8-26定时器内核(intervaltimer)配置选项Timeo定时器内核配置选项PresetConfigurations:

提供的预定义硬件配置:Simpleperiodicinterrupt

Full-featured

Watchdog83谢谢观赏2019-8-26定时器内核配置选项PresetConfigurationsWriteableperiod:主控制器可通过写periodl和periodh改变向下计数周期Readablesnapshot:主控制器可读当前向下计数的值Start/stopcontrolbits:主控制器可通过写控制寄存器的START和STOP位来启动后停止定时器。Timeoutpulse:当定时器计数到0时将输出持续一个周期的高电平。Systemresetontimeout:配置定时器用于看门狗。当使能以下各项时:84谢谢观赏2019-8-26Writeableperiod:主控制器可通过写perio定时器提供了硬件的寄存器级访问和HAL层的API函数:altera_avalon_time_regs.h:定义内核的寄存器映射并提供硬件设备访问宏定义;

altera_avalon_timer.h、altera_avalon_timer_sc.c、altera_avalon_timer_ts.c、altera_avalon_timer_vars.c实现了HAL系统库的定时器设备驱动程序(在components/altera_avalon_timer中)软件设计85谢谢观赏2019-8-26定时器提供了硬件的寄存器级访问和HAL层的API函数:软件设计HALAPI提供如下两种定时器设备的驱动程序:系统时钟定时器---该驱动程序支持报警(alarms)。时间戳定时器-----该驱动程序支持高精度的时间测量。HAL特定的访问定时器设备的API函数在components/altera_hal/HAL/inc/sys/alt_alarm.h和sys/alt_timestamp.h中定义。86谢谢观赏2019-8-26软件设计HALAPI提供如下两种定时器设备的驱动程序:40【实验4.5】利用系统时钟服务产生1s的周期性事件,并借此控制LED闪烁#include<stdio.h>#include"system.h"//包含基本的硬件描述信息#include"altera_avalon_pio_regs.h"//包含基本的IO寄存器信息#include"alt_types.h"

温馨提示

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

评论

0/150

提交评论